Personal Nix setup
at main 2.9 kB view raw
1{ lib, config, pkgs, ... } @ inputs: 2 3with lib; 4let 5 inherit (import ../../lib/colors.nix inputs) colors mkVimHardlineColors; 6 inherit (import ./theme.nix inputs) my-theme; 7 8 cfg = config.modules.nvim; 9 10 initContents = " 11 \nlua <<EOF\n" + /* lua */ '' 12 nix_bins = { 13 terraformls = '${pkgs.terraform-ls}/bin/terraform-ls', 14 tsserver = '${pkgs.typescript-language-server}/bin/typescript-language-server', 15 eslintls = '${pkgs.vscode-eslint-language-server}/bin/vscode-eslint-language-server', 16 cssls = '${pkgs.vscode-css-language-server}/bin/vscode-css-language-server', 17 htmlls = '${pkgs.vscode-html-language-server}/bin/vscode-html-language-server', 18 jsonls = '${pkgs.vscode-json-language-server}/bin/vscode-json-language-server', 19 bunx = '${pkgs.bun}/bin/bunx', 20 ripgrep = '${pkgs.ripgrep}/bin/rg', 21 rustanalyzer = '${pkgs.rust-analyzer}/bin/rust-analyzer', 22 zls = '${pkgs.zls}/bin/zls', 23 zig = '${pkgs.zig}/bin/zig', 24 } 25 26 hardline_colors = ${mkVimHardlineColors colors} 27 '' + (builtins.readFile ./init.lua) + "\nEOF"; 28 29 nvim-treesitter = (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ 30 p.astro p.typescript p.tsx p.git_rebase p.gitcommit p.gitignore 31 p.gitattributes p.graphql p.regex p.json p.json5 p.javascript 32 p.markdown p.markdown_inline p.terraform p.svelte p.prisma 33 p.yaml p.vue p.vim p.lua p.make p.jsdoc p.comment p.css 34 p.sql p.rust p.html p.bash p.c p.nix p.zig p.yuck p.go 35 ])).overrideAttrs (_: { 36 src = pkgs.nvim-plugins.nvim-treesitter; 37 }); 38 39 neovimConfig = pkgs.neovimUtils.makeNeovimConfig { 40 withPython3 = true; 41 viAlias = true; 42 vimAlias = true; 43 customRC = initContents; 44 plugins = with pkgs.nvim-plugins; map (d: d.overrideAttrs { doCheck = false; }) [ 45 my-theme 46 vim-repeat 47 hardline-nvim 48 gitsigns-nvim 49 nvim-lspconfig 50 lspkind-nvim 51 vim-golden-size 52 popup-nvim 53 trouble-nvim 54 dressing-nvim 55 oil-nvim 56 57 nvim-cmp 58 nvim-cmp-lsp 59 nvim-cmp-lsp-signature-help 60 nvim-cmp-treesitter 61 62 plenary-nvim 63 telescope-nvim 64 telescope-zf-native-nvim 65 66 nvim-treesitter 67 nvim-treesitter-refactor 68 nvim-treesitter-textobjects 69 ]; 70 }; 71 72 neovimPkg = pkgs.neovim-unwrapped; 73 neovim = pkgs.wrapNeovimUnstable neovimPkg neovimConfig; 74in { 75 options.modules.nvim = { 76 enable = mkOption { 77 default = true; 78 description = "Neovim"; 79 type = types.bool; 80 }; 81 useCustomConfig = mkOption { 82 default = cfg.enable; 83 description = "Custom Configuration"; 84 type = types.bool; 85 }; 86 }; 87 88 config = mkIf cfg.enable { 89 environment.variables = { EDITOR = "vim"; }; 90 91 environment.systemPackages = with pkgs; if cfg.useCustomConfig then [ 92 ripgrep 93 fd 94 bat 95 neovim 96 ] else [ 97 neovimPkg 98 ]; 99 }; 100}