Working refactored (on a test server)

This commit is contained in:
Root
2021-02-25 20:45:50 +00:00
parent 372cf5fc6a
commit 42e01b0840
31 changed files with 400 additions and 194 deletions
+38 -28
View File
@@ -2,8 +2,6 @@
with lib;
let
cfg = config.fudo.users;
systemUserOpts = { username, ... }: {
options = {
username = mkOption {
@@ -33,7 +31,7 @@ let
default = username;
};
uidNumber = mkOption {
uid = mkOption {
type = types.int;
description = "Unique UID number for the user.";
};
@@ -86,8 +84,9 @@ let
};
home-directory = mkOption {
type = types.str;
type = with types; nullOr str;
description = "Default home directory for the given user.";
default = null;
};
};
};
@@ -111,13 +110,19 @@ let
description = "A list of users who are members of the current group.";
};
gidNumber = mkOption {
gid = mkOption {
type = types.int;
description = "GID number of the group.";
};
};
};
list-includes = list: el: isNull (findFirst (this: this == el) null list);
filterExistingUsers = users: group-members:
let user-list = attrNames users;
in filter (username: list-includes user-list username) group-members;
in {
options.fudo = {
users = mkOption {
@@ -140,27 +145,28 @@ in {
};
config = let
local-host = config.fudo.common.hostname;
local-domain = config.fudo.common.domain;
local-host = config.instance.hostname;
local-domain = config.fudo.hosts.${local-host}.domain;
local-site = config.fudo.hosts.${local-host}.site;
local-user-list = config.fudo.hosts."${local-host}".local-users;
host-user-list = config.fudo.hosts."${local-host}".local-users;
domain-user-list = config.fudo.domains."${local-domain}".local-users;
local-users = getAttrs (local-user-list ++ domain-user-list) cfg.users;
local-users = getAttrs (host-user-list ++ domain-user-list) config.fudo.users;
local-group-list = config.fudo.hosts."${local-host}".local-groups;
host-admin-list = config.fudo.hosts."${local-host}".local-admins;
domain-admin-list = config.fudo.domains."${local-domain}".local-admins;
site-admin-list = config.fudo.sites."${local-site}".local-admins;
local-admins = host-admin-list ++ domain-admin-list ++ site-admin-list;
host-group-list = config.fudo.hosts."${local-host}".local-groups;
domain-group-list = config.fudo.domains."${local-domain}".local-groups;
local-groups = getAttrs (local-group-list ++ domain-group-list) cfg.groups;
site-group-list = config.fudo.sites."${local-site}".local-groups;
local-groups = getAttrs (host-group-list ++ domain-group-list ++ site-group-list) config.fudo.groups;
in {
fudo.auth.ldap = let
fudo.auth.ldap-server = let
ldapUsers = (filterAttrs
(username: userOpts: userOpts.ldap-hashed-password != null)) cfg.users;
list-includes = list: el: isNull (findFirst (this: this == el) list null);
filterExistingUsers = users: group-members:
let user-list = attrNames users;
in filter (username: list-includes user-list username) users;
(username: userOpts: userOpts.ldap-hashed-password != null)) config.fudo.users;
in {
users = mapAttrs (username: userOpts: {
@@ -174,31 +180,35 @@ in {
gid = groupOpts.gid-number;
description = groupOpts.description;
members = filterExistingUsers ldapUsers groupOpts.members;
}) cfg.groups;
}) config.fudo.groups;
system-users = mapAttrs (username: userOpts: {
description = userOpts.description;
hashed-password = userOpts.ldap-hashed-passwd;
}) cfg.system-users;
}) config.fudo.system-users;
};
users = {
users = mapAttrs (username: userOpts: {
isNormalUser = true;
uid = userOpts.uidNumber;
uid = userOpts.uid;
createHome = true;
description = userOpts.common-name;
group = userOpts.primary-group;
home = userOpts.home;
home = if (userOpts.home-directory != null) then userOpts.home-directory else "/home/${userOpts.primary-group}/${username}";
hashedPassword = userOpts.login-hashed-passwd;
openssh.authorizedKeys.keys = userOpts.ssh-authorized-keys;
}) local-users;
groups = mapAttrs (groupname: groupOpts: {
gid = groupOpts.gidNumber;
description = groupOpts.description;
members = filterExistingUsers localUsers groupOpts.members;
}) local-groups;
groups = (mapAttrs (groupname: groupOpts: {
gid = groupOpts.gid;
members = filterExistingUsers local-users groupOpts.members;
}) local-groups) //
{
wheel = {
members = local-admins;
};
};
};
home-manager.users = let