]> 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 impure-nvim = "/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 # DevelopmentNote: home-manager provides a (convoluted) wrapper
17 # around pkgs.wrapNeovimUnstable,
18 # and writes a minimal ~/.config/nvim/init.lua
19 # which is here configured to source ./nvim from:
20 # - either ~/.config/nvim/impure/ which is symlinked to an impure ./nvim
21 # - or ./nvim in the Nix store
22 #
23 # So, for quick feedback:
24 # - if only ./nvim has changed: relaunch nvim
25 # - or if new plugins 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 new packages are required: 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("${impure-nvim}")
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.git-conflict-nvim
57 pkgs.vimPlugins.github-nvim-theme
58 pkgs.vimPlugins.gitlinker-nvim
59 pkgs.vimPlugins.haskell-tools-nvim
60 pkgs.vimPlugins.hunk-nvim
61 pkgs.vimPlugins.image-nvim
62 (pkgs.vimUtils.buildVimPlugin {
63 pname = "jj.nvim";
64 version = "master";
65 src = inputs.jj-nvim;
66 })
67 pkgs.vimPlugins.lualine-nvim
68 /*
69 (pkgs.vimUtils.buildVimPlugin {
70 pname = "modes.nvim";
71 version = "master";
72 src = inputs.modes-nvim;
73 })
74 */
75 pkgs.vimPlugins.neo-tree-nvim
76 pkgs.vimPlugins.neovim-ayu
77 pkgs.vimPlugins.nvim-colorizer-lua
78 pkgs.vimPlugins.nvim-fzf # For telescope
79 pkgs.vimPlugins.nvim-lint
80 pkgs.vimPlugins.nvim-navbuddy
81 pkgs.vimPlugins.nvim-navic # For navbuddy
82 pkgs.vimPlugins.nvim-treesitter
83 pkgs.vimPlugins.nvim-web-devicons
84 /*
85 (pkgs.vimUtils.buildVimPlugin {
86 pname = "solarized-osaka.nvim";
87 version = "master";
88 src = inputs.solarized-osaka-nvim;
89 doCheck = false;
90 })
91 */
92 pkgs.vimPlugins.telescope-fzf-native-nvim
93 pkgs.vimPlugins.telescope-git-conflicts-nvim
94 pkgs.vimPlugins.telescope-nvim
95 pkgs.vimPlugins.vim-illuminate
96 pkgs.vimPlugins.which-key-nvim
97 ];
98
99 viAlias = true;
100 vimAlias = true;
101
102 withNodeJs = false;
103 #withPerl = false;
104 withPython3 = false;
105 withRuby = false;
106 # For image-nvim
107 extraLuaPackages = ps: [ ps.magick ];
108 extraPackages = [ pkgs.imagemagick ];
109 };
110 home.packages = lib.mkIf config.programs.neovim.enable (
111 lib.flatten (
112 lib.attrValues {
113 formatters = [
114 pkgs.gdtoolkit_4
115 pkgs.nixfmt-rfc-style
116 #pkgs.fourmolu
117 #pkgs.rustfmt
118 pkgs.stylua
119 ];
120 linters = [
121 pkgs.statix
122 pkgs.deadnix
123 pkgs.shellcheck
124 #pkgs.hlint
125 ];
126 lsp = [
127 pkgs.bash-language-server
128 pkgs.lua-language-server
129 pkgs.nixd
130 pkgs.nil
131 #pkgs.rust-analyzer
132 ];
133 snacks = [
134 pkgs.fd
135 pkgs.ripgrep
136 ];
137 neovim = [
138 pkgs.ripgrep
139 ]
140 ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
141 pkgs.xclip
142 pkgs.wl-clipboard
143 ];
144 }
145 )
146 );
147 }