Loading lib/customisation.nix +121 −0 Original line number Diff line number Diff line Loading @@ -863,4 +863,125 @@ rec { transformDrv ; }; /** Removes a prefix from the attribute names of a set of splices. # Inputs `prefix` : The prefix to remove from splice attribute names `splices` : A set of splices with prefixed names # Type ``` renameSplicesFrom :: String -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.renameSplicesFrom` usage example ```nix renameSplicesFrom "pkgs" { pkgsBuildBuild = ...; pkgsBuildHost = ...; ... } => { buildBuild = ...; buildHost = ...; ... } ``` ::: */ renameSplicesFrom = prefix: x: { buildBuild = x."${prefix}BuildBuild"; buildHost = x."${prefix}BuildHost"; buildTarget = x."${prefix}BuildTarget"; hostHost = x."${prefix}HostHost"; hostTarget = x."${prefix}HostTarget"; targetTarget = x."${prefix}TargetTarget"; }; /** Adds a prefix to the attribute names of a set of splices. # Inputs `prefix` : The prefix to add to splice attribute names `splices` : A set of splices to be prefixed # Type ``` renameSplicesTo :: String -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.renameSplicesTo` usage example ```nix renameSplicesTo "self" { buildBuild = ...; buildHost = ...; ... } => { selfBuildBuild = ...; selfBuildHost = ...; ... } ``` ::: */ renameSplicesTo = prefix: x: { "${prefix}BuildBuild" = x.buildBuild; "${prefix}BuildHost" = x.buildHost; "${prefix}BuildTarget" = x.buildTarget; "${prefix}HostHost" = x.hostHost; "${prefix}HostTarget" = x.hostTarget; "${prefix}TargetTarget" = x.targetTarget; }; /** Takes a function and applies it pointwise to each splice. # Inputs `f` : Function to apply to each splice value `splices` : A set of splices to transform # Type ``` mapSplices :: (a -> b) -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.mapSplices` usage example ```nix mapSplices (x: x * 10) { buildBuild = 1; buildHost = 2; ... } => { buildBuild = 10; buildHost = 20; ... } ``` ::: */ mapSplices = f: { buildBuild, buildHost, buildTarget, hostHost, hostTarget, targetTarget, }: { buildBuild = f buildBuild; buildHost = f buildHost; buildTarget = f buildTarget; hostHost = f hostHost; hostTarget = f hostTarget; targetTarget = f targetTarget; }; } lib/default.nix +3 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,9 @@ let makeScopeWithSplicing makeScopeWithSplicing' extendMkDerivation renameSplicesFrom renameSplicesTo mapSplices ; inherit (self.derivations) lazyDerivation optionalDrvAttr warnOnInstantiate; inherit (self.generators) mkLuaInline; Loading lib/tests/misc.nix +78 −0 Original line number Diff line number Diff line Loading @@ -4432,4 +4432,82 @@ runTests { expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/default.nix"; }; # Tests for splicing utilities testRenameSplicesFrom = { expr = lib.renameSplicesFrom "pkgs" { pkgsBuildBuild = "dummy-build-build"; pkgsBuildHost = "dummy-build-host"; pkgsBuildTarget = "dummy-build-target"; pkgsHostHost = "dummy-host-host"; pkgsHostTarget = "dummy-host-target"; pkgsTargetTarget = "dummy-target-target"; }; expected = { buildBuild = "dummy-build-build"; buildHost = "dummy-build-host"; buildTarget = "dummy-build-target"; hostHost = "dummy-host-host"; hostTarget = "dummy-host-target"; targetTarget = "dummy-target-target"; }; }; testRenameSplicesTo = { expr = lib.renameSplicesTo "self" { buildBuild = "dummy-build-build"; buildHost = "dummy-build-host"; buildTarget = "dummy-build-target"; hostHost = "dummy-host-host"; hostTarget = "dummy-host-target"; targetTarget = "dummy-target-target"; }; expected = { selfBuildBuild = "dummy-build-build"; selfBuildHost = "dummy-build-host"; selfBuildTarget = "dummy-build-target"; selfHostHost = "dummy-host-host"; selfHostTarget = "dummy-host-target"; selfTargetTarget = "dummy-target-target"; }; }; testMapSplices = { expr = lib.mapSplices (x: x * 10) { buildBuild = 1; buildHost = 2; buildTarget = 3; hostHost = 4; hostTarget = 5; targetTarget = 6; }; expected = { buildBuild = 10; buildHost = 20; buildTarget = 30; hostHost = 40; hostTarget = 50; targetTarget = 60; }; }; testMapSplicesString = { expr = lib.mapSplices (x: "prefix-${x}") { buildBuild = "bb"; buildHost = "bh"; buildTarget = "bt"; hostHost = "hh"; hostTarget = "ht"; targetTarget = "tt"; }; expected = { buildBuild = "prefix-bb"; buildHost = "prefix-bh"; buildTarget = "prefix-bt"; hostHost = "prefix-hh"; hostTarget = "prefix-ht"; targetTarget = "prefix-tt"; }; }; } Loading
lib/customisation.nix +121 −0 Original line number Diff line number Diff line Loading @@ -863,4 +863,125 @@ rec { transformDrv ; }; /** Removes a prefix from the attribute names of a set of splices. # Inputs `prefix` : The prefix to remove from splice attribute names `splices` : A set of splices with prefixed names # Type ``` renameSplicesFrom :: String -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.renameSplicesFrom` usage example ```nix renameSplicesFrom "pkgs" { pkgsBuildBuild = ...; pkgsBuildHost = ...; ... } => { buildBuild = ...; buildHost = ...; ... } ``` ::: */ renameSplicesFrom = prefix: x: { buildBuild = x."${prefix}BuildBuild"; buildHost = x."${prefix}BuildHost"; buildTarget = x."${prefix}BuildTarget"; hostHost = x."${prefix}HostHost"; hostTarget = x."${prefix}HostTarget"; targetTarget = x."${prefix}TargetTarget"; }; /** Adds a prefix to the attribute names of a set of splices. # Inputs `prefix` : The prefix to add to splice attribute names `splices` : A set of splices to be prefixed # Type ``` renameSplicesTo :: String -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.renameSplicesTo` usage example ```nix renameSplicesTo "self" { buildBuild = ...; buildHost = ...; ... } => { selfBuildBuild = ...; selfBuildHost = ...; ... } ``` ::: */ renameSplicesTo = prefix: x: { "${prefix}BuildBuild" = x.buildBuild; "${prefix}BuildHost" = x.buildHost; "${prefix}BuildTarget" = x.buildTarget; "${prefix}HostHost" = x.hostHost; "${prefix}HostTarget" = x.hostTarget; "${prefix}TargetTarget" = x.targetTarget; }; /** Takes a function and applies it pointwise to each splice. # Inputs `f` : Function to apply to each splice value `splices` : A set of splices to transform # Type ``` mapSplices :: (a -> b) -> AttrSet -> AttrSet ``` # Examples :::{.example} ## `lib.customisation.mapSplices` usage example ```nix mapSplices (x: x * 10) { buildBuild = 1; buildHost = 2; ... } => { buildBuild = 10; buildHost = 20; ... } ``` ::: */ mapSplices = f: { buildBuild, buildHost, buildTarget, hostHost, hostTarget, targetTarget, }: { buildBuild = f buildBuild; buildHost = f buildHost; buildTarget = f buildTarget; hostHost = f hostHost; hostTarget = f hostTarget; targetTarget = f targetTarget; }; }
lib/default.nix +3 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,9 @@ let makeScopeWithSplicing makeScopeWithSplicing' extendMkDerivation renameSplicesFrom renameSplicesTo mapSplices ; inherit (self.derivations) lazyDerivation optionalDrvAttr warnOnInstantiate; inherit (self.generators) mkLuaInline; Loading
lib/tests/misc.nix +78 −0 Original line number Diff line number Diff line Loading @@ -4432,4 +4432,82 @@ runTests { expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/default.nix"; }; # Tests for splicing utilities testRenameSplicesFrom = { expr = lib.renameSplicesFrom "pkgs" { pkgsBuildBuild = "dummy-build-build"; pkgsBuildHost = "dummy-build-host"; pkgsBuildTarget = "dummy-build-target"; pkgsHostHost = "dummy-host-host"; pkgsHostTarget = "dummy-host-target"; pkgsTargetTarget = "dummy-target-target"; }; expected = { buildBuild = "dummy-build-build"; buildHost = "dummy-build-host"; buildTarget = "dummy-build-target"; hostHost = "dummy-host-host"; hostTarget = "dummy-host-target"; targetTarget = "dummy-target-target"; }; }; testRenameSplicesTo = { expr = lib.renameSplicesTo "self" { buildBuild = "dummy-build-build"; buildHost = "dummy-build-host"; buildTarget = "dummy-build-target"; hostHost = "dummy-host-host"; hostTarget = "dummy-host-target"; targetTarget = "dummy-target-target"; }; expected = { selfBuildBuild = "dummy-build-build"; selfBuildHost = "dummy-build-host"; selfBuildTarget = "dummy-build-target"; selfHostHost = "dummy-host-host"; selfHostTarget = "dummy-host-target"; selfTargetTarget = "dummy-target-target"; }; }; testMapSplices = { expr = lib.mapSplices (x: x * 10) { buildBuild = 1; buildHost = 2; buildTarget = 3; hostHost = 4; hostTarget = 5; targetTarget = 6; }; expected = { buildBuild = 10; buildHost = 20; buildTarget = 30; hostHost = 40; hostTarget = 50; targetTarget = 60; }; }; testMapSplicesString = { expr = lib.mapSplices (x: "prefix-${x}") { buildBuild = "bb"; buildHost = "bh"; buildTarget = "bt"; hostHost = "hh"; hostTarget = "ht"; targetTarget = "tt"; }; expected = { buildBuild = "prefix-bb"; buildHost = "prefix-bh"; buildTarget = "prefix-bt"; hostHost = "prefix-hh"; hostTarget = "prefix-ht"; targetTarget = "prefix-tt"; }; }; }