diff options
author | Naïm Favier <n@monade.li> | 2023-06-27 11:59:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-27 11:59:06 +0200 |
commit | 3ef988ce97d3a05973eccf41c8566cdc53636771 (patch) | |
tree | 7c7d1454fcd443529ddcf7ec19f3fd397071b70f /lib | |
parent | b5fcbad5fb9cb47f6947ad42c9fa4cf2119dc562 (diff) | |
parent | 4bdff8cbbb3ff52fc26cc74d1526617aac6ba22a (diff) |
Merge pull request #237259 from ncfavier/extraDependencies-path
nixos/top-level: change extraDependencies from packages to paths
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/tests/modules.sh | 10 | ||||
-rw-r--r-- | lib/tests/modules/types.nix | 24 | ||||
-rw-r--r-- | lib/tests/release.nix | 3 | ||||
-rw-r--r-- | lib/types.nix | 9 |
4 files changed, 43 insertions, 3 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index a60228198fd7c..c81febb4156fb 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -63,6 +63,16 @@ checkConfigOutput '^"one two"$' config.result ./shorthand-meta.nix checkConfigOutput '^true$' config.result ./test-mergeAttrDefinitionsWithPrio.nix +# types.pathInStore +checkConfigOutput '".*/store/5lz9p8xhf89kb1c1kk6jxrzskaiygnlh-bash-5.2-p15.drv"' config.pathInStore.ok1 ./types.nix +checkConfigOutput '".*/store/xfb3ykw9r5hpayd05sr0cizwadzq1d8q-bash-5.2-p15"' config.pathInStore.ok2 ./types.nix +checkConfigOutput '".*/store/xfb3ykw9r5hpayd05sr0cizwadzq1d8q-bash-5.2-p15/bin/bash"' config.pathInStore.ok3 ./types.nix +checkConfigError 'A definition for option .* is not of type .path in the Nix store.. Definition values:\n\s*- In .*: ""' config.pathInStore.bad1 ./types.nix +checkConfigError 'A definition for option .* is not of type .path in the Nix store.. Definition values:\n\s*- In .*: ".*/store"' config.pathInStore.bad2 ./types.nix +checkConfigError 'A definition for option .* is not of type .path in the Nix store.. Definition values:\n\s*- In .*: ".*/store/"' config.pathInStore.bad3 ./types.nix +checkConfigError 'A definition for option .* is not of type .path in the Nix store.. Definition values:\n\s*- In .*: ".*/store/.links"' config.pathInStore.bad4 ./types.nix +checkConfigError 'A definition for option .* is not of type .path in the Nix store.. Definition values:\n\s*- In .*: "/foo/bar"' config.pathInStore.bad5 ./types.nix + # Check boolean option. checkConfigOutput '^false$' config.enable ./declare-enable.nix checkConfigError 'The option .* does not exist. Definition values:\n\s*- In .*: true' config.enable ./define-enable.nix diff --git a/lib/tests/modules/types.nix b/lib/tests/modules/types.nix new file mode 100644 index 0000000000000..576db6b5b9ef9 --- /dev/null +++ b/lib/tests/modules/types.nix @@ -0,0 +1,24 @@ +{ lib, ... }: +let + inherit (builtins) + storeDir; + inherit (lib) + types + mkOption + ; +in +{ + options = { + pathInStore = mkOption { type = types.lazyAttrsOf types.pathInStore; }; + }; + config = { + pathInStore.ok1 = "${storeDir}/5lz9p8xhf89kb1c1kk6jxrzskaiygnlh-bash-5.2-p15.drv"; + pathInStore.ok2 = "${storeDir}/xfb3ykw9r5hpayd05sr0cizwadzq1d8q-bash-5.2-p15"; + pathInStore.ok3 = "${storeDir}/xfb3ykw9r5hpayd05sr0cizwadzq1d8q-bash-5.2-p15/bin/bash"; + pathInStore.bad1 = ""; + pathInStore.bad2 = "${storeDir}"; + pathInStore.bad3 = "${storeDir}/"; + pathInStore.bad4 = "${storeDir}/.links"; # technically true, but not reasonable + pathInStore.bad5 = "/foo/bar"; + }; +} diff --git a/lib/tests/release.nix b/lib/tests/release.nix index 5bade7112f19e..805f7a7e95d6e 100644 --- a/lib/tests/release.nix +++ b/lib/tests/release.nix @@ -38,9 +38,6 @@ let export PAGER=cat cacheDir=$TEST_ROOT/binary-cache - mkdir -p $NIX_CONF_DIR - echo "experimental-features = nix-command" >> $NIX_CONF_DIR/nix.conf - nix-store --init cp -r ${../.} lib diff --git a/lib/types.nix b/lib/types.nix index d27d5750dfab1..ddd37f260c9a6 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -461,6 +461,7 @@ rec { # - strings with context, e.g. "${pkgs.foo}" or (toString pkgs.foo) # - hardcoded store path literals (/nix/store/hash-foo) or strings without context # ("/nix/store/hash-foo"). These get a context added to them using builtins.storePath. + # If you don't need a *top-level* store path, consider using pathInStore instead. package = mkOptionType { name = "package"; descriptionClass = "noun"; @@ -491,6 +492,14 @@ rec { merge = mergeEqualOption; }; + pathInStore = mkOptionType { + name = "pathInStore"; + description = "path in the Nix store"; + descriptionClass = "noun"; + check = x: isStringLike x && builtins.match "${builtins.storeDir}/[^.].*" (toString x) != null; + merge = mergeEqualOption; + }; + listOf = elemType: mkOptionType rec { name = "listOf"; description = "list of ${optionDescriptionPhrase (class: class == "noun" || class == "composite") elemType}"; |