diff --git a/hosts/nixos/deck/system.nix b/hosts/nixos/deck/system.nix index c7402aa..35994a5 100644 --- a/hosts/nixos/deck/system.nix +++ b/hosts/nixos/deck/system.nix @@ -7,6 +7,9 @@ ../../../modules/desktop.nix ]; + # Desktop module configuration (disable GDM for Jovian autoStart mode) + desktop-custom.enableDisplayManager = false; + # Bootloader - standard UEFI setup boot.loader = { systemd-boot.enable = true; @@ -33,10 +36,8 @@ enableRedistributableFirmware = true; # Graphics configuration for AMD - graphics = { - enable = true; - enable32Bit = true; - }; + # Note: enable32Bit is set by jovian.steam.enable + graphics.enable = true; # Bluetooth support bluetooth = { @@ -50,18 +51,10 @@ }; }; - # Sound configuration with PipeWire - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - # Jovian Steam Deck configuration jovian = { + hardware.has.amd.gpu = true; # Enables backlight control and early modesetting + steam = { enable = true; autoStart = true; @@ -71,6 +64,13 @@ devices.steamdeck = { enable = true; autoUpdate = true; + enableSoundSupport = true; # Steam Deck-optimized PipeWire with DSP + enableVendorDrivers = true; # Uses Valve's driver branches instead of upstream + }; + steamos = { + useSteamOSConfig = true; # Enable SteamOS optimizations (zram, OOM, sysctl, etc.) + enableBluetoothConfig = true; # SteamOS bluetooth defaults + enableAutoMountUdevRules = true; # Auto-mount SD cards }; }; diff --git a/modules/desktop.nix b/modules/desktop.nix index 28ff625..8d3dc68 100644 --- a/modules/desktop.nix +++ b/modules/desktop.nix @@ -1,68 +1,84 @@ { config, pkgs, lib, ... }: +with lib; + +let + cfg = config.desktop-custom; +in + { - # GNOME Desktop Environment - services.xserver.enable = true; - services.displayManager.gdm.enable = true; - services.desktopManager.gnome.enable = true; - - # Keyboard layout - services.xserver.xkb = { - layout = "us"; - options = ""; - }; - - # Exclude unwanted GNOME default packages - environment.gnome.excludePackages = with pkgs; [ - gnome-tour - gnome-console # terminal (using Ghostty instead) - gnome-text-editor # text editor (using Neovim instead) - gnome-connections # remote desktop client - gnome-font-viewer # font viewer - seahorse # passwords and keys - baobab # disk usage analyzer - gnome-disk-utility # disks - gnome-logs # logs viewer - gnome-system-monitor # system monitor - decibels # audio player - epiphany # GNOME web browser - file-roller # archive manager - geary # GNOME email client - gnome-music - gnome-photos - gnome-maps - gnome-weather - gnome-contacts - gnome-clocks - gnome-calculator - gnome-calendar - gnome-characters - simple-scan - snapshot # camera - totem # video player - yelp # help viewer - ]; - - # XDG portal for proper desktop integration - xdg.portal = { - enable = true; - extraPortals = with pkgs; [ - xdg-desktop-portal-gnome - xdg-desktop-portal-gtk - ]; - }; - - # Touchpad configuration - services.libinput = { - enable = true; - touchpad = { - naturalScrolling = true; - tapping = true; + options.desktop-custom = { + enableDisplayManager = mkOption { + type = types.bool; + default = true; + description = "Enable GDM display manager (conflicts with jovian.steam.autoStart)"; }; }; - # System packages for GNOME - environment.systemPackages = with pkgs; [ - hicolor-icon-theme # Fallback icon theme - ]; + config = { + # GNOME Desktop Environment + services.xserver.enable = true; + services.displayManager.gdm.enable = mkIf cfg.enableDisplayManager true; + services.desktopManager.gnome.enable = true; + + # Keyboard layout + services.xserver.xkb = { + layout = "us"; + options = ""; + }; + + # Exclude unwanted GNOME default packages + environment.gnome.excludePackages = with pkgs; [ + gnome-tour + gnome-console # terminal (using Ghostty instead) + gnome-text-editor # text editor (using Neovim instead) + gnome-connections # remote desktop client + gnome-font-viewer # font viewer + seahorse # passwords and keys + baobab # disk usage analyzer + gnome-disk-utility # disks + gnome-logs # logs viewer + gnome-system-monitor # system monitor + decibels # audio player + epiphany # GNOME web browser + file-roller # archive manager + geary # GNOME email client + gnome-music + gnome-photos + gnome-maps + gnome-weather + gnome-contacts + gnome-clocks + gnome-calculator + gnome-calendar + gnome-characters + simple-scan + snapshot # camera + totem # video player + yelp # help viewer + ]; + + # XDG portal for proper desktop integration + xdg.portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-gnome + xdg-desktop-portal-gtk + ]; + }; + + # Touchpad configuration + services.libinput = { + enable = true; + touchpad = { + naturalScrolling = true; + tapping = true; + }; + }; + + # System packages for GNOME + environment.systemPackages = with pkgs; [ + hicolor-icon-theme # Fallback icon theme + ]; + }; }