]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim.nix
-use/op(nvim/elixir-tools): not working, disable entirely
[julm/julm-nix.git] / home-manager / profiles / nvim.nix
1 {
2 inputs,
3 lib,
4 pkgs,
5 config,
6 ...
7 }:
8 let
9 nvim-impure = "/home/julm/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/";
10 optionalPlugin = plugin: {
11 inherit plugin;
12 optional = true;
13 };
14 in
15 {
16 # Explanation(maint/modifiability):
17 # home-manager provides a (convoluted) wrapper around pkgs.wrapNeovimUnstable,
18 # and writes a minimal ~/.config/nvim/init.lua
19 # which is here configured to source ./nvim from:
20 # - either ${nvim-impure} which is where I store ./nvim before it gets into the Nix store.
21 # - or ./nvim copied into the Nix store when rebuilding the system with home-manager.
22 #
23 # So, for quick feedback:
24 # - if only ./nvim has changed: relaunch nvim
25 # - or if only new plugin packages are required, rebuild nvim:
26 # nix -L build .#nixosConfigurations.nan2gua1.config.home-manager.users.julm.programs.neovim.finalPackage &&
27 # result/bin/nvim
28 # - or if external packages need to be install: reinstall normally
29 programs.neovim = {
30 enable = lib.mkDefault true;
31 extraLuaConfig = ''
32 -- Lua config for normal usage
33 vim.opt.runtimepath:prepend('${./nvim}')
34
35 -- Lua config for quick feedback when changing ./nvim
36 vim.opt.runtimepath:prepend("${nvim-impure}")
37
38 -- Load ./nvim/lua/config
39 require("config")
40
41 -- Lazy load ./nvim/lua/plugins
42 require("lz.n").load("plugins")
43
44 -- Overrides `require()` to also search for optional plugins and load them with lz.n
45 require("lzn-auto-require").enable()
46 '';
47 plugins = [
48 pkgs.vimPlugins.lz-n
49 pkgs.vimPlugins.lzn-auto-require
50 ]
51 ++ lib.map optionalPlugin [
52 pkgs.vimPlugins.blink-cmp
53 pkgs.vimPlugins.comment-nvim
54 pkgs.vimPlugins.conform-nvim
55 pkgs.vimPlugins.fastaction-nvim
56 #pkgs.vimPlugins.fine-cmdline-nvim
57 pkgs.vimPlugins.git-conflict-nvim
58 pkgs.vimPlugins.github-nvim-theme
59 pkgs.vimPlugins.gitlinker-nvim
60 pkgs.vimPlugins.gitsigns-nvim
61 pkgs.vimPlugins.haskell-tools-nvim
62 (pkgs.vimUtils.buildVimPlugin {
63 pname = "jj-diffconflicts.nvim";
64 version = "main";
65 src = inputs.jj-diffconflicts;
66 })
67 pkgs.vimPlugins.elixir-tools-nvim
68 pkgs.vimPlugins.hunk-nvim
69 pkgs.vimPlugins.image-nvim
70 (pkgs.vimUtils.buildVimPlugin {
71 pname = "jj.nvim";
72 version = "master";
73 src = inputs.jj-nvim;
74 })
75 pkgs.vimPlugins.lualine-nvim
76 /*
77 (pkgs.vimUtils.buildVimPlugin {
78 pname = "modes.nvim";
79 version = "master";
80 src = inputs.modes-nvim;
81 })
82 */
83 pkgs.vimPlugins.neo-tree-nvim
84 #pkgs.vimPlugins.neovim-ayu
85 pkgs.vimPlugins.nvim-colorizer-lua
86 pkgs.vimPlugins.nvim-fzf # For telescope
87 pkgs.vimPlugins.nvim-lint
88 pkgs.vimPlugins.nvim-navbuddy
89 pkgs.vimPlugins.nvim-navic # For navbuddy
90 pkgs.vimPlugins.nvim-rg
91 pkgs.vimPlugins.nvim-treesitter.withAllGrammars
92 pkgs.vimPlugins.nvim-web-devicons
93 /*
94 (pkgs.vimUtils.buildVimPlugin {
95 pname = "solarized-osaka.nvim";
96 version = "master";
97 src = inputs.solarized-osaka-nvim;
98 doCheck = false;
99 })
100 */
101 # pkgs.vimPlugins.sqlite-lua # For telescope-smart-history.nvim
102 pkgs.vimPlugins.telescope-fzf-native-nvim
103 pkgs.vimPlugins.telescope-git-conflicts-nvim
104 pkgs.vimPlugins.telescope-live-grep-args-nvim
105 pkgs.vimPlugins.telescope-nvim
106 pkgs.vimPlugins.telescope-smart-history-nvim
107 pkgs.vimPlugins.trouble-nvim
108 pkgs.vimPlugins.vim-illuminate
109 pkgs.vimPlugins.which-key-nvim
110 ];
111
112 viAlias = true;
113 vimAlias = false;
114
115 withNodeJs = false;
116 #withPerl = false;
117 withPython3 = false;
118 withRuby = false;
119 # For image-nvim
120 extraLuaPackages = ps: [ ps.magick ];
121 extraPackages = [ pkgs.imagemagick ];
122
123 # Jailing neovim
124 package =
125 pkgs.firejailWrap {
126 package = pkgs.neovim-unwrapped;
127 args = [
128 "--quiet"
129 "--profile=nvim"
130 ];
131 }
132 // {
133 inherit (pkgs.neovim-unwrapped) lua;
134 };
135 };
136 xdg.configFile."firejail/nvim.local".text = lib.concatStringsSep "\n" [
137 # For image-nvim
138 "noblacklist /tmp/tmux-*"
139 # For git status, eg. ~/.config/git/ignore
140 "noblacklist \${HOME}/.config/git"
141 # Reallow cc for LSPs, including Haskell's LSP
142 "ignore include disable-devel.inc"
143 ];
144 home.packages = lib.mkIf config.programs.neovim.enable (
145 lib.flatten (
146 lib.attrValues {
147 formatters = [
148 pkgs.gdtoolkit_4
149 pkgs.nixfmt-rfc-style
150 #pkgs.fourmolu
151 #pkgs.rustfmt
152 pkgs.shfmt
153 pkgs.stylua
154 ];
155 linters = [
156 pkgs.statix
157 pkgs.deadnix
158 pkgs.shellcheck
159 #pkgs.hlint
160 ];
161 lsp = [
162 pkgs.bash-language-server
163 #pkgs.elixir-ls
164 pkgs.lua-language-server
165 #pkgs.next-ls
166 pkgs.nil
167 pkgs.nixd
168 #pkgs.rust-analyzer
169 ];
170 snacks = [
171 pkgs.fd
172 pkgs.ripgrep
173 ];
174 neovim = [
175 pkgs.ripgrep
176 ]
177 ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
178 pkgs.xclip
179 pkgs.wl-clipboard
180 ];
181 }
182 )
183 );
184 }