Zeigt eure NixOS "Skilltrees" her (eure Konfigurationen und Setups)

D.S.i.u.S.

Lieutenant
Registriert
Feb. 2003
Beiträge
949
NixOS Konfigurationen und Setups

Dieser Thread ist für alle, die ihre Erfahrungen mit NixOS teilen und voneinander lernen möchten. Die Idee für diesen Thread entstand, weil ich seit dem 01.06.2024 NixOS privat nutze und unzufrieden mit den vorhandenen Anleitungen war. Dieser Thread soll den Einstieg in NixOS erleichtern, indem wir Informationen und Konfigurationen an einem Ort bündeln.

NixOS-Konfigurationen sind wie Skilltrees in einem Spiel. Die Anfänger können von den vorgestellten "Spielständen" profitieren. Man kann die vorgestellten "Skilltrees" als Ausgangspunkt für die eigene NixOS-Konfigurationen nutzen.

Ein paar Beispiele für "Skilltrees": configuration.nix, nvidia.nix, syncthing.nix, Home Manager, Flakes.

Am Anfang der Build-Vorstellung sollte eine Einzeiler-Bezeichnung stehen. Zum Beispiel:
Build-Bezeichnung: Release-Prinzip(Rolling, Stable, Hybrid), Desktop Environment (DE), Home Manager, Flakes und Besonderheiten.

NixOS gibt es in drei Versionen: Stable, Unstable(Rolling) und Hybrid(stable/unstable Mischung).
  • Stable: wird etwa alle sechs Monate veröffentlicht.
  • Unstable: Rolling-Release-NixOS
  • Hybrid: man kann in NixOS Stable Pakete aus dem Unstable-Channel beziehen.
Ausführliche Builds werden in einer Liste gesammelt.
Wenn ihr Verbesserungsvorschläge habt, lasst es mich wissen!

NixOS Builds:
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: KitKat::new() und konkretor
Nutze zwar selbst kein NixOS (hab aber schon Interesse), wollte aber mal diesen Link hier da lassen, falls du den noch nicht kennst:

https://nixos-and-flakes.thiscute.world/

Wurde mir zumindest schon oft als Einführung ans Herz gelegt
 
  • Gefällt mir
Reaktionen: D.S.i.u.S.
Build-Bezeichnung: Rolling, KDE Plasma, configuration.nix, hardware-configuration.nix, CachyOS Kernel, Nvidia Treiber, Wayland, Brother Drucker, syncthing.nix

Es gibt drei Klassen in NixOS: NixOS-User, NixVersteher und NixDev.
Dieser Build ist für die NixOS-User Charakterklasse und basiert auf der Basisfertigkeit Editieren.
Editieren ist eine sehr mächtige Fertigkeit. Man sollte versuchen, diese Fertigkeit so schnell wie möglich freizuschalten.
Man kann nämlich durch die Fertigkeit Editieren (nano,kate) fremde Fertigkeiten oder komplette Fertigkeitenbäume(z.B. configuration.nix) assimilieren.
Da der Build nur mit Basisfertigkeiten auskommt, benötigst du keine Kenntnisse in Nix(die Programmiersprache).

Aktive Fertigkeiten mit diesem Build:
Rolling-Release, automatisches Update, automatische Snapshots, Begrenzung der gespeicherten Systemzustände auf 3, Automatische Garbage Collection(7Tage), CachyOS Kernel, Nvidia-Treiber, Brother Drucker Treiber, Videobearbeitung & Gaming.

Mein Leveling Guide für NixOS:
1. Vorbereitung

  • Rolling-Release (unstable) aktivieren:
Zuerst besucht man die Konsole(Terminal), dort "leveln" wir bis wir die Fertigkeit Rolling-Release freischalten.
Die Konsole(Terminal) mit Strg + Alt + T öffnen.
Channel wechseln: sudo nix-channel --add https://nixos.org/channels/nixos-unstable nixos
Überprüfen: sudo nix-channel --list
Änderungen aktivieren + upgrade: sudo nixos-rebuild switch --upgrade
sudo reboot
  • Flakes in /etc/nixos/configuration.nix aktivieren:
configuration.nix öffnen: sudo nano /etc/nixos/configuration.nix oder kate /etc/nixos/configuration.nix
Hinzufügen: nix.settings.experimental-features = [ "nix-command" "flakes" ];
Aktivieren: sudo nixos-rebuild switch
  • Ordner erstellen und Dateien kopieren:
mkdir -p ~/nixos-config
sudo cp -r /etc/nixos/* ~/nixos-config/
Ich nutze Kate um die .nix Dateien zu bearbeiten.
Den Ordner mit .nix Dateien in Dolphin habe ich per Drag-and-Drop in "Orte"(Bilder,Downloads usw.) hinzugefügt. Alternative: man macht Rechtsklick auf Ordner und dann "Zu "Orte" hinzufügen".
In ~/nixos-config/ wird später flake.nix Datei erstellt.

2. home.nix und flake.nix in ~/nixos-config erstellen
Wenn man meine flake.nix als Vorlage nimmt, dann soll man in der Zeile home-manager.users.myusername = import ./home.nix den Benutzernamen und in der Zeile nixos = nixpkgs.lib.nixosSystem den Hostnamen(nixos) ändern.

3. Anmerkungen
  • Flake habe ich für cachyOS Kernel aktiviert. chaotic-nyx
  • Home Manager habe ich für Autostart von Steam( -silent) aktiviert
  • Man kann je nach Bedarf die Zeile mit ./syncthing.nix und ./nvidia-open-latest.nix in configuration.nix entweder auskommentieren (durch Voranstellen eines #) oder ganz löschen.
  • Meine nix Dateien funktionieren, aber kein Anspruch auf Richtigkeit.
  • System wird mit nix flake update und sudo nixos-rebuild switch --flake ~/nixos-config --impure aktualisiert.
  • Für nix flake update habe Alias "nfu" und für sudo nixos-rebuild switch --flake ~/nixos-config --impure habe ich "nrs"
  • nfu: Aktualisiert die Inputs einer Flake auf die neuesten Versionen.
  • nrs: Übernimmt die Änderungen in der Konfiguration und bringt das System auf den neuesten Stand.
configuration.nix:
Bash:
# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      ./nvidia-open-latest.nix
      ./syncthing.nix
    ];

  # Kernel
  boot.kernelPackages = pkgs.linuxPackages_cachyos;

  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  # Begrenzung der Rollback-Einträge
   boot.loader.systemd-boot.configurationLimit = 3;

  networking.hostName = "nixos"; # Define your hostname.
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.

  # Configure network proxy if necessary
  # networking.proxy.default = "http://user:password@proxy:port/";
  # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";

  # Enable networking
  networking.networkmanager.enable = true;

  # Set your time zone.
  time.timeZone = "Europe/Berlin";

  # Select internationalisation properties.
  i18n.defaultLocale = "de_DE.UTF-8";

  i18n.extraLocaleSettings = {
    LC_ADDRESS = "de_DE.UTF-8";
    LC_IDENTIFICATION = "de_DE.UTF-8";
    LC_MEASUREMENT = "de_DE.UTF-8";
    LC_MONETARY = "de_DE.UTF-8";
    LC_NAME = "de_DE.UTF-8";
    LC_NUMERIC = "de_DE.UTF-8";
    LC_PAPER = "de_DE.UTF-8";
    LC_TELEPHONE = "de_DE.UTF-8";
    LC_TIME = "de_DE.UTF-8";
  };

  # Enable OpenGL
   hardware.graphics.enable = true;
   hardware.graphics.enable32Bit = true;

  # Enable the X11 windowing system.
  services.xserver.enable = true;
  services.displayManager.sddm.enable = true;
  services.displayManager.sddm.wayland.enable = true;

  # Enable the Plasma 6 (KDE 6) desktop environment
  services.desktopManager.plasma6.enable = true;

  # Configure keymap in X11
  services.xserver.xkb.layout = "de";
  services.xserver.xkb.variant = "";

  # Configure console keymap
  console.keyMap = "de";

  # Enable CUPS to print documents & Brother Drucker Treiber
  services.printing.enable = true;
  services.printing.drivers = [
  pkgs.brlaser
  ];

  # Enable sound with pipewire.
  hardware.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    jack.enable = true;

    # use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.myusername = {
    isNormalUser = true;
    description = "myusername";
    extraGroups = [ "networkmanager" "wheel" ];
  };

  # Steam
  programs.steam.enable = true;

  # Garbage Collection
  nix.gc = {
        automatic = true;
        dates = "weekly";
        options = "--delete-older-than 7d";
    };

  # Firefox.
  programs.firefox = {
    enable = true;
    preferences = {
        "widget.use-xdg-desktop-portal.file-picker" = 1;
        "browser.tabs.loadBookmarksInTabs" = true;
        "full-screen-api.warning.delay" = -1;
        "full-screen-api.warning.timeout" = 0;
        "ui.tooltip.delay_ms" = 5000;
    };
};

  # Thunderbird
  programs.thunderbird.enable = true;

  # OBS-Studio
  programs.obs-studio.enable = true;

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;

  nix.settings.experimental-features = [ "nix-command" "flakes" ];
  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  #  The Nano editor is also installed by default.
     brave
     fastfetch
     gimp
     git
     haruna
     htop
     inkscape
     joplin-desktop
     kdePackages.filelight
     kdePackages.kate
     kdePackages.kdenlive
     kdePackages.konversation
     kdePackages.kup
     kdePackages.ksystemlog
     kdePackages.xdg-desktop-portal-kde # Für Firefox
     keepassxc
     krita
     # libva-utils
     # libsForQt5.qt5.qtwayland
     lutris
     mangohud
     onlyoffice-bin
   # opensnitch-ui
     pam_u2f
     unzip
     xorg.xlsclients # List client applications running on a display
     yt-dlp_git
     yubikey-manager
     yubikey-personalization-gui
 ];

  services.udev.packages = [ pkgs.yubikey-personalization ];
  security.pam.services = {
  sudo.u2fAuth = true;
  };

  # Some programs need SUID wrappers, can be configured further or are
  # started in user sessions.
  # programs.mtr.enable = true;
  # programs.gnupg.agent = {
  #   enable = true;
  #   enableSSHSupport = true;
  # };

  # List services that you want to enable:

  # Enable the OpenSSH daemon.
  # services.openssh.enable = true;

  # Open ports in the firewall.
  # networking.firewall.allowedTCPPorts = [ ... ];
  # networking.firewall.allowedUDPPorts = [ ... ];
  # Or disable the firewall altogether.
  # networking.firewall.enable = false;

  # OpenSnitch (Application Firewall; opensnitch-ui in environment.systemPackages)
  # services.opensnitch.enable = true;
  # services.passSecretService.enable = true;

  # KDE Connect
  programs.kdeconnect.enable = true;
 
 # Aliases für alle Shells
  environment.shellAliases = {
  nfu = "cd ~/nixos-config && nix flake update";
  nrs = "sudo nixos-rebuild switch --flake ~/nixos-config --impure";
};

  system.stateVersion = "24.05"; # Don't change it bro

}
flake.nix:
Bash:
{
  description = "NixOS configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, chaotic, home-manager }: {
    nixosConfigurations = {
      nixos = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";

        modules = [
          ./configuration.nix
          chaotic.nixosModules.default

          # Home Manager Modul einbinden
          home-manager.nixosModules.home-manager
          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;

            # Benutzerkonfiguration aus ./home.nix importieren
            home-manager.users.myusername = import ./home.nix;
          }
        ];
      };
    };
  };
}
home.nix mit "Autostart von Steam":
Bash:
{ config, pkgs, ... }:

{
  # Home Manager stateVersion - Muss mit deiner der ursprünglich installierten Systemversion übereinstimmen
  home.stateVersion = "24.05";

  # Autostart von Steam
  home.file = {
    ".config/autostart/steam.desktop".text = ''
      [Desktop Entry]
      Name=Steam
      Exec=steam -nochatui -nofriendsui -silent
      Icon=steam
      Terminal=false
      Type=Application
      Categories=Network;FileTransfer;Game;
      MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink;
      Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends;
      PrefersNonDefaultGPU=true
      X-KDE-RunOnDiscreteGpu=true
    '';
  };
}
syncthing.nix:
Bash:
{ config, pkgs, ... }:

{
  services.syncthing = {
    enable = true;
    user = "myusername";
    dataDir = "/home/myusername";  # Speicherort für neue Ordner
    configDir = "/home/myusername/.config/syncthing";
  };
}
nvidia-open-latest.nix
Bash:
{ config, pkgs, ... }:
{
  # Load nvidia driver for Xorg and Wayland
   services.xserver.videoDrivers = ["nvidia"];
   hardware.nvidia = {
     modesetting.enable = true;
     powerManagement.enable = false;
     open = true;
     nvidiaSettings = true;
     package = config.boot.kernelPackages.nvidiaPackages.latest;
    };
}

Nicht mehr aktive "Bausteine"
services.xserver.videoDrivers = ["NVK"];
# Logitech wireless mouse
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
# OpenSnitch (Application Firewall; opensnitch-ui in environment.systemPackages)
services.opensnitch.enable = true;
services.passSecretService.enable = true;

hardware-configuration.nix
# Automount Samsung SSD860PRO2TB
fileSystems."/run/media/my-username/108b1e58-5f25-4835-aa5b-1bfc729085e2" =
{ device = "/dev/disk/by-uuid/108b1e58-5f25-4835-aa5b-1bfc729085e2";
fsType = "ext4";
options = [ "defaults" ];
};
Es geht auch ohne Konsole: In Dolphin Rechtsklick auf "Dein Laufwerk (sda)" -> Eigenschaften -> Einhängepunkt kopieren und dann in hardware-configuration.nix neuen Eintrag für Automount erstellen und Einhängepunkt einfügen. Die UUID in der Zeile fileSystems und device ist identisch.
Änderungen aktivieren: sudo nixos-rebuild switch


Fortsetzung folgt...
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: rallyco und Utensil1538
Ich bin noch uneinig darüber, ob ich für Autoupdate nicht einfach system.autoUpgrade.enable = true; statt
system.autoUpgrade.enable = true;
system.autoUpgrade.dates = "04:40";
system.autoUpgrade.persistent = true;
verwenden soll.
Laut systemctl list-timers startet nixos-upgrade.timer zur gleichen Zeit auf die Minute genau mit Bootvorgang.

persistent sagt doch nur aus, dass die Aktualisierung nachgeholt werden muss, wenn es um 04:40 nicht möglich war.
Ich muss noch überprüfen, wie es sich mit nur system.autoUpgrade.enable = true; verhält. Ob es dann auch zusammen mit Booten stattfindet.
Bildschirmfoto_20240606_170718.png

Update 07.06.24:
Die Zeilen system.autoUpgrade.dates = "04:40"; und system.autoUpgrade.persistent = true; sind nicht nötig. system.autoUpgrade.enable = true; ist ausreichend. Die Systemaktualisierung ist bereits durch, bevor man Desktop sieht (LAN-Verbindung).

Bildschirmfoto_20240607_143133.png
 
Zuletzt bearbeitet:
Ich habe jetzt ein paar Textbausteine für die configuration.nix hinzugefügt:
# Open-Source-Vulkan-Treiber NVK (neuer Eintrag)
# Steam (neuer Eintrag)
# systemweite Pakete (ergänzt)
# OpenSnitch (Application Firewall) (neuer Eintrag)
# Open ports for KDE Connect (neuer Eintrag)
# Logitech wireless mouse (neuer Eintrag)

Die Installation von Steam, OpenSnitch und Syncthing erfolgt nicht über environment.systemPackages weil diese Programme spezielle systemweite Konfigurationen oder Dienste benötigen. OpenSnitch braucht noch zusätzlich opensnitch-ui in environment.systemPackages.

Als Nächstes werde ich Home Manager installieren und "Starting Steam automatically in background" einrichten.

NixOS Unstable hat jetzt Mesa 24.1.1 bekommen und deswegen teste ich jetzt NVK Treiber für meine Nvidia RTX 4080.

Einige Programme sind am Meckern, wenn man proprietäre Nvidia Treiber verwendet (trotz nixpkgs.config.allowUnfree = true;). Halloy IRC macht es zum Beispiel gerne und ein paar andere auch noch.
Wenn man diese Programme über Konsole startet, dann kommt DRM kernel driver 'nvidia-drm' in use. NVK requires nouveau.

Habe ich noch zum ersten Mal einen Passwortmanager + Browser Erweiterung installiert. Ich muss es noch richtig einrichten.
 
Zuletzt bearbeitet:
Es gab "big opengl cleanup" Quelle
  • rename hardware.opengl to hardware.graphics
  • remove hardware.opengl.driSupport, which does nothing
  • remove hardware.opengl.setLdLibraryPath, which should never be done
  • rename hardware.opengl.driSupport32Bit to hardware.graphics.enable32Bit
  • lost of small docs / formatting cleanups
Mir ist zwei Tage lang nicht aufgefallen, dass die automatische Systemaktualisierung nicht funktioniert hat. Jetzt kenne ich die Ursache. NixOS führt Aktualisierungen atomar durch, was bedeutet, dass eine fehlerhafte configuration.nix das gesamte Update verhindert. Es werden
entweder alle Änderungen erfolgreich angewendet oder keine.

Ich habe
# Enable OpenGL
hardware.graphics = {
enable = true;
driSupport32Bit = true;
};
durch
# Enable OpenGL
hardware.graphics.enable = true;
hardware.graphics.enable32Bit = true;
ersetzt.

Ich habe überlegt, noch zwei Bausteine in configuration.nix einzubauen:
# Create an email notification service for failed jobs
systemd.services."notify-email@" =
let address = "system@${config.mail.server}";
in {
enable = config.mail.enable;
environment.SERVICE_ID = "%i";
script = ''
TEMPFILE=$(mktemp)
echo "From: ${address}" > $TEMPFILE
echo "To: ${address}" >> $TEMPFILE
echo "Subject: Failure in $SERVICE_ID" >> $TEMPFILE
echo -e "\nGot an error with $SERVICE_ID\n\n" >> $TEMPFILE
set +e
systemctl status $SERVICE_ID >> $TEMPFILE
set -e
${pkgs.msmtp}/bin/msmtp \
--file=${config.homePath}/.config/msmtp/config \
--account=system \
${address} < $TEMPFILE
'';
};
# Send an email whenever auto upgrade fails
systemd.services.nixos-upgrade.onFailure =
lib.mkIf config.systemd.services."notify-email@".enable
[ "notify-email@%i.service" ];

}
Bin mir aber noch sicher, ob das so funktionieren wird. Ich muss es testen.
 
Zuletzt bearbeitet:
GC(Garbage collection) verursacht Probleme, weil KDE Plasma absolute Pfade für "launchers" in /home/username/.config/plasma-org.kde.plasma.desktop-appletsrc verwendet. In der Datei steht z.B. file:///nix/store/xxxx/firefox.desktop statt applications:firefox.desktop

Wenn man Programme an die Fensterleiste anheftet, sieht es nach GC manchmal so aus:
Screenshot_20240801_215843.png

Sowohl Linksklick als auch Rechtsklick funktionieren wie erwartet. Mit der linken Maustaste wird das entsprechende Programm geöffnet, und während es läuft, wird das "leere" Symbol durch das richtige Symbol ersetzt. Wenn das Programm geschlossen wird, erscheint wieder ein "leeres" Symbol.

Alle Dateien im /nix/store, die nicht mehr von einem aktiven Profil referenziert werden, gelten als nicht mehr benötigt und können gelöscht werden. So arbeitet GC. Pfade in plasma-org.kde.plasma.desktop-appletsrc bleiben aber unverändert. Die Pfade zu Programmen in /nix/store sind dynamisch und können sich ändern, wenn das System aktualisiert oder die Garbage Collection ausgeführt wird.

Ich habe einen Script erstellt, dass die Pfade wie z.B.: file:///nix/store/xxxx/firefox.desktop durch applications:firefox.desktop ersetzt.

Das Skript im Verzeichnis "/home/username/scripts" erstellen:
mkdir -p /home/username/scripts
nano /home/username/scripts/fix-plasma-icons.sh
Inhalt:
#!/run/current-system/sw/bin/bash

# Vorherige Pfade anzeigen
echo "Vorherige Pfade:"
grep 'launchers' ~/.config/plasma-org.kde.plasma.desktop-appletsrc

# Pfade in der plasma-org.kde.plasma.desktop-appletsrc Datei ersetzen
sed -i 's|file:///nix/store/[^/]*/share/applications/|applications:|' ~/.config/plasma-org.kde.plasma.desktop-appletsrc

# Spezieller Fall für Thunderbird und Firefox
sed -i 's|file:///nix/store/[^/]*/share/applications/thunderbird.desktop|applications:thunderbird.desktop|' ~/.config/plasma-org.kde.plasma.desktop-appletsrc
sed -i 's|file:///nix/store/[^/]*/share/applications/firefox.desktop|applications:firefox.desktop|' ~/.config/plasma-org.kde.plasma.desktop-appletsrc

# Nachherige Pfade anzeigen
echo "Nachherige Pfade:"
grep 'launchers' ~/.config/plasma-org.kde.plasma.desktop-appletsrc

# KDE Plasma neu laden
pkill plasmashell
nohup plasmashell > /dev/null 2>&1 &
Skript ausführbar machen:
chmod +x /home/username/scripts/fix-plasma-icons.sh
In Konsole manuell ausführen:
/home/username/scripts/fix-plasma-icons.sh
 
Zuletzt bearbeitet:
Update 25.08.2024
Ich habe # Kernel Baustein um paar Zeilen für Nvidia GraKa ergänzt:
boot.initrd.kernelModules = [
"nvidia"
"nvidia_drm"
"nvidia_modeset"
"nvidia_uvm"
];
boot.kernelParams = [ "nvidia_drm.modeset=1" "nouveau.modeset=0" ];

YubiKey 5 NFC für Passwortlose Authentifizierung (sudo) einrichten war einfacher als ich dachte.
sudo benutzen, ohne Passwort einzugeben, ist schon geil. Einfach den YubiKey berühren, um sich zu verifizieren.

1. mkdir -p ~/.config/Yubico
2. pamu2fcfg > ~/.config/Yubico/u2f_keys und den YubiKey berühren.
3. pam_u2f und yubikey-personalization-gui unter environment.systemPackages = with pkgs; eintragen
4. Zusätzlich noch einen "Baustein" in configuration.nix eintragen:
services.udev.packages = [ pkgs.yubikey-personalization ];
security.pam.services = {
login.u2fAuth = true;
sudo.u2fAuth = true;
};
login.u2fAuth = true; werde ich wahrscheinlich entfernen, weil ich Passwort in SDDM eingeben und dann YubiKey berühren muss. YubiKey bleibt aber in der Wohnung. Ohne große Leiter oder die Tür mit Gewalt aufzubrechen, kommt keiner rein.

Ich teste zurzeit etwas Neues aus. Es wird wahrscheinlich system.autoUpgrade.enable = true;(Automatische Systemaktualisierung) ersetzen.
Aktualisieren und herunterfahren:
1.
nano ~/.local/share/applications/update-and-shutdown.desktop
Inhalt der Datei:
[Desktop Entry]
Name=Update and Shutdown
Comment=Updates NixOS and then shuts down the system
Exec=konsole -e bash -c "sudo nixos-rebuild switch --upgrade && sudo systemctl poweroff"
Icon=system-shutdown
Terminal=false
Type=Application
Categories=System;Utility;
2. Sicherstellen, dass die Datei ausführbar ist:
chmod +x ~/.local/share/applications/update-and-shutdown.desktop
3. Zu Favoriten hinzufügen
Screenshot_20240825_184358b.png

Wenn ich die neue Tastatur erhalten habe, versuche ich eine Tastenkombination auf eine Taste zu legen und dann einen Shortcut für Öffnen dieser Datei erstellen. Sollte das, was ich vorhabe möglich sein, dann muss ich nur die Taste drücken und YubiKey berühren, um "Update+Shutdown" auszulösen.

Nvidia Treiber habe ich von beta auf latest geändert.
Wird bald automatisch installiert und so kann ich auch meine update-and-shutdown.desktop Datei testen.
"linuxPackages.nvidiaPackages.latest: 555.58.02 -> 560.35.03"
https://nixpk.gs/pr-tracker.html?pr=336334
 
Zuletzt bearbeitet:
Ich kann mit der Modellierung als Spiel nichts anfangen, aber freue mich, dass du zu NixOS gefunden hast. Für mich war das Investment bisher wert. Meine Rechner laufen vollautomatisch und stabil und es gibt keine nervigen Dinge wie bei Ubuntu/Debian wo nach einer Weile die Boot-Partition voll läuft. Ich hoffe, dass das Projekt nicht an dem politischem Idealismus und Fanatismus der Entwickler scheitert.

Ein Tipp: Du kannst KDE Conect mit
Code:
programs.kdeconnect.enable = true;
einschalten und brauchst dann keine separaten Firewall-Einstellungen. Wie du bestimmt schon gemerkt hast, sind die Optionen mit "enable" meistens zu bevorzugen, weil sie sich um fast alle Nebeneffekte automatisch kümmern.
 
@dogecoin
Bei mir war 512mb /boot Partition nach 110 Tagen voll. Ich musste 2 efi Dateien(je ca.122mib; kernel 6.9.7) löschen um nixOS aktualisieren zu können. Atomare Updates halt, ganz oder gar nicht.
Ich denke, ich habe
Code:
boot.loader.systemd-boot.efi.canTouchEfiVariables = true;
in configuration.nix stehen. Muss ich es überprüfen, wenn ich am PC bin.
Ich denke, dass jede neue Systemgeneration, die einen neuen Kernel enthält, die efi Dateien vergrößert.
Ich könnte auch configurationLimit von 7 auf 3 reduzieren oder /boot auf 1TB vergrößern.
 
Ich habe vergessen zu schreiben, dass ich folgende Einstellungen habe, die nach 14 Tagen alte Generationen löschen.

Code:
nix = {
    gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 14d";
    };
};

Seitdem(!) ist meine Boot-Partition nie vollgelaufen. Bei Ubuntu/Debian gibt es AFAIK nichts dergleichen.

Code:
boot.loader.efi.canTouchEfiVariables = true;
habe ich auch.
 
@dogecoin
Ich habe GC mit "--delete-older-than 7d" und trotzdem war 512mb /boot Partition nach 110 Tagen voll.
Vielleicht wegen NVIDIA open GPU kernel modulen?
Ich belasse es jetzt bei GC 7d und 512 MB /boot und werde es weiter beobachten.

Wie groß sind eigentlich die Dateien in /boot/EFI/nixos?
Bildschirmfoto_20240928_140132.png
 
Zuletzt bearbeitet:
Eventuell erstellst du viel öfters neue Generationen als ich und daher lief es bei dir voll. Ich habe auch keine Nvidia-Treiber installiert.

Code:
$ ls -lh /boot/EFI/nixos
total 143M
-rwxr-xr-x 1 root root 11M 22. Sep 12:14 1zr1wgz8lnfl5bjdqj35halgqvvrkh1g-linux-6.6.47-bzImage.efi
-rwxr-xr-x 1 root root 21M 22. Sep 12:14 2wqbhrh70djynvys24pfrcdvrwb9mfsm-initrd-linux-6.6.48-initrd.efi
-rwxr-xr-x 1 root root 21M 22. Sep 12:14 6k93b8vwchb3f6xl7f0ddpb18gw5wdjs-initrd-linux-6.6.50-initrd.efi
-rwxr-xr-x 1 root root 11M 22. Sep 12:14 7v544hrwb4c5cb42d6cyfqvcirqz19jv-linux-6.6.51-bzImage.efi
-rwxr-xr-x 1 root root 11M 22. Sep 12:14 bmyh7a4j9xim7xxc5x1qk1qvlb2y7186-linux-6.6.48-bzImage.efi
-rwxr-xr-x 1 root root 11M 22. Sep 12:14 g92dmpcs7qaqz0jrh8vywl41qrczkmph-linux-6.6.50-bzImage.efi
-rwxr-xr-x 1 root root 21M 22. Sep 12:14 glgjqn3dv6icb6p565s9vzb8y5m3z6h7-initrd-linux-6.6.50-initrd.efi
-rwxr-xr-x 1 root root 21M 22. Sep 12:14 q6kmzmnxknxpadarr5r4r9vd91gfnmj1-initrd-linux-6.6.51-initrd.efi
-rwxr-xr-x 1 root root 21M 22. Sep 12:14 s1c32zf1m95drvrixnyw4ywvn2sy8lg3-initrd-linux-6.6.47-initrd.efi

Code:
$ df -h | grep -E 'Filesystem|boot'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       511M  144M  368M  29% /boot
 
D.S.i.u.S. schrieb:
Ich habe GC mit "--delete-older-than 7d" und trotzdem war 512mb /boot Partition nach 110 Tagen voll.
Meine boot-Partition ist 100 MB groß, geteilt mit Windows... (Standardgröße einer Windows Installation) :D
 
Ich habe jetzt # Begrenzung der Rollback-Einträge von 7 auf 3 reduziert. Sollte ein Rollback eine 122 MB efi Datei erzeugen, dann wäre /boot nicht größer als ca. 380 MB.

Einfach so, configuration.nix bearbeiten und Rollback-Einträge reduzieren und dann sudo nixos-rebuild switch ausführen wird nicht funktionieren, solange /boot voll ist.

Ich wusste nicht, welche Datei ich mit sudo rm /boot/efi/nixos.... löschen sollte, weil alle Dateien dasselbe Datum in Eigenschaften haben.

Dann habe ich die älteste nixos-generation-112.conf in /boot/loader/entries geöffnet. Dort stehen dann die Dateinamen, die man löschen kann, um die /boot Größe zu reduzieren, damit man sudo nixos-rebuild switch ausführen kann.

Vielleicht bläht boot.loader.efi.canTouchEfiVariables = true; die efi Dateien in /boot/efi/nixos/ auf.
Eigentlich brauche ich nicht mehr als 2 Rollback-Einträge(aktuelle und vorherige), weil NixOS stabil läuft.
 
Wenn bei mir immer voll war, hab ich immer sudo nix-collect-garbage -d genutzt. Löscht aber alle alten Iterationen.
 
@KitKat::new()
sudo nix-collect-garbage -d hatte ich als Erstes probiert. Es wurde nichts in /boot gelöscht. Nur etwas in /nix/store gelöscht(18 GB)
 
Da muss ich das nächste mal wohl noch genauer hinschauen. Dachte, dass ich sonst nichts gemacht habe und er gemeckert hat, weil /boot vollgelaufen ist. Leider ist gerade nichts mehr zu updaten ...
 
Stimmt, es löscht explizit nichts in /boot, ABER es scheint zumindest Dateien zum Löschen freizugeben.

1. Upgrade -> fehlgeschlagen weil /boot voll lief (/boot war dann voll)
2. sudo nix-collect-garbage -d (/boot immer noch voll)
3. Upgrade geht durch (/boot nicht mehr ganz so voll)
 
  • Gefällt mir
Reaktionen: D.S.i.u.S.
Zurück
Oben