{ config, lib, inputs, pkgs, timeZone, ... }: let deskCfg = config.deskCfg; in { imports = [ ./nixos/hardware-configuration.nix ./modules/sway/sway_conf.nix ../../shared/modules/desktop/base.nix ../../shared/modules/desktop/stylix.nix ../../shared/modules/desktop/silent-boot.nix ../../shared/modules/desktop/greetd.nix ../../shared/modules/wm/niri.nix ../../shared/modules/services/syncthing.nix ../../shared/modules/services/kdeconnect.nix ../../shared/modules/services/docker.nix ../../shared/modules/services/tailscale.nix ../../shared/modules/services/avahi.nix ../../shared/modules/services/motu-m4-combined.nix ]; deskCfg = { userName = "nate"; hostName = "winmax"; fullName = "Nate Anderson"; de = "niri"; installGaming = true; }; # Stylix — derive color scheme from wallpaper stylix.image = ./wallpaper.png; stylix.fonts.sizes = { applications = 12; desktop = 10; popups = 10; terminal = 11; }; # Limit the number of generations to keep boot.loader.systemd-boot.configurationLimit = 5; # Systemd initrd for faster boot boot.initrd.systemd.enable = true; # Silent boot silentBoot.enable = true; # Plymouth boot animation boot.plymouth = { enable = true; theme = "rings"; themePackages = with pkgs; [ (adi1090x-plymouth-themes.override { selected_themes = [ "rings" ]; }) ]; }; # Perform garbage collection weekly to maintain low disk usage nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 14d"; }; nix.settings.auto-optimise-store = true; # Extra groups main_user.extraGroups = [ "dialout" "docker" "scanner" "lp" ]; # Sway WM (legacy, kept for fallback) swaywm = { enable = deskCfg.de == "sway"; useNonFree = true; installGaming = deskCfg.installGaming; systemPackages = []; }; # Niri WM config niriwm = { enable = deskCfg.de == "niri"; useNonFree = true; user = deskCfg.userName; systemPackages = []; }; # Steam with remote play + gamescope programs.steam = { enable = true; remotePlay.openFirewall = true; gamescopeSession.enable = true; }; # MOTU M4 audio interface services.motu-m4-combined = { enable = true; user = deskCfg.userName; latencyMs = 10; }; # ADB for Android programs.adb.enable = true; # usbmuxd for iOS services.usbmuxd.enable = true; # Nate-specific session variables environment.sessionVariables = { FIREFOX_USE_SYSTEM_THEME = "true"; GTK_THEME = "stylix"; }; # Firewall — allow dev server ports networking.firewall = { enable = true; allowedTCPPorts = [ 8080 8081 ]; }; # Bluetooth hardware.bluetooth.settings.General = { Name = "Nate-WinMax"; Privacy = "device"; JustWorksRepairing = "always"; Class = "0x000100"; }; hardware.xpadneo.enable = true; # AMD GPU setup (WinMax uses AMD) services.xserver.videoDrivers = [ "amdgpu" ]; # Enable HIP for ROCm systemd.tmpfiles.rules = [ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" ]; hardware.graphics = { enable = true; enable32Bit = true; extraPackages = with pkgs; [ rocmPackages.clr.icd ]; }; system.stateVersion = "23.11"; }