feat(nix): add forAllUsers' and docstrings to lib

Adds forAllUsers' function and docstrings to nix lib.
This commit is contained in:
Mohammad Rafiq 2025-07-07 08:41:00 +08:00
parent 46cf93f69b
commit 07413c4ac0
No known key found for this signature in database
2 changed files with 88 additions and 3 deletions

View file

@ -5,7 +5,92 @@ let
in in
{ {
flake.lib = { flake.lib = {
/**
Remove the top level attributes from an attribute set and return the merged attributes.
# Inputs
`attrset`
: An attribute set to flatten.
# Type
```
flattenAttrs :: AttrSet -> AttrSet
```
# Examples
:::{.example}
## `flattenAttrs` usage example
```nix
flattenAttrs { x = { a = 1; b = 2; }; y = { c = 3; d = 4; }; }
=> { a = 1; b = 2; c = 3; d = 4; }
```
*/
flattenAttrs = attrset: concatMapAttrs (_: v: v) attrset; flattenAttrs = attrset: concatMapAttrs (_: v: v) attrset;
forAllUsers = f: mapAttrs f cfg.manifest.users;
/**
Return an attribute set for use with a option that needs to be used for all users.
# Inputs
`attrset`
: An attribute set to apply to all the users.
# Type
```
forAllUsers :: AttrSet -> AttrSet
```
# Examples
:::{.example}
## `forAllUsers` usage example
```nix
flake.manifest.users.rafiq = { ... };
flake.modules.nixos.default.users = forAllUsers {
isNormalUser = true;
};
=> flake.modules.nixos.default.users.rafiq.isNormalUser = true;
```
:::
*/
forAllUsers = attrset: mapAttrs (_: _: attrset) cfg.manifest.users;
/**
Like forAllUsers, but passes in the name and value from the manifest.
# Inputs
`f`
: A function that takes an attribute name and its value, and returns the new value for the attribute.
# Type
```
forAllUsers' :: (String -> Any -> Any) -> AttrSet
```
# Examples
:::{.example}
## `forAllUsers'` usage example
```nix
flake.manifest.users.rafiq = { ... };
flake.modules.homeManager.users = forAllUsers' (name: value: {
home.username = name;
});
=> flake.modules.homeManager.default.users.rafiq.home.username = "rafiq";
```
:::
*/
forAllUsers' = f: mapAttrs f cfg.manifest.users;
}; };
} }

View file

@ -1,7 +1,7 @@
{ config, lib, ... }: { config, lib, ... }:
let let
cfg = config.flake; cfg = config.flake;
inherit (config.flake.lib) forAllUsers flattenAttrs; inherit (config.flake.lib) forAllUsers' flattenAttrs;
inherit (lib.attrsets) filterAttrs; inherit (lib.attrsets) filterAttrs;
owner = flattenAttrs (filterAttrs (_: v: (v.primary or false)) cfg.manifest.users); owner = flattenAttrs (filterAttrs (_: v: (v.primary or false)) cfg.manifest.users);
in in
@ -27,7 +27,7 @@ in
openssh.authorizedKeys.keys = [ owner.pubkey ]; openssh.authorizedKeys.keys = [ owner.pubkey ];
}; };
}; };
home-manager.users = forAllUsers ( home-manager.users = forAllUsers' (
name: _: { name: _: {
#TODO: move into nixos/darwin config - should not apply to homeConfigurations #TODO: move into nixos/darwin config - should not apply to homeConfigurations
home.username = name; home.username = name;