Simon Bruder
f4efa9b1fc
Things are not very smooth yet. Hwmon only works with Kernel 6.2 and only supports energy monitoring (and even that doesn’t look too good). Fan control and temperature is not supported. To get at least usage statistics, intel_gpu_top can be used. Mangohud in its newest unreleased version also supports getting stats from it. However, intel_gpu_top needs cap_perfmon, which is a pain to get working inside the double bubblewrap sandbox for steam, therefore it is not yet available. On the positive side, OpenCL works well and oneAPI also works with blender-bin from nix-warez (nixpkgs doesn’t yet have blender with oneAPI support).
109 lines
3.9 KiB
Nix
109 lines
3.9 KiB
Nix
{ lib, nixosConfig, pkgs, ... }:
|
||
let
|
||
cfg = nixosConfig.sbruder.games;
|
||
inherit (nixosConfig.sbruder) unfree;
|
||
|
||
steam-sandbox = pkgs.writeShellScriptBin "steam-sandbox" /* bash */ ''
|
||
set -euo pipefail
|
||
shopt -s nullglob # make for loop work for glob if files do not exist
|
||
base_dir="''${XDG_DATA_HOME:-$HOME/.local/share}/steam-sandbox"
|
||
mkdir -p "$base_dir"/{.local/share,.steam,.config,.factorio,data}
|
||
bubblewrap_args=(
|
||
# sandboxing
|
||
--unshare-all
|
||
--share-net
|
||
--die-with-parent
|
||
--new-session
|
||
|
||
# basic filesystem
|
||
--tmpfs /tmp
|
||
--proc /proc
|
||
--dev /dev
|
||
--dir "$HOME"
|
||
--dir "$XDG_RUNTIME_DIR"
|
||
--ro-bind /nix/store /nix/store
|
||
# path
|
||
--ro-bind /run/current-system/sw /run/current-system/sw
|
||
--ro-bind /etc/profiles/per-user/$USER/bin /etc/profiles/per-user/$USER/bin
|
||
# system-wide configuration
|
||
--ro-bind /etc/fonts /etc/fonts
|
||
--ro-bind /etc/localtime /etc/localtime
|
||
--ro-bind /etc/machine-id /etc/machine-id
|
||
--ro-bind /etc/os-release /etc/os-release
|
||
--ro-bind /etc/passwd /etc/passwd
|
||
--ro-bind /etc/resolv.conf /etc/resolv.conf
|
||
--ro-bind /etc/ssl/certs /etc/ssl/certs
|
||
--ro-bind /etc/static /etc/static
|
||
|
||
# gui
|
||
--ro-bind /tmp/.X11-unix /tmp/.X11-unix
|
||
--ro-bind "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"
|
||
--dev-bind /dev/dri /dev/dri
|
||
--ro-bind /run/opengl-driver /run/opengl-driver
|
||
--ro-bind-try /run/opengl-driver-32 /run/opengl-driver-32
|
||
|
||
# audio
|
||
--ro-bind "$XDG_RUNTIME_DIR/pulse" "$XDG_RUNTIME_DIR/pulse"
|
||
--setenv PULSE_SERVER "$XDG_RUNTIME_DIR/pulse/native"
|
||
--ro-bind "''${XDG_CONFIG_HOME:-$HOME/.config}/pulse/cookie" "''${XDG_CONFIG_HOME:-$HOME/.config}/pulse/cookie"
|
||
--setenv PULSE_COOKIE "''${XDG_CONFIG_HOME:-$HOME/.config}/pulse/cookie/pulse/cookie"
|
||
--ro-bind-try /etc/asound.conf /etc/asound.conf
|
||
--ro-bind-try /etc/alsa/conf.d /etc/alsa/conf.d
|
||
--ro-bind-try "$XDG_RUNTIME_DIR/pipewire-0" "$XDG_RUNTIME_DIR/pipewire-0"
|
||
|
||
# dbus
|
||
--ro-bind /run/dbus/system_bus_socket /run/dbus/system_bus_socket
|
||
--ro-bind "$XDG_RUNTIME_DIR/bus" "$XDG_RUNTIME_DIR/bus"
|
||
|
||
# shared data
|
||
--bind "$base_dir/.local/share" "$HOME/.local/share"
|
||
--bind "$base_dir/.steam" "$HOME/.steam"
|
||
--bind "$base_dir/.config" "$HOME/.config"
|
||
--bind "$base_dir/.factorio" "$HOME/.factorio"
|
||
--bind "$base_dir/data" "$HOME/data"
|
||
--ro-bind-try "$HOME/.config/MangoHud" "$HOME/.config/MangoHud"
|
||
|
||
# input
|
||
--dev-bind /dev/input /dev/input
|
||
--dev-bind-try /dev/uinput /dev/uinput
|
||
--ro-bind /sys /sys # required for discovery
|
||
)
|
||
|
||
for hidraw in /dev/hidraw*; do
|
||
bubblewrap_args+=(--dev-bind $hidraw $hidraw)
|
||
done
|
||
|
||
|
||
unset SDL_VIDEODRIVER QT_QPA_PLATFORM # games generally don’t support wayland
|
||
export PATH="${pkgs.unstable.mangohud}/bin:$PATH"
|
||
|
||
${pkgs.bubblewrap}/bin/bwrap \
|
||
"''${bubblewrap_args[@]}" \
|
||
''${SANDBOX_COMMAND:-${pkgs.unstable.steam}/bin/steam} \
|
||
"$@"
|
||
'';
|
||
|
||
steam-sandbox-with-icons = pkgs.runCommand "steam-sandbox-with-icons" { } ''
|
||
mkdir -p $out/{bin,share}
|
||
ln -s ${pkgs.steamPackages.steam}/share/icons $out/share
|
||
ln -s ${pkgs.steamPackages.steam}/share/pixmaps $out/share
|
||
ln -s ${steam-sandbox}/bin/steam-sandbox $out/bin/steam-sandbox
|
||
'';
|
||
in
|
||
lib.mkIf cfg.enable {
|
||
home.packages = with pkgs; [
|
||
unstable.mangohud
|
||
] ++ lib.optionals (cfg.performanceIndex >= 2) [
|
||
mgba
|
||
] ++ lib.optionals (cfg.performanceIndex >= 4) [
|
||
desmume
|
||
unstable.dolphin-emu-beta
|
||
] ++ lib.optionals (cfg.performanceIndex >= 8) [
|
||
unstable.ryujinx
|
||
unstable.yuzu-mainline
|
||
] ++ lib.optionals unfree.allowSoftware [
|
||
unstable.osu-lazer-sandbox
|
||
steam-sandbox-with-icons
|
||
];
|
||
}
|