Compare commits

..

1 Commits

Author SHA1 Message Date
6fe51baa67 Add Steam Deck (nix-deck) configuration with Jovian-NixOS and remote building
- Add Jovian-NixOS integration for Steam Deck hardware support
- Create nix-deck machine configuration with SteamOS role
- Add jovian-compat.nix for NixOS 25.05 compatibility (remove in 25.11+)
- Create remote-build role for distributed builds
- Configure zix790prors as build host
- Configure nix-book and nix-deck to use remote builder with fallback
- Add comprehensive setup documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 15:42:33 -08:00
13 changed files with 80 additions and 346 deletions

80
flake.lock generated
View File

@@ -57,32 +57,11 @@
"type": "github" "type": "github"
} }
}, },
"home-manager-unstable": {
"inputs": {
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1763416652,
"narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "home-manager",
"type": "github"
}
},
"jovian": { "jovian": {
"inputs": { "inputs": {
"nix-github-actions": "nix-github-actions", "nix-github-actions": "nix-github-actions",
"nixpkgs": [ "nixpkgs": [
"nixpkgs-unstable" "nixpkgs"
] ]
}, },
"locked": { "locked": {
@@ -106,11 +85,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762912391, "lastModified": 1759509947,
"narHash": "sha256-4hpBE7bGd24SfD28rzMdUGXsLsNEYxCCrTipFdoqoNM=", "narHash": "sha256-4XifSIHfpJKcCf5bZZRhj8C4aCpjNBaE3kXr02s4rHU=",
"owner": "nix-darwin", "owner": "nix-darwin",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "d76299b2cd01837c4c271a7b5186e3d5d8ebd126", "rev": "000eadb231812ad6ea6aebd7526974aaf4e79355",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -148,11 +127,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1763385941, "lastModified": 1762251193,
"narHash": "sha256-99CBNgyMvg3Zu/hxqixtShevrF4Kfr/qjtizQ6oseVI=", "narHash": "sha256-CmSddz8e2kM+ITbYutluhKZyXXwI9Sg2lf7XXSvc8oY=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "cc6483354b236c2fc95cc1d4ba1f0f40b7345e69", "rev": "e001844d4553aef268f97b32d3a825b6370eed91",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -164,11 +143,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1762977756, "lastModified": 1761907660,
"narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -180,11 +159,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1763283776, "lastModified": 1762596750,
"narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", "narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -196,11 +175,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1763049705, "lastModified": 1762498405,
"narHash": "sha256-A5LS0AJZ1yDPTa2fHxufZN++n8MCmtgrJDtxFxrH4S8=", "narHash": "sha256-Zg/SCgCaAioc0/SVZQJxuECGPJy+OAeBcGeA5okdYDc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3acb677ea67d4c6218f33de0db0955f116b7588c", "rev": "6faeb062ee4cf4f105989d490831713cc5a43ee1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -233,41 +212,16 @@
"type": "github" "type": "github"
} }
}, },
"plasma-manager-unstable": {
"inputs": {
"home-manager": [
"home-manager-unstable"
],
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1762784320,
"narHash": "sha256-odsk96Erywk5hs0dhArF38zb7Oe0q6LZ70gXbxAPKno=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "7911a0f8a44c7e8b29d031be3149ee8943144321",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "plasma-manager",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"google-cookie-retrieval": "google-cookie-retrieval", "google-cookie-retrieval": "google-cookie-retrieval",
"home-manager": "home-manager", "home-manager": "home-manager",
"home-manager-unstable": "home-manager-unstable",
"jovian": "jovian", "jovian": "jovian",
"nix-darwin": "nix-darwin", "nix-darwin": "nix-darwin",
"nixos-wsl": "nixos-wsl", "nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"plasma-manager": "plasma-manager", "plasma-manager": "plasma-manager"
"plasma-manager-unstable": "plasma-manager-unstable"
} }
} }
}, },

View File

@@ -16,23 +16,12 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
home-manager-unstable = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
plasma-manager = { plasma-manager = {
url = "github:nix-community/plasma-manager"; url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager"; inputs.home-manager.follows = "home-manager";
}; };
plasma-manager-unstable = {
url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs-unstable";
inputs.home-manager.follows = "home-manager-unstable";
};
google-cookie-retrieval = { google-cookie-retrieval = {
url = "git+https://git.johnogle.info/johno/google-cookie-retrieval.git"; url = "git+https://git.johnogle.info/johno/google-cookie-retrieval.git";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -40,7 +29,7 @@
jovian = { jovian = {
url = "github:Jovian-Experiments/Jovian-NixOS"; url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs";
}; };
}; };
@@ -48,35 +37,8 @@
nixosModules = [ nixosModules = [
./roles ./roles
] ++ [ ] ++ [
./roles/jovian-compat.nix
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
{ ./roles/jovian-compat.nix # Compatibility shim for Jovian on stable NixOS
nixpkgs.overlays = [
(final: prev: {
unstable = import nixpkgs-unstable {
system = prev.system;
config.allowUnfree = true;
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
})
];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.plasma-manager.homeModules.plasma-manager
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
}
];
# Modules for unstable-based systems (like nix-deck)
nixosModulesUnstable = [
./roles
] ++ [
inputs.home-manager-unstable.nixosModules.home-manager
inputs.jovian.nixosModules.jovian inputs.jovian.nixosModules.jovian
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
@@ -86,14 +48,12 @@
config.allowUnfree = true; config.allowUnfree = true;
}; };
custom = prev.callPackage ./packages {}; custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) })
]; ];
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.sharedModules = [ home-manager.sharedModules = [
inputs.plasma-manager-unstable.homeModules.plasma-manager inputs.plasma-manager.homeModules.plasma-manager
]; ];
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
globalInputs = inputs; globalInputs = inputs;
@@ -112,8 +72,6 @@
config.allowUnfree = true; config.allowUnfree = true;
}; };
custom = prev.callPackage ./packages {}; custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) })
]; ];
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
@@ -191,10 +149,10 @@
]; ];
}; };
# Steam Deck configuration (using unstable for better Jovian compatibility) # Steam Deck configuration
nixosConfigurations.nix-deck = nixpkgs-unstable.lib.nixosSystem rec { nixosConfigurations.nix-deck = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
modules = nixosModulesUnstable ++ [ modules = nixosModules ++ [
./machines/nix-deck/configuration.nix ./machines/nix-deck/configuration.nix
{ {
home-manager.users.johno = import ./home/home-desktop.nix; home-manager.users.johno = import ./home/home-desktop.nix;

View File

@@ -87,8 +87,8 @@ let
"${shared_config.modifier}+r" = "mode resize"; "${shared_config.modifier}+r" = "mode resize";
"XF86MonBrightnessUp" = "exec ddcutil setvcp 10 + 5"; "XF86MonBrightnessUp" = "exec brightnessctl s +5%";
"XF86MonBrightnessDown" = "exec ddcutil setvcp 10 - 5"; "XF86MonBrightnessDown" = "exec brightnessctl s 5%-";
}; };
} cfg.extraSharedConfig; } cfg.extraSharedConfig;
in { in {
@@ -105,144 +105,12 @@ in {
}; };
config = { config = {
# i3blocks configuration file
home.file.".config/i3blocks/config".text = ''
# i3blocks config - replicating waybar setup
separator_block_width=15
markup=pango
[disk]
command=df -h / | awk 'NR==2 {print "💾 " $5}'
interval=30
separator=true
[cpu]
command=top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "🧠 " int(100 - $1) "%"}'
interval=2
separator=true
[memory]
command=free | awk 'NR==2 {printf "🐏 %.0f%%\n", $3*100/$2}'
interval=5
separator=true
[pulseaudio]
command=${pkgs.writeShellScript "i3blocks-pulseaudio" ''
volume=$(pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '\d+%' | head -1)
muted=$(pactl get-sink-mute @DEFAULT_SINK@ | grep -o 'yes')
if [ "$muted" = "yes" ]; then
echo "🔇"
else
vol_num=''${volume%\%}
if [ $vol_num -le 33 ]; then
echo "🔈 $volume"
elif [ $vol_num -le 66 ]; then
echo "🔉 $volume"
else
echo "🔊 $volume"
fi
fi
''}
interval=1
signal=10
separator=true
[backlight]
command=${pkgs.writeShellScript "i3blocks-backlight" ''
if command -v ddcutil &>/dev/null; then
# Handle mouse scroll events
case $BLOCK_BUTTON in
4) ddcutil setvcp 10 + 5 ;; # Scroll up - increase brightness
5) ddcutil setvcp 10 - 5 ;; # Scroll down - decrease brightness
esac
# Display current brightness
brightness=$(ddcutil getvcp 10 2>/dev/null | grep -oP 'current value =\s*\K\d+')
if [ -n "$brightness" ]; then
echo " $brightness%"
fi
fi
''}
interval=5
separator=true
[network]
command=${pkgs.writeShellScript "i3blocks-network" ''
if iwgetid -r &>/dev/null; then
ssid=$(iwgetid -r)
signal=$(grep "^\s*w" /proc/net/wireless | awk '{print int($3 * 100 / 70)}')
echo "📶 $ssid ($signal%)"
else
ip=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -1)
if [ -n "$ip" ]; then
echo "🔌 $ip"
else
echo ""
fi
fi
''}
interval=5
separator=true
[battery]
command=${pkgs.writeShellScript "i3blocks-battery" ''
if [ -d /sys/class/power_supply/BAT0 ]; then
capacity=$(cat /sys/class/power_supply/BAT0/capacity)
status=$(cat /sys/class/power_supply/BAT0/status)
if [ "$status" = "Charging" ]; then
echo " $capacity%"
else
echo "🔋 $capacity%"
fi
fi
''}
interval=10
separator=true
[time]
command=date '+%Y-%m-%d %H:%M'
interval=1
separator=false
'';
xsession.windowManager.i3 = let xsession.windowManager.i3 = let
base_i3_config = recursiveUpdate shared_config { base_i3_config = recursiveUpdate shared_config {
bars = [{ bars = [{
position = "bottom"; position = "bottom";
statusCommand = "${pkgs.i3blocks}/bin/i3blocks"; statusCommand = "${pkgs.i3status}/bin/i3status";
trayOutput = "primary"; # Enable system tray on primary output trayOutput = "primary"; # Enable system tray on primary output
fonts = {
names = [ "Fira Code" "monospace" ];
size = 11.0;
};
colors = {
background = "#000000";
statusline = "#ffffff";
separator = "#666666";
# Workspace button colors (matching waybar)
focusedWorkspace = {
border = "#285577";
background = "#285577";
text = "#ffffff";
};
activeWorkspace = {
border = "#5f676a";
background = "#5f676a";
text = "#ffffff";
};
inactiveWorkspace = {
border = "#222222";
background = "#222222";
text = "#888888";
};
urgentWorkspace = {
border = "#900000";
background = "#900000";
text = "#ffffff";
};
};
}]; }];
keybindings = shared_config.keybindings // { keybindings = shared_config.keybindings // {
"${shared_config.modifier}+d" = "exec rofi -show drun"; "${shared_config.modifier}+d" = "exec rofi -show drun";
@@ -306,13 +174,6 @@ in {
bg = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg} fill"; bg = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg} fill";
}; };
}; };
startup = [
# Launch waybar status bar
{
command = "waybar";
always = false;
}
];
}; };
in { in {
enable = true; enable = true;
@@ -321,7 +182,7 @@ in {
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd.enable = false; # Don't auto-start via systemd - only launch in sway systemd.enable = true;
settings = { settings = {
mainBar = { mainBar = {
layer = "top"; layer = "top";
@@ -454,5 +315,7 @@ in {
sidebar-mode = true; sidebar-mode = true;
}; };
}; };
programs.i3status.enable = true;
}; };
} }

View File

@@ -13,7 +13,7 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages = with pkgs; [
# Desktop applications # Desktop applications
bitwarden-desktop bitwarden
dunst dunst
keepassxc keepassxc
unstable.ghostty unstable.ghostty

View File

@@ -12,10 +12,11 @@
wayland = true; wayland = true;
gaming.enable = true; gaming.enable = true;
kde = true; kde = true;
sddm = true;
steamos = { steamos = {
enable = true; enable = true;
autoStart = true; autoStart = false;
desktopSession = "plasma"; desktopSession = "plasmawayland";
}; };
}; };
remote-build.builders = [{ remote-build.builders = [{

View File

@@ -1,35 +1,26 @@
# Hardware configuration for Steam Deck (nix-deck) # This is a placeholder hardware configuration for the Steam Deck.
# Generated from nixos-generate-config on 2025-11-17 # Run `nixos-generate-config --show-hardware-config` on the actual device
# to generate the real hardware configuration, then merge the jovian settings below.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = [ imports = [ ];
(modulesPath + "/installer/scan/not-detected.nix")
];
# Steam Deck specific hardware configuration (Jovian) # Steam Deck specific hardware configuration
jovian.devices.steamdeck = { jovian.devices.steamdeck = {
enable = true; enable = true;
autoUpdate = false; # Set to true if you want automatic firmware updates autoUpdate = false; # Set to true if you want automatic firmware updates
}; };
# Kernel modules detected by nixos-generate-config # TODO: Replace this with actual hardware configuration from the Steam Deck
boot.initrd.availableKernelModules = [ # Run `nixos-generate-config --show-hardware-config` on the device and merge it here
"nvme"
"xhci_pci" # Minimal placeholder configuration to allow flake to build
"usb_storage" boot.initrd.availableKernelModules = [ ];
"uas" boot.initrd.kernelModules = [ ];
"usbhid" boot.kernelModules = [ ];
"sd_mod"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
# IMPORTANT: Update these filesystem configurations based on your actual partition layout
# The configuration below is a placeholder - adjust according to how you partitioned the disk
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-label/nixos"; device = "/dev/disk/by-label/nixos";
fsType = "ext4"; fsType = "ext4";
@@ -40,12 +31,7 @@
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [{ swapDevices = [ ];
device = "/swapfile";
size = 8192; # 8GB swap file
}];
# AMD CPU microcode updates
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@@ -19,6 +19,7 @@ with lib;
enable = true; enable = true;
gaming = { gaming = {
enable = true; enable = true;
emulation = true;
}; };
kde = true; kde = true;
sddm = true; sddm = true;
@@ -58,9 +59,18 @@ with lib;
''; '';
hardware.nvidia = { hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true; modesetting.enable = true;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true; nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = pkgs.linuxPackages.nvidiaPackages.stable; package = pkgs.linuxPackages.nvidiaPackages.stable;
# Use open source kernel modules (recommended for RTX/GTX 16xx and newer)
# Set to false if you have an older GPU
open = true; open = true;
# For gaming performance # For gaming performance

View File

@@ -11,6 +11,7 @@ with lib;
kde = mkOption { type = types.bool; default = false; description = "Enable KDE."; }; kde = mkOption { type = types.bool; default = false; description = "Enable KDE."; };
gaming = { gaming = {
enable = mkOption { type = types.bool; default = false; description = "Enable gaming support."; }; enable = mkOption { type = types.bool; default = false; description = "Enable gaming support."; };
emulation = mkOption { type = types.bool; default = false; description = "Enable emulation support."; };
}; };
sddm = mkOption { type = types.bool; default = false; description = "Enable SDDM greeter."; }; sddm = mkOption { type = types.bool; default = false; description = "Enable SDDM greeter."; };
}; };

View File

@@ -12,12 +12,15 @@ in
steam steam
lutris lutris
moonlight moonlight
];
# Emulators # Possibly other gaming specific services or settings
dolphin-emu })
dolphin-emu-primehack
retroarch-full (mkIf (cfg.enable && cfg.gaming.emulation) {
environment.systemPackages = with pkgs; [
ryubing ryubing
dolphin-emu
]; ];
# TODO: Remove me once dolphin-emu and dolphin-emu-primehack update # TODO: Remove me once dolphin-emu and dolphin-emu-primehack update
# dependencies to mbedtls from mbedtls_2 (which is currently) # dependencies to mbedtls from mbedtls_2 (which is currently)

View File

@@ -43,9 +43,5 @@ in
}; };
jovian.decky-loader.enable = cfg.steamos.enableDeckyLoader; jovian.decky-loader.enable = cfg.steamos.enableDeckyLoader;
environment.systemPackages = with pkgs; [
maliit-keyboard
];
}; };
} }

View File

@@ -19,20 +19,8 @@ in
polkit_gnome # GNOME polkit authentication agent (more stable with i3) polkit_gnome # GNOME polkit authentication agent (more stable with i3)
picom # Compositor for smooth rendering (important for Nvidia) picom # Compositor for smooth rendering (important for Nvidia)
networkmanagerapplet # NetworkManager system tray applet networkmanagerapplet # NetworkManager system tray applet
ddcutil # DDC/CI monitor control for brightness
]; ];
}; };
}; };
# Enable DDC/CI support for monitor brightness control
boot.kernelModules = [ "i2c-dev" ];
# Add ddcutil udev rules and user permissions
hardware.i2c.enable = true;
# Install ddcutil system-wide
environment.systemPackages = with pkgs; [
ddcutil
];
}; };
} }

View File

@@ -1,9 +1,8 @@
{ lib, config, ... }: { lib, config, ... }:
# Minimal Jovian compatibility layer for NixOS stable (25.05) # Compatibility shim to provide services.logind.settings for NixOS 25.05
# Defines only the Jovian options used by roles/desktop/steamos.nix # This allows Jovian-NixOS to work with stable NixOS
# No actual implementation - just option definitions to prevent evaluation errors # REMOVE THIS FILE when upgrading to NixOS 25.11 or later
# REMOVE THIS FILE when all systems are on NixOS 25.11+ or unstable
with lib; with lib;
@@ -12,32 +11,10 @@ let
isCompatibleVersion = versionOlder nixosVersion "25.11"; isCompatibleVersion = versionOlder nixosVersion "25.11";
in in
{ {
options.jovian = { options.services.logind.settings = mkOption {
steam = { type = types.attrsOf (types.attrsOf types.anything);
enable = mkEnableOption "Steam (jovian-compat stub)"; default = {};
description = "systemd-logind configuration. See logind.conf(5) for available options.";
autoStart = mkOption {
type = types.bool;
default = false;
description = "Auto-start Steam (jovian-compat stub)";
};
user = mkOption {
type = types.str;
default = "user";
description = "Steam user (jovian-compat stub)";
};
desktopSession = mkOption {
type = types.nullOr types.str;
default = null;
description = "Desktop session (jovian-compat stub)";
};
};
decky-loader = {
enable = mkEnableOption "Decky Loader (jovian-compat stub)";
};
}; };
config = mkMerge [ config = mkMerge [
@@ -48,17 +25,19 @@ in
message = '' message = ''
The Jovian compatibility shim (roles/jovian-compat.nix) is only needed for NixOS 25.05 and earlier. The Jovian compatibility shim (roles/jovian-compat.nix) is only needed for NixOS 25.05 and earlier.
You are running NixOS ${nixosVersion}. You are running NixOS ${nixosVersion}.
Please remove 'roles/jovian-compat.nix' from your flake.nix nixosModules list. Please remove 'roles/jovian-compat.nix' from your flake.nix imports.
''; '';
} }
]; ];
} }
# No config implementation - these options do nothing on stable systems (mkIf (config.services.logind.settings != {}) {
# steamos role is only enabled on nix-deck which uses unstable anyway # Convert the settings to extraConfig format for older NixOS
(mkIf config.jovian.steam.enable { services.logind.extraConfig = let
warnings = [ mkSection = section: settings:
"Jovian is enabled but you're using the compatibility stub. This won't work correctly. Use NixOS unstable for Jovian support." "[${section}]\n" +
]; (concatStringsSep "\n" (mapAttrsToList (k: v: "${k}=${toString v}") settings));
in
concatStringsSep "\n\n" (mapAttrsToList mkSection config.services.logind.settings);
}) })
]; ];
} }

View File

@@ -91,11 +91,6 @@ in
users.groups.${cfg.builderUser} = {}; users.groups.${cfg.builderUser} = {};
# Ensure home directory has correct permissions
systemd.tmpfiles.rules = [
"d /var/lib/${cfg.builderUser} 0700 ${cfg.builderUser} ${cfg.builderUser} -"
];
# Allow builder user to perform builds # Allow builder user to perform builds
nix.settings.trusted-users = [ cfg.builderUser ]; nix.settings.trusted-users = [ cfg.builderUser ];