xin/users/default.nix

82 lines
2.0 KiB
Nix
Raw Normal View History

2023-09-12 08:44:05 -06:00
{ config
, lib
, pkgs
, ...
2023-07-11 09:12:50 -06:00
}:
with lib; let
2022-08-25 12:21:35 -06:00
userBase = {
shell = pkgs.zsh;
2023-07-11 09:12:50 -06:00
openssh.authorizedKeys.keys =
config.myconf.hwPubKeys
++ config.myconf.managementPubKeys;
2022-08-25 12:21:35 -06:00
};
2023-09-12 08:44:05 -06:00
in
{
2022-08-25 12:21:35 -06:00
options = {
defaultUsers = {
enable = mkOption {
description = "Enable regular set of users";
2024-05-27 21:12:29 -06:00
default = if (builtins.hasAttr "${config.networking.hostName}" config.xin-secrets) then true else false;
2022-08-25 12:21:35 -06:00
example = true;
type = lib.types.bool;
};
};
};
config =
let
2024-03-22 08:21:55 -06:00
inherit (config.networking) hostName;
hasQbit =
2024-05-27 21:12:29 -06:00
if (builtins.hasAttr hostName config.xin-secrets) &&
(builtins.hasAttr "qbit" config.xin-secrets.${hostName}.user_passwords) then true else false;
in
mkIf config.defaultUsers.enable {
sops =
2024-05-27 21:12:29 -06:00
let
secretAttrs = config.xin-secrets.${hostName}.user_passwords;
in
{
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
secrets = mkMerge [
{
root_hash =
{
name = "hash";
2024-03-22 08:21:55 -06:00
sopsFile = secretAttrs.root;
owner = "root";
mode = "400";
neededForUsers = true;
};
}
(mkIf hasQbit {
qbit_hash = {
2024-03-22 08:21:55 -06:00
sopsFile = secretAttrs.qbit;
owner = "root";
mode = "400";
neededForUsers = true;
};
})
];
};
users = {
mutableUsers = false;
users = mkMerge [
{
root = userBase // {
hashedPasswordFile = config.sops.secrets.root_hash.path;
};
}
(mkIf hasQbit {
qbit = userBase // {
isNormalUser = true;
description = "Aaron Bieber";
home = "/home/qbit";
extraGroups = [ "wheel" ];
hashedPasswordFile = config.sops.secrets.qbit_hash.path;
};
})
];
};
};
2022-08-25 12:21:35 -06:00
}