nix-community.nixvim/modules/dependencies.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

153 lines
4.1 KiB
Nix
Raw Normal View History

2025-04-06 17:17:51 +02:00
{
lib,
config,
pkgs,
...
}:
let
inherit (lib) types;
2025-04-06 17:17:51 +02:00
cfg = config.dependencies;
2025-04-06 17:17:51 +02:00
mkDependencyOption = name: properties: {
enable = lib.mkEnableOption "Add ${name} to dependencies.";
package =
lib.mkPackageOption pkgs name properties
# Handle example manually so that we can embed the original attr-path within
# the literalExpression object. This simplifies testing the examples.
// lib.optionalAttrs (builtins.isList properties.example) {
example = {
_type = "literalExpression";
text = "pkgs.${lib.showAttrPath properties.example}";
path = properties.example;
};
}
// lib.optionalAttrs (literalExpressionType.check properties.example) {
inherit (properties) example;
};
2025-04-06 17:17:51 +02:00
};
attrPathType = with types; coercedTo str lib.toList (listOf str);
literalExpressionType = lib.types.mkOptionType {
name = "literal-expression";
description = "literal expression";
descriptionClass = "noun";
merge = lib.options.mergeEqualOption;
check = v: v ? _type && (v._type == "literalExpression" || v._type == "literalMD");
};
2025-04-06 17:17:51 +02:00
in
{
options = {
__depPackages = lib.mkOption {
type = types.attrsOf (
types.submodule {
options = {
default = lib.mkOption {
type = attrPathType;
description = ''
Attribute path for this dependency's default package, relative to `pkgs`.
'';
example = "git";
};
example = lib.mkOption {
type = types.nullOr (types.either attrPathType literalExpressionType);
description = ''
Attribute path for an alternative package that provides dependency, relative to `pkgs`.
'';
example = "gitMinimal";
default = null;
};
};
}
);
description = ''
A set of dependency packages, used internally to construct the `dependencies.<name>` options.
'';
default = { };
example = {
curl.default = "curl";
git = {
default = "git";
example = "gitMinimal";
};
};
internal = true;
visible = false;
};
dependencies = lib.mapAttrs mkDependencyOption config.__depPackages;
};
2025-04-06 17:17:51 +02:00
config = {
extraPackages = lib.pipe cfg [
builtins.attrValues
(builtins.filter (p: p.enable))
(builtins.map (p: p.package))
];
__depPackages = {
bat.default = "bat";
codeium.default = "codeium";
coreutils = {
default = "coreutils";
example = "uutils-coreutils";
};
cornelis.default = "cornelis";
ctags.default = "ctags";
curl.default = "curl";
direnv.default = "direnv";
distant.default = "distant";
fish.default = "fish";
flutter.default = "flutter";
fzf = {
default = "fzf";
example = "skim";
};
gcc.default = "gcc";
gh.default = "gh";
git = {
default = "git";
example = "gitMinimal";
};
glow.default = "glow";
go.default = "go";
godot.default = "godot_4";
gzip.default = "gzip";
lazygit.default = "lazygit";
lean.default = "lean4";
ledger.default = "ledger";
llm-ls.default = "llm-ls";
manix.default = "manix";
nodejs = {
default = "nodejs";
example = "nodejs_22";
};
plantuml.default = "plantuml";
ripgrep.default = "ripgrep";
rust-analyzer.default = "rust-analyzer";
sd.default = "sd";
sed.default = "gnused";
texpresso.default = "texpresso";
tinymist.default = "tinymist";
tmux.default = "tmux";
tree-sitter.default = "tree-sitter";
typst.default = "typst";
ueberzug.default = "ueberzugpp";
util-linux.default = "util-linux";
websocat.default = "websocat";
wezterm.default = "wezterm";
which.default = "which";
xxd.default = [
"unixtools"
"xxd"
];
yazi.default = "yazi";
yq.default = "yq";
zk.default = "zk";
};
2025-04-06 17:17:51 +02:00
};
}