modules/dependencies: add packageFallback option
This commit is contained in:
parent
d354487c46
commit
6acc964664
2 changed files with 73 additions and 5 deletions
|
|
@ -30,6 +30,16 @@ let
|
|||
// lib.optionalAttrs (literalExpressionType.check properties.example) {
|
||||
inherit (properties) example;
|
||||
};
|
||||
|
||||
packageFallback = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
When enabled, the ${name} package will be added to the end of the `PATH` _(suffix)_ instead of the beginning _(prefix)_.
|
||||
|
||||
This can be useful if you want local versions (e.g. from a devshell) to override the Nixvim version.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# Motivation:
|
||||
|
|
@ -49,6 +59,17 @@ let
|
|||
merge = lib.options.mergeEqualOption;
|
||||
check = v: v ? _type && (v._type == "literalExpression" || v._type == "literalMD");
|
||||
};
|
||||
|
||||
enabledPackages = lib.pipe cfg [
|
||||
builtins.attrValues
|
||||
(lib.filter (p: p.enable))
|
||||
(lib.partition (p: p.packageFallback))
|
||||
(lib.mapAttrs (_: map (p: p.package)))
|
||||
(parts: {
|
||||
prefix = parts.wrong;
|
||||
suffix = parts.right;
|
||||
})
|
||||
];
|
||||
in
|
||||
{
|
||||
options = {
|
||||
|
|
@ -94,11 +115,8 @@ in
|
|||
};
|
||||
|
||||
config = {
|
||||
extraPackages = lib.pipe cfg [
|
||||
builtins.attrValues
|
||||
(builtins.filter (p: p.enable))
|
||||
(map (p: p.package))
|
||||
];
|
||||
extraPackages = enabledPackages.prefix;
|
||||
extraPackagesAfter = enabledPackages.suffix;
|
||||
|
||||
__depPackages = {
|
||||
bat.default = "bat";
|
||||
|
|
|
|||
|
|
@ -70,6 +70,56 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
package-fallback-false =
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
dependencies.git = {
|
||||
enable = true;
|
||||
packageFallback = false;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = lib.elem pkgs.git config.extraPackages;
|
||||
message = "Expected git to be in extraPackages.";
|
||||
}
|
||||
{
|
||||
assertion = !lib.elem pkgs.git config.extraPackagesAfter;
|
||||
message = "Expected git not to be in extraPackagesAfter.";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
package-fallback-true =
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
dependencies.git = {
|
||||
enable = true;
|
||||
packageFallback = true;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = !lib.elem pkgs.git config.extraPackages;
|
||||
message = "Expected git not to be in extraPackages.";
|
||||
}
|
||||
{
|
||||
assertion = lib.elem pkgs.git config.extraPackagesAfter;
|
||||
message = "Expected git to be in extraPackagesAfter.";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# Integration test for `lib.nixvim.deprecation.mkRemovedPackageOptionModule`
|
||||
removed-package-options =
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue