diff options
Diffstat (limited to 'sys/seat/default.nix')
| -rw-r--r-- | sys/seat/default.nix | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/sys/seat/default.nix b/sys/seat/default.nix new file mode 100644 index 0000000..d5c5f3d --- /dev/null +++ b/sys/seat/default.nix @@ -0,0 +1,85 @@ +{ config, lib, pkgs, ... }: +with lib; let + cfg = config.local.seat; + + users = filterAttrs; +in +{ + options.local.seat = { + enable = mkEnableOption "user seat"; + + installUsers = mkOption { + type = types.enum [ "none" "single" "all" ]; + }; + + graphical = mkOption { + type = types.bool; + default = false; + }; + + videoDrivers = mkOption { + type = with types; listOf str; + }; + }; + + config = mkIf cfg.enable + (mkMerge [ + ( + let + users = + if cfg.installUsers == "all" + then config.local.users + else if cfg.installUsers == "single" + then filterAttrs (_: user: user.sysadmin) config.local.users + else { }; + in + { + hardware.acpilight.enable = true; + + users = { + groups = mapAttrs (_: user: { inherit (user) gid; }) users // { + adbusers.gid = 1008; + }; + + users = mapAttrs + (username: user: { + isNormalUser = true; + + inherit (user) uid; + description = user.gecos; + + group = username; + extraGroups = [ "users" ] ++ user.groups; + + shell = if user.allowLogin then pkgs.zsh else null; + }) + users; + }; + } + ) + + (mkIf cfg.graphical { + hardware.pulseaudio.enable = true; + + programs.dconf.enable = true; + + services = { + libinput.enable = true; + + udev.packages = [ + pkgs.android-udev-rules + ]; + + xserver = { + enable = true; + videoDrivers = cfg.videoDrivers ++ [ "modesetting" "fbdev" ]; + displayManager.startx.enable = true; + }; + }; + + sound.enable = true; + + users.groups.adbusers.gid = 1008; + }) + ]); +} |
