From 62b1cd72db56b1f16eff03ff3743d23314a9c1cc Mon Sep 17 00:00:00 2001 From: "root@nixos-nas" <> Date: Sun, 15 Jun 2025 09:22:59 +0000 Subject: [PATCH] disabled udev-settle --- configuration.nix | 79 ++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/configuration.nix b/configuration.nix index 75b0f91..bfcc6a8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,19 +1,19 @@ { config, pkgs, ... }: let - hdmiHandler = pkgs.writeShellScript "hdmi-handler" '' + hdmiHandler = pkgs.writeShellScript "hdmi-display-manager" '' #!/usr/bin/env bash - PORT="/sys/class/drm/card0-HDMI-A-1/status" - USER="nicole" + set -euo pipefail + PORT=$(ls /sys/class/drm/card*-HDMI-A-*/*status 2>/dev/null | head -n1 || true) + [[ -z "$PORT" ]] && exit 0 + status=$(cat "$PORT" || echo "disconnected") - read status < "$PORT" if [[ "$status" == "connected" ]]; then - runuser -l "$USER" -c "systemctl --user start kodi.service" - # runuser -l "$USER" -c "systemctl --user start vm-viewer@ha-vm.service" + systemctl start display-manager.service else - runuser -l "$USER" -c "systemctl --user stop vm-viewer@ha-vm.service" || true - runuser -l "$USER" -c "systemctl --user stop kodi.service" + systemctl stop display-manager.service fi + exit 0 ''; in { @@ -59,13 +59,21 @@ in users.users.nicole = { isNormalUser = true; hashedPassword = "$6$p73d5mOLoSuJGOol$KRlszaPXZK9/frADlfR3kAr/57DD5f4.CPTGNNX80QWEWFE5y.bM1WiZwmRHiAlrws3q/zCDQ6AqeSyCUX.8U/"; - extraGroups = [ "wheel" "docker" "libvirtd" ]; - linger = true; + extraGroups = [ "wheel" "docker" "libvirtd" "video" "render" ]; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGAsiKDWCwyf1usprg3K6Zk0xE9S4DX6+Bc4+nIOZGmf drezil@Manticore" ]; }; + users.users.kodi = { + isNormalUser = true; + home = "/home/kodi"; + description = "Kodi Auto-Login User"; + extraGroups = [ "video" "render" ]; # GPU-/DRM-Zugriff + linger = true; # User-Scope darf headless laufen + # kein wheel ⇒ kein sudo + }; + system.stateVersion = "25.05"; # ← einmalig festnageln security.sudo.wheelNeedsPassword = false; @@ -77,8 +85,10 @@ in serviceConfig.ExecStart = "/run/current-system/sw/bin/zfs-prune-snapshots -r --keep=2w"; startAt = "daily"; }; - - + systemd.services.systemd-udev-settle.enable = false; + systemd.services.NetworkManager-wait-online.enable = false; + + # Wir pinnen den Kernel, bis ZFS 2.3.x für 6.13 bereit ist boot.kernelPackages = pkgs.linuxPackages_6_12; @@ -115,32 +125,31 @@ in ### Kodi & TV-Detect ##################################################### ########################################################################## + + services.xserver = { + enable = true; + videoDrivers = [ "modesetting" ]; # Intel iGPU + desktopManager.kodi = { + enable = true; + package = (pkgs.kodi.withPackages (kodiPkgs: with kodiPkgs; [ + jellyfin + netflix + mediacccde + mediathekview + sponsorblock + youtube + ])); + }; + displayManager.startx.enable = false; # nutzt LightDM intern + }; + services.displayManager.autoLogin = { + enable = true; + user = "kodi"; + }; + ### UDEV-Regel + Skript ################################################## services.udev.extraRules = '' ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="${hdmiHandler}" ''; - ## Kodi – GBM/Wayland Stand-alone ################################### - systemd.user.services.kodi = { - description = "Kodi Media Center (stand-alone)"; - # wird nur manuell/über den Udev-Hook gestartet → kein wantedBy nötig - # wantedBy = [ "default.target" ]; # auskommentieren, falls immer laufen soll - after = [ "graphical-session.target" ]; # optional - - serviceConfig = { - Type = "simple"; - ExecStart = "${pkgs.kodi}/bin/kodi-standalone"; - Restart = "on-failure"; - }; - }; - - ### Virt-Viewer Template-Unit (optional) ################################# - systemd.user.services."vm-viewer@" = { - description = "Virt-viewer fullscreen for %i"; - serviceConfig = { - ExecStart = "${pkgs.virt-viewer}/bin/virt-viewer --full-screen --wait --domain-name %i"; - Restart = "on-failure"; - }; - }; - }