diff --git a/home/progs/steam-shortcuts.nix b/home/progs/steam-shortcuts.nix new file mode 100644 index 0000000..5e031e9 --- /dev/null +++ b/home/progs/steam-shortcuts.nix @@ -0,0 +1,29 @@ +# Declarative non-Steam game shortcuts for the Steam library. +# Add entries to the `shortcuts` list to have them appear in Steam's UI. +{ + pkgs, + inputs, + lib, + ... +}: +{ + imports = [ + inputs.json2steamshortcut.homeModules.default + ]; + + services.steam-shortcuts = { + enable = true; + overwriteExisting = true; + steamUserId = lib.strings.toInt ( + lib.strings.trim (builtins.readFile ../../secrets/home/steam-user-id) + ); + shortcuts = [ + { + AppName = "Prism Launcher"; + Exe = "${pkgs.prismlauncher}/bin/prismlauncher"; + Icon = "${pkgs.prismlauncher}/share/icons/hicolor/scalable/apps/org.prismlauncher.PrismLauncher.svg"; + Tags = [ "Game" ]; + } + ]; + }; +} diff --git a/hosts/patiodeck/default.nix b/hosts/patiodeck/default.nix index 027ab6d..cdaef83 100644 --- a/hosts/patiodeck/default.nix +++ b/hosts/patiodeck/default.nix @@ -1,6 +1,4 @@ { - pkgs, - lib, username, inputs, site_config, @@ -9,12 +7,11 @@ { imports = [ ../../modules/desktop-common.nix - ../../modules/desktop-steam-update.nix + ../../modules/desktop-jovian.nix ./disk.nix ./impermanence.nix inputs.impermanence.nixosModules.impermanence - inputs.jovian-nixos.nixosModules.default ]; networking.hostId = "a1b2c3d4"; @@ -37,30 +34,5 @@ site_config.ssh_keys.laptop ]; - nixpkgs.config.allowUnfreePredicate = - pkg: - builtins.elem (lib.getName pkg) [ - "steamdeck-hw-theme" - "steam-jupiter-unwrapped" - "steam" - "steam-original" - "steam-unwrapped" - "steam-run" - ]; - - jovian = { - devices.steamdeck.enable = true; - steam = { - enable = true; - autoStart = true; - desktopSession = "niri"; - user = username; - }; - }; - - # Jovian-NixOS requires sddm - services.displayManager.sddm.wayland.enable = true; - - # disable gamescope from desktop-common.nix to avoid conflict with jovian - programs.gamescope.enable = lib.mkForce false; + jovian.devices.steamdeck.enable = true; } diff --git a/hosts/patiodeck/home.nix b/hosts/patiodeck/home.nix index 4a63f31..b030926 100644 --- a/hosts/patiodeck/home.nix +++ b/hosts/patiodeck/home.nix @@ -1,29 +1,8 @@ -{ - pkgs, - inputs, - lib, - ... -}: +{ ... }: { imports = [ ../../home/profiles/gui.nix ../../home/profiles/desktop.nix - inputs.json2steamshortcut.homeModules.default + ../../home/progs/steam-shortcuts.nix ]; - - services.steam-shortcuts = { - enable = true; - overwriteExisting = true; - steamUserId = lib.strings.toInt ( - lib.strings.trim (builtins.readFile ../../secrets/home/steam-user-id) - ); - shortcuts = [ - { - AppName = "Prism Launcher"; - Exe = "${pkgs.prismlauncher}/bin/prismlauncher"; - Icon = "${pkgs.prismlauncher}/share/icons/hicolor/scalable/apps/org.prismlauncher.PrismLauncher.svg"; - Tags = [ "Game" ]; - } - ]; - }; } diff --git a/hosts/yarn/default.nix b/hosts/yarn/default.nix index b8324de..726983e 100644 --- a/hosts/yarn/default.nix +++ b/hosts/yarn/default.nix @@ -1,5 +1,4 @@ { - config, pkgs, lib, username, @@ -10,14 +9,13 @@ { imports = [ ../../modules/desktop-common.nix - ../../modules/desktop-steam-update.nix + ../../modules/desktop-jovian.nix ../../modules/no-rgb.nix ./disk.nix ./impermanence.nix ./vr.nix inputs.impermanence.nixosModules.impermanence - inputs.jovian-nixos.nixosModules.default ]; fileSystems."/media/games" = { @@ -84,31 +82,6 @@ systemd.services.lactd.serviceConfig.ExecStartPre = "${lib.getExe pkgs.bash} -c \"sleep 3s\""; - nixpkgs.config.allowUnfreePredicate = - pkg: - builtins.elem (lib.getName pkg) [ - "steamdeck-hw-theme" - "steam-jupiter-unwrapped" - "steam" - "steam-original" - "steam-unwrapped" - "steam-run" - ]; - - jovian = { - devices.steamdeck.enable = false; - steam = { - enable = true; - autoStart = true; - desktopSession = "niri"; - user = username; - }; - }; - - # Jovian-NixOS requires sddm - # https://github.com/Jovian-Experiments/Jovian-NixOS/commit/52f140c07493f8bb6cd0773c7e1afe3e1fd1d1fa - services.displayManager.sddm.wayland.enable = true; - - # Disable gamescope from common.nix to avoid conflict with jovian-nixos - programs.gamescope.enable = lib.mkForce false; + # yarn is not a Steam Deck + jovian.devices.steamdeck.enable = false; } diff --git a/hosts/yarn/home.nix b/hosts/yarn/home.nix index a5845bc..eef39bf 100644 --- a/hosts/yarn/home.nix +++ b/hosts/yarn/home.nix @@ -1,15 +1,12 @@ { pkgs, - inputs, - lib, - config, ... }: { imports = [ ../../home/profiles/gui.nix ../../home/profiles/desktop.nix - inputs.json2steamshortcut.homeModules.default + ../../home/progs/steam-shortcuts.nix ]; home.packages = with pkgs; [ @@ -27,20 +24,4 @@ obs-pipewire-audio-capture ]; }; - - services.steam-shortcuts = { - enable = true; - overwriteExisting = true; - steamUserId = lib.strings.toInt ( - lib.strings.trim (builtins.readFile ../../secrets/home/steam-user-id) - ); - shortcuts = [ - { - AppName = "Prism Launcher"; - Exe = "${pkgs.prismlauncher}/bin/prismlauncher"; - Icon = "${pkgs.prismlauncher}/share/icons/hicolor/scalable/apps/org.prismlauncher.PrismLauncher.svg"; - Tags = [ "Game" ]; - } - ]; - }; } diff --git a/modules/desktop-jovian.nix b/modules/desktop-jovian.nix new file mode 100644 index 0000000..7210ee5 --- /dev/null +++ b/modules/desktop-jovian.nix @@ -0,0 +1,40 @@ +# Jovian-NixOS deck-mode configuration shared by all hosts running Steam +# in gamescope (yarn, patiodeck). Host-specific settings (like +# jovian.devices.steamdeck.enable) stay in the host's default.nix. +{ + lib, + username, + inputs, + ... +}: +{ + imports = [ + ./desktop-steam-update.nix + inputs.jovian-nixos.nixosModules.default + ]; + + nixpkgs.config.allowUnfreePredicate = + pkg: + builtins.elem (lib.getName pkg) [ + "steamdeck-hw-theme" + "steam-jupiter-unwrapped" + "steam" + "steam-original" + "steam-unwrapped" + "steam-run" + ]; + + jovian.steam = { + enable = true; + autoStart = true; + desktopSession = "niri"; + user = username; + }; + + # jovian overrides the display manager; sddm is required + services.displayManager.sddm.wayland.enable = true; + + # desktop-common.nix enables programs.gamescope which conflicts with + # jovian's own gamescope wrapper + programs.gamescope.enable = lib.mkForce false; +}