]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim.nix
neovim: configure, using ghostty and tmux
[julm/julm-nix.git] / home-manager / profiles / nvim.nix
1 {
2 inputs,
3 lib,
4 pkgs,
5 config,
6 ...
7 }:
8 let
9 optionalPlugin = plugin: {
10 inherit plugin;
11 optional = true;
12 };
13 in
14 {
15 # For rapid feedback when changing ./nvim
16 # create a symlink (actually two):
17 # ~/.config/nvim/impure -> /nix/store/… -> ~/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/
18 xdg.configFile."nvim/impure".source =
19 config.lib.file.mkOutOfStoreSymlink "/home/julm/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/";
20
21 # DevelopmentNote: home-manager provides a (convoluted) wrapper
22 # around pkgs.wrapNeovimUnstable,
23 # and writes a minimal ~/.config/nvim/init.lua
24 # which is here configured to source ./nvim from:
25 # - either ~/.config/nvim/impure/ which is symlinked to an impure ./nvim
26 # - or ./nvim in the Nix store
27 #
28 # So, for quick feedback:
29 # - if only ./nvim has changed: relaunch nvim
30 # - or if new plugins are required: rebuild nvim:
31 # nix -L build .#nixosConfigurations.nan2gua1.config.home-manager.users.julm.programs.neovim.finalPackage &&
32 # result/bin/nvim
33 # - or if new packages are required: reinstall normally
34 programs.neovim = {
35 enable = lib.mkDefault true;
36 extraLuaConfig = ''
37 -- Lua config for normal usage
38 vim.opt.runtimepath:prepend('${./nvim}')
39
40 -- Lua config for quick feedback when changing ./nvim
41 vim.opt.runtimepath:prepend((os.getenv("XDG_CONFIG_HOME") or (os.getenv("HOME") .. "/.config")) .. "/nvim/impure")
42
43 -- Load ./nvim/lua/config
44 require("config")
45
46 -- Lazy load ./nvim/lua/plugins
47 require("lz.n").load("plugins")
48
49 -- Overrides `require()` to also search for optional plugins and load them with lz.n
50 require("lzn-auto-require").enable()
51 '';
52 /*
53 package = pkgs.neovim-unwrapped.overrideAttrs (oldAttrs: {
54 buildInputs = oldAttrs.buildInputs ++ [ pkgs.tree-sitter ];
55 });
56 */
57 plugins = [
58 pkgs.vimPlugins.lz-n
59 pkgs.vimPlugins.lzn-auto-require
60 ]
61 ++ lib.map optionalPlugin [
62 pkgs.vimPlugins.blink-cmp
63 pkgs.vimPlugins.conform-nvim
64 pkgs.vimPlugins.fastaction-nvim
65 pkgs.vimPlugins.git-conflict-nvim
66 pkgs.vimPlugins.github-nvim-theme
67 pkgs.vimPlugins.gitlinker-nvim
68 pkgs.vimPlugins.haskell-tools-nvim
69 pkgs.vimPlugins.hunk-nvim
70 pkgs.vimPlugins.image-nvim
71 (pkgs.vimUtils.buildVimPlugin {
72 pname = "jj.nvim";
73 version = "master";
74 src = inputs.jj-nvim;
75 })
76 pkgs.vimPlugins.lualine-nvim
77 (pkgs.vimUtils.buildVimPlugin {
78 pname = "modes.nvim";
79 version = "master";
80 src = inputs.modes-nvim;
81 })
82 pkgs.vimPlugins.neo-tree-nvim
83 pkgs.vimPlugins.neovim-ayu
84 pkgs.vimPlugins.nvim-colorizer-lua
85 pkgs.vimPlugins.nvim-fzf # For telescope
86 pkgs.vimPlugins.nvim-lint
87 pkgs.vimPlugins.nvim-navbuddy
88 pkgs.vimPlugins.nvim-navic # For navbuddy
89 pkgs.vimPlugins.nvim-treesitter
90 pkgs.vimPlugins.nvim-web-devicons
91 /*
92 (pkgs.vimUtils.buildVimPlugin {
93 pname = "solarized-osaka.nvim";
94 version = "master";
95 src = inputs.solarized-osaka-nvim;
96 doCheck = false;
97 })
98 */
99 pkgs.vimPlugins.telescope-fzf-native-nvim
100 pkgs.vimPlugins.telescope-git-conflicts-nvim
101 pkgs.vimPlugins.telescope-nvim
102 pkgs.vimPlugins.vim-illuminate
103 pkgs.vimPlugins.which-key-nvim
104 ];
105
106 viAlias = true;
107 vimAlias = true;
108
109 withNodeJs = false;
110 #withPerl = false;
111 withPython3 = false;
112 withRuby = false;
113 # For image-nvim
114 extraLuaPackages = ps: [ ps.magick ];
115 extraPackages = [ pkgs.imagemagick ];
116 };
117 home.packages = lib.mkIf config.programs.neovim.enable (
118 lib.flatten (
119 lib.attrValues {
120 formatters = [
121 pkgs.gdtoolkit_4
122 pkgs.nixfmt-rfc-style
123 #pkgs.fourmolu
124 pkgs.rustfmt
125 pkgs.stylua
126 ];
127 linters = [
128 pkgs.statix
129 pkgs.deadnix
130 pkgs.shellcheck
131 #pkgs.hlint
132 ];
133 lsp = [
134 pkgs.bash-language-server
135 pkgs.lua-language-server
136 pkgs.nixd
137 pkgs.nil
138 #pkgs.rust-analyzer
139 ];
140 snacks = [
141 pkgs.fd
142 pkgs.ripgrep
143 ];
144 neovim = [
145 pkgs.ripgrep
146 ]
147 ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
148 pkgs.xclip
149 pkgs.wl-clipboard
150 ];
151 }
152 )
153 );
154 }