{ inputs, lib, pkgs, config, ... }: let impure-nvim = "/home/julm/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/"; optionalPlugin = plugin: { inherit plugin; optional = true; }; in { # DevelopmentNote: home-manager provides a (convoluted) wrapper # around pkgs.wrapNeovimUnstable, # and writes a minimal ~/.config/nvim/init.lua # which is here configured to source ./nvim from: # - either ~/.config/nvim/impure/ which is symlinked to an impure ./nvim # - or ./nvim in the Nix store # # So, for quick feedback: # - if only ./nvim has changed: relaunch nvim # - or if new plugins are required: rebuild nvim: # nix -L build .#nixosConfigurations.nan2gua1.config.home-manager.users.julm.programs.neovim.finalPackage && # result/bin/nvim # - or if new packages are required: reinstall normally programs.neovim = { enable = lib.mkDefault true; extraLuaConfig = '' -- Lua config for normal usage vim.opt.runtimepath:prepend('${./nvim}') -- Lua config for quick feedback when changing ./nvim vim.opt.runtimepath:prepend("${impure-nvim}") -- Load ./nvim/lua/config require("config") -- Lazy load ./nvim/lua/plugins require("lz.n").load("plugins") -- Overrides `require()` to also search for optional plugins and load them with lz.n require("lzn-auto-require").enable() ''; plugins = [ pkgs.vimPlugins.lz-n pkgs.vimPlugins.lzn-auto-require ] ++ lib.map optionalPlugin [ pkgs.vimPlugins.blink-cmp pkgs.vimPlugins.comment-nvim pkgs.vimPlugins.conform-nvim pkgs.vimPlugins.fastaction-nvim pkgs.vimPlugins.git-conflict-nvim pkgs.vimPlugins.github-nvim-theme pkgs.vimPlugins.gitlinker-nvim pkgs.vimPlugins.haskell-tools-nvim pkgs.vimPlugins.hunk-nvim pkgs.vimPlugins.image-nvim (pkgs.vimUtils.buildVimPlugin { pname = "jj.nvim"; version = "master"; src = inputs.jj-nvim; }) pkgs.vimPlugins.lualine-nvim /* (pkgs.vimUtils.buildVimPlugin { pname = "modes.nvim"; version = "master"; src = inputs.modes-nvim; }) */ pkgs.vimPlugins.neo-tree-nvim pkgs.vimPlugins.neovim-ayu pkgs.vimPlugins.nvim-colorizer-lua pkgs.vimPlugins.nvim-fzf # For telescope pkgs.vimPlugins.nvim-lint pkgs.vimPlugins.nvim-navbuddy pkgs.vimPlugins.nvim-navic # For navbuddy pkgs.vimPlugins.nvim-treesitter pkgs.vimPlugins.nvim-web-devicons /* (pkgs.vimUtils.buildVimPlugin { pname = "solarized-osaka.nvim"; version = "master"; src = inputs.solarized-osaka-nvim; doCheck = false; }) */ pkgs.vimPlugins.telescope-fzf-native-nvim pkgs.vimPlugins.telescope-git-conflicts-nvim pkgs.vimPlugins.telescope-nvim pkgs.vimPlugins.vim-illuminate pkgs.vimPlugins.which-key-nvim ]; viAlias = true; vimAlias = true; withNodeJs = false; #withPerl = false; withPython3 = false; withRuby = false; # For image-nvim extraLuaPackages = ps: [ ps.magick ]; extraPackages = [ pkgs.imagemagick ]; }; home.packages = lib.mkIf config.programs.neovim.enable ( lib.flatten ( lib.attrValues { formatters = [ pkgs.gdtoolkit_4 pkgs.nixfmt-rfc-style #pkgs.fourmolu #pkgs.rustfmt pkgs.stylua ]; linters = [ pkgs.statix pkgs.deadnix pkgs.shellcheck #pkgs.hlint ]; lsp = [ pkgs.bash-language-server pkgs.lua-language-server pkgs.nixd pkgs.nil #pkgs.rust-analyzer ]; snacks = [ pkgs.fd pkgs.ripgrep ]; neovim = [ pkgs.ripgrep ] ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [ pkgs.xclip pkgs.wl-clipboard ]; } ) ); }