mirror of
https://github.com/nix-community/nixvim.git
synced 2026-08-24 10:14:03 -05:00
modules/dependencies: add packageFallback option
This commit is contained in:
@@ -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 =
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user