diff --git a/files/config/nvim/.vimrc b/files/config/nvim/.vimrc new file mode 100644 index 0000000..93a7db0 --- /dev/null +++ b/files/config/nvim/.vimrc @@ -0,0 +1,64 @@ +" Load plugins +filetype plugin indent on + +" Search +set ignorecase +set smartcase + +" Tab completion +set wildmode=list:longest,full +set wildignore=*.swp,*.o,*.so,*.exe,*.dll + +" Tab settings +set ts=2 +set sw=2 +set expandtab + +" Hud +set termguicolors +syntax on +"set colorcolumn=80 +set cursorline +set fillchars=vert:\│ +set hidden +set list +set listchars=tab:»·,trail:· +set nofoldenable +set nowrap +set number +set relativenumber +set ruler +set scrolloff=3 + +" Tags +set tags=./tags;/,tags;/ + +" Backup Directories +set backupdir=~/.config/nvim/backups,. +set directory=~/.config/nvim/swaps,. +if exists('&undodir') + set undodir=~/.config/nvim/undo,. +endif + +let mapleader=',' +let maplocalleader=',' + +" Jump key +nnoremap ` ' +nnoremap ' ` + +" Change pane +nnoremap <C-h> <C-w>h +nnoremap <C-j> <C-w>j +nnoremap <C-k> <C-w>k +nnoremap <C-l> <C-w>l + +" Turn off search highlight +nnoremap <localleader>/ :nohlsearch<CR> + +" Trim trailing whitespace +nnoremap <localleader>tw m`:%s/\s\+$//e<CR>:nohlsearch<CR>`` + +" Fancy macros +nnoremap Q @q +vnoremap Q :norm @q<cr> diff --git a/files/config/nvim/init.lua b/files/config/nvim/init.lua new file mode 100644 index 0000000..9aa1759 --- /dev/null +++ b/files/config/nvim/init.lua @@ -0,0 +1,64 @@ +-- Load .vimrc +vim.cmd([[runtime .vimrc]]) + +vim.g.root_spec = { { ".git", ".jj", "lua" }, "lsp", "cwd" } + +vim.o.autochdir = true +vim.o.fillchars = "stl: ,stlnc: ,eob:░" +vim.o.list = false +vim.o.scrolloff = 7 +vim.o.splitkeep = "screen" +vim.o.updatetime = 50 +vim.o.timeout = true +vim.o.timeoutlen = 10 + +-- Neovim specific settings +vim.o.icm = "split" +-- vim.o.cia = 'kind,abbr,menu' wait for nightly to drop +vim.o.foldtext = "v:lua.vim.treesitter.foldtext()" + +vim.opt.foldmethod = "expr" +vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + +vim.o.showmode = false + +-- Use rg +vim.o.grepprg = [[rg --glob "!.git" --no-heading --vimgrep --follow $*]] +vim.opt.grepformat = vim.opt.grepformat ^ { "%f:%l:%c:%m" } + +vim.fn.sign_define( + "DiagnosticSignError", + { text = "", hl = "DiagnosticSignError", texthl = "DiagnosticSignError", culhl = "DiagnosticSignErrorLine" } +) +vim.fn.sign_define( + "DiagnosticSignWarn", + { text = "", hl = "DiagnosticSignWarn", texthl = "DiagnosticSignWarn", culhl = "DiagnosticSignWarnLine" } +) +vim.fn.sign_define( + "DiagnosticSignInfo", + { text = "", hl = "DiagnosticSignInfo", texthl = "DiagnosticSignInfo", culhl = "DiagnosticSignInfoLine" } +) +vim.fn.sign_define( + "DiagnosticSignHint", + { text = "", hl = "DiagnosticSignHint", texthl = "DiagnosticSignHint", culhl = "DiagnosticSignHintLine" } +) + +-- Make <Tab> work for snippets +vim.keymap.set({ "i", "s" }, "<Tab>", function() + if vim.snippet.active({ direction = 1 }) then + return "<cmd>lua vim.snippet.jump(1)<cr>" + else + return "<Tab>" + end +end, { expr = true }) + +-- Covenience macros +-- fix ellipsis: "..." -> "…" +vim.keymap.set( + "n", + "<leader>fe", + "mc:%s,\\.\\.\\.,…,g<CR>:nohlsearch<CR>`c", + { noremap = true, silent = true, desc = "... -> …" } +) +-- fix spelling: just an easier finger roll on 40% keyboard +vim.keymap.set("n", "<leader>fs", "1z=", { noremap = true, silent = true, desc = "Fix spelling under cursor" }) diff --git a/flake.lock b/flake.lock index 1d1dad0..865246b 100644 --- a/flake.lock +++ b/flake.lock @@ -29,11 +29,11 @@ "zig": "zig" }, "locked": { - "lastModified": 1730688195, - "narHash": "sha256-wXK1/gOImxv0vHpUc9qgno1AY8c64j17/UFIiT7zH1g=", + "lastModified": 1730568249, + "narHash": "sha256-+yyQ2ORHK61Q69mu9/fILlHmrPd3Es8zUTnqlwiMy3o=", "ref": "refs/heads/main", - "rev": "737dc0896dc266a98c889e122b5c900636e589c9", - "revCount": 7874, + "rev": "d47df211b03894427592851b0be3b528ff8221ff", + "revCount": 7864, "type": "git", "url": "ssh://git@github.com/ghostty-org/ghostty" }, @@ -64,11 +64,11 @@ ] }, "locked": { - "lastModified": 1730633670, - "narHash": "sha256-ZFJqIXpvVKvzOVFKWNRDyIyAo+GYdmEPaYi1bZB6uf0=", + "lastModified": 1730490306, + "narHash": "sha256-AvCVDswOUM9D368HxYD25RsSKp+5o0L0/JHADjLoD38=", "owner": "nix-community", "repo": "home-manager", - "rev": "8f6ca7855d409aeebe2a582c6fd6b6a8d0bf5661", + "rev": "1743615b61c7285976f85b303a36cdf88a556503", "type": "github" }, "original": { @@ -79,11 +79,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730531603, - "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=", + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", "type": "github" }, "original": { diff --git a/home/common/nvim/default.nix b/home/common/nvim/default.nix index ac0578f..91d22e5 100644 --- a/home/common/nvim/default.nix +++ b/home/common/nvim/default.nix @@ -1,5 +1,11 @@ { lib, pkgs, ... }: { + home.file.".config/nvim/.vimrc".source = ../../../files/config/nvim/.vimrc; + + home.activation.mkdirNvimFolders = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + mkdir -p $HOME/.config/nvim/backups $HOME/.config/nvim/swaps $HOME/.config/nvim/undo + ''; + programs.neovim = { enable = true; defaultEditor = true; @@ -9,7 +15,7 @@ withPython3 = false; withRuby = false; - extraLuaConfig = lib.fileContents ./init.lua; + extraLuaConfig = lib.fileContents ../../../files/config/nvim/init.lua; extraPackages = with pkgs; [ black go @@ -115,4 +121,5 @@ } ]; }; + } diff --git a/home/common/nvim/init.lua b/home/common/nvim/init.lua deleted file mode 100644 index ba179d8..0000000 --- a/home/common/nvim/init.lua +++ /dev/null @@ -1,93 +0,0 @@ --- vim.g.mapleader = "<space>" -vim.g.maplocalleader = ',' - --- UI - -vim.opt.cursorline = true -vim.opt.laststatus = 0 -vim.opt.number = true -vim.opt.relativenumber = true -vim.opt.ruler = true -vim.opt.rulerformat = "" -- FIXME: fancify! -vim.opt.rulerformat = "%36(%5l,%-6(%c%V%) %t%)%*" -vim.opt.syntax = "on" -vim.opt.termguicolors = true - --- Search -vim.opt.ignorecase = true -vim.opt.smartcase = true - --- Tab completion --- vim.opt.wildmode="list:longest,full" -vim.opt.wildignore="*.swp,*.o,*.so,*.exe,*.dll" - --- Whitespaces -vim.opt.breakindent = true -vim.opt.copyindent = true -vim.opt.expandtab = true -vim.opt.softtabstop = 2 -vim.opt.shiftround = true -vim.opt.shiftwidth = 2 -vim.opt.smartindent = true -vim.opt.tabstop = 2 -vim.opt.wrap = false -vim.opt.list = true -vim.opt.listchars="tab:»·,trail:·" - --- Folds -vim.opt.foldenable = false -vim.opt.foldtext = "v:lua.vim.treesitter.foldtext()" -vim.opt.foldmethod = "expr" -vim.opt.foldexpr = "nvim_treesitter#foldexpr()" - --- - -vim.o.autochdir = true -vim.o.fillchars = "stl: ,stlnc: ,eob:░,vert:│" -vim.o.list = false -vim.o.scrolloff = 7 -vim.o.splitkeep = "screen" -vim.o.updatetime = 50 -vim.o.timeout = true -vim.o.timeoutlen = 10 -vim.o.icm = "split" --- vim.o.cia = 'kind,abbr,menu' wait for nightly to drop - -vim.o.showmode = false - - --- Use rg -vim.o.grepprg = [[rg --glob "!.jj" --glob "!.git" --no-heading --vimgrep --follow $*]] -vim.opt.grepformat = vim.opt.grepformat ^ { "%f:%l:%c:%m" } - -vim.fn.sign_define( - "DiagnosticSignError", - { text = "", hl = "DiagnosticSignError", texthl = "DiagnosticSignError", culhl = "DiagnosticSignErrorLine" } -) -vim.fn.sign_define( - "DiagnosticSignWarn", - { text = "", hl = "DiagnosticSignWarn", texthl = "DiagnosticSignWarn", culhl = "DiagnosticSignWarnLine" } -) -vim.fn.sign_define( - "DiagnosticSignInfo", - { text = "", hl = "DiagnosticSignInfo", texthl = "DiagnosticSignInfo", culhl = "DiagnosticSignInfoLine" } -) -vim.fn.sign_define( - "DiagnosticSignHint", - { text = "", hl = "DiagnosticSignHint", texthl = "DiagnosticSignHint", culhl = "DiagnosticSignHintLine" } -) - --- Make <Tab> work for snippets -vim.keymap.set({ "i", "s" }, "<Tab>", function() - if vim.snippet.active({ direction = 1 }) then - return "<cmd>lua vim.snippet.jump(1)<cr>" - else - return "<Tab>" - end -end, { expr = true }) - -vim.keymap.set({ "n" }, "<c-/>", "gcc", { remap = true }) -vim.keymap.set({ "v" }, "<c-/>", "gc", { remap = true }) -vim.keymap.set({ "n" }, "<c-_>", "gcc", { remap = true }) -vim.keymap.set({ "v" }, "<c-_>", "gc", { remap = true }) -vim.keymap.set("n", "zz", "zt", { remap = true }) diff --git a/home/common/nvim/mini.lua b/home/common/nvim/mini.lua index cba6c4c..6d9fb19 100644 --- a/home/common/nvim/mini.lua +++ b/home/common/nvim/mini.lua @@ -9,8 +9,8 @@ require('mini.extra').setup() require('mini.icons').setup() require('mini.jump').setup() - -- require('mini.pairs').setup() - -- require('mini.statusline').setup() + require('mini.pairs').setup() + require('mini.statusline').setup() require('mini.surround').setup() require('mini.splitjoin').setup() @@ -43,35 +43,20 @@ } }) - require('mini.pick').setup({ - mappings = { - move_down = '<tab>' - }, - options = { - use_cache = true - } - }) + require('mini.pick').setup() 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 = "rg" } } - local_opts.cwd = root_dir - return MiniPick.builtin.files(local_opts, opts) - end - MiniPick.registry.grep_live_root = function(local_opts) - local root_patterns = { ".jj", ".git" } + local root_patterns = { ".jj" } 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) + local_opts.cwd = root_dir -- nil? + return MiniPick.builtin.files(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>/', "<cmd>Pick grep_live<cr>", opts("Live Grep")) + vim.keymap.set('n', '<space>F', "<cmd>Pick files tool='git'<cr>", opts("Find Files in CWD")) + vim.keymap.set('n', '<space>ff', "<cmd>Pick files<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', '<tab>', "<cmd>Pick buffers<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")) diff --git a/home/common/utils.nix b/home/common/utils.nix index 0a608da..7d5fd93 100644 --- a/home/common/utils.nix +++ b/home/common/utils.nix @@ -55,8 +55,6 @@ arguments = [ "--glob=!.git/*" "--glob=!.jj/*" - "--glob=!result/*" - "--glob=!target/*" ]; };