{ 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; pulseaudio.enable = false; }; security.rtkit.enable = true; services.pipewire = { enable = true; alsa = { enable = true; support32Bit = true; }; jack.enable = true; pulse.enable = true; }; # Remove sound.enable or set it to false if you had it set previously, as sound.enable is only meant for ALSA-based configurations sound.enable = false; 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 { 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; }; }; users.groups.adbusers.gid = 1008; }) ]); }