From a0ff12a4c67d166d4f752323bf12a2e4bb154296 Mon Sep 17 00:00:00 2001 From: Alejandro Angulo Date: Sat, 1 Jun 2024 00:30:09 -0700 Subject: [PATCH] Updated to use nixvim config --- flake.lock | 356 +++++++++++++++++++++++- flake.nix | 3 + modules/nixos/apps/neovim/default.nix | 373 +------------------------- overlays/neovim/default.nix | 3 + 4 files changed, 353 insertions(+), 382 deletions(-) create mode 100644 overlays/neovim/default.nix diff --git a/flake.lock b/flake.lock index 082f69a..42ceb30 100644 --- a/flake.lock +++ b/flake.lock @@ -47,6 +47,29 @@ "type": "github" } }, + "devshell": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", + "owner": "numtide", + "repo": "devshell", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -64,6 +87,36 @@ } }, "flake-compat_2": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { "flake": false, "locked": { "lastModified": 1650374568, @@ -79,10 +132,101 @@ "type": "github" } }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-root": { + "locked": { + "lastModified": 1713493429, + "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=", + "owner": "srid", + "repo": "flake-root", + "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems_3" }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils-plus": { + "inputs": { + "flake-utils": "flake-utils_2" + }, + "locked": { + "lastModified": 1715533576, + "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_4" + }, "locked": { "lastModified": 1694529238, "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", @@ -97,21 +241,55 @@ "type": "github" } }, - "flake-utils-plus": { + "git-hooks": { "inputs": { - "flake-utils": "flake-utils" + "flake-compat": "flake-compat_3", + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixvim", + "nixpkgs" + ] }, "locked": { - "lastModified": 1715533576, - "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "lastModified": 1716213921, + "narHash": "sha256-xrsYFST8ij4QWaV6HEokCUNIZLjjLP1bYC60K8XiBVA=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "0e8fcc54b842ad8428c9e705cb5994eaf05c26a0", "type": "github" }, "original": { - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixvim", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", "type": "github" } }, @@ -136,6 +314,50 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717052710, + "narHash": "sha256-LRhOxzXmOza5SymhOgnEzA8EAQp+94kkeUYWKKpLJ/U=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "29c69d9a466e41d46fd3a7a9d0591ef9c113c2ae", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1716993688, + "narHash": "sha256-vo5k2wQekfeoq/2aleQkBN41dQiQHNTniZeVONWiWLs=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "c0d5b8c54d6828516c97f6be9f2d00c63a363df4", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, "nixlib": { "locked": { "lastModified": 1712450863, @@ -204,6 +426,82 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1714640452, + "narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1716769173, + "narHash": "sha256-7EXDb5WBw+d004Agt+JHC/Oyh/KTUglOaQ4MNjBbo5w=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9ca3f649614213b2aaf5f1e16ec06952fe4c2632", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ], + "nixvim": "nixvim_2" + }, + "locked": { + "lastModified": 1717226861, + "narHash": "sha256-JjLJCgjx/whThAwO1/+uYaZrIVdQTPF9aXzdwvzoF4w=", + "owner": "alejandro-angulo", + "repo": "nixvim-config", + "rev": "d149b9b70b6cb7ac53d11b54ee6eaf5ef431f530", + "type": "github" + }, + "original": { + "owner": "alejandro-angulo", + "repo": "nixvim-config", + "type": "github" + } + }, + "nixvim_2": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts_2", + "flake-root": "flake-root", + "git-hooks": "git-hooks", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": "nixpkgs_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1717191071, + "narHash": "sha256-wue0+NHKFhTiY7dTtP0jyNwVgUCMOBfcP7mSHVa6PMw=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "d15fade62b743839a20d927d3506d503858f49f0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, "root": { "inputs": { "agenix": "agenix", @@ -212,12 +510,13 @@ "nixos-generators": "nixos-generators", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", + "nixvim": "nixvim", "snowfall-lib": "snowfall-lib" } }, "snowfall-lib": { "inputs": { - "flake-compat": "flake-compat_2", + "flake-compat": "flake-compat_4", "flake-utils-plus": "flake-utils-plus", "nixpkgs": [ "nixpkgs" @@ -283,6 +582,43 @@ "type": "github" } }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715940852, + "narHash": "sha256-wJqHMg/K6X3JGAE9YLM0LsuKrKb4XiBeVaoeMNlReZg=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "2fba33a182602b9d49f0b2440513e5ee091d838b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "utils": { "inputs": { "systems": "systems_2" diff --git a/flake.nix b/flake.nix index 8ff87ca..e5f67a2 100644 --- a/flake.nix +++ b/flake.nix @@ -24,6 +24,9 @@ agenix.inputs.darwin.follows = ""; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + + nixvim.url = "github:alejandro-angulo/nixvim-config"; + nixvim.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs: diff --git a/modules/nixos/apps/neovim/default.nix b/modules/nixos/apps/neovim/default.nix index fda4dd6..26d0751 100644 --- a/modules/nixos/apps/neovim/default.nix +++ b/modules/nixos/apps/neovim/default.nix @@ -1,5 +1,4 @@ { - options, config, lib, pkgs, @@ -19,380 +18,10 @@ in { }; config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [fzf fd nil]; + environment.systemPackages = with pkgs; [neovim]; aa.home.dataFile = { ${cfg.tmuxThemePath}.source = ./tmux_theme; }; - aa.home.extraOptions = { - programs.neovim = { - enable = true; - withNodeJs = true; - withPython3 = true; - extraPython3Packages = ps: with ps; [black isort flake8 ipdb]; - #extraPackages = with pkgs; []; - plugins = with pkgs.vimPlugins; [ - # tree-sitter (code parser) - nvim-treesitter.withAllGrammars - - # git integration - gitgutter - fugitive - rhubarb - - # coc plugins - coc-json - coc-yaml - coc-pyright - coc-spell-checker - coc-rust-analyzer - - # Eye candy - nvim-web-devicons - base16-nvim - - markdown-preview-nvim - - { - plugin = lualine-nvim; - type = "lua"; - config = '' - require('lualine').setup { - options = { - icons_enabled = true, - theme = 'auto', - component_separators = { left = '', right = ''}, - section_separators = { left = '', right = ''}, - disabled_filetypes = { - statusline = {}, - winbar = {}, - }, - ignore_focus = {}, - always_divide_middle = true, - globalstatus = false, - refresh = { - statusline = 1000, - tabline = 1000, - winbar = 1000, - } - }, - sections = { - lualine_a = {'mode'}, - lualine_b = {'branch', 'diff', 'diagnostics'}, - lualine_c = {'filename'}, - lualine_x = {'encoding', 'fileformat', 'filetype'}, - lualine_y = {'progress'}, - lualine_z = {'location'} - }, - inactive_sections = { - lualine_a = {}, - lualine_b = {}, - lualine_c = {'filename'}, - lualine_x = {'location'}, - lualine_y = {}, - lualine_z = {} - }, - tabline = {}, - winbar = {}, - inactive_winbar = {}, - extensions = {} - } - ''; - } - - # TODO: Only install these if tmux is enabled - # tmux integration - tmux-navigator - tmuxline-vim - - vim-obsession - vim-nix - - # Telescope (fuzzy finding) - telescope-nvim # Config for this in `extraConfig` since it depends on and I override that. (Generated config places plugin config above contents of extraConfig - { - plugin = telescope-file-browser-nvim; - type = "lua"; - config = '' - vim.api.nvim_set_keymap( - "n", - "fb", - ":Telescope file_browser", - { noremap = true } - ) - require("telescope").load_extension("file_browser") - ''; - } - { - plugin = telescope-coc-nvim; - type = "lua"; - config = '' - require("telescope").setup({ - extensions = { - coc = { - prefer_locations = true; - } - } - }) - require("telescope").load_extension("coc") - - vim.api.nvim_set_keymap( - "n", - "coc", - ":Telescope coc", - { noremap = true } - ) - ''; - } - ]; - - coc = { - enable = true; - settings = { - "coc.preferences.formatOnSave" = true; - "python.formatting.provider" = "black"; - "languageserver" = { - "nix" = { - "command" = "nil"; - "rootPatterns" = ["flake.nix"]; - "filetypes" = ["nix"]; - }; - "ccls" = { - "command" = "ccls"; - "filetypes" = ["c" "cc" "cpp" "c++" "cobjc" "objcpp"]; - "rootPatterns" = [".ccls" "compile_commands.json" ".git/"]; - "initializationOptions" = { - "cache" = { - "directory" = "/tmp/ccls"; - }; - }; - }; - }; - }; - - # Copied the below from coc's README - pluginConfig = - '' - " Some servers have issues with backup files, see #649. - set nobackup - set nowritebackup - - " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable - " delays and poor user experience. - set updatetime=300 - - " Always show the signcolumn, otherwise it would shift the text each time - " diagnostics appear/become resolved. - set signcolumn=yes - - " Use tab for trigger completion with characters ahead and navigate. - " NOTE: There's always complete item selected by default, you may want to enable - " no select by `"suggest.noselect": true` in your configuration file. - " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by - " other plugin before putting this into your config. - inoremap - \ coc#pum#visible() ? coc#pum#next(1) : - \ CheckBackspace() ? "\" : - \ coc#refresh() - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - - " Make to accept selected completion item or notify coc.nvim to format - " u breaks current undo, please make your own choice. - inoremap coc#pum#visible() ? coc#pum#confirm() - \: "\u\\=coc#on_enter()\" - - function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - - " Use to trigger completion. - if has('nvim') - inoremap coc#refresh() - else - inoremap coc#refresh() - endif - - " Use `[g` and `]g` to navigate diagnostics - " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. - nmap [g (coc-diagnostic-prev) - nmap ]g (coc-diagnostic-next) - - " GoTo code navigation. - nmap gd (coc-definition) - nmap gy (coc-type-definition) - nmap gi (coc-implementation) - nmap gr (coc-references) - - " Use K to show documentation in preview window. - nnoremap K :call ShowDocumentation() - - function! ShowDocumentation() - if CocAction('hasProvider', 'hover') - call CocActionAsync('doHover') - else - call feedkeys('K', 'in') - endif - endfunction - - " Highlight the symbol and its references when holding the cursor. - autocmd CursorHold * silent call CocActionAsync('highlight') - - " Symbol renaming. - nmap rn (coc-rename) - - " Formatting selected code. - xmap f (coc-format-selected) - nmap f (coc-format-selected) - - augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder. - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') - augroup end - - " Applying codeAction to the selected region. - " Example: `aap` for current paragraph - xmap a (coc-codeaction-selected) - nmap a (coc-codeaction-selected) - - " Remap keys for applying codeAction to the current buffer. - nmap ac (coc-codeaction) - " Apply AutoFix to problem on the current line. - nmap qf (coc-fix-current) - - " Run the Code Lens action on the current line. - nmap cl (coc-codelens-action) - - " Map function and class text objects - " NOTE: Requires 'textDocument.documentSymbol' support from the language server. - xmap if (coc-funcobj-i) - omap if (coc-funcobj-i) - xmap af (coc-funcobj-a) - omap af (coc-funcobj-a) - xmap ic (coc-classobj-i) - omap ic (coc-classobj-i) - xmap ac (coc-classobj-a) - omap ac (coc-classobj-a) - - " Remap and for scroll float windows/popups. - if has('nvim-0.4.0') || has('patch-8.2.0750') - nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - endif - - " Use CTRL-S for selections ranges. - " Requires 'textDocument/selectionRange' support of language server. - nmap (coc-range-select) - xmap (coc-range-select) - - " Add `:Format` command to format current buffer. - command! -nargs=0 Format :call CocActionAsync('format') - - " Add `:Fold` command to fold current buffer. - command! -nargs=? Fold :call CocAction('fold', ) - - " Add `:OR` command for organize imports of the current buffer. - command! -nargs=0 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. - set statusline^=%{coc#status()}%{get(b:,'coc_current_function','' - + "''" - + '' )} - - " Mappings for CoCList - " Show all diagnostics. - nnoremap a :CocList diagnostics - " Manage extensions. - nnoremap e :CocList extensions - " Show commands. - nnoremap c :CocList commands - " Find symbol of current document. - nnoremap o :CocList outline - " Search workspace symbols. - nnoremap s :CocList -I symbols - " Do default action for next item. - nnoremap j :CocNext - " Do default action for previous item. - nnoremap k :CocPrev - " Resume latest coc list. - nnoremap p :CocListResume - - '' - # The below is custom and did not come from coc's README - + '' - " GoTo code navigation. - nmap gd (coc-definition) - nmap gs :call CocAction('jumpDefinition', 'split') - nmap gv :call CocAction('jumpDefinition', 'vsplit') - nmap gn :call CocAction('jumpDefinition', 'tabe') - nmap gy (coc-type-definition) - nmap gi (coc-implementation) - nmap gr (coc-references) - ''; - }; - - extraConfig = '' - set tabstop=4 - set shiftwidth=4 - set mouse=a - set expandtab - set number - set relativenumber - set autoindent - set termguicolors - syntax on - let mapleader = "`" - - " Eye Candy (selects theme and sets up transparency) - colorscheme base16-darktooth - hi Normal guibg=none ctermbg=none - hi NormalNC guibg=NONE - hi LineNr guibg=none ctermbg=none - hi Folded guibg=none ctermbg=none - hi NonText guibg=none ctermbg=none - hi SpecialKey guibg=none ctermbg=none - hi VertSplit guibg=none ctermbg=none - hi SignColumn guibg=none ctermbg=none - hi EndOfBuffer guibg=none ctermbg=none - - " Toggle line highlighting based on focus - autocmd BufEnter * setlocal cursorline - autocmd BufLeave * setlocal nocursorline - - " Toggle relative line numbers - nmap num :set invrelativenumber - - " Bindings for telescope-nvim - nnoremap ff lua require('telescope.builtin').find_files() - nnoremap fg lua require('telescope.builtin').live_grep() - nnoremap fb lua require('telescope.builtin').buffers() - nnoremap fh lua require('telescope.builtin').help_tags() - - " coc - nnoremap cmd :CocCommand - nnoremap cfg :CocConfig - nnoremap def :call CocAction('jumpDefinition') - nnoremap fmt :call CocActionAsync('format') - vmap a (coc-codeaction-selected) - nmap a (coc-codeaction-selected) - - " rhubarb - noremap bro :GBrowse - - " Tab completion - set wildmode=longest,list,full - set wildmenu - ''; - }; - }; }; } diff --git a/overlays/neovim/default.nix b/overlays/neovim/default.nix new file mode 100644 index 0000000..def6d20 --- /dev/null +++ b/overlays/neovim/default.nix @@ -0,0 +1,3 @@ +{nixvim, ...}: (final: prev: { + neovim = nixvim.packages.${prev.system}.default; +})