mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 16:57:55 +00:00
6a0c115432
Though, it's limited compared to flakes. I supposed that's better than nothing.
50 lines
1.7 KiB
Nix
50 lines
1.7 KiB
Nix
# This is just a library intended solely for this flake.
|
|
# It is expected to use the nixpkgs library with `lib/default.nix`.
|
|
{ lib }:
|
|
|
|
rec {
|
|
mapHomeManagerUser = user: settings:
|
|
let
|
|
defaultUserConfig = {
|
|
extraGroups = [ "wheel" ];
|
|
createHome = true;
|
|
home = "/home/${user}";
|
|
};
|
|
# TODO: Effectively override the option.
|
|
# We assume all users set with this module are normal users.
|
|
absoluteOverrides = { isNormalUser = true; };
|
|
in {
|
|
home-manager.users."${user}" = import (lib.getUser "home-manager" user);
|
|
users.users."${user}" = defaultUserConfig // settings // absoluteOverrides;
|
|
};
|
|
|
|
getSecret = path: ../secrets/${path};
|
|
|
|
getUsers = type: users:
|
|
let
|
|
userModules = lib.filesToAttr ../users/${type};
|
|
invalidUsernames = [ "config" "modules" ];
|
|
|
|
users' = lib.filterAttrs (n: _: !lib.elem n invalidUsernames && lib.elem n users) userModules;
|
|
userList = lib.attrNames users';
|
|
|
|
nonExistentUsers = lib.filter (name: !lib.elem name userList) users;
|
|
in lib.trivial.throwIfNot ((lib.length nonExistentUsers) == 0)
|
|
"there are no users ${lib.concatMapStringsSep ", " (u: "'${u}'") nonExistentUsers} from ${type}"
|
|
(r: r) users';
|
|
|
|
getUser = type: user:
|
|
lib.getAttr user (getUsers type [ user ]);
|
|
|
|
# Import modules with a set blocklist.
|
|
importModules = let
|
|
blocklist = [
|
|
# The modules under this attribute are often incomplete and needing
|
|
# very specific requirements that is 99% going to be absent from the
|
|
# outside so we're not going to export it.
|
|
"tasks"
|
|
];
|
|
in attrs:
|
|
lib.filterAttrs (n: v: !lib.elem n blocklist) (lib.mapAttrsRecursive (_: path: import path) attrs);
|
|
}
|