Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Zeigt eure NixOS "Skilltrees" her (eure 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!
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
}
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
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.
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).
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.
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.
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:
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:
# 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
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:
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
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
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
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.
@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?
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.
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)