nix-conf/home/options/noctalia.nix
2026-01-20 13:41:53 +08:00

59 lines
1.1 KiB
Nix
Executable file

{ config, lib, ... }:
let
inherit (builtins)
elem
isList
filter
listToAttrs
concatMap
attrNames
isAttrs
;
inherit (lib)
mkOption
types
nameValuePair
;
filterAttrsRecursive' =
pred: set:
# Attrs
if isAttrs set then
listToAttrs (
concatMap (
name:
let
v = set.${name};
in
if pred name v then
[
(nameValuePair name (filterAttrsRecursive' pred v))
]
else
[ ]
) (attrNames set)
)
# List
else if isList set then
filter (x: pred "" x) (map (x: filterAttrsRecursive' pred x) set)
else
set;
cfg = config.programs.noctalia-shell;
in
{
options.programs.noctalia-shell = {
filteredIds = mkOption {
type = with types; listOf str;
default = [ ];
};
settings = mkOption {
apply =
v:
filterAttrsRecursive' (
name: value: if value ? id then !(elem value.id cfg.filteredIds) else true
) v;
};
};
}