diff options
-rw-r--r-- | npins/sources.json | 16 | ||||
m--------- | private | 0 | ||||
-rw-r--r-- | system/linde.nix | 7 | ||||
-rw-r--r-- | user/marvin.nix | 1 | ||||
-rw-r--r-- | user/modules/tabnine.nix | 8 | ||||
-rw-r--r-- | user/nvim/init.lua | 219 | ||||
-rw-r--r-- | user/settings/development/base.nix | 10 | ||||
-rw-r--r-- | user/settings/development/golang.nix | 7 | ||||
-rw-r--r-- | user/settings/development/web.nix | 13 | ||||
-rw-r--r-- | user/settings/development/zig.nix | 7 | ||||
-rw-r--r-- | user/settings/emacs.nix | 2 | ||||
-rw-r--r-- | user/settings/neovim.nix | 143 | ||||
-rw-r--r-- | user/settings/nix.nix | 7 | ||||
-rw-r--r-- | user/settings/user-interface.nix | 35 |
14 files changed, 167 insertions, 308 deletions
diff --git a/npins/sources.json b/npins/sources.json index 78fc35fd..4c6f4e3f 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -93,6 +93,18 @@ "url": "https://releases.nixos.org/nixos/unstable/nixos-25.05beta770807.a84ebe20c6bc/nixexprs.tar.xz", "hash": "1nnncvsn1xszaav09ldn99kb0fnb7yhmszbsagb56q3p6w62qhir" }, + "nixvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "nix-community", + "repo": "nixvim" + }, + "branch": "main", + "revision": "6b95b825529aa2d8536f7684fe64382ef4d15d84", + "url": "https://github.com/nix-community/nixvim/archive/6b95b825529aa2d8536f7684fe64382ef4d15d84.tar.gz", + "hash": "0bx1rrkkryhkgpfj5phgsa3gwvayzlfdwb1h2zvr4dhsxgj7pqyr" + }, "nur": { "type": "Git", "repository": { @@ -112,9 +124,9 @@ "url": "https://git.alanpearce.eu/searchix" }, "branch": "main", - "revision": "03fa0eb00aef448bec05280a121c659a600fc13f", + "revision": "f38ccb5ec8149072c93a6c3173da06ba1d724c4c", "url": null, - "hash": "182ldbz7gpcsbmii51gigwiavklj62p2q9sv32nwlcr1hc8d6g2a" + "hash": "0x8vci3m7jvp4sc0iwxwiv1y94mx7nvjjkcd2n80939n8q4c3x2c" }, "srvos": { "type": "Git", diff --git a/private b/private -Subproject 7b106e27d58e46bed2a4f627f1321592a0bedb2 +Subproject 414f928498da42a4a8998186618bb0285e13099 diff --git a/system/linde.nix b/system/linde.nix index 7fd8337a..8e73267f 100644 --- a/system/linde.nix +++ b/system/linde.nix @@ -120,12 +120,12 @@ in ${pkgs.npins}/bin/npins update searchix nixpkgs ''; useNixShell = true; - dates = "03:23"; + dates = "05:23"; allowReboot = true; randomizedDelaySec = "45 min"; rebootWindow = { - lower = "03:00"; - upper = "05:30"; + lower = "05:20"; + upper = "07:00"; }; }; @@ -929,6 +929,7 @@ in }; importer.timeout = "45m"; + importer.batchSize = 5000; importer.sources = { darwin = { enable = true; diff --git a/user/marvin.nix b/user/marvin.nix index df8ce8bc..acd0ece1 100644 --- a/user/marvin.nix +++ b/user/marvin.nix @@ -20,6 +20,7 @@ ../private ../private/ssh.nix ../private/tabnine.nix + ../private/llm.nix ]; home.username = "alan"; diff --git a/user/modules/tabnine.nix b/user/modules/tabnine.nix index b8ed3773..1c9b1a96 100644 --- a/user/modules/tabnine.nix +++ b/user/modules/tabnine.nix @@ -61,11 +61,9 @@ in text = cfg.registrationKey; }; - programs.neovim.plugins = [ - pkgs.vimPlugins.coc-tabnine - ]; - programs.neovim.coc.settings = { - "tabnine.binary_path" = "${pkgs.tabnine}/bin/TabNine"; + programs.nixvim.plugins = { + blink-compat.enable = true; + cmp-tabnine.enable = true; }; programs.emacs.extraPackages = epkgs: [ diff --git a/user/nvim/init.lua b/user/nvim/init.lua deleted file mode 100644 index f9162167..00000000 --- a/user/nvim/init.lua +++ /dev/null @@ -1,219 +0,0 @@ -vim.opt.autoindent = true - -vim.opt.background = "light" -vim.opt.number = true -vim.opt.clipboard = "unnamed" - -vim.g.mapleader = "," - -local keyset = vim.keymap.set - -keyset("v", "<leader>y", "\"+y", {}) -keyset("n", "<leader>Y", "\"+yg_", {}) -keyset("n", "<leader>y", "\"+y", {}) - -keyset("v", "<leader>p", "\"+p", {}) -keyset("v", "<leader>P", "\"+P", {}) -keyset("n", "<leader>p", "\"+p", {}) -keyset("n", "<leader>P", "\"+P", {}) - --- Autocomplete -function _G.check_back_space() - local col = vim.fn.col('.') - 1 - return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil -end - --- Use Tab for trigger completion with characters ahead and navigate --- NOTE: There's always a completion item selected by default, you may want to enable --- no select by setting `"suggest.noselect": true` in your configuration file --- NOTE: Use command ':verbose imap <tab>' to make sure Tab is not mapped by --- other plugins before putting this into your config -local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false} -keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts) -keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts) - --- Make <CR> to accept selected completion item or notify coc.nvim to format --- <C-g>u breaks current undo, please make your own choice -keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts) - --- Use <c-j> to trigger snippets -keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)") --- Use <c-space> to trigger completion -keyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true}) - --- Use `[g` and `]g` to navigate diagnostics --- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list -keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true}) -keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true}) - --- GoTo code navigation -keyset("n", "gd", "<Plug>(coc-definition)", {silent = true}) -keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true}) -keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true}) -keyset("n", "gr", "<Plug>(coc-references)", {silent = true}) - - --- Use K to show documentation in preview window -function _G.show_docs() - local cw = vim.fn.expand('<cword>') - if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then - vim.api.nvim_command('h ' .. cw) - elseif vim.api.nvim_eval('coc#rpc#ready()') then - vim.fn.CocActionAsync('doHover') - else - vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) - end -end -keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true}) - - - --- Highlight the symbol and its references on a CursorHold event(cursor is idle) -vim.api.nvim_create_augroup("CocGroup", {}) -vim.api.nvim_create_autocmd("CursorHold", { - group = "CocGroup", - command = "silent call CocActionAsync('highlight')", - desc = "Highlight symbol under cursor on CursorHold" -}) - - --- Symbol renaming -keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true}) - - --- Formatting selected code -keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) -keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) - - --- Setup formatexpr specified filetype(s) -vim.api.nvim_create_autocmd("FileType", { - group = "CocGroup", - pattern = "typescript,json", - command = "setl formatexpr=CocAction('formatSelected')", - desc = "Setup formatexpr specified filetype(s)." -}) - --- Update signature help on jump placeholder -vim.api.nvim_create_autocmd("User", { - group = "CocGroup", - pattern = "CocJumpPlaceholder", - command = "call CocActionAsync('showSignatureHelp')", - desc = "Update signature help on jump placeholder" -}) - --- Apply codeAction to the selected region --- Example: `<leader>aap` for current paragraph -local opts = {silent = true, nowait = true} -keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) -keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) - --- Remap keys for apply code actions at the cursor position. -keyset("n", "<leader>ac", "<Plug>(coc-codeaction-cursor)", opts) --- Remap keys for apply code actions affect whole buffer. -keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts) --- Remap keys for applying codeActions to the current buffer -keyset("n", "<leader>ac", "<Plug>(coc-codeaction)", opts) --- Apply the most preferred quickfix action on the current line. -keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts) - --- Remap keys for apply refactor code actions. -keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true }) -keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true }) -keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true }) - --- Run the Code Lens actions on the current line -keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts) - - --- Map function and class text objects --- NOTE: Requires 'textDocument.documentSymbol' support from the language server -keyset("x", "if", "<Plug>(coc-funcobj-i)", opts) -keyset("o", "if", "<Plug>(coc-funcobj-i)", opts) -keyset("x", "af", "<Plug>(coc-funcobj-a)", opts) -keyset("o", "af", "<Plug>(coc-funcobj-a)", opts) -keyset("x", "ic", "<Plug>(coc-classobj-i)", opts) -keyset("o", "ic", "<Plug>(coc-classobj-i)", opts) -keyset("x", "ac", "<Plug>(coc-classobj-a)", opts) -keyset("o", "ac", "<Plug>(coc-classobj-a)", opts) - - --- Remap <C-f> and <C-b> to scroll float windows/popups ----@diagnostic disable-next-line: redefined-local -local opts = {silent = true, nowait = true, expr = true} -keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) -keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) -keyset("i", "<C-f>", - 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts) -keyset("i", "<C-b>", - 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts) -keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) -keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) - - --- Use CTRL-S for selections ranges --- Requires 'textDocument/selectionRange' support of language server -keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true}) -keyset("x", "<C-s>", "<Plug>(coc-range-select)", {silent = true}) - - --- Add `:Format` command to format current buffer -vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) - --- " Add `:Fold` command to fold current buffer -vim.api.nvim_create_user_command("Fold", "call CocAction('fold', <f-args>)", {nargs = '?'}) - --- Add `:OR` command for organize imports of the current buffer -vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {}) - --- Add (Neo)Vim's native statusline support --- NOTE: Please see `:h coc-status` for integrations with external plugins that --- provide custom statusline: lightline.vim, vim-airline -vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") - --- Mappings for CoCList --- code actions and coc stuff ----@diagnostic disable-next-line: redefined-local -local opts = {silent = true, nowait = true} --- Show all diagnostics -keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts) --- Manage extensions -keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts) --- Show commands -keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts) --- Find symbol of current document -keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts) --- Search workspace symbols -keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts) --- Do default action for next item -keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts) --- Do default action for previous item -keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts) --- Resume latest coc list -keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts) - -local telescope = require("telescope") -telescope.setup { - defaults = { - mappings = { - i ={ - ["<C-h>"] = "which_key" - } - } - }, - extensions = { - fzf = { - fuzzy = true, - override_generic_sorter = true, - override_file_sorter = true, - case_mode = "smart_case", - } - } -} -telescope.load_extension("fzf") -local ts_builtin = require('telescope.builtin') -keyset("n", "<leader>ff", ts_builtin.find_files, {}) -keyset("n", "<leader>fg", ts_builtin.live_grep, {}) -keyset("n", "<leader>bb", ts_builtin.buffers, {}) -keyset("n", "<leader>pf", ts_builtin.git_files, {}) -keyset("n", "<leader>fh", ts_builtin.help_tags, {}) diff --git a/user/settings/development/base.nix b/user/settings/development/base.nix index 3954986b..39739695 100644 --- a/user/settings/development/base.nix +++ b/user/settings/development/base.nix @@ -58,6 +58,16 @@ ])) ]); + programs.nixvim.plugins = { + lsp.servers = { + bashls.enable = true; + fish_lsp.enable = true; + taplo.enable = true; + docker_compose_language_service.enable = true; + dockerls.enable = true; + }; + }; + editorconfig = { enable = true; settings = { diff --git a/user/settings/development/golang.nix b/user/settings/development/golang.nix index ef6cf412..2cd29685 100644 --- a/user/settings/development/golang.nix +++ b/user/settings/development/golang.nix @@ -37,7 +37,8 @@ tree-sitter-templ ])) ]); - programs.neovim.plugins = with pkgs.vimPlugins; [ - coc-go - ]; + programs.nixvim.plugins.lsp.servers = { + gopls.enable = true; + golangci_lint_ls.enable = true; + }; } diff --git a/user/settings/development/web.nix b/user/settings/development/web.nix index 0212d9fd..a32f5a21 100644 --- a/user/settings/development/web.nix +++ b/user/settings/development/web.nix @@ -8,6 +8,7 @@ csslint stylelint ] ++ (with pkgs; [ + emmet-language-server flyctl personal.htmlformat ]); @@ -102,8 +103,12 @@ tree-sitter-html ])) ]); - programs.neovim.plugins = with pkgs.vimPlugins; [ - coc-css - coc-html - ]; + programs.nixvim.plugins = { + lsp.servers = { + emmet_language_server.enable = true; + cssls.enable = true; + html.enable = true; + jsonls.enable = true; + }; + }; } diff --git a/user/settings/development/zig.nix b/user/settings/development/zig.nix index ac21267f..e3c78305 100644 --- a/user/settings/development/zig.nix +++ b/user/settings/development/zig.nix @@ -8,7 +8,8 @@ programs.emacs.extraPackages = epkgs: (with epkgs; [ zig-mode ]); - programs.neovim.plugins = with pkgs.vimPlugins; [ - zig-vim - ]; + programs.nixvim.plugins = { + zig.enable = true; + lsp.servers.zls.enable = true; + }; } diff --git a/user/settings/emacs.nix b/user/settings/emacs.nix index 703e012a..2fd77c1e 100644 --- a/user/settings/emacs.nix +++ b/user/settings/emacs.nix @@ -24,7 +24,7 @@ in "*.el diff=elisp" ]; programs.git.extraConfig."diff.elisp" = { - xfuncname = "^(((;;;+ )|\\(|([ \t]+\\(((cl-|el-patch-)?def(un|var|macro|method|custom)|gb/))).*)$"; + xfuncname = "^\\([^[:space:]]+[[:space:]]+([^()[:space:]]+)"; }; services.emacs = lib.mkIf stdenv.isLinux { diff --git a/user/settings/neovim.nix b/user/settings/neovim.nix index dcee5fde..d04de0b8 100644 --- a/user/settings/neovim.nix +++ b/user/settings/neovim.nix @@ -1,58 +1,109 @@ -{ pkgs +{ config , ... -}: { - programs.neovim = { +}: +let + nixvim = import <nixvim>; +in +{ + imports = [ + nixvim.homeManagerModules.nixvim + ]; + + programs.nixvim = { enable = true; defaultEditor = true; + + nixpkgs.config = config.nixpkgs.config; + viAlias = true; vimAlias = true; vimdiffAlias = true; - withNodeJs = true; - plugins = with pkgs.vimPlugins; [ - commentary - conjure - coc-git - coc-json - coc-yaml - direnv-vim - (nvim-treesitter.withPlugins ( - plugins: with plugins; [ - nix - ] - )) - telescope-nvim - telescope-fzf-native-nvim - vim-polyglot - vim-tridactyl - vim-surround - ]; - extraLuaConfig = builtins.readFile ../nvim/init.lua; - coc = { - enable = true; - settings = { - "json.enable" = true; - languageserver = { - nix = { - command = "${pkgs.nil}/bin/nil"; - filetypes = [ "nix" ]; - rootPatterns = [ "flake.nix" ]; - settings = { - coc.preferences.formatOnSaveFiletypes = [ "nix" ]; - links.tooltip = true; - semanticTokens = { - filetypes = [ "nix" ]; - }; - nil = { - formatting.command = [ "nixpkgs-fmt" ]; - nix.flake.autoArchive = true; - }; - }; + + # withRuby = false; + + clipboard.register = "unnamed"; + opts = { + autoindent = true; + number = true; + relativenumber = true; + shiftwidth = 2; + background = "light"; + }; + globals.mapleader = ","; + + colorscheme = "shine"; + + performance = { + byteCompileLua = { + enable = true; + nvimRuntime = true; + plugins = true; + }; + }; + + plugins = { + blink-cmp = { + enable = true; + settings = { + keymap.preset = "super-tab"; + }; + }; + + mini = { + enable = true; + mockDevIcons = true; + modules.icons = { + style = "glyph"; + }; + modules.basics = { }; + }; + + lsp = { + enable = true; + keymaps = { + lspBuf = { + gD = "references"; + gd = "definition"; + gi = "implementation"; + gt = "type_definition"; }; - lua = { - command = "${pkgs.lua-language-server}/bin/lua-language-server"; - filetypes = [ "lua" ]; + }; + }; + + direnv.enable = true; + friendly-snippets.enable = true; + nvim-snippets = { + enable = true; + settings.friendly_snippets = true; + luaConfig.post = '' + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + + require'lspconfig'.cssls.setup { + capabilities = capabilities, + } + ''; + }; + nvim-surround.enable = true; + telescope = { + enable = true; + keymaps = { + "<leader>ff" = "find_files"; + "<leader>fg" = "live_grep"; + "<leader>bb" = "buffers"; + "<leader>pf" = "git_files"; + "<leader>fh" = "help_tags"; + }; + settings = { + mappings = { + i = { + "<C-h>" = "which_key"; + }; }; }; + extensions = { + fzf-native.enable = true; + }; }; }; }; diff --git a/user/settings/nix.nix b/user/settings/nix.nix index eaae1083..c0382078 100644 --- a/user/settings/nix.nix +++ b/user/settings/nix.nix @@ -37,7 +37,8 @@ in nix-mode nix-update ]); - programs.neovim.plugins = with pkgs.vimPlugins; [ - vim-nix - ]; + programs.nixvim.plugins = { + nix.enable = true; + lsp.servers.nixd.enable = true; + }; } diff --git a/user/settings/user-interface.nix b/user/settings/user-interface.nix index a7dde811..9b413ee7 100644 --- a/user/settings/user-interface.nix +++ b/user/settings/user-interface.nix @@ -1,5 +1,5 @@ -{ config -, pkgs +{ pkgs +, lib , ... }: let @@ -24,23 +24,20 @@ in ]; }; }; - home.packages = with pkgs; - [ - inter - ] ++ (with pkgs.nerd-fonts; [ - blex-mono - jetbrains-mono - recursive-mono - symbols-only - ]) - ++ lib.optionals (!stdenv.isDarwin) (with pkgs; [ - (discord.override { withOpenASAR = true; }) + home.packages = (with pkgs.nerd-fonts; [ + blex-mono + jetbrains-mono + recursive-mono + symbols-only + ]) + ++ lib.optionals (!stdenv.isDarwin) (with pkgs; [ + (discord.override { withOpenASAR = true; }) - zeal - falkon - beeper - kdePackages.neochat - kdePackages.kleopatra - ]); + zeal + falkon + beeper + kdePackages.neochat + kdePackages.kleopatra + ]); services.emacs.startWithUserSession = "graphical"; } |