diff --git a/users/modules/neovim.nix b/users/modules/neovim.nix index 3915e83..1acc7e4 100644 --- a/users/modules/neovim.nix +++ b/users/modules/neovim.nix @@ -3,15 +3,72 @@ config, pkgs, ... -}: { +}: let + inherit + (lib) + concatMapStrings + flip + mkEnableOption + mkIf + mkOption + mkPackageOption + types + ; + + cfg = config.programs.neovim-custom; + + initLuaContent = '' + ${cfg.initEarly} + + -- Begin plugin configuration + ${concatMapStrings (x: "${x.config}\n") (cfg.config.plugins or [])} + -- End plugin configuration + + ${cfg.init} + ''; + + nvimConfig = + pkgs.neovimUtils.makeNeovimConfig cfg.config + // { + wrapRc = false; + wrapperArgs = ["--add-flags" "-u ${pkgs.writeText "init.lua" initLuaContent}"]; + }; + + finalPackage = + flip pkgs.wrapNeovimUnstable nvimConfig + (cfg.package.overrideAttrs (_final: prev: { + nativeBuildInputs = (prev.nativeBuildInputs or []) ++ [pkgs.makeWrapper]; + postInstall = + (prev.postInstall or "") + + '' + wrapProgram $out/bin/nvim --add-flags "--clean" + ''; + })); +in { options.programs.neovim-custom = { - enable = lib.mkEnableOption "Neovim"; - package = lib.mkPackageOption pkgs "neovim" {}; + enable = mkEnableOption "Neovim"; + package = mkPackageOption pkgs "neovim-unwrapped" {}; + config = mkOption { + description = "The neovim configuration to use (passed to makeNeovimConfig and then to wrapNeovimUnstable)"; + default = {}; + type = types.anything; + }; + initEarly = mkOption { + description = "The early init.lua content that will be added before plugin configs."; + default = ""; + type = types.lines; + }; + init = mkOption { + description = "The init.lua content, added after plugin configs."; + default = ""; + type = types.lines; + }; }; - config = lib.mkIf config.programs.neovim-custom.enable { + config = mkIf cfg.enable { home = { - # TODO packages = [config.programs.neovim-custom.package]; + # XXX: TODO packages = [finalPackage]; + shellAliases.E = "${finalPackage}/bin/nvim"; sessionVariables.EDITOR = "nvim"; shellAliases.vimdiff = "nvim -d"; }; diff --git a/users/myuser/neovim/aaa/init.lua b/users/myuser/neovim/aaa/init.lua index 0f36eb2..b4bba5a 100644 --- a/users/myuser/neovim/aaa/init.lua +++ b/users/myuser/neovim/aaa/init.lua @@ -33,7 +33,12 @@ opt.title = false -- Sets the window title --opt.titlestring = "%t%( %M%)%( (%{expand(\"%:~:.:h\")})%) - nvim" -- The format for the window title -- Hide line numbers in terminal windows -vim.api.nvim_exec([[au BufEnter term://* setlocal nonumber]], false) +vim.api.nvim_create_autocmd("BufEnter", { + pattern = "term://*", + callback = function() + vim.bo.number = false + end, +}) ---------------------------------------------------------------------------------------------------- -- Editing behavior diff --git a/users/myuser/neovim/default.nix b/users/myuser/neovim/default.nix index 7191878..e5c62e1 100644 --- a/users/myuser/neovim/default.nix +++ b/users/myuser/neovim/default.nix @@ -3,23 +3,27 @@ pkgs, ... }: { - programs.neovim-custom.package = let - nvimConfig = - pkgs.neovimUtils.makeNeovimConfig { - wrapRc = false; - withPython3 = true; - withRuby = true; - withNodeJs = true; - #extraPython3Packages = p: []; - #plugins = [ - # { plugin = pkgs.; config = ''''; optional = false; } - #]; - } - // { - wrapperArgs = ["--add-flags" "--clean -u ${./aaa/init.lua}"]; - }; - in - pkgs.wrapNeovimUnstable pkgs.neovim-unwrapped nvimConfig; + programs.neovim-custom = { + config = { + withPython3 = false; + withRuby = false; + withNodeJs = false; + #extraPython3Packages = p: []; + plugins = with pkgs.vimPlugins; [ + { + plugin = neo-tree-nvim; + config = + /* + lua + */ + '' + require("neo-tree").setup {} + ''; + } + ]; + }; + init = builtins.readFile ./aaa/init.lua; + }; home.packages = let nvimConfig = pkgs.neovimUtils.makeNeovimConfig { @@ -36,5 +40,4 @@ "nvim/init.lua".source = ./init.lua; "nvim/lua".source = ./lua; }; - home.sessionVariables.E = "${config.programs.neovim-custom.package}/bin/nvim"; }