diff --git a/tidepool/src/lib/packages.nix b/tidepool/src/lib/packages.nix index fafb17d..af91689 100644 --- a/tidepool/src/lib/packages.nix +++ b/tidepool/src/lib/packages.nix @@ -243,11 +243,22 @@ in in outputs; + WELL_KNOWN_ALIASES = [ + # NOTE: When adding a version alias here, update lib.types.alias and lib.types.platforms' alias sub-option + "stable" + "latest" + ]; + resolve = alias: - if alias ? versions then - alias.versions.${config.preferences.packages.version} - or (alias.versions.${lib.packages.getLatest alias}) + let + prefered = config.preferences.packages.version; + isWellKnown = builtins.elem prefered lib.packages.WELL_KNOWN_ALIASES; + in + if isWellKnown && alias ? ${prefered} then + alias.${prefered} + else if alias ? versions then + alias.versions.${prefered} or (alias.versions.${lib.packages.getLatest alias}) else alias; diff --git a/tidepool/src/lib/types.nix b/tidepool/src/lib/types.nix index a34b42d..9ca3b01 100644 --- a/tidepool/src/lib/types.nix +++ b/tidepool/src/lib/types.nix @@ -307,6 +307,7 @@ in type = lib.types.artifact; default.value = null; }; + # NOTE: When adding a version alias here, update lib.packages.WELL_KNOWN_ALIASES versions = lib.options.create { description = "Available versions of the artifact."; type = lib.types.attrs.of lib.types.artifact; @@ -401,6 +402,8 @@ in if config.versions == { } then null else config.versions.${lib.packages.getLatest config}; }; + # NOTE: When adding a version alias here, update lib.packages.WELL_KNOWN_ALIASES + versions = lib.options.create { description = "Available versions of the package."; type = lib.types.attrs.of lib.types.package; diff --git a/tidepool/src/packages/default.nix b/tidepool/src/packages/default.nix index f92eeaf..e30188b 100644 --- a/tidepool/src/packages/default.nix +++ b/tidepool/src/packages/default.nix @@ -37,10 +37,7 @@ in preferences.packages = { version = lib.options.create { description = "The preferred package version when using aliases."; - type = lib.types.enum [ - "latest" - "stable" - ]; + type = lib.types.enum lib.packages.WELL_KNOWN_ALIASES; default.value = "latest"; };