From d5d9396b6dc543808723de837844f38277e06916 Mon Sep 17 00:00:00 2001 From: worble Date: Sun, 12 Oct 2025 23:35:30 +0100 Subject: [PATCH 1/4] update flake.lock --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 08dd101..3a06d04 100644 --- a/flake.lock +++ b/flake.lock @@ -66,11 +66,11 @@ ] }, "locked": { - "lastModified": 1759637156, - "narHash": "sha256-8NI1SqntLfKl6Q0Luemc3aIboezSJElofUrqipF5g78=", + "lastModified": 1760241904, + "narHash": "sha256-OD7QnaGEVNdukYEbJbUNWPsvnDrpbZOZxVIk6Pt9Jhw=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "0ca69684091aa3a6b1fe994c4afeff305b15e915", + "rev": "c9f5ea45f25652ec2f771f9426ccacb21cbbaeaa", "type": "github" }, "original": { @@ -105,11 +105,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1760071578, - "narHash": "sha256-MZUsqax6PoXPDzhpLyduHoPY4CYYrzL97uKbsx/iGPE=", + "lastModified": 1760234152, + "narHash": "sha256-Z8AXNGOME4FgNL54qqta7SU5O21oS7UjtcFaPyCHbHY=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "65365fe8c09b6c1b6bba1885a126723815376b1b", + "rev": "328cedcf3eae1e3eae4f16a61196894c95783c38", "type": "github" }, "original": { From f66ef91e85ddc74d9a8fa25004539a66f385c927 Mon Sep 17 00:00:00 2001 From: worble Date: Mon, 13 Oct 2025 17:59:46 +0100 Subject: [PATCH 2/4] move ntsync to the correct option; make extra mpv stuff a config option; add some gaming helper scripts + default env vars --- devices/tuxedo/configuration.nix | 14 ++---- devices/tuxedo/home.nix | 26 +--------- home-manager/base/mpv.nix | 86 ++++++++++++++++++++++++-------- home-manager/gaming.nix | 41 +++++++++++++-- 4 files changed, 108 insertions(+), 59 deletions(-) diff --git a/devices/tuxedo/configuration.nix b/devices/tuxedo/configuration.nix index a464ef4..848cd02 100644 --- a/devices/tuxedo/configuration.nix +++ b/devices/tuxedo/configuration.nix @@ -21,21 +21,17 @@ networking.hostName = "tuxedo"; # Define your hostname. - # fairly sure this isnt needed anymore - # boot.extraModprobeConfig = '' - # options iwlwifi 11n_disable=8 power_save=0 - # options iwlmvm power_scheme=1 - # ''; - - # TODO remove ntsync if this becomes stable # options iwlmvm power_scheme=1 https://wireless.docs.kernel.org/en/latest/en/users/drivers/iwlwifi.html#features # options iwlwifi 11n_disable=4 https://wiki.gentoo.org/wiki/Iwlwifi#Network_crashes_under_heavy_load boot.extraModprobeConfig = '' - ntsync options iwlmvm power_scheme=1 - options iwlwifi 11n_disable=4 + options iwlwifi 11n_disable=8 power_save=0 ''; + boot.kernelModules = [ + "ntsync" + ]; + services.hardware.openrgb.enable = true; fileSystems."/mnt/HDD2" = { diff --git a/devices/tuxedo/home.nix b/devices/tuxedo/home.nix index 462b0a5..c99739f 100644 --- a/devices/tuxedo/home.nix +++ b/devices/tuxedo/home.nix @@ -11,6 +11,7 @@ terminal.nixUpdateLocation = "/home/worble/Projects/nixos#tuxedo"; terminal.flakeUpdateLocation = "/home/worble/Projects/nixos"; helix.fullInstall = true; + mpv.high-quality = true; home.username = "worble"; home.homeDirectory = "/home/worble"; @@ -47,15 +48,6 @@ headsetcontrol ]; - home.file = { - # shaders for mpv - ".config/mpv/shaders".source = pkgs.fetchzip { - url = "https://github.com/bloc97/Anime4K/releases/download/v4.0.1/Anime4K_v4.0.zip"; - sha256 = "sha256-9B6U+KEVlhUIIOrDauIN3aVUjZ/gQHjFArS4uf/BpaM="; - stripRoot = false; - }; - }; - # Let Home Manager install and manage itself. programs = { firefox = { @@ -74,24 +66,8 @@ mpv = { config = { - profile = "gpu-hq"; - vo = "gpu-next"; - gpu-api = "auto"; - gpu-context = "auto"; - hwdec = "auto"; screenshot-directory = "/mnt/HDD2/Pictures/"; - glsl-shaders = "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; }; - extraInput = '' - # Optimized shaders for higher-end GPU: - CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)" - CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)" - CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)" - CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)" - CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)" - CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)" - CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared" - ''; }; mangohud = { diff --git a/home-manager/base/mpv.nix b/home-manager/base/mpv.nix index 2d9e581..5bcb783 100644 --- a/home-manager/base/mpv.nix +++ b/home-manager/base/mpv.nix @@ -1,30 +1,72 @@ -{ pkgs, lib, ... }: +{ pkgs, lib, config, ... }: +with lib; { - programs = { - mpv = { - enable = true; - package = ( - pkgs.mpv-unwrapped.wrapper { - scripts = with pkgs.mpvScripts; [ - uosc - sponsorblock - ]; + options.mpv = { + high-quality = mkOption { + type = types.bool; + default = false; + }; + }; - mpv = pkgs.mpv-unwrapped; - } - ); - config = { - screenshot-directory = lib.mkDefault "~/Pictures/"; - screenshot-template = lib.mkDefault "%F/%F_snapshot_%P"; - sub-ass-use-video-data = lib.mkDefault "aspect-ratio"; - }; - - scriptOpts = { - uosc = { - time_precision = 3; + config = { + home.file = { + ".config/mpv/shaders" = { + enable = config.mpv.high-quality; + source = pkgs.fetchzip { + url = "https://github.com/bloc97/Anime4K/releases/download/v4.0.1/Anime4K_v4.0.zip"; + sha256 = "sha256-9B6U+KEVlhUIIOrDauIN3aVUjZ/gQHjFArS4uf/BpaM="; + stripRoot = false; }; }; }; + + programs = { + mpv = { + enable = true; + package = ( + pkgs.mpv-unwrapped.wrapper { + scripts = with pkgs.mpvScripts; [ + uosc + sponsorblock + ]; + + mpv = pkgs.mpv-unwrapped; + } + ); + config = mkMerge [{ + screenshot-directory = lib.mkDefault "~/Pictures/"; + screenshot-template = lib.mkDefault "%F/%F_snapshot_%P"; + sub-ass-use-video-data = lib.mkDefault "aspect-ratio"; + } + (mkIf config.mpv.high-quality + { + profile = lib.mkDefault "gpu-hq"; + vo = lib.mkDefault "gpu-next"; + gpu-api = lib.mkDefault "auto"; + gpu-context = lib.mkDefault "auto"; + hwdec = lib.mkDefault "auto"; + glsl-shaders = lib.mkDefault "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; + })]; + + scriptOpts = { + uosc = { + time_precision = lib.mkDefault 3; + }; + }; + + extraInput = + if config.mpv.high-quality then '' + # Optimized shaders for higher-end GPU: + CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)" + CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)" + CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)" + CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)" + CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)" + CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)" + CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared" + '' else ""; + }; + }; }; } diff --git a/home-manager/gaming.nix b/home-manager/gaming.nix index 0aab890..b1c3b8f 100644 --- a/home-manager/gaming.nix +++ b/home-manager/gaming.nix @@ -1,11 +1,14 @@ { pkgs, inputs, ... }: +let + pkgs_unstable = inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}"; +in { home.packages = with pkgs;[ # Wine / Proton - inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}".wineWowPackages.stagingFull - inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}".winetricks - inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}".umu-launcher + pkgs_unstable.wineWowPackages.stagingFull + pkgs_unstable.winetricks + pkgs_unstable.umu-launcher # I'm not sure this actually accomplishes anything, even with PROTON_MEDIA_USE_GST=1 # (umu-launcher.override { @@ -36,8 +39,40 @@ # Cheat engine scanmem + + # gamescope wrapper + (pkgs.writeShellApplication { + name = "gscope"; + runtimeInputs = [ pkgs.gamescope ]; + text = "gamescope -H 1080 -- \"$@\""; + }) + + # proton with ja_JP + (pkgs.writeShellApplication { + name = "umu-ja"; + runtimeInputs = [ pkgs_unstable.umu-launcher ]; + text = "LANG=ja_JP.utf8 umu-run \"$@\""; + }) + + # wine with ja_JP + (pkgs.writeShellApplication { + name = "wine-ja"; + runtimeInputs = [ pkgs_unstable.wineWowPackages.stagingFull ]; + text = "LANG=ja_JP.utf8 wine \"$@\""; + }) ]; + # https://github.com/GloriousEggroll/proton-ge-custom?tab=readme-ov-file#modification + # There aren't yet documented in the README: + # PROTON_MEDIA_USE_GST=1 will tell proton to use the winegstreamer backend instead of the default winedmo backend (the winedmo backend was introduced in Proton 10 and is the current preferred video playback method). This can be useful for games with videos that may have worked in Proton 9 but regressed in Proton 10. + # PROTON_GST_VIDEO_ORIENTATION= can be any of the following: vertical-flip, horizontal-flip, rotate-180, automatic. This is useful if some games have videos that are upside down or otherwise not oriented correctly. + # https://simpler-website.pages.dev/html/2021/1/wine-environment-variables/#wineesync + home.sessionVariables = { + WINEPREFIX = "~/Games/wine/default"; + PROTONPATH = "GE-Proton"; + PROTON_ENABLE_WAYLAND = "0"; # One day... + }; + # programs.lutris = { # enable = true; # extraPackages = with pkgs; [ mangohud winetricks gamescope gamemode umu-launcher ]; From 66e7e4fdc07fad39a2a5fb10bb78f7417da86169 Mon Sep 17 00:00:00 2001 From: worble Date: Mon, 13 Oct 2025 21:38:47 +0100 Subject: [PATCH 3/4] update flake.lock --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 3a06d04..c37b2ad 100644 --- a/flake.lock +++ b/flake.lock @@ -105,11 +105,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1760234152, - "narHash": "sha256-Z8AXNGOME4FgNL54qqta7SU5O21oS7UjtcFaPyCHbHY=", + "lastModified": 1760320782, + "narHash": "sha256-1ycwVgQbDxEc4/zf8OxvnwJJwZ4wNIqgigOv/R/KdW8=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "328cedcf3eae1e3eae4f16a61196894c95783c38", + "rev": "b227991f119ccaf404e9236d527c1d0e7412fe95", "type": "github" }, "original": { @@ -152,11 +152,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1760038930, - "narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=", + "lastModified": 1760284886, + "narHash": "sha256-TK9Kr0BYBQ/1P5kAsnNQhmWWKgmZXwUQr4ZMjCzWf2c=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3", + "rev": "cf3f5c4def3c7b5f1fc012b3d839575dbe552d43", "type": "github" }, "original": { @@ -168,11 +168,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1759994382, - "narHash": "sha256-wSK+3UkalDZRVHGCRikZ//CyZUJWDJkBDTQX1+G77Ow=", + "lastModified": 1760139962, + "narHash": "sha256-4xggC56Rub3WInz5eD7EZWXuLXpNvJiUPahGtMkwtuc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5da4a26309e796daa7ffca72df93dbe53b8164c7", + "rev": "7e297ddff44a3cc93673bb38d0374df8d0ad73e4", "type": "github" }, "original": { From 89a15a63e87638a447bb2e23a8a297652714b91b Mon Sep 17 00:00:00 2001 From: worble Date: Mon, 13 Oct 2025 23:54:00 +0100 Subject: [PATCH 4/4] minor cleanup; use gamescope default args instead of wrapper --- configuration/base/networking.nix | 4 ++- configuration/base/programs.nix | 43 +++++++++++++++---------------- configuration/modules/gaming.nix | 7 +++-- devices/tuxedo/configuration.nix | 2 +- home-manager/gaming.nix | 7 ----- 5 files changed, 28 insertions(+), 35 deletions(-) diff --git a/configuration/base/networking.nix b/configuration/base/networking.nix index acaa9ba..d01ae7d 100644 --- a/configuration/base/networking.nix +++ b/configuration/base/networking.nix @@ -13,6 +13,9 @@ enable = true; wifi.powersave = false; }; + firewall = { + enable = true; + }; }; # Configure network proxy if necessary @@ -23,7 +26,6 @@ # services.printing.enable = true; # Open ports in the firewall. - networking.firewall.enable = true; # 443 Helldivers crashes internet otherwise # networking.firewall.allowedTCPPorts = [ 443 ]; # networking.firewall.allowedUDPPorts = [ 443 ]; diff --git a/configuration/base/programs.nix b/configuration/base/programs.nix index b76d6a3..ba0f459 100644 --- a/configuration/base/programs.nix +++ b/configuration/base/programs.nix @@ -8,30 +8,29 @@ programs.fish.enable = true; # List packages installed in system profile. To search, run: # $ nix search wget - environment.systemPackages = with pkgs; - [ - # utils - uutils-coreutils-noprefix - vim - curl - inetutils - dig + environment.systemPackages = with pkgs; [ + # utils + uutils-coreutils-noprefix + vim + curl + inetutils + dig - rar - zstd - xz - p7zip + rar + zstd + xz + p7zip - libva-utils - smartmontools - appimage-run + libva-utils + smartmontools + appimage-run - # dicts - nuspell - hunspellDicts.en-gb-large + # dicts + nuspell + hunspellDicts.en-gb-large - # For cursor in steam? - xsettingsd - xorg.xrdb - ]; + # For cursor in steam? + xsettingsd + xorg.xrdb + ]; } diff --git a/configuration/modules/gaming.nix b/configuration/modules/gaming.nix index f5a2326..d878c75 100644 --- a/configuration/modules/gaming.nix +++ b/configuration/modules/gaming.nix @@ -8,14 +8,13 @@ programs.gamescope = { enable = true; # capSysNice = true; - # args = [ - # "-H 1080" - # ]; + args = [ + "-H 1080" + ]; }; programs.steam = { enable = true; remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play - dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server gamescopeSession.enable = true; protontricks.enable = true; extraCompatPackages = [ pkgs.proton-ge-bin ]; diff --git a/devices/tuxedo/configuration.nix b/devices/tuxedo/configuration.nix index 848cd02..bd1c1ab 100644 --- a/devices/tuxedo/configuration.nix +++ b/devices/tuxedo/configuration.nix @@ -54,7 +54,7 @@ dumpcap.enable = true; }; - programs.gpu-screen-recorder.enable = true; # For promptless recording on both CLI and GUI + # programs.gpu-screen-recorder.enable = true; # For promptless recording on both CLI and GUI # programs.obs-studio = { # enable = true; diff --git a/home-manager/gaming.nix b/home-manager/gaming.nix index b1c3b8f..328c0e2 100644 --- a/home-manager/gaming.nix +++ b/home-manager/gaming.nix @@ -40,13 +40,6 @@ in # Cheat engine scanmem - # gamescope wrapper - (pkgs.writeShellApplication { - name = "gscope"; - runtimeInputs = [ pkgs.gamescope ]; - text = "gamescope -H 1080 -- \"$@\""; - }) - # proton with ja_JP (pkgs.writeShellApplication { name = "umu-ja";