modularize users

and other stuff
This commit is contained in:
Fabian Montero 2024-12-02 19:25:34 -06:00
parent 1add39aae0
commit 119c0ab771
Signed by: fabian
GPG key ID: 1FFAC35E1798174F
6 changed files with 128 additions and 55 deletions

View file

@ -11,5 +11,6 @@
./graphics.nix ./graphics.nix
./virtualisation.nix ./virtualisation.nix
./android.nix ./android.nix
./users.nix
]; ];
} }

75
sys/modules/users.nix Normal file
View file

@ -0,0 +1,75 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.sys.users;
userType = types.submodule {
options = {
enable = mkEnableOption "user settings";
unixId = mkOption {
# gid and uid are always the same
type = types.int;
};
admin = mkOption {
type = types.bool;
default = false;
};
sshKeyPublicFile = mkOption {
type = types.listOf types.path;
default = [];
};
};
};
in {
options.local.sys.users = mkOption {
type = types.attrsOf userType;
default = {};
};
config = {
local.sys.users = {
fabian = {
unixId = mkDefault 1000;
admin = true;
};
vanessa = {
unixId = mkDefault 1001;
admin = false;
};
soto = {
unixId = mkDefault 1010;
admin = false;
};
diaz = {
unixId = mkDefault 1011;
admin = false;
};
};
users = let
enabledUsers = filterAttrs (k: v: v.enable) cfg;
in {
groups =
mapAttrs (k: v: {
gid = v.unixId;
})
enabledUsers;
users =
mapAttrs (k: v: {
isNormalUser = true;
uid = v.unixId;
group = k;
shell = pkgs.zsh;
extraGroups =
["users" "networkmanager"]
++ optionals (v.admin) ["wheel" "libvirtd" "dialout"];
openssh.authorizedKeys.keyFiles = v.sshKeyPublicFile;
})
enabledUsers;
};
};
}

View file

@ -1,14 +1,13 @@
# Edet this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ {
config, config,
pkgs, pkgs,
lib, lib,
flakes,
... ...
}: { }: {
imports = [ imports = [
# Include the results of the hardware scan. flakes.home-manager.nixosModules.home-manager
flakes.impermanence.nixosModule
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
@ -20,6 +19,22 @@
graphics.enable = true; graphics.enable = true;
virtualisation.enable = true; virtualisation.enable = true;
androidSupport.enable = true; androidSupport.enable = true;
users = {
fabian = {
enable = true;
unixId = 1002;
};
vanessa.enable = true;
};
};
networking = {
hostName = "posixlycorrect";
networkmanager.enable = true;
useDHCP = false; # The global useDHCP flag is deprecated, therefore explicitly set to false here.
interfaces.enp7s0.useDHCP = true; # Per-interface useDHCP will be mandatory in the future, so this generated config
interfaces.wlp6s0.useDHCP = true; # replicates the default behaviour.
}; };
boot = { boot = {
@ -31,31 +46,8 @@
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
}; };
networking = {
hostName = "posixlycorrect";
networkmanager.enable = true;
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
# Per-interface useDHCP will be mandatory in the future, so this generated config
# replicates the default behaviour.
useDHCP = false;
interfaces.enp7s0.useDHCP = true;
interfaces.wlp6s0.useDHCP = true;
};
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
users = {
users.fabian = {
isNormalUser = true;
uid = 1002; # nunca cambiar mi ID de usuario
group = "fabian";
shell = pkgs.zsh;
extraGroups = ["users" "wheel" "networkmanager" "dialout" "libvirtd"];
};
groups.fabian.gid = 1002;
};
time.timeZone = "America/Costa_Rica"; time.timeZone = "America/Costa_Rica";
} }

View file

@ -2,6 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
flakes,
modulesPath, modulesPath,
... ...
}: let }: let
@ -12,7 +13,7 @@
}; };
in { in {
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") flakes.nixpkgs.nixosModules.notDetected
]; ];
boot.initrd = { boot.initrd = {

View file

@ -1,8 +1,9 @@
{ {
config, config,
pkgs,
lib, lib,
pkgs,
flakes, flakes,
modulesPath,
... ...
}: }:
with lib; { with lib; {
@ -10,27 +11,21 @@ with lib; {
flakes.vpsadminos.nixosConfigurations.container flakes.vpsadminos.nixosConfigurations.container
flakes.home-manager.nixosModules.home-manager flakes.home-manager.nixosModules.home-manager
flakes.impermanence.nixosModule flakes.impermanence.nixosModule
./hardware-configuration.nix
./srv ./srv
]; ];
local.sys = { local.sys = {
baseline.enable = true; baseline.enable = true;
users.fabian = {
enable = true;
sshKeyPublicFile = [ public_files/pki/fabian.ssh ];
};
}; };
networking.hostName = "vps"; networking.hostName = "vps";
users = {
users.fabian = {
isNormalUser = true;
uid = 1000;
group = "fabian";
shell = pkgs.zsh;
extraGroups = ["users" "wheel" "networkmanager" "dialout" "libvirtd"];
openssh.authorizedKeys.keyFiles = [public_files/pki/fabian.ssh];
};
groups.fabian.gid = 1000;
};
services.openssh = { services.openssh = {
settings.PasswordAuthentication = false; settings.PasswordAuthentication = false;
}; };
@ -54,19 +49,5 @@ with lib; {
DefaultTimeoutStartSec=900s DefaultTimeoutStartSec=900s
''; '';
fileSystems = {
"/mnt/export2008" = {
device = "172.16.129.19:/nas/5876";
fsType = "nfs";
options = ["nofail" "noatime"];
};
"/mnt/export2011" = {
device = "172.16.129.151:/nas/5876/bepasty";
fsType = "nfs";
options = ["nofail" "noatime" "noexec"];
};
};
time.timeZone = "Europe/Amsterdam"; time.timeZone = "Europe/Amsterdam";
} }

View file

@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
flakes,
modulesPath,
...
}: let
in {
fileSystems = {
"/mnt/export2008" = {
device = "172.16.129.19:/nas/5876";
fsType = "nfs";
options = ["nofail" "noatime"];
};
"/mnt/export2011" = {
device = "172.16.129.151:/nas/5876/bepasty";
fsType = "nfs";
options = ["nofail" "noatime" "noexec"];
};
};
}