summaryrefslogtreecommitdiff
path: root/lib/builders.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lib/builders.nix')
-rw-r--r--lib/builders.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/builders.nix b/lib/builders.nix
new file mode 100644
index 0000000..6669c2d
--- /dev/null
+++ b/lib/builders.nix
@@ -0,0 +1,75 @@
+{
+ lib,
+ inputs,
+ self,
+}:
+let
+ # function -> function -> { } -> { }
+ # wrap the `args` applied to `builder` with the result of `apply`
+ # applied to those `args`
+ wrapBuilderWith =
+ apply: builder: args:
+ builder (apply args);
+
+ # string -> function -> { } -> { }
+ # wrap the `args` for `builder` of type `type` with nice defaults
+ wrapBuilder =
+ type:
+ wrapBuilderWith (
+ {
+ modules ? [ ],
+ specialArgs ? { },
+ ...
+ }@args:
+ args
+ // {
+ modules = modules ++ lib.attrValues (self."${type}Modules" or { });
+
+ specialArgs = specialArgs // {
+ inherit inputs;
+ };
+ }
+ );
+
+ # function -> { } -> { }
+ # wrap the `args` to the nixos `builder` function with nice defaults
+ wrapNixOS = builder: args: wrapBuilder "nixos" builder args;
+ # function -> { } -> { }
+ # wrap the `args` to the darwin `builder` function with nice defaults
+ wrapDarwin = builder: args: wrapBuilder "darwin" builder args;
+
+ # function -> { } -> { }
+ # wrap the `args` to the homeManager `builder` function with nice defaults
+ wrapUser =
+ builder: args:
+ wrapBuilderWith (
+ {
+ modules ? [ ],
+ extraSpecialArgs ? { },
+ ...
+ }@args:
+ args
+ // {
+ modules = modules ++ lib.attrValues (self.homeManagerModules or { });
+
+ extraSpecialArgs = extraSpecialArgs // {
+ inherit inputs;
+ };
+ }
+ ) builder args;
+in
+{
+
+ # { } -> { }
+ # apply nice defaults to the `args` of `nixosSystem`
+ nixosSystem = wrapNixOS inputs.nixpkgs.lib.nixosSystem;
+ # { } -> { }
+ # apply nice defaults to the `args` of (stable) `nixosSystem`
+ nixosSystemStable = wrapNixOS inputs.nixpkgs-stable.lib.nixosSystem;
+ # { } -> { }
+ # apply nice defaults to the `args` of `darwinSystem`
+ darwinSystem = wrapDarwin inputs.nix-darwin.lib.darwinSystem;
+ # { } -> { }
+ # apply nice defaults to the `args` of `homeManagerConfiguration`
+ homeManagerConfiguration = wrapUser inputs.home-manager.lib.homeManagerConfiguration;
+}