|
17 | 17 | };
|
18 | 18 |
|
19 | 19 | config = mkIf cfg.enable {
|
20 |
| - xdg.configFile."nvim" = { |
21 |
| - source = "${self}/home/modules/neovim/config"; |
22 |
| - recursive = true; |
23 |
| - }; |
24 |
| - |
25 |
| - programs.neovim = { |
| 20 | + programs.nvf = { |
26 | 21 | enable = true;
|
27 |
| - viAlias = true; |
28 |
| - vimAlias = true; |
29 |
| - defaultEditor = true; |
30 |
| - |
31 |
| - extraPackages = with pkgs; [ |
32 |
| - gcc |
33 |
| - nodejs_22 |
34 |
| - ansible-language-server |
35 |
| - yaml-language-server |
36 |
| - marksman |
37 |
| - gopls |
38 |
| - dockerfile-language-server-nodejs |
39 |
| - docker-compose-language-service |
40 |
| - cmake-language-server |
41 |
| - helm-ls |
42 |
| - nil |
43 |
| - nixd |
44 |
| - lua-language-server |
45 |
| - stylua |
46 |
| - pyright |
47 |
| - ]; |
| 22 | + |
| 23 | + settings = { |
| 24 | + vim = { |
| 25 | + viAlias = true; |
| 26 | + vimAlias = true; |
| 27 | + |
| 28 | + withNodeJs = false; |
| 29 | + withPython3 = false; |
| 30 | + withRuby = false; |
| 31 | + |
| 32 | + enableLuaLoader = true; |
| 33 | + enableEditorconfig = true; |
| 34 | + useSystemClipboard = true; |
| 35 | + hideSearchHighlight = true; |
| 36 | + searchCase = "smart"; |
| 37 | + |
| 38 | + options = { |
| 39 | + mouse = "a"; |
| 40 | + colorcolumn = "79"; |
| 41 | + encoding = "utf-8"; |
| 42 | + fileformat = "unix"; |
| 43 | + number = true; |
| 44 | + relativenumber = true; |
| 45 | + swapfile = false; |
| 46 | + scrolloff = 7; |
| 47 | + tabstop = 2; |
| 48 | + shiftwidth = 2; |
| 49 | + softtabstop = 2; |
| 50 | + expandtab = true; |
| 51 | + smartindent = true; |
| 52 | + }; |
| 53 | + |
| 54 | + globals = { |
| 55 | + mapleader = ","; |
| 56 | + }; |
| 57 | + |
| 58 | + keymaps = [ |
| 59 | + { |
| 60 | + key = "<C-n>"; |
| 61 | + mode = [ "n" ]; |
| 62 | + action = ":NvimTreeToggle<CR>"; |
| 63 | + silent = true; |
| 64 | + desc = "Toggle File tree"; |
| 65 | + } |
| 66 | + { |
| 67 | + key = "<Tab>"; |
| 68 | + mode = "n"; |
| 69 | + action = "<cmd>bnext<CR>"; |
| 70 | + silent = true; |
| 71 | + desc = "Go to next buffer"; |
| 72 | + } |
| 73 | + { |
| 74 | + key = "<S-Tab>"; |
| 75 | + mode = "n"; |
| 76 | + action = "<cmd>bprevious<CR>"; |
| 77 | + silent = true; |
| 78 | + desc = "Go to previous buffer"; |
| 79 | + } |
| 80 | + { |
| 81 | + key = "bd"; |
| 82 | + mode = "n"; |
| 83 | + action = "<cmd>bdel<CR>"; |
| 84 | + silent = true; |
| 85 | + desc = "Close current buffer"; |
| 86 | + } |
| 87 | + { |
| 88 | + key = ";;"; |
| 89 | + mode = "n"; |
| 90 | + action = "<cmd>Telescope<CR>"; |
| 91 | + silent = true; |
| 92 | + } |
| 93 | + { |
| 94 | + key = ";g"; |
| 95 | + mode = "n"; |
| 96 | + action = "<cmd>Telescope live_grep<CR>"; |
| 97 | + silent = true; |
| 98 | + desc = "Grep files"; |
| 99 | + } |
| 100 | + { |
| 101 | + key = ";f"; |
| 102 | + mode = "n"; |
| 103 | + action = "<cmd>Telescope find_files<CR>"; |
| 104 | + silent = true; |
| 105 | + desc = "Find files"; |
| 106 | + } |
| 107 | + { |
| 108 | + key = "<leader>gn"; |
| 109 | + mode = "n"; |
| 110 | + action = ":LazyGit<CR>"; |
| 111 | + silent = true; |
| 112 | + desc = "Open LazyGit"; |
| 113 | + } |
| 114 | + { |
| 115 | + key = "<C-a>"; |
| 116 | + mode = "n"; |
| 117 | + action = "gg<S-v>G"; |
| 118 | + silent = true; |
| 119 | + desc = "Select all"; |
| 120 | + } |
| 121 | + ]; |
| 122 | + |
| 123 | + extraLuaFiles = [ |
| 124 | + "${self}/home/modules/neovim/lua/autocmds.lua" |
| 125 | + "${self}/home/modules/neovim/lua/rulayout.lua" |
| 126 | + ]; |
| 127 | + |
| 128 | + autopairs.nvim-autopairs.enable = true; |
| 129 | + autocomplete.nvim-cmp.enable = true; |
| 130 | + telescope.enable = true; |
| 131 | + statusline.lualine.enable = true; |
| 132 | + comments.comment-nvim.enable = true; |
| 133 | + git.gitsigns.enable = true; |
| 134 | + |
| 135 | + lsp = { |
| 136 | + enable = true; |
| 137 | + lsplines.enable = true; |
| 138 | + }; |
| 139 | + |
| 140 | + languages = { |
| 141 | + enableLSP = true; |
| 142 | + enableFormat = true; |
| 143 | + enableTreesitter = true; |
| 144 | + enableExtraDiagnostics = true; |
| 145 | + |
| 146 | + rust.enable = true; |
| 147 | + nix.enable = true; |
| 148 | + sql.enable = true; |
| 149 | + clang.enable = true; |
| 150 | + ts.enable = true; |
| 151 | + python.enable = true; |
| 152 | + zig.enable = true; |
| 153 | + markdown.enable = true; |
| 154 | + html.enable = true; |
| 155 | + dart.enable = true; |
| 156 | + go.enable = true; |
| 157 | + lua.enable = true; |
| 158 | + }; |
| 159 | + |
| 160 | + theme = { |
| 161 | + enable = true; |
| 162 | + name = "nord"; |
| 163 | + }; |
| 164 | + |
| 165 | + notify.nvim-notify = { |
| 166 | + enable = true; |
| 167 | + |
| 168 | + setupOpts = { |
| 169 | + render = "minimal"; |
| 170 | + stages = "static"; |
| 171 | + }; |
| 172 | + }; |
| 173 | + |
| 174 | + spellcheck = { |
| 175 | + enable = true; |
| 176 | + languages = [ "en" ]; |
| 177 | + }; |
| 178 | + |
| 179 | + utility = { |
| 180 | + preview.markdownPreview = { |
| 181 | + enable = true; |
| 182 | + }; |
| 183 | + }; |
| 184 | + |
| 185 | + mini = { |
| 186 | + icons.enable = true; |
| 187 | + |
| 188 | + tabline = { |
| 189 | + enable = true; |
| 190 | + |
| 191 | + setupOpts = { |
| 192 | + show_icons = true; |
| 193 | + }; |
| 194 | + }; |
| 195 | + }; |
| 196 | + |
| 197 | + visuals = { |
| 198 | + indent-blankline.enable = true; |
| 199 | + }; |
| 200 | + |
| 201 | + ui = { |
| 202 | + noice.enable = true; |
| 203 | + |
| 204 | + borders = { |
| 205 | + enable = true; |
| 206 | + globalStyle = "rounded"; |
| 207 | + |
| 208 | + plugins.nvim-cmp.enable = false; |
| 209 | + }; |
| 210 | + |
| 211 | + smartcolumn = { |
| 212 | + enable = true; |
| 213 | + |
| 214 | + setupOpts.custom_colorcolumn = { |
| 215 | + nix = "110"; |
| 216 | + rust = "120"; |
| 217 | + }; |
| 218 | + }; |
| 219 | + }; |
| 220 | + |
| 221 | + filetree = { |
| 222 | + nvimTree = { |
| 223 | + enable = true; |
| 224 | + openOnSetup = false; |
| 225 | + |
| 226 | + setupOpts = { |
| 227 | + sync_root_with_cwd = true; |
| 228 | + respect_buf_cwd = true; |
| 229 | + update_focused_file = { |
| 230 | + enable = true; |
| 231 | + update_root = true; |
| 232 | + }; |
| 233 | + |
| 234 | + sort_by = "case_sensitive"; |
| 235 | + |
| 236 | + view = { |
| 237 | + number = false; |
| 238 | + float = { |
| 239 | + enable = true; |
| 240 | + open_win_config = lib.generators.mkLuaInline '' |
| 241 | + function() |
| 242 | + local screen_w = vim.opt.columns:get() |
| 243 | + local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get() |
| 244 | + local window_w = screen_w * 0.5 |
| 245 | + local window_h = screen_h * 0.8 |
| 246 | + local window_w_int = math.floor(window_w) |
| 247 | + local window_h_int = math.floor(window_h) |
| 248 | + local center_x = (screen_w - window_w) / 2 |
| 249 | + local center_y = ((vim.opt.lines:get() - window_h) / 2) - vim.opt.cmdheight:get() |
| 250 | + return { |
| 251 | + border = "rounded", |
| 252 | + relative = "editor", |
| 253 | + row = center_y, |
| 254 | + col = center_x, |
| 255 | + width = window_w_int, |
| 256 | + height = window_h_int, |
| 257 | + } |
| 258 | + end |
| 259 | + ''; |
| 260 | + }; |
| 261 | + |
| 262 | + width = lib.generators.mkLuaInline '' |
| 263 | + function() |
| 264 | + return math.floor(vim.opt.columns:get() * 0.5) |
| 265 | + end |
| 266 | + ''; |
| 267 | + }; |
| 268 | + |
| 269 | + hijack_cursor = false; |
| 270 | + renderer = { |
| 271 | + group_empty = true; |
| 272 | + full_name = true; |
| 273 | + indent_markers = { |
| 274 | + enable = true; |
| 275 | + }; |
| 276 | + icons = { |
| 277 | + show = { |
| 278 | + file = true; |
| 279 | + folder = true; |
| 280 | + folder_arrow = true; |
| 281 | + }; |
| 282 | + glyphs = { |
| 283 | + default = ""; |
| 284 | + symlink = ""; |
| 285 | + folder = { |
| 286 | + default = ""; |
| 287 | + empty = ""; |
| 288 | + empty_open = ""; |
| 289 | + open = ""; |
| 290 | + symlink = ""; |
| 291 | + symlink_open = ""; |
| 292 | + arrow_open = ""; |
| 293 | + arrow_closed = ""; |
| 294 | + }; |
| 295 | + git = { |
| 296 | + untracked = ""; |
| 297 | + staged = ""; |
| 298 | + deleted = ""; |
| 299 | + unstaged = ""; |
| 300 | + renamed = ""; |
| 301 | + ignored = "◌"; |
| 302 | + unmerged = ""; |
| 303 | + }; |
| 304 | + }; |
| 305 | + }; |
| 306 | + }; |
| 307 | + filters = { |
| 308 | + dotfiles = true; |
| 309 | + }; |
| 310 | + diagnostics = { |
| 311 | + enable = true; |
| 312 | + show_on_dirs = true; |
| 313 | + }; |
| 314 | + }; |
| 315 | + }; |
| 316 | + }; |
| 317 | + |
| 318 | + lazy.plugins = { |
| 319 | + auto-session = { |
| 320 | + package = pkgs.vimPlugins.auto-session; |
| 321 | + setupModule = "auto-session"; |
| 322 | + lazy = false; |
| 323 | + |
| 324 | + setupOpts = { |
| 325 | + auto_session_enabled = true; |
| 326 | + auto_session_root_dir = lib.generators.mkLuaInline '' |
| 327 | + vim.fn.stdpath("data") .. "/sessions/" |
| 328 | + ''; |
| 329 | + pre_save_cmds = lib.generators.mkLuaInline '' |
| 330 | + { close_floating_windows, close_toggleterm, "NvimTreeClose" } |
| 331 | + ''; |
| 332 | + post_restore_cmds = lib.generators.mkLuaInline '' |
| 333 | + { clear_jumps, "NvimTreeOpen" } |
| 334 | + ''; |
| 335 | + save_extra_cmds = lib.generators.mkLuaInline '' |
| 336 | + { "NvimTreeOpen" } |
| 337 | + ''; |
| 338 | + }; |
| 339 | + }; |
| 340 | + |
| 341 | + "auto-save.nvim" = { |
| 342 | + package = pkgs.vimPlugins.auto-save-nvim; |
| 343 | + setupModule = "auto-save"; |
| 344 | + lazy = false; |
| 345 | + |
| 346 | + after = '' |
| 347 | + local group = vim.api.nvim_create_augroup('autosave', {}) |
| 348 | +
|
| 349 | + vim.api.nvim_create_autocmd('User', { |
| 350 | + pattern = 'AutoSaveWritePost', |
| 351 | + group = group, |
| 352 | + callback = function(opts) |
| 353 | + if opts.data.saved_buffer ~= nil then |
| 354 | + local filename = vim.api.nvim_buf_get_name(opts.data.saved_buffer) |
| 355 | + vim.notify('AutoSave: saved at ' .. vim.fn.strftime('%H:%M:%S'), vim.log.levels.INFO) |
| 356 | + end |
| 357 | + end, |
| 358 | + }) |
| 359 | + ''; |
| 360 | + }; |
| 361 | + |
| 362 | + "lazygit.nvim" = { |
| 363 | + package = pkgs.vimPlugins.lazygit-nvim; |
| 364 | + lazy = true; |
| 365 | + |
| 366 | + cmd = [ |
| 367 | + "LazyGit" |
| 368 | + "LazyGitConfig" |
| 369 | + "LazyGitCurrentFile" |
| 370 | + "LazyGitFilter" |
| 371 | + "LazyGitFilterCurrentFile" |
| 372 | + ]; |
| 373 | + }; |
| 374 | + }; |
| 375 | + }; |
| 376 | + }; |
48 | 377 | };
|
49 | 378 | };
|
50 | 379 | }
|
0 commit comments