diff --git a/wrappers/_shared.nix b/wrappers/_shared.nix index 0a68f04f..c4acbd18 100644 --- a/wrappers/_shared.nix +++ b/wrappers/_shared.nix @@ -1,37 +1,65 @@ -helpers: +{ + # Our helpers + helpers, + # Option path where extraFiles should go + filesOpt ? null, + # Filepath prefix to apply to extraFiles + filesPrefix ? "nvim/", + # Filepath to use when adding `cfg.initPath` to `filesOpt` + # Is prefixed with `filesPrefix` + initName ? "init.lua", +}: { lib, config, ... }: let inherit (lib) isAttrs listToAttrs map + mkIf + mkMerge mkOption mkOptionType + optionalAttrs + setAttrByPath ; cfg = config.programs.nixvim; extraFiles = lib.filter (file: file.enable) (lib.attrValues cfg.extraFiles); in { - helpers = mkOption { - type = mkOptionType { - name = "helpers"; - description = "Helpers that can be used when writing nixvim configs"; - check = isAttrs; + options = { + nixvim.helpers = mkOption { + type = mkOptionType { + name = "helpers"; + description = "Helpers that can be used when writing nixvim configs"; + check = isAttrs; + }; + description = "Use this option to access the helpers"; }; - description = "Use this option to access the helpers"; - default = helpers; }; - # extraFiles, but nested under "nvim/" for use in etc/xdg config - configFiles = listToAttrs ( - map ( - { target, source, ... }: - { - name = "nvim/" + target; - value = { - inherit source; - }; - } - ) extraFiles - ); + config = mkMerge [ + # Make our lib available to the host modules + { nixvim.helpers = lib.mkDefault helpers; } + # Propagate extraFiles to the host modules + (optionalAttrs (filesOpt != null) ( + mkIf (!cfg.wrapRc) ( + setAttrByPath filesOpt ( + listToAttrs ( + map ( + { target, source, ... }: + { + name = filesPrefix + target; + value = { + inherit source; + }; + } + ) extraFiles + ) + // { + ${filesPrefix + initName}.source = cfg.initPath; + } + ) + ) + )) + ]; } diff --git a/wrappers/darwin.nix b/wrappers/darwin.nix index 921bd506..d79d20c7 100644 --- a/wrappers/darwin.nix +++ b/wrappers/darwin.nix @@ -16,7 +16,6 @@ let types ; helpers = getHelpers pkgs false; - shared = import ./_shared.nix helpers args; cfg = config.programs.nixvim; in { @@ -36,9 +35,10 @@ in ]; }; }; - nixvim.helpers = shared.helpers; }; + imports = [ (import ./_shared.nix { inherit helpers; }) ]; + config = mkIf cfg.enable (mkMerge [ { environment.systemPackages = [ diff --git a/wrappers/hm.nix b/wrappers/hm.nix index 7f5f848e..03b8bec5 100644 --- a/wrappers/hm.nix +++ b/wrappers/hm.nix @@ -15,11 +15,7 @@ let types ; helpers = getHelpers pkgs false; - shared = import ./_shared.nix helpers args; cfg = config.programs.nixvim; - files = shared.configFiles // { - "nvim/init.lua".source = cfg.initPath; - }; in { options = { @@ -38,9 +34,18 @@ in ]; }; }; - nixvim.helpers = shared.helpers; }; + imports = [ + (import ./_shared.nix { + inherit helpers; + filesOpt = [ + "xdg" + "configFile" + ]; + }) + ]; + config = mkIf cfg.enable (mkMerge [ { home.packages = [ @@ -48,7 +53,6 @@ in cfg.printInitPackage ] ++ (lib.optional cfg.enableMan self.packages.${pkgs.stdenv.hostPlatform.system}.man-docs); } - (mkIf (!cfg.wrapRc) { xdg.configFile = files; }) { inherit (cfg) warnings assertions; home.sessionVariables = mkIf cfg.defaultEditor { EDITOR = "nvim"; }; diff --git a/wrappers/nixos.nix b/wrappers/nixos.nix index cd10b075..13721da6 100644 --- a/wrappers/nixos.nix +++ b/wrappers/nixos.nix @@ -16,11 +16,7 @@ let types ; helpers = getHelpers pkgs false; - shared = import ./_shared.nix helpers args; cfg = config.programs.nixvim; - files = shared.configFiles // { - "nvim/sysinit.lua".source = cfg.initPath; - }; in { options = { @@ -39,9 +35,19 @@ in ]; }; }; - nixvim.helpers = shared.helpers; }; + imports = [ + (import ./_shared.nix { + inherit helpers; + filesOpt = [ + "environment" + "etc" + ]; + initName = "sysinit.lua"; + }) + ]; + config = mkIf cfg.enable (mkMerge [ { environment.systemPackages = [ @@ -49,14 +55,13 @@ in cfg.printInitPackage ] ++ (lib.optional cfg.enableMan self.packages.${pkgs.stdenv.hostPlatform.system}.man-docs); } - (mkIf (!cfg.wrapRc) { - environment.etc = files; - environment.variables."VIM" = "/etc/nvim"; - }) { inherit (cfg) warnings assertions; programs.neovim.defaultEditor = cfg.defaultEditor; - environment.variables.EDITOR = mkIf cfg.defaultEditor (lib.mkOverride 900 "nvim"); + environment.variables = { + VIM = mkIf (!cfg.wrapRc) "/etc/nvim"; + EDITOR = mkIf cfg.defaultEditor (lib.mkOverride 900 "nvim"); + }; } ]); }