feat: add couple more vim plugins via nixpkgs

std
Hung 2023-06-11 23:51:47 -07:00
parent a5186b204c
commit a6c979c659
4 changed files with 149 additions and 43 deletions

View File

@ -78,3 +78,4 @@ fi
- Otherwise, consult [`gh-gist:meeech/a_help-osx-borked-my-nix.md`](https://gist.github.com/meeech/0b97a86f235d10bc4e2a1116eec38e7e) - Otherwise, consult [`gh-gist:meeech/a_help-osx-borked-my-nix.md`](https://gist.github.com/meeech/0b97a86f235d10bc4e2a1116eec38e7e)

View File

@ -34,7 +34,7 @@ end
-- Do Plug if plugin not yet linked in `rtp`. This takes care of Nix-compatibility -- Do Plug if plugin not yet linked in `rtp`. This takes care of Nix-compatibility
local function WPlug(plugin_path, ...) local function WPlug(plugin_path, ...)
local plugin_name = plugin_path:match("/([^/]+)$") local plugin_name = string.lower(plugin_path:match("/([^/]+)$"))
if not installed_plugins[plugin_name] then if not installed_plugins[plugin_name] then
Plug(plugin_path, ...) Plug(plugin_path, ...)
end end
@ -802,30 +802,6 @@ require('mason-lspconfig').setup_handlers({
}, },
} }
end, end,
-- ["rust_analyzer"] = function()
-- require('lspconfig').rust_analyzer.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- settings = {
-- checkOnSave = {
-- command = "clippy",
-- }
-- }
-- }
-- end,
-- ["astro"] = function()
-- print('configuring astro')
-- require('lspconfig').astro.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- init_options = {
-- configuration = {},
-- typescript = {
-- serverPath = data_dir
-- }
-- }
-- }
-- end
}) })
require("rust-tools").setup { require("rust-tools").setup {
tools = { tools = {

View File

@ -1,9 +1,8 @@
# TODO: vim-plug and Mason supports laziness. Probably worth it to explore # TODO: vim-plug and Mason supports laziness. Probably worth it to explore incremental dependencies based on the project
# incremental dependencies based on the project
# TODO: just install these things, then symlink to mason's bin directory # TODO: just install these things, then symlink to mason's bin directory
# #
# One thing to consider, though, /nix/store of `nix-shell` or `nix-develop` # One thing to consider, though, /nix/store of `nix-shell` or `nix-develop`
# might be different from `home-manager`'s # might be different from `home-manager`'s (~/.nix_profile/bin/jq)
{ pkgs, lib, config, proj_root, ... }: { pkgs, lib, config, proj_root, ... }:
let let
# NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace # NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace
@ -34,7 +33,6 @@ let
pkgs.go # doesn't work, Mason installs from runtime path pkgs.go # doesn't work, Mason installs from runtime path
# Language-specific stuffs # Language-specific stuffs
pkgs.sumneko-lua-language-server pkgs.sumneko-lua-language-server
# pkgs.python3Packages.python-lsp-server # pkgs.python3Packages.python-lsp-server
@ -78,21 +76,7 @@ in
vimAlias = true; vimAlias = true;
withPython3 = true; withPython3 = true;
withNodeJs = true; withNodeJs = true;
# Attempt 4: Correct way to make neovim aware of packages
# homeConfigurations.config.programs.neovim takes UNWRAPPED neovim
# and wraps it.
# Ideally, we build our own neovim and add that to config.home.packages
# to share it with nixOS. But we don't really need to share
extraPackages = nvim_pkgs; extraPackages = nvim_pkgs;
# only for here for archive-documentation
# extraPython3Packages = (pypkgs: [
# # pypkgs.python-lsp-server
# pypkgs.ujson
# ]);
# I use vim-plug, so I probably don't require packaging
# extraConfig actually writes to init-home-manager.vim (not lua)
# https://github.com/nix-community/home-manager/pull/3287
# extraConfig = builtins.readFile "${proj_root}/neovim/init.lua";
extraLuaConfig = (builtins.readFile "${proj_root.config.path}//neovim/init.lua"); extraLuaConfig = (builtins.readFile "${proj_root.config.path}//neovim/init.lua");
plugins = (let inherit (pkgs.vimPlugins) plugins = (let inherit (pkgs.vimPlugins)
plenary-nvim plenary-nvim
@ -125,6 +109,27 @@ in
zk-nvim zk-nvim
luasnip luasnip
fidget-nvim fidget-nvim
rust-tools-nvim
cmp_luasnip
gitsigns-nvim
indent-blankline-nvim
lualine-nvim
mason-lspconfig-nvim
mason-nvim
neogit
nlua-nvim
nvim-jqx
nvim-surround
nvim-web-devicons
playground
todo-comments-nvim
trouble-nvim
vim-dispatch
vim-dispatch-neovim
vim-fugitive
vim-jack-in
; in [ ; in [
plenary-nvim plenary-nvim
nvim-treesitter.withAllGrammars nvim-treesitter.withAllGrammars
@ -149,6 +154,26 @@ in
luasnip luasnip
nvim-treesitter-context nvim-treesitter-context
fidget-nvim fidget-nvim
rust-tools-nvim
cmp_luasnip
gitsigns-nvim
indent-blankline-nvim
lualine-nvim
mason-lspconfig-nvim
mason-nvim
neogit
nlua-nvim
nvim-jqx
nvim-surround
nvim-web-devicons
playground
todo-comments-nvim
trouble-nvim
vim-dispatch
vim-dispatch-neovim
vim-fugitive
vim-jack-in
]); ]);
}; };
# home.packages = nvim_pkgs; # home.packages = nvim_pkgs;

104
scripts/vim_dsl.py Executable file
View File

@ -0,0 +1,104 @@
#!/usr/bin/env python3 # A simple playground to explore vim plugins that are available in nixpkgs
import csv
import urllib.request
from io import StringIO
import sqlite3
UPSTREAM_CSV = "https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/applications/editors/vim/plugins/vim-plugin-names"
def load_csv(url):
with urllib.request.urlopen(url) as response:
data = response.read().decode()
return csv.DictReader(StringIO(data))
class VimPlugins:
def __init__(self, url: str, sqlite: str = ":memory:"):
self.conn = sqlite3.connect(sqlite)
csv_data = load_csv(url)
fieldnames = csv_data.fieldnames or ["repo", "branch", "alias"]
cur = self.create_table()
for row in csv_data:
fields = ", ".join(f'"{row[field]}"' for field in fieldnames)
cur.execute(f"INSERT INTO {self.table_name()} VALUES ({fields})")
self.conn.commit()
def create_table(self, cursor=None):
cur = self.conn.cursor() if not cursor else cursor
cur.execute(f'''
CREATE TABLE {self.table_name()} (
"repo" TEXT,
"branch" TEXT,
"alias" TEXT
);
''')
return cur
def table_name(self):
return "vim_plugins"
def query(self, query: str):
return self.conn.cursor().execute(query).fetchall()
def vim_plugin_slug(name: str):
return name.replace(".", "-").lower()
def name_from_repo(repo: str):
spl = repo.split("/")
return vim_plugin_slug(spl[-1] or spl[-2])
if __name__ == "__main__":
# REPL zone
vp = VimPlugins(UPSTREAM_CSV)
need_install_plugins = """
tjdevries/nlua.nvim
yioneko/nvim-yati
nathanalderson/yang.vim
numToStr/Comment.nvim
lewis6991/gitsigns.nvim
tpope/vim-fugitive
williamboman/mason.nvim
williamboman/mason-lspconfig.nvim
TimUntersberger/neogit
folke/trouble.nvim
tpope/vim-dispatch
clojure-vim/vim-jack-in
radenling/vim-dispatch-neovim
gennaro-tedesco/nvim-jqx
kylechui/nvim-surround
simrat39/inlay-hints.nvim
gruvbox-community/gruvbox
nvim-lualine/lualine.nvim
lukas-reineke/indent-blankline.nvim
kyazdani42/nvim-web-devicons
m-demare/hlargs.nvim
folke/todo-comments.nvim
nvim-treesitter/playground
saadparwaiz1/cmp_luasnip
L3MON4D3/LuaSnip
arthurxavierx/vim-caser
~/local_repos/ts-ql
""".split()
need_install_plugins = [plugin.strip() for plugin in plugins]
need_install_plugins = [plugin for plugin in plugins if len(plugin) > 0]
need_install_plugins_gh = [
f"https://github.com/{plugin}/".lower() for plugin in need_install_plugins if plugin[0] not in "~./"]
values = vp.query(f"SELECT LOWER(repo), alias from {vp.table_name()}")
need_install = []
for repo, alias in values:
if repo in need_install_plugins_gh:
need_install.append(vim_plugin_slug(alias) if len(alias) > 0 else name_from_repo(repo))
print("need_install", "\n".join(need_install))
repos = [repo for repo, _ in values]
not_in_repo = [name_from_repo(gh) for gh in need_install_plugins_gh if gh not in repos]
print("not in repo", not_in_repo) # nvim-yati, yang-vim, Comment-nvim, inlay-hints-nvim, hlargs-nvim, vim-caser, gruvbox-community