5 Commits
Author SHA1 Message Date
andreas ad17b67774 add better wallpaper engine gui 2026-10-20 22:25:24 +02:00
andreas 6b8778c6be code server 2026-10-20 22:24:54 +02:00
andreas d2b4e9d1f1 WIP 2026-10-17 11:43:55 +02:00
andreas 36fbaf137e Harden RTL8125 recovery checks and reapply EEE settings 2026-10-17 10:04:48 +02:00
andreas 8c2dbe4775 Update RTL8125 driver to 9.018.00 2026-10-17 07:01:38 +02:00
8 changed files with 265 additions and 31 deletions
Generated
+198 -14
View File
@@ -91,6 +91,31 @@
"type": "github"
}
},
"bun2nix": {
"inputs": {
"flake-parts": "flake-parts",
"import-tree": "import-tree",
"nixpkgs": [
"linux-wallpaper-engine",
"nixpkgs"
],
"systems": "systems_2",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1770895533,
"narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=",
"owner": "nix-community",
"repo": "bun2nix",
"rev": "c843f477b15f51151f8c6bcc886954699440a6e1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "bun2nix",
"type": "github"
}
},
"codex-desktop": {
"inputs": {
"flake-utils": "flake-utils",
@@ -175,6 +200,24 @@
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
@@ -195,7 +238,7 @@
},
"flake-utils-plus": {
"inputs": {
"flake-utils": "flake-utils_2"
"flake-utils": "flake-utils_3"
},
"locked": {
"lastModified": 1715533576,
@@ -216,6 +259,24 @@
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"inputs": {
"systems": "systems_5"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
@@ -311,6 +372,21 @@
"type": "github"
}
},
"import-tree": {
"locked": {
"lastModified": 1763762820,
"narHash": "sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0=",
"owner": "vic",
"repo": "import-tree",
"rev": "3c23749d8013ec6daa1d7255057590e9ca726646",
"type": "github"
},
"original": {
"owner": "vic",
"repo": "import-tree",
"type": "github"
}
},
"json": {
"flake": false,
"locked": {
@@ -369,6 +445,26 @@
"type": "github"
}
},
"linux-wallpaper-engine": {
"inputs": {
"bun2nix": "bun2nix",
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1792046320,
"narHash": "sha256-AM22WLmtSfXw/AKKTEVBpSTZ+ksc8aWTwLyu/xyTRSs=",
"owner": "jagrat7",
"repo": "linux-wallpaper-engine",
"rev": "f52102134ea4205a422eb93cc5550e8568a8d769",
"type": "github"
},
"original": {
"owner": "jagrat7",
"repo": "linux-wallpaper-engine",
"type": "github"
}
},
"millennium": {
"inputs": {
"millennium-src": "millennium-src",
@@ -412,16 +508,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1791883866,
"narHash": "sha256-yvkDdToRZ4IgPc9tSBzzCYJvTLf8n5eE3rgUkpCuD5A=",
"lastModified": 1772624091,
"narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a033e66ab94a6bedf2c3d58d93a36319d3cbbbaf",
"rev": "80bdc1e5ce51f56b19791b52b2901187931f5353",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-26.05",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
@@ -442,6 +538,21 @@
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1769909678,
"narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "72716169fe93074c333e8d0173151350670b824c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1791956154,
@@ -459,6 +570,22 @@
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1791883866,
"narHash": "sha256-yvkDdToRZ4IgPc9tSBzzCYJvTLf8n5eE3rgUkpCuD5A=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a033e66ab94a6bedf2c3d58d93a36319d3cbbbaf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-26.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1789286504,
"narHash": "sha256-eiEK7cKZORNEvX0GeF3RtNEF/JXhgf2RqSp3230q13E=",
@@ -520,8 +647,9 @@
"codex-desktop": "codex-desktop",
"home-manager": "home-manager",
"lanzaboote": "lanzaboote",
"linux-wallpaper-engine": "linux-wallpaper-engine",
"millennium": "millennium",
"nixpkgs": "nixpkgs",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"simple-wallpaper-engine": "simple-wallpaper-engine",
"snowfall-lib": "snowfall-lib",
@@ -697,9 +825,61 @@
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"linux-wallpaper-engine",
"bun2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770228511,
"narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems_2"
"systems": "systems_4"
},
"locked": {
"lastModified": 1731533236,
@@ -724,19 +904,23 @@
"glslang-WallpaperEngine": "glslang-WallpaperEngine",
"json": "json",
"kissfft": "kissfft",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_3",
"quickjs": "quickjs",
"stb": "stb"
},
"locked": {
"lastModified": 1790172262,
"narHash": "sha256-gTnF4besYxSEFx0GTA35+/k81nE7WwvTIyJbIs1p20k=",
"path": "/home/andreas/Projects/linwallpaap/linux-wallpaperengine",
"type": "path"
"lastModified": 1792233763,
"narHash": "sha256-jT37HuSiRnYEJlmZwsu2+WqcaUIaLJXTkpZuXXCLX54=",
"owner": "Hion-V",
"repo": "linux-wallpaperengine",
"rev": "482ecf2b08a8111eed993dfcd44b6126b6e43c91",
"type": "github"
},
"original": {
"path": "/home/andreas/Projects/linwallpaap/linux-wallpaperengine",
"type": "path"
"owner": "Hion-V",
"ref": "Hion-V/prod",
"repo": "linux-wallpaperengine",
"type": "github"
}
},
"zen-browser": {
+2 -1
View File
@@ -48,11 +48,12 @@
url = "github:ezKEa/aagl-gtk-on-nix/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
};
wallpaperengine.url = "path:/home/andreas/Projects/linwallpaap/linux-wallpaperengine";
wallpaperengine.url = "github:Hion-V/linux-wallpaperengine/Hion-V/prod";
simple-wallpaper-engine = {
url = "github:Maxnights/simple-linux-wallpaperengine-gui";
inputs.nixpkgs.follows = "nixpkgs";
};
linux-wallpaper-engine.url = "github:jagrat7/linux-wallpaper-engine";
millennium = {
url = "github:SteamClientHomebrew/Millennium?dir=packages/nix";
inputs.nixpkgs.follows = "nixpkgs";
@@ -7,6 +7,17 @@
let
inherit (lib.my-namespace) enabled;
system = pkgs.stdenv.hostPlatform.system;
jagratWallpaperEngine =
(inputs.linux-wallpaper-engine.packages.${system}.default.override {
linux-wallpaperengine = inputs.wallpaperengine.packages.${system}.default;
}).overrideAttrs (old: {
# Forge 7 expects a default export, but the bundled Vite exposes named exports.
preBuild = (old.preBuild or "") + ''
substituteInPlace node_modules/@electron-forge/plugin-vite/dist/VitePlugin.js \
--replace-fail 'const vite_1 = __importDefault(require("vite"));' \
'const vite_1 = { default: require("vite") };'
'';
});
simpleWallpaperEngine =
inputs.simple-wallpaper-engine.packages.${system}.default.override {
# The upstream GUI package otherwise puts nixpkgs' unmodified
@@ -39,6 +50,8 @@ in
pkgs.libreoffice
pkgs.localsend
simpleWallpaperEngine
# Separate GUI for manual testing; keep the existing GUI's autostart.
jagratWallpaperEngine
# pkgs.vesktop
pkgs.obsidian
inputs.zen-browser.packages.x86_64-linux.default
+11 -2
View File
@@ -3,6 +3,13 @@ set -euo pipefail
nic="/sys/bus/pci/devices/$NIC_PCI"
bridge="/sys/bus/pci/devices/$NIC_BRIDGE"
log() { echo "rtl8125-recovery: $*"; }
disable_eee() {
local netdir
for netdir in "$nic"/net/*; do
[[ -e "$netdir/ifindex" ]] || continue
ethtool --set-eee "$(basename "$netdir")" eee off
done
}
# Let normal PCI and network resume finish before diagnosing anything.
sleep 10
@@ -28,9 +35,10 @@ if [[ -d "$nic" ]]; then
command=$(timeout 5 setpci -s "$NIC_PCI" COMMAND 2>/dev/null || true)
# Both memory decoding and bus mastering should be enabled on this host.
# Disconnected cables do not disable these PCI command bits.
if [[ "$power" != D3cold && "$command" =~ ^[[:xdigit:]]{4}$ ]] &&
if [[ "$power" == D0 && "$command" =~ ^[[:xdigit:]]{4}$ && "${command,,}" != ffff ]] &&
(( (16#$command & 6) == 6 )); then
log "PCI state healthy ($power, COMMAND=$command); no recovery needed."
disable_eee
exit 0
fi
# An administratively disabled NIC should not be automatically reset.
@@ -70,11 +78,12 @@ for ((attempt=0; attempt<20; attempt++)); do
iface=$(basename "${netdirs[0]}")
power=$(cat "$nic/power_state")
command=$(timeout 5 setpci -s "$NIC_PCI" COMMAND 2>/dev/null || true)
if [[ "$power" == D0 && "$command" =~ ^[[:xdigit:]]{4}$ ]] &&
if [[ "$power" == D0 && "$command" =~ ^[[:xdigit:]]{4}$ && "${command,,}" != ffff ]] &&
(( (16#$command & 6) == 6 )); then
# NetworkManager also reapplies the saved profile. Explicitly
# restore WoL here so recovery does not depend on its timing.
ethtool -s "$iface" wol g
disable_eee
if ! ethtool "$iface" | grep -Eq '^[[:space:]]*Wake-on: g$'; then
log "PCI recovered, but magic-packet WoL could not be confirmed."
exit 1
@@ -0,0 +1,17 @@
{ ... }:
{
services.code-server = {
enable = true;
user = "andreas";
group = "users";
host = "0.0.0.0";
port = 1337;
auth = "password";
hashedPassword = "$argon2i$v=19$m=4096,t=3,p=1$Njl5em15cVdqMVluSWJneWp4OUhObGgxZ0tnPQ$1AAVNLuuKv5qyno40QAxFVPeAydY+8XkEVovKYrkJN0";
disableTelemetry = true;
disableUpdateCheck = true;
};
networking.firewall.allowedTCPPorts = [ 1337 ];
}
@@ -10,14 +10,13 @@
{
imports = [
./code-server.nix
./tigervnc.nix
./hardware/hardware-configuration.nix
./hardware/realtek-r8125.nix
];
# Use the default kernel maintained by the stable nixpkgs release.
boot.kernelPackages = pkgs.linuxPackages;
# Bootloader.
# boot.loader.systemd-boot.enable = true; # managed by lanzaboote
boot.loader.efi.canTouchEfiVariables = true;
@@ -22,17 +22,6 @@
boot.supportedFilesystems = [ "ntfs" ];
boot.blacklistedKernelModules = [ "r8169" ];
systemd.services.disable-realtek-eee = {
description = "Disable Realtek Energy Efficient Ethernet";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.ethtool}/bin/ethtool --set-eee enp10s0 eee off";
RemainAfterExit = true;
};
};
fileSystems."/" =
@@ -0,0 +1,22 @@
{ pkgs, ... }:
{
# Keep the vendor driver tied to this host's selected kernel, including its
# build dependencies and module installation path supplied by nixpkgs.
boot.kernelPackages = pkgs.linuxPackages.extend (_final: prev: {
r8125 = prev.r8125.overrideAttrs {
version = "9.018.00";
# The mirror's top-level wrapper overrides BASEDIR with /lib/modules.
# Build in src directly so nixpkgs' kernel path reaches kbuild.
buildFlags = [ "-C" "src" "modules" ];
# Realtek's release mirrored by the DKMS maintainer. Pin the source rather
# than running the vendor installer or following a mutable branch.
src = pkgs.fetchFromGitHub {
owner = "awesometic";
repo = "realtek-r8125-dkms";
rev = "9a152bf920334aead090d2fb4d91f67a84923123"; # 9.018.00-1
hash = "sha256-yeQsyraNrms1Txm7ZAKeiPfF0tfN6WSHUo5DnvfFosw=";
};
};
});
}