feat(lib): add admin user using custom lib function
This commit is contained in:
parent
da6fa1b9df
commit
5d24a11990
2 changed files with 71 additions and 1 deletions
|
@ -1,8 +1,16 @@
|
|||
{ lib, inputs, ... }:
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib.options) mkOption;
|
||||
inherit (lib.types) path lazyAttrsOf raw;
|
||||
inherit (inputs.flake-parts.lib) mkSubmoduleOptions;
|
||||
inherit (cfg.lib.attrsets) firstAttrNameMatching;
|
||||
cfg = config.flake;
|
||||
username = firstAttrNameMatching (_: v: v.primary or false) cfg.manifest.users;
|
||||
in
|
||||
{
|
||||
options.flake = mkSubmoduleOptions {
|
||||
|
@ -14,5 +22,13 @@ in
|
|||
type = path;
|
||||
default = "";
|
||||
};
|
||||
admin = mkOption {
|
||||
type = lazyAttrsOf raw;
|
||||
default = { };
|
||||
};
|
||||
};
|
||||
|
||||
config.flake.admin = cfg.manifest.users.${username} // {
|
||||
inherit username;
|
||||
};
|
||||
}
|
||||
|
|
54
nix/lib/attrsets.nix
Normal file
54
nix/lib/attrsets.nix
Normal file
|
@ -0,0 +1,54 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (builtins) attrNames head;
|
||||
inherit (lib.trivial) pipe;
|
||||
inherit (lib.attrsets) filterAttrs;
|
||||
in
|
||||
{
|
||||
flake.lib.attrsets = {
|
||||
/**
|
||||
`firstAttrNameMatching pred set` filters an attribute set `set` based on a predicate `pred`
|
||||
and returns the *first* attribute name that satisfies the predicate.
|
||||
|
||||
# Example
|
||||
|
||||
```nix
|
||||
let
|
||||
mySet = {
|
||||
a = { value = 1; };
|
||||
b = { value = 2; };
|
||||
c = { value = 3; };
|
||||
};
|
||||
|
||||
isGreaterThanOne = name: value: value.value > 1;
|
||||
|
||||
result = firstAttrNameMatching isGreaterThanOne mySet;
|
||||
|
||||
in
|
||||
result
|
||||
# Output: "b"
|
||||
```
|
||||
|
||||
# Type
|
||||
|
||||
```
|
||||
firstAttrNameMatching :: (String -> Any -> Bool) -> AttrSet -> String
|
||||
```
|
||||
|
||||
# Arguments
|
||||
|
||||
pred
|
||||
: A function that takes an attribute name and its value and returns a boolean.
|
||||
|
||||
set
|
||||
: The attribute set to filter.
|
||||
*/
|
||||
firstAttrNameMatching =
|
||||
pred: set:
|
||||
pipe set [
|
||||
(filterAttrs pred)
|
||||
attrNames
|
||||
head
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue