diff --git a/docs/default.nix b/docs/default.nix index 06d4d729..5829de32 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -1,5 +1,6 @@ { rawModules, + helpers, pkgs, }: let pkgsDoc = @@ -73,7 +74,13 @@ in options-json = (pkgsDoc.nixosOptionsDoc { - inherit (lib.evalModules {modules = topLevelModules;}) options; + inherit + (lib.evalModules { + modules = topLevelModules; + specialArgs.helpers = helpers; + }) + options + ; inherit transformOptions; warningsAreErrors = false; }) @@ -86,5 +93,6 @@ in docs = pkgsDoc.callPackage ./mdbook { inherit transformOptions; modules = topLevelModules; + inherit helpers; }; } diff --git a/docs/mdbook/default.nix b/docs/mdbook/default.nix index 64e7677c..7ebb1853 100644 --- a/docs/mdbook/default.nix +++ b/docs/mdbook/default.nix @@ -2,13 +2,14 @@ pkgs, lib, modules, + helpers, nixosOptionsDoc, transformOptions, }: with lib; let options = lib.evalModules { inherit modules; - specialArgs = {inherit pkgs lib;}; + specialArgs = {inherit pkgs lib helpers;}; }; mkMDDoc = options: diff --git a/flake-modules/default.nix b/flake-modules/default.nix index 057d6dff..b8cfc52b 100644 --- a/flake-modules/default.nix +++ b/flake-modules/default.nix @@ -1,6 +1,7 @@ {inputs, ...}: { imports = [ ./dev.nix + ./helpers.nix ./lib.nix ./legacy-packages.nix ./modules.nix diff --git a/flake-modules/helpers.nix b/flake-modules/helpers.nix new file mode 100644 index 00000000..712b4003 --- /dev/null +++ b/flake-modules/helpers.nix @@ -0,0 +1,15 @@ +{getHelpers, ...}: { + _module.args.getHelpers = pkgs: + import ../lib/helpers.nix { + inherit pkgs; + inherit (pkgs) lib; + }; + + perSystem = { + pkgs, + config, + ... + }: { + _module.args.helpers = getHelpers pkgs; + }; +} diff --git a/flake-modules/modules.nix b/flake-modules/modules.nix index 3602894f..915aec02 100644 --- a/flake-modules/modules.nix +++ b/flake-modules/modules.nix @@ -10,7 +10,6 @@ _module.args = { pkgs = pkgs.lib.mkForce pkgs; inherit (pkgs) lib; - helpers = import ../lib/helpers.nix {inherit (pkgs) lib;}; }; }; }; diff --git a/flake-modules/packages.nix b/flake-modules/packages.nix index 8de8b202..1319b003 100644 --- a/flake-modules/packages.nix +++ b/flake-modules/packages.nix @@ -3,10 +3,11 @@ pkgs, config, rawModules, + helpers, ... }: { packages = import ../docs { - inherit rawModules pkgs; + inherit rawModules pkgs helpers; }; # Test that all packages build fine when running `nix flake check`. diff --git a/flake-modules/wrappers.nix b/flake-modules/wrappers.nix index a9f0a55a..5802a7cc 100644 --- a/flake-modules/wrappers.nix +++ b/flake-modules/wrappers.nix @@ -1,12 +1,14 @@ { inputs, modules, + getHelpers, self, ... }: let wrapperArgs = { inherit modules; inherit self; + inherit getHelpers; }; in { perSystem = { diff --git a/wrappers/_shared.nix b/wrappers/_shared.nix index 9f5f99b9..610c06c2 100644 --- a/wrappers/_shared.nix +++ b/wrappers/_shared.nix @@ -1,4 +1,7 @@ -modules: { +{ + modules, + helpers, +}: { lib, pkgs, config, @@ -20,7 +23,7 @@ in { check = builtins.isAttrs; }; description = "Use this option to access the helpers"; - default = import ../plugins/helpers.nix {inherit (pkgs) lib;}; + default = helpers; }; configFiles = let diff --git a/wrappers/darwin.nix b/wrappers/darwin.nix index 630fb787..01c99ee6 100644 --- a/wrappers/darwin.nix +++ b/wrappers/darwin.nix @@ -1,6 +1,7 @@ { modules, self, + getHelpers, }: { pkgs, config, @@ -8,19 +9,25 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkForce mkMerge mkIf types; - shared = import ./_shared.nix modules args; + helpers = getHelpers pkgs; + shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; in { options = { programs.nixvim = mkOption { default = {}; - type = types.submodule ([ - { - options.enable = mkEnableOption "nixvim"; - config.wrapRc = mkForce true; - } - ] - ++ shared.topLevelModules); + type = types.submoduleWith { + shorthandOnlyDefinesConfig = true; + specialArgs.helpers = helpers; + modules = + [ + { + options.enable = mkEnableOption "nixvim"; + config.wrapRc = mkForce true; + } + ] + ++ shared.topLevelModules; + }; }; nixvim.helpers = shared.helpers; }; diff --git a/wrappers/hm.nix b/wrappers/hm.nix index bf82c4b2..bf2e9f37 100644 --- a/wrappers/hm.nix +++ b/wrappers/hm.nix @@ -1,6 +1,7 @@ { modules, self, + getHelpers, }: { pkgs, config, @@ -8,7 +9,8 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkMerge mkIf types; - shared = import ./_shared.nix modules args; + helpers = getHelpers pkgs; + shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; files = shared.configFiles @@ -19,15 +21,20 @@ in { options = { programs.nixvim = mkOption { default = {}; - type = types.submodule ([ - { - options = { - enable = mkEnableOption "nixvim"; - defaultEditor = mkEnableOption "nixvim as the default editor"; - }; - } - ] - ++ shared.topLevelModules); + type = types.submoduleWith { + shorthandOnlyDefinesConfig = true; + specialArgs.helpers = helpers; + modules = + [ + { + options = { + enable = mkEnableOption "nixvim"; + defaultEditor = mkEnableOption "nixvim as the default editor"; + }; + } + ] + ++ shared.topLevelModules; + }; }; nixvim.helpers = shared.helpers; }; diff --git a/wrappers/nixos.nix b/wrappers/nixos.nix index da1ae80a..3dbd37b5 100644 --- a/wrappers/nixos.nix +++ b/wrappers/nixos.nix @@ -1,6 +1,7 @@ { modules, self, + getHelpers, }: { pkgs, config, @@ -8,7 +9,8 @@ ... } @ args: let inherit (lib) mkEnableOption mkOption mkOptionType mkForce mkMerge mkIf types; - shared = import ./_shared.nix modules args; + helpers = getHelpers pkgs; + shared = import ./_shared.nix {inherit modules helpers;} args; cfg = config.programs.nixvim; files = shared.configFiles @@ -19,16 +21,21 @@ in { options = { programs.nixvim = mkOption { default = {}; - type = types.submodule ([ - { - options = { - enable = mkEnableOption "nixvim"; - defaultEditor = mkEnableOption "nixvim as the default editor"; - }; - config.wrapRc = mkForce true; - } - ] - ++ shared.topLevelModules); + type = types.submoduleWith { + shorthandOnlyDefinesConfig = true; + specialArgs.helpers = helpers; + modules = + [ + { + options = { + enable = mkEnableOption "nixvim"; + defaultEditor = mkEnableOption "nixvim as the default editor"; + }; + config.wrapRc = mkForce true; + } + ] + ++ shared.topLevelModules; + }; }; nixvim.helpers = shared.helpers; }; diff --git a/wrappers/standalone.nix b/wrappers/standalone.nix index 128db05a..b68652b4 100644 --- a/wrappers/standalone.nix +++ b/wrappers/standalone.nix @@ -1,6 +1,7 @@ default_pkgs: { modules, self, + getHelpers, }: { pkgs ? default_pkgs, extraSpecialArgs ? {}, @@ -8,16 +9,24 @@ default_pkgs: { }: let inherit (pkgs) lib; - wrap = {wrapRc = true;}; - - shared = import ./_shared.nix modules { + helpers = getHelpers pkgs; + shared = import ./_shared.nix {inherit modules helpers;} { inherit pkgs lib; config = {}; }; eval = lib.evalModules { - modules = [module wrap] ++ shared.topLevelModules; - specialArgs = extraSpecialArgs; + modules = + [ + module + {wrapRc = true;} + ] + ++ shared.topLevelModules; + specialArgs = + { + inherit helpers; + } + // extraSpecialArgs; }; handleAssertions = config: let