diff --git a/home/common/nvim/default.nix b/home/common/nvim/default.nix index 9f1679a..3f61773 100644 --- a/home/common/nvim/default.nix +++ b/home/common/nvim/default.nix @@ -25,18 +25,39 @@ nodePackages.typescript-language-server nodePackages.bash-language-server rust-analyzer + rustfmt shellcheck shfmt stylua tree-sitter tree-sitter-grammars.tree-sitter-bash - tree-sitter-grammars.tree-sitter-yaml + tree-sitter-grammars.tree-sitter-c + tree-sitter-grammars.tree-sitter-comment + tree-sitter-grammars.tree-sitter-css + tree-sitter-grammars.tree-sitter-cue + tree-sitter-grammars.tree-sitter-fish + tree-sitter-grammars.tree-sitter-gdscript tree-sitter-grammars.tree-sitter-go - tree-sitter-grammars.tree-sitter-markdown - tree-sitter-grammars.tree-sitter-lua + tree-sitter-grammars.tree-sitter-gomod + tree-sitter-grammars.tree-sitter-hcl tree-sitter-grammars.tree-sitter-html - tree-sitter-grammars.tree-sitter-vim + tree-sitter-grammars.tree-sitter-javascript + tree-sitter-grammars.tree-sitter-json + tree-sitter-grammars.tree-sitter-lua + tree-sitter-grammars.tree-sitter-markdown tree-sitter-grammars.tree-sitter-nix + tree-sitter-grammars.tree-sitter-proto + tree-sitter-grammars.tree-sitter-rego + tree-sitter-grammars.tree-sitter-rust + tree-sitter-grammars.tree-sitter-scss + tree-sitter-grammars.tree-sitter-sql + tree-sitter-grammars.tree-sitter-svelte + tree-sitter-grammars.tree-sitter-toml + tree-sitter-grammars.tree-sitter-tsx + tree-sitter-grammars.tree-sitter-typescript + tree-sitter-grammars.tree-sitter-vim + tree-sitter-grammars.tree-sitter-yaml + tree-sitter-grammars.tree-sitter-zig vscode-langservers-extracted ]; @@ -45,6 +66,7 @@ go-nvim rustaceanvim targets-vim + ts-comments-nvim { plugin = pkgs.vimUtils.buildVimPlugin { @@ -85,12 +107,26 @@ } { - plugin = nvim-treesitter.withAllGrammars; # Treesitter + plugin = nvim-treesitter-context; + type = "lua"; + config = '' + vim.keymap.set('n', '<space>ut', "<cmd>TSContextToggle<cr>", {noremap = true, silent = true, desc = "TS Context"}) + ''; + } + + { + plugin = nvim-treesitter.withAllGrammars; type = "lua"; config = '' require'nvim-treesitter.configs'.setup { highlight = { enable = true, }, indent = { enable = true }, + textobjects = { + select = { + enable = true, + lookahead = true, + }, + }, } ''; } diff --git a/home/common/nvim/mini.lua b/home/common/nvim/mini.lua index 960c660..379794f 100644 --- a/home/common/nvim/mini.lua +++ b/home/common/nvim/mini.lua @@ -1,128 +1,156 @@ - local opts = function(label) - return {noremap = true, silent = true, desc = label} - end - require('mini.ai').setup() - require('mini.align').setup() - require('mini.bracketed').setup() - require('mini.completion').setup() - require('mini.diff').setup() - require('mini.extra').setup() - require('mini.icons').setup() - require('mini.jump').setup() - require('mini.surround').setup() - require('mini.splitjoin').setup() +local opts = function(label) + return { noremap = true, silent = true, desc = label } +end +require('mini.ai').setup() +require('mini.align').setup() +require('mini.bracketed').setup() +require('mini.comment').setup() +require('mini.completion').setup() +require('mini.diff').setup() +require('mini.extra').setup() +require('mini.icons').setup() +require('mini.jump').setup() +require('mini.surround').setup() +require('mini.splitjoin').setup() +require('mini.trailspace').setup() - require('mini.files').setup() - local oil_style = function() - if not MiniFiles.close() then - MiniFiles.open(vim.api.nvim_buf_get_name(0)) - MiniFiles.reveal_cwd() - end - end - vim.keymap.set('n', '-', oil_style, opts("File Explorer")); +local bufremove = require('mini.bufremove') +bufremove.setup() +vim.keymap.set('n', '<space>bd', bufremove.delete, opts("Delete")) - local hipatterns = require('mini.hipatterns') - hipatterns.setup({ -- highlight strings and colors - highlighters = { - -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' - fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, - hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' }, - todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, - note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, +require('mini.cursorword').setup({ + delay = 800 +}) - -- Highlight hex color strings (`#rrggbb`) using that color - hex_color = hipatterns.gen_highlighter.hex_color(), - } - }) +local hipatterns = require('mini.hipatterns') +hipatterns.setup({ -- highlight strings and colors + highlighters = { + -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' + fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, + hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' }, + todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, + note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, - require('mini.jump2d').setup({ - mappings = { - start_jumping = 'gw' - } - }) + -- Highlight hex color strings (`#rrggbb`) using that color + hex_color = hipatterns.gen_highlighter.hex_color(), + } +}) - require('mini.pick').setup({ - mappings = { - move_down = '<tab>' - }, - options = { - use_cache = true - } - }) - MiniPick.registry.files_root = function(local_opts) - local root_patterns = { ".jj", ".git" } - local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1]) - local opts = { source = { cwd = root_dir, tool = "ripgrep"} } - local_opts.cwd = root_dir - local_opts.tool = "rg" - return MiniPick.builtin.files(local_opts, opts) - end - MiniPick.registry.grep_live_root = function(local_opts) - local root_patterns = { ".jj", ".git" } - local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1]) - local opts = { source = { cwd = root_dir } } - local_opts.cwd = root_dir - return MiniPick.builtin.grep_live(local_opts, opts) - end - vim.keymap.set('n', '<space>/', "<cmd>Pick grep_live_root<cr>", opts("Live Grep")) - vim.keymap.set('n', '<space>F', "<cmd>Pick files<cr>", opts("Find Files in CWD")) - vim.keymap.set('n', '<space>ff', "<cmd>Pick files_root<cr>", opts("Find Files")) - vim.keymap.set('n', '<space>fr', "<cmd>Pick oldfiles<cr>", opts("Recent Files")) - vim.keymap.set('n', '<space>b', "<cmd>Pick buffers<cr>", opts("Buffers")) - vim.keymap.set('n', '<space>d', "<cmd>Pick diagnostics<cr>", opts("Diagnostics")) - vim.keymap.set('n', '<tab>', "<cmd>Pick buffers include_current=false<cr>", opts("Buffers")) - vim.keymap.set('n', "<space>'", "<cmd>Pick resume<cr>", opts("Last Picker")) - vim.keymap.set('n', "<space>g", "<cmd>Pick git_commits<cr>", opts("Git Commits")) +local indentscope = require('mini.indentscope') +indentscope.setup({ + draw = { + delay = 10, + animation = indentscope.gen_animation.none(), + }, + symbol = '│', +}) + +require('mini.jump2d').setup({ + mappings = { + start_jumping = 'gw' + } +}) + +require('mini.pick').setup({ + mappings = { + move_down = '<tab>' + }, + options = { + use_cache = true + } +}) +MiniPick.registry.files_root = function(local_opts) + local root_patterns = { ".jj", ".git" } + local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1]) + local_opts.cwd = root_dir + local_opts.tool = "rg" + return MiniPick.builtin.files(local_opts, { source = { cwd = root_dir, tool = "ripgrep" } }) +end +MiniPick.registry.grep_live_root = function(local_opts) + local root_patterns = { ".jj", ".git" } + local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1]) + local_opts.cwd = root_dir + return MiniPick.builtin.grep_live(local_opts, { source = { cwd = root_dir } }) +end +vim.keymap.set('n', '<space>/', "<cmd>Pick grep_live_root<cr>", opts("Live Grep")) +vim.keymap.set('n', '<space>fF', "<cmd>Pick files<cr>", opts("FindCWD")) +vim.keymap.set('n', '<space>ff', "<cmd>Pick files_root<cr>", opts("Find")) +vim.keymap.set('n', '<space>fr', "<cmd>Pick oldfiles<cr>", opts("Recent")) +vim.keymap.set('n', '<space>bb', "<cmd>Pick buffers<cr>", opts("Switch")) +vim.keymap.set('n', '<space>d', "<cmd>Pick diagnostics<cr>", opts("Diagnostics")) +vim.keymap.set('n', '<tab>', "<cmd>Pick buffers include_current=false<cr>", opts("Buffers")) - local miniclue = require('mini.clue') - miniclue.setup({ -- cute prompts about bindings - triggers = { - { mode = 'n', keys = '<Leader>' }, - { mode = 'x', keys = '<Leader>' }, - { mode = 'n', keys = '<space>' }, - { mode = 'x', keys = '<space>' }, +local miniclue = require('mini.clue') +miniclue.setup({ -- cute prompts about bindings + triggers = { + { mode = 'n', keys = '<Leader>' }, + { mode = 'x', keys = '<Leader>' }, + { mode = 'n', keys = '<space>' }, + { mode = 'x', keys = '<space>' }, - -- Built-in completion - { mode = 'i', keys = '<C-x>' }, + -- Built-in completion + { mode = 'i', keys = '<C-x>' }, - -- `g` key - { mode = 'n', keys = 'g' }, - { mode = 'x', keys = 'g' }, + -- `g` key + { mode = 'n', keys = 'g' }, + { mode = 'x', keys = 'g' }, - -- Marks - { mode = 'n', keys = "'" }, - { mode = 'n', keys = '`' }, - { mode = 'x', keys = "'" }, - { mode = 'x', keys = '`' }, + -- Marks + { mode = 'n', keys = "'" }, + { mode = 'n', keys = '`' }, + { mode = 'x', keys = "'" }, + { mode = 'x', keys = '`' }, - -- Registers - { mode = 'n', keys = '"' }, - { mode = 'x', keys = '"' }, - { mode = 'i', keys = '<C-r>' }, - { mode = 'c', keys = '<C-r>' }, + -- Registers + { mode = 'n', keys = '"' }, + { mode = 'x', keys = '"' }, + { mode = 'i', keys = '<C-r>' }, + { mode = 'c', keys = '<C-r>' }, - -- Window commands - { mode = 'n', keys = '<C-w>' }, + -- Window commands + { mode = 'n', keys = '<C-w>' }, - -- `z` key - { mode = 'n', keys = 'z' }, - { mode = 'x', keys = 'z' }, + -- `z` key + { mode = 'n', keys = 'z' }, + { mode = 'x', keys = 'z' }, - -- Bracketed - { mode = 'n', keys = '[' }, - { mode = 'n', keys = ']' }, - }, - clues = { - miniclue.gen_clues.builtin_completion(), - miniclue.gen_clues.g(), - miniclue.gen_clues.marks(), - miniclue.gen_clues.registers(), - miniclue.gen_clues.windows(), - miniclue.gen_clues.z(), - }, - window = { - delay = 15, - } - }) + -- Bracketed + { mode = 'n', keys = '[' }, + { mode = 'n', keys = ']' }, + }, + clues = { + miniclue.gen_clues.builtin_completion(), + miniclue.gen_clues.g(), + miniclue.gen_clues.marks(), + miniclue.gen_clues.registers(), + miniclue.gen_clues.windows(), + miniclue.gen_clues.z(), + }, + window = { + delay = 15, + } +}) +local notify_win_config = function() + local has_statusline = vim.o.laststatus > 0 + local pad = vim.o.cmdheight + (has_statusline and 1 or 0) + return { anchor = 'SE', border = 'rounded', col = vim.o.columns, row = vim.o.lines - pad } +end +require('mini.notify').setup({ + window = { + config = notify_win_config, + winblend = 0, + }, +}) + +require('mini.starter').setup({ + header = + [[ ______ _ +(_____ \ _ (_) + _____) )___| |_ ____ ____ _ ____ +| ____/ _ | _)/ _ |/ _ | |/ _ | +| | ( ( | | |_( ( | ( ( | | ( ( | | +|_| \_||_|\___)_||_|\_|| |_|\_||_| + (_____|]] +})