Fireplace April 2026

NixOS mit HM & Flakes

Cark

Lt. Junior Grade
Registriert
Mai 2022
Beiträge
256
Hi zusammen,


ich wollte mal in die Runde fragen, wer von euch NixOS nutzt und ob ihr auch mit Flakes oder dem Home-Manager arbeitet.


Mich würde interessieren:
  • Nutzt ihr Flakes aktiv?
    • Wenn ja, wofür genau?

  • Verwendet ihr den Home-Manager?
    • In Kombination mit Flakes oder klassisch separat?

Ich bin selbst noch relativ neu bei NixOS und habe bisher alles ganz klassisch über die configuration.nix gelöst. Mein einziges „Experiment“ bisher war, auf den unstable Channel zu wechseln.


Deshalb würde mich einfach interessieren, wie andere das in der Praxis nutzen und ob sich der Einstieg in Flakes und Home-Manager eurer Meinung nach lohnt, gerade im Alltag.


Bin gespannt auf eure Setups und Erfahrungen 🙂


Viele Grüße
 
1) Ich nutze Flake für nix-cachyos-kernel und DankMeterialShell
Bash:
# /etc/nixos/flake.nix
{
  description = "NixOS configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    dms.url = "github:AvengeMedia/DankMaterialShell";
  };

  outputs = { self, nixpkgs, home-manager, nix-cachyos-kernel, dms, ... }: {
    nixosConfigurations = {
      pc = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";               
        modules = [
          ./configuration.nix
           {
        nixpkgs.overlays = [
          nix-cachyos-kernel.overlays.pinned
        ];
      }                                 
          home-manager.nixosModules.home-manager {
        home-manager.useGlobalPkgs = true;
        home-manager.useUserPackages = true;
       home-manager.backupFileExtension = "backup"; 
        home-manager.users.dsius = {
          imports = [
            ./sway.nix       
         ];
            };
          }
        ];
      };
    };
  };
}
Das sind Aliases
Bash:
 # Aliases für alle Shells
  environment.shellAliases = {
  nfu = "sudo sh -c 'cd /etc/nixos && nix flake update'";
  nrs = "sudo nixos-rebuild switch --flake /etc/nixos#pc";
};
Ich werde noch testen, ob ich zen4(amd)-cachyOS-Kernel überhaupt noch brauche, bzw mit zen Kernel vergleichen. Kompilieren von cachyOS-Kernel und nvidia open-module einbauen dauert ca. 25 Min. mit AMD 7800X3D. Die Kernel von NixOS werden nicht kompiliert und update läuft dann schnell durch. Würde ich DMS(DankMaterialShell) nicht brauchen, dann könnte es auch ohne flake gehen. Aber mit flake ist man flexibel, wenn man z.B. Hyprland, MangoWC oder Niri testen möchte.

Ich werde noch symlink erstellen, die nix Dateien aus /etc/nixos/ wieder nach home umziehen und mit Git Commit Signing(yubikey) absichern. Yubikey verwende ich schon für Passwordless sudo.
Grund: ich möchte VScodium loswerden, weil es eine Electron-basierte Anwendung ist. Mit Zed Editor kann man die Dateien, die in /etc/nixos/ liegen, nicht bearbeiten. Es gibt noch keine polkit-integration oder anders gesagt, es kommt kein Pop-up für Passworteingabe wie bei Kate, gnome-editor oder VScodium. Deswegen ist der Umzug. Git Commit Signing ist nur offline, damit ich weiß, dass niemand, außer mir die nix Dateien in home bearbeitet hat. Dort ist kein sudo nötig und man kann die Dateien mit Zed Editor bearbeiten. Helix oder Neovim möchte ich nicht verwenden, weil ich kein Programmierer bin. Nachdem man alles fertig konfiguriert hat, lässt man die nix Dateien in Ruhe. Nur manchmal, wenn man neue App installieren und testen möchte, dann füge ich es in configuration.nix unter systemPackages ein und mache mit nrs rebuild. Wenn man System aktualisieren möchte, dann nfu && nrs(Alias) und yubikey berühren.

2) Home Manager verwende ich mit flake.
Es geht natürlich auch ohne flake oder home-manager, wenn man KDE-Plasma oder Gnome hat.
Meine home.nix heißt sway.nix, weil ich dort sway WM konfiguriert habe. Ist noch nicht perfekt, aber es funktioniert.
Bash:
{ config, pkgs, lib, ... }:
{
home.stateVersion = "26.05";

   # Sway Konfiguration
  wayland.windowManager.sway = {
    enable = true;
    systemd.enable = true;
    systemd.xdgAutostart = true;
    systemd.dbusImplementation = "dbus";
    config = {
      modifier = "Mod4";

      # 1. Monitore
      output = {
        "DP-1" = { mode = "1920x1080@144Hz"; pos = "0 1080"; };
        "DP-4" = { mode = "1920x1080@144Hz"; pos = "0 1080"; };
        "HDMI-A-1" = { mode = "1920x1080@60Hz"; pos = "0 0"; };
        "HDMI-A-2" = { mode = "1920x1080@60Hz"; pos = "0 0"; };
       # "*" = { bg = "${./wallpaper.png} fill"; };
      };

      workspaceOutputAssign = [
  { workspace = "1"; output = "DP-1"; }
  { workspace = "3"; output = "DP-1"; }

  { workspace = "1"; output = "DP-4"; }
  { workspace = "3"; output = "DP-4"; }

  { workspace = "2"; output = "HDMI-A-1"; }
  { workspace = "2"; output = "HDMI-A-2"; }
      ];

      # 2. Eingabe
      input = {
        "*" = {
          xkb_layout = "de";
          xkb_options = "caps:escape";
         # repeat_delay = 600;
         # repeat_rate = 30;
           # Maus-Einstellungen
          accel_profile = "flat"; # Deaktiviert die Beschleunigung (1:1 Bewegung)
          pointer_accel = "0.5";  # Die Geschwindigkeit (-1.0 bis 1.0)
        };
      };

      # 3. Alle Keybindings in EINEM Block zusammengefasst
      keybindings = let
        mod = "Mod4";
      in lib.mkOptionDefault (
        # 3.1 Standard-Binds
        {
          "${mod}+Return" = "exec ${pkgs.foot}/bin/foot";
          "${mod}+d" = "exec ${pkgs.fuzzel}/bin/fuzzel";
          "${mod}+q" = "kill";
          "${mod}+f" = "fullscreen toggle";
          "${mod}+w" = "layout tabbed";
          "${mod}+Shift+r" = "reload";
          "${mod}+Escape" = "exec ${pkgs.wleave}/bin/wleave";
          "${mod}+b" = "exec ${pkgs.firefox}/bin/firefox";
          "${mod}+t" = "exec ${pkgs.thunderbird}/bin/thunderbird";
          "${mod}+KP_Enter" = "exec ${pkgs.vscodium}/bin/codium";
          "${mod}+Shift+Escape" = "exec ${pkgs.mission-center}/bin/mission-center";   
        #  "${mod}+v" = "exec cliphist list | fuzzel --dmenu | cliphist decode | wl-copy"; 


        }   
        //
        # 3.2 Binds für Workspaces (1-3)
        (lib.attrsets.mergeAttrsList (map (num: let
          ws = toString num;   
        in {
           "${mod}+${ws}" = "workspace number ${ws}";
               "${mod}+Alt+${ws}" = "move container to workspace ${ws}";
              # Numpad Zahlen
              "${mod}+KP_${ws}" = "workspace number ${ws}";
              "${mod}+Alt+KP_${ws}" = "move container to workspace ${ws}";
        }) [1 2 3 ]))
        // 
        # Fokus-Steuerung (HJKL)
        (lib.attrsets.concatMapAttrs (key: direction: {
          "${mod}+${key}" = "focus ${direction}";
          "${mod}+Shift+${key}" = "move ${direction}";
        }) {
          h = "left";
          j = "down";
          k = "up";
          l = "right";
        })
      );

   # ... andere Einstellungen ...
   # Neue Workspaces als Tabs starten
   workspaceLayout = "tabbed";
 
   startup = [
       # 1. Umgebungsvariablen für D-Bus und Systemd aktualisieren
       { command = "dbus-update-activation-environment --all"; }
       { command = "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway"; }
 
       # 2. Portale neu starten, damit sie die neuen Variablen (von Punkt 1) mitbekommen
       { command = "systemctl --user stop xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk && systemctl --user start xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk"; }
       { command = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; }
       { command = "${pkgs.firefox}/bin/firefox";}
     # { command = "${pkgs.brave}/bin/brave";}
       { command = "${pkgs.steam}/bin/steam -nochatui -nofriendsui -silent"; }
   ];
   gaps = {
    smartBorders = "no_gaps";   # "on", "off" oder "no_gaps"
    smartGaps = true;      # true oder false
  };
 
      # Swaybar entfernen oder durch waybar ersetzen
      bars = []; # z.B.{command = "waybar";}
    };
    extraConfig = ''
  # Schriftart (Native Sway Syntax)
  font pango:Fira Code 12

  # Farben (Native Sway Syntax)
  # class                 border    backgr.   text      indicator  child_border
  client.focused          #282C34 #282C34  #F2610D  #D2E3FD  #F2610D
  client.focused_inactive #282C34  #282C34  #ABB2BF #282C34  #282C34
  client.unfocused        #282C34 #282C34 #5c6370 #282C34  #282C34

   # Firefox
  for_window [app_id="firefox"] title_format "󰈹 Firefox"
 
  # VSCodium
  for_window [app_id="codium"] title_format "󰨞 VSCodium"
  for_window [class="VSCodium"] title_format "󰨞 VSCodium"

  # Foot
  for_window [app_id="foot"] title_format " Foot"

  # Thunderbird
  for_window [app_id="thunderbird"] title_format "󰇮 Thunderbird"

   # Schiebt das PiP-Fenster in Workspace 2
  for_window [title="Bild-im-Bild"] move window to workspace 2

  # Schiebt theLounge Chat in Workspace 2
  for_window [title="http://localhost:9000"] move window to workspace 2, title_format "#chat"

  # Spiele (Steam/Xwayland) auf Workspace 3 schieben
  for_window [class="Steam"] move container to workspace 3
  for_window [instance="steam_app_.*"] move container to workspace 3

  # Battle.net Launcher (Steam/Proton) floating machen
  for_window [title="Battle.net"] move window to workspace 3
  for_window [class="steam_app_.*" title="Battle.net"] floating enable
  for_window [instance="steam_app_.*" title="Battle.net Login"] floating enable, move position center

  # Taschenrechner
  for_window [title="Taschenrechner"] floating enable
 
# ----SCREENSHOTS----

# 1. Region (Super + Alt + A)
bindsym Mod4+Mod1+a exec grim -g "$(slurp)" "/home/dsius/Bilder/Bildschirmfotos/Screenshot_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Region gespeichert"

# 2. Aktueller Monitor (Super + Alt + S)
bindsym Mod4+Mod1+s exec swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name' | xargs -I {} grim -o {} "/home/dsius/Bilder/Bildschirmfotos/Monitor_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Monitor gespeichert"

# 3. Alle Monitore (Super + Alt + D)
bindsym Mod4+Mod1+d exec grim "/home/dsius/Bilder/Bildschirmfotos/Gesamt_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Kompletter Desktop gespeichert"

'';
  };
  # ====== Sway Config ENDE=======

xdg.mimeApps = {
  enable = true;
 
  defaultApplicationPackages = [
    pkgs.loupe
  ];
 
  defaultApplications = {
    "text/html" = "firefox.desktop";
    "x-scheme-handler/http" = "firefox.desktop";
    "x-scheme-handler/https" = "firefox.desktop";
    "inode/directory" = "org.gnome.Nautilus.desktop";
 
    "image/jpeg" = "org.gnome.Loupe.desktop";
    "image/png" = "org.gnome.Loupe.desktop";
    "image/gif" = "org.gnome.Loupe.desktop";
    "image/webp" = "org.gnome.Loupe.desktop";
    "image/svg+xml" = "org.gnome.Loupe.desktop";
  };
 
  associations.added = {
    "image/jpeg" = "org.gnome.Loupe.desktop";
    "image/png" = "org.gnome.Loupe.desktop";
    "inode/directory" = "org.gnome.Nautilus.desktop";
  };

  associations.removed = {
    "image/jpeg" = "brave-browser.desktop";
    "image/png" = "brave-browser.desktop";
    "image/gif" = "brave-browser.desktop";
    "image/webp" = "brave-browser.desktop";
    "image/svg+xml" = "brave-browser.desktop";
  };
};
 

# VSCodium - Save as root Erweiterung
   programs.vscode.profiles.default.extensions = [
          pkgs.vscode-extensions.yy0931.save-as-root-in-remote-ssh
        ];
# Fastfetch 
 programs.fastfetch = {
   enable = true;                           
    settings = {                             
     modules = [
          "title"
          "separator"
          "os"
        #  "host"
          "kernel"
          "monitor"
          "uptime"
          "packages"
          "wm"
          "shell"
          "terminal"
          "cpu"
          "gpu"
          "memory"
        #  "local_ip"
        #  "disk"
          "break"
          "colors"
          ];
          };
          };                                                     

 #  services.cliphist = {
 # enable = true;
 # allowImages = true;
#  systemdTargets = [ "sway-session.target" ];
 # extraOptions = [
#    "-max-items"
 #   "10"
#  ];
#  };

# Foot
programs.foot = {
    enable = true;


    settings = {
      main = {
        term = "xterm-256color";
        font = "Fira Code:size=11";
      };

      colors-dark = {
        background = "282C34"; # Hintergrund
        foreground = "D2E3FD"; # Text       
      };
    };
  };

# MPV media Player
  programs.mpv = {
    enable = true;
    package = pkgs.mpv;
    config = {
      vo = "gpu";
      hwdec = "no";
      gpu-api = "vulkan";
      video-sync = "audio";
      interpolation = "no";
      loop-file = "inf"; # Loop für Videos
    };
# MPV Scripts
    scripts = [
      pkgs.mpvScripts.thumbfast # High-performance on-the-fly thumbnailer for mpv
      pkgs.mpvScripts.uosc
    ];
  };
 
 programs.zed-editor = {
  enable = true;
  extensions = [ "nix" "toml" "rust" ];
  userSettings = {
    theme = {
      mode = "system";
      dark = "One Dark";
      light = "One Light";
    };
    hour_format = "hour24";
    vim_mode = false;
  };
};

# GTK Cursors
  home.pointerCursor = {
   package = pkgs.bibata-cursors;
    name = "Bibata-Modern-Ice";
    size = 14;
    gtk.enable = true;
 };
 
# GTK Icons + Theme
  gtk = {
    enable = true;
  #  theme = {
   #   name = "Orchis-Light";
  #    package = pkgs.orchis-theme;
#    };
    iconTheme = {
      name = "Tela";
      package = pkgs.tela-icon-theme;
    };     
  gtk4.extraConfig = {
    gtk-application-prefer-dark-theme = 0; # 0 für Light, 1 für Dark
  };
  };

# Desktop Ordner in Home ausblenden
  xdg.userDirs = {
    enable = true;
    createDirectories = false;
    desktop = "$HOME";
    };

# Fuzzel (Application Launcher)
  programs.fuzzel.enable = true;
 
# Wayland-Umgebungsvariablen
  home.sessionVariables = {
  screenshotDir = "/home/dsius/Bilder/Bildschirmfotos";
 
  XDG_CONFIG_DIRS = "/home/dsius/.config:/etc/xdg";
 
  XDG_DATA_DIRS = "/home/dsius/.nix-profile/share:/etc/profiles/per-user/rebellz/share:/run/current-system/sw/share:/nix/var/nix/profiles/default/share";
  GIO_EXTRA_MODULES = "1";
  STEAM_USE_XWAYLAND = "1";
  GTK_USE_PORTAL = "1";
     # Session / Desktop Info
  XDG_CURRENT_DESKTOP = "sway"; # Helps some apps recognize the DE
  XDG_SESSION_DESKTOP = "sway"; # Indicates Wayland session
  XDG_SESSION_TYPE = "wayland"; # Indicates Wayland session

  # Wayland Fixes
  QT_QPA_PLATFORM = "wayland"; # For Qt apps
  MOZ_ENABLE_WAYLAND = "1";
  NIXOS_OZONE_WL = "1"; # Electron (Discord, VSCode, Slack …)
  GDK_BACKEND = "wayland"; # For GTK apps

  # Nvidia spezifisch
  SWAY_UNSUPPORTED_GPU = "1";
  WLR_NO_HARDWARE_CURSORS = "1";
  LIBVA_DRIVER_NAME = "nvidia";
  GBM_BACKEND = "nvidia-drm";
  WLR_RENDERER = "vulkan";
  __GLX_VENDOR_LIBRARY_NAME = "nvidia";
  __GL_VRR_ALLOWED = "1";
  };

# BattleNet
  home.file."scripts/start-battlenet.sh" = {
  executable = true;
  text = ''
    #!/bin/sh
    # Proton Experimental Pfad
    export PROTONPATH="/home/dsius/.local/share/Steam/steamapps/common/Proton - Experimental"
    # Battle.net mit umu-run starten
    umu-run "/home/dsius/Games/battlenet/drive_c/Program Files (x86)/Battle.net/Battle.net Launcher.exe"
  '';
};
  xdg.desktopEntries."battlenet" = {
  name = "Battle.net";
  exec = "/home/dsius/scripts/start-battlenet.sh";
  icon = "/home/dsius/.icons/BattleNet32x32.png";
  comment = "Launch Battle.net with Proton Experimental";
  terminal = false;
  categories = [ "Game" ];
};

home.file.".steam/root/compatibilitytools.d/proton-ge-bin".source = pkgs.proton-ge-bin;

}
Dort steht z.B. etwas für
  • # VSCodium - Save as root Erweiterung
  • # Fastfetch
  • # MPV media Player
  • # MPV Scripts
  • # Desktop Ordner in Home ausblenden
  • # Wayland-Umgebungsvariablen
  • # BattleNet (UMU-Launcher)
  • # GTK Icons + Theme
  • # Foot
Monitor_2026-04-09_00-20-17.png
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Cark
Ah ok, interessant. Bezuglich der DMS: Bist du damit zufrieden und hast du auch einmal die Noctalia Shell getestet und kannst da einen Vergleich machen? Du meintest, ohne DMS würde es auch ohne Flakes gehen, heißt das im Umkehrschluss, dass DMS in environment.systemPackages = with pkgs; [ nicht funktionieren würde?

Deine Aliases machen auf jeden Fall Sinn. Ich habe auch öfter davon gehört, aber noch nie wirklich selber welche definiert. Wenn ich das Terminal offen habe, drücke ich die Pfeiltaste nach oben, dann aktualisiere und update ich mit sudo nixos-rebuild-switch --upgrade.

Die .nix-Dateien öffne und bearbeite ich ebenso im Terminal mit sudo nano. Du möchtest dafür jetzt Zed nutzen, habe ich das richtig verstanden?

Ansonsten echt cool, dass du mir was von deinen Config-Dateien gezeigt hast. Spannend - ein echtes Beispiel mit eigenen Ideen von einem NixOS-Nutzer zu haben.

Was würdest du in meinem Fall sagen? Mir ist es einfach nur wichtig, dass ich alle Anwendungen, Window Manager, Desktop-Umgebungen usw. über die "Repos" runterladen kann und dabei die aktuellste Version bekomme beim Updaten. Also quasi ähnlich wie bei Arch. Gibt es da für diesen Fall irgendeinen Grund für Flakes?

Unter Home-Manager kann ich mir noch wenig vorstellen, wo dann genau die Vorteile wären.
 
@Cark
Du brauchst nicht unbedingt Home Manager und Flakes.
Ich kenne dein System und DE/WM nicht. Man könnte auch Kernel gegen zen oder xanmod austauschen und die Sache mit Home Manager und flakes vergessen. Nvidia Inhaber sollen lieber LTS Kernel verwenden, weil es ab und zu Inkompatibilitäten zwischen Kernel und Treiber kommen kann. Ich verwende immer aktuellen Kernel und wenn kein rebuild wegen Nvidia Treiber möglich ist, dann wechsle ich Kernel bis Treiber-Kernel Problem gefixt wurde.

Es wird gesagt, dass DMS im Vergleich zu Noctalia einen deutlich größeren funktionalen Umfang hat. Als ich noch Waybar hatte, habe ich Noctalia nur kurz(5 Minuten) getestet und wieder deinstalliert. Irgendwas hat mir nicht gefallen. Habe ich schon vergessen. Mache ich wahrscheinlich noch ein Versuch.
Auf DMS Seite steht:
Native nixpkgs Available
DankMaterialShell is now available in nixpkgs unstable! If you're on NixOS unstable (26.05), see Installation - NixOS for the native nixpkgs installation method which doesn't require flakes.


Ich werde DankMaterialShell aus flake entfernen und unter environment.systemPackages eintragen.
Man kann Apps in NixOS auch als Option installieren. Das habe ich paar mal in configuration.nix stehen. Dank dir habe ich configuration.nix nochmal angeguckt und festgestellt, dass die Sache mit DMS doppelt gemoppelt ist. Ich habe DMS in flake und in configuration.nix als Option stehen.
Bash:
# DMS
  programs.dms-shell = {
  enable = true;
  systemd.enable = true;
    };
Muss ich etwas in configuration.nix aufräumen. Oben in NixOS Search kann man zwischen "Packages" und "Options" umschalten. Suche immer zuerst unter Options. Wenn dort nichts Sinnvolles auftaucht, nimm das Package.
Viele Optionen aktivieren im Hintergrund notwendige Daemons oder DBus-Services, die durch bloßes Hinzufügen zum Paket-Array nicht laufen würden. Ich suche zuerst nach Option und dann nach Package. Dann ist die Wahrscheinlichkeit geringer, dass etwas nicht funktioniert wie es soll.

Über Vorteile von flakes habe ich mir keine Gedanken gemacht. Ich habe flakes nur aktiviert, um an die Sachen zu kommen, die ich nicht über nixpkgs installieren kann. Das ist mein einziger Grund. Und ich habe home-manager als Modul über flakes installiert.

Home-Manager finde ich schon nützlich. Am Anfang stand bei mir nur etwas für Autostart von Steam(silent usw)
Einige Sachen kann man nicht über configuration.nix konfigurieren. Home Manager Option Search
Alles kann, nichts muss. Freiheit.
Man kann die Sachen, die man in Hyprland haben möchte, in hyprland-setup.nix definieren und dann mit
sudo nixos-rebuild switch --flake .#desktop-hyprland zu hyprland wechseln. Zusätzlich noch programs.hyprland.enable in configuration.nix hinzufügen.

Später zeige ich dir noch meine aktuelle configuration.nix.
 
  • Gefällt mir
Reaktionen: Cark
Ich nutze NixOS mit dem COSMIC Desktop auf einem Intel NUC 12, der mit einer Arc A770M und einem Core i7-12700H ausgestattet ist.

Da Noctalia meiner Einschätzung nach wesentlich verbreiteter ist als DMS, findet man zu Letzterem kaum Anschauungsmaterial. Ich habe Noctalia bereits unter KaOS und CachyOS in Verbindung mit Niri genutzt, bei beiden Distributionen war es schon standardmäßig in Niri integriert.

Danke für den Tipp mit den Optionen! Das ist mir tatsächlich noch nie aufgefallen, da ich bisher alle Programme einfach nur dem Paket-Array hinzugefügt habe.

Bezüglich Flakes habe ich nun herausgefunden, dass der Vorteil vor allem darin liegt, Pakete in spezifischen Versionen festzuhalten. Zudem ermöglichen sie den Zugriff auf Pakete direkt aus Git-Quellen, die im normalen Channel nicht verfügbar sind. Was den Home Manager betrifft, kann ich mir darunter noch am wenigsten vorstellen.
Ergänzung ()

Code:
{ config, pkgs, ... }:

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

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

  # Use latest kernel.
  boot.kernelPackages = pkgs.linuxPackages_latest;

  # Force Xe Driver
  boot.kernelParams = [
  "i915.force_probe=!5690"
  "xe.force_probe=5690"
];

  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";
  };

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

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

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

# Enable Cosmic login manager
services.displayManager.cosmic-greeter.enable = true;

# Enable Cosmic Desktop Environment
services.desktopManager.cosmic.enable = true;

services.ollama = {
  enable = true;
  package = pkgs.ollama-cpu;
  # Optional: preload models, see https://ollama.com/library
  loadModels = [ "qwen3-coder:30b"];
};

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

  programs.steam.enable = true;

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
  #  wget
  firefox
  vscodium
  heroic
  steam
  mangohud
  alpaca
  ];

  # 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;

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. It‘s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "25.11"; # Did you read the comment?
 
Zuletzt bearbeitet:
@Cark
Noctalia werde ich noch mal testen und mit DMS vergleichen.
Ich habe in configuration.nix Networkmanager durch systemd-networkd + resolved ausgetauscht, weil es besser mit theLounge funktioniert. Zusätzlich noch DNS eingetragen.
  • Sway extraSessionCommands funktionieren wahrscheinlich nicht oder teilweise sind die für Sway 1.12 gedacht
  • Steam habe ich als Option zusätzlich mit pkgs.proton-ge-bin
  • Firefox preferences sind möglicherweise nicht aktuell
Im Vergleich zu meiner configuration.nix hat deine Garbage Collection und auto-optimise-store nicht.
Bash:
# Garbage Collection
  nix.gc = {
        automatic = true;
        dates = "weekly";
        options = "--delete-older-than 7d";
  };
  nix.settings.auto-optimise-store = true;

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
      ./syncthing.nix
      ./nvidia-open-latest.nix
      ./thelounge.nix
     # ./nvidia-open-beta.nix     
    ];

  # Kernel
  # boot.kernelPackages = pkgs.linuxPackages_6_18;
  # CachyOSKernel
   boot.kernelPackages = pkgs.linuxPackagesFor pkgs.cachyosKernels.linux-cachyos-latest-zen4;

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

  # 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.

# Disable NetworkManager, use systemd-networkd + resolved
networking.networkmanager.enable = false;
networking.useDHCP = false;
systemd.network.enable = true;
services.resolved.enable = true;

systemd.network.networks."10-enp13s0" = {
  matchConfig.Name = "enp13s0";
  networkConfig = {
    Address = "192.168.178.24/24";    # feste IPv4 mit Subnetz
    Gateway = "192.168.178.1";        # FritzBox
    # Cloudflare DNS (v4 + v6)
    DNS = [
      "1.1.1.1"
      "1.0.0.1"
      "2606:4700:4700::1111"
      "2606:4700:4700::1001"
    ];
  };
};

  # 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";
  };

  # DMS
  programs.dms-shell = {
  enable = true;
  systemd.enable = true;
    };

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

  # Enable the X11 windowing system.
  services.xserver.enable = true;
 
  services.greetd = {
    enable = true;
    settings = {
      default_session = {
         command = "${pkgs.tuigreet}/bin/tuigreet --cmd '${pkgs.sway}/bin/sway --unsupported-gpu' --remember";   
        user = "dsius";
          };
    };
  };
 # environment.etc."greetd/environments".text = ''
 # sway --unsupported-gpu
 # '';
  # enable sway window manager
  programs.sway = {
    enable = true;
    wrapperFeatures.gtk = true;
    extraSessionCommands = ''
     # Erlaubt den Start auf Nvidia (ersetzt das --unsupported-gpu Flag)
      export SWAY_UNSUPPORTED_GPU="1"
  
      # QT & Wayland Fixes
      export QT_QPA_PLATFORM=wayland
      export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
  
      # Nvidia-spezifische Hardware-Beschleunigung
      export GBM_BACKEND=nvidia-drm
      export __GLX_VENDOR_LIBRARY_NAME=nvidia
  
      # Verhindert unsichtbaren Mauszeiger auf Nvidia
      export WLR_NO_HARDWARE_CURSORS="1"
'';
  };

  # 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.
  services.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.dsius = {
    isNormalUser = true;
    description = "dsius";
    extraGroups = [
     "wheel"
     "video"
      ];
  };

  services.udisks2.enable = true;

  # Steam
  programs.steam = {
  enable = true;
  extraCompatPackages = [
    pkgs.proton-ge-bin
  ];
};

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

  nix.settings.auto-optimise-store = true;

  # Firefox.
  programs.firefox = {
    enable = true;
   # languagePacks = [ "de" ];
    nativeMessagingHosts.packages = [ pkgs.firefoxpwa ];
    preferences = {
       # "intl.locale.requested" = "de";
       # "widget.use-xdg-desktop-portal.file-picker" = 1; # KDE file picker
        "browser.tabs.loadBookmarksInTabs" = true; # Lesezeichen in neuem Tab öffnen
       # "full-screen-api.warning.delay" = -1; # Vollbildmodus Meldung deaktivieren Teil 1/2
       # "full-screen-api.warning.timeout" = 0; # Vollbildmodus Meldung deaktivieren Teil 2/2
       # "ui.tooltip.delay_ms" = 5000;
        "dom.private-attribution.submission.enabled" = false; # "datenschutzfreundliche" Werbe-Messungen
   #     "browser.cache.disk.enable" = false; # Cache abschalten
   #     "extensions.pocket.enabled" = false; # Pocket deaktivieren
        "dom.event.clipboardevents.enabled" = false; # Zwischenablage nicht überwachen
        "privacy.donottrackheader.enabled" = true; # Do Not Track aktivieren

    };
};

  # 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              # Webbrowser
     desktop-file-utils # Verwaltung von .desktop-Dateien           
     ffmpeg-full        # für Audio/Video
     ffmpegthumbnailer  # Erzeugung von Video-Vorschaubildern       
     fuzzel             # App-Launcher (Wayland)
     gimp               # Bildbearbeitung (Rastergrafik)
     gnome-calculator   # Taschenrechner 
     grim               # Screenshot-Tool (Basis)
     git                # Versionsverwaltung       
     hyprpicker         # Color Picker für Wayland   
     inkscape           # Vektorgrafik-Editor
     joplin-desktop     # Notiz-App mit Markdown-Support und Sync
     jq                 # Kommandozeilen-Tool für JSON-Daten
     keepassxc          # Passwort-Manager
     kdePackages.ghostwriter # Markdown-Editor   
     libnotify          # Bibliothek für System-Benachrichtigungen
     loupe              # Bildbetrachter
     mangohud           # Overlay für FPS und Hardware-Monitoring (Gaming)
     mission-center     # Ressourcen-Monitor (ähnlich Windows Task-Manager)
     nautilus           # GNOME Dateimanager
     onlyoffice-desktopeditors # Office-Suite (kompatibel mit MS Office)
     pam_u2f            # Unterstützung für FIDO2/U2F-Sicherheitsschlüssel
     pavucontrol        # Grafische Audiosteuerung (PulseAudio/Pipewire)
     polkit_gnome       # Authentifizierungs-Agent für GUI-Apps 
     satty              # Screenshot-Annotationstool
     screen             # Terminal-Multiplexer
     shotcut            # Video-Editor
     slurp              # Auswahl von Bildschirmregionen (für Screenshots)
     swaybg             # Wallpaper-Dienst
     swaylock           # Bildschirmsperre
     sway-contrib.grimshot # Wrapper-Skript für Screenshots
     tuigreet           # Login-Manager
     unzip              # Entpacken von ZIP-Archiven
     umu-launcher       # Game Launcher (Proton/Gaming Utility)
     wev                # Event-Viewer zur Tastenbelegung/Fehlersuche
     wl-clipboard       # Clipboard-Manager (wl-copy / wl-paste)
     wleave             # Logout-Menü (Wayland)
     wlr-randr          # Monitor-Einstellungen (Auflösung/Frequenz)
     vscodium           # VS Code ohne Telemetrie
     vulkan-tools       # Diagnose-Tools für Vulkan (vulkaninfo)
     xdg-desktop-portal-wlr # Wayland-Schnittstelle für Screen Sharing/Dateidialoge
     xdg-desktop-portal-gtk # GTK-Portal für einheitliche App-Dialoge
     xdg-utils          # Standard-Werkzeuge für Datei-Assoziationen
     yt-dlp             # Video-Downloader für YouTube und andere Plattformen
     zim                # Desktop-Wiki / Persönlicher Wissensspeicher 
  ];
  fonts.packages = with pkgs; [
          nerd-fonts.symbols-only
          nerd-fonts.jetbrains-mono
          noto-fonts
          noto-fonts-cjk-sans
          noto-fonts-color-emoji
          fira-code
  ];

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

  # KDE Connect
  # programs.kdeconnect.enable = true;

  # Aliases für alle Shells
  environment.shellAliases = {
  nfu = "sudo sh -c 'cd /etc/nixos && nix flake update'";
  nrs = "sudo nixos-rebuild switch --flake /etc/nixos#pc";
};

 security.polkit.enable = true;
 services.gnome.gnome-keyring.enable = true;
 services.gvfs.enable = true;
 security.pam.services.login.enableGnomeKeyring = true;
 services.dbus.enable = true;
 programs.dconf.enable = true;

# Vaultwarden
services.vaultwarden = {
  enable = true;
  config = {
    ROCKET_ADDRESS = "127.0.0.1";
    ROCKET_PORT = 8222;
    SIGNUPS_ALLOWED = false; # Kontoregistrierung ein/aus
  };
};
services.caddy = {
  enable = true;
  virtualHosts."https://192.168.178.24:8443" = {
    extraConfig = ''
      reverse_proxy /notifications/hub* localhost:3012
      reverse_proxy localhost:8222
      tls internal 
    '';
  };
};
networking.firewall.allowedTCPPorts = [ 8222 8443 ];


  # Daemon for power management
  # services.upower.enable = false;

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

}

EDIT: Ich habe paar yt Videos angeguckt und bin mir nicht sicher, ob ich Noctalia wieder testen soll. Viel weniger Einstellungen als in DMS.
in Noctalia kann man die Position von Icons in Dock nicht manuell ändern(per Drag & Drop)
Bar
kein "Click Through"
kein "Font Scale"
kein "Spacing"
kein "Iconscale"
usw.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Cark
@D.S.i.u.S.

Ja das stimmt, meine configuration.nix hat die beiden einträge noch nicht. Davon lese ich zum ersten mal, hört sich aber sehr sinnvoll an und vermeidet eine Ansammlung von Generationen :D. Ich noch lernen, welche Befehle es gibt, was sie machen und wie sinnvoll diese sein können. Für heute habe ich mir vorgenommen neben meinen Cosmic Desktop noch Niri mit DMS, als "zweiten Desktop" zu bauen. Ich bin gespannt! Noctalia fand ich von der Ästethik sehr gut. Das man bei Noctalia eingeschränkter ist in der Gestaltung ist natürlich doof. Vielleicht kommt da ja noch was in Zukunft. Ich weiß auch nicht wie jung Noctalia im Vergleich zu DMS ist...
 
@D.S.i.u.S.

Noch eine kurze Nachfrage zur Dank Material Sheel. Kann man diese auch auf Deutsch umstellen?
 
Zuletzt bearbeitet:
Ah, schade. Ich bin inzwischen auf CachyOS mit eigener Niri-Konfiguration und Noctalia (auf Deutsch) umgestiegen. NixOS und den Cosmic Desktop vier Wochen lang genutzt zu haben, war auf jeden Fall eine coole Erfahrung, gerade weil NixOS vieles ganz anders macht.

Was ich dabei gemerkt habe: Für mich persönlich gibt es keinen wirklichen Use Case für Flakes, den Home Manager oder die gespeicherten Generationen. Da ich zuvor ein Jahr lang auf CachyOS komplett sorgenfrei unterwegs war und nur einmal Probleme hatte, weil ich ohne ausreichend Wissen einen neuen Release Candiate 1 Kernel installiert und gleichzeitig den stabilen Kernel deinstalliert habe, brauche ich kein Betriebssystem das mir noch mehr Stabilität oder Sicherheit bietet.

DMS habe ich in einer VM getestet. Meiner Meinung nach sind sich Noctalia und DMS sehr ähnlich und unterscheiden sich nur in Details. Ein Beispiel: In Noctalia verhalten sich die Noctalia App Fenster für die allgemeinen Einstellungen anders als die GTK-Fenster. Es wird nicht getiled, sondern floated über allen anderen Fenstern. Außerdem verschwindet es sofort, sobald ich außerhalb des Fensters oder auf ein anderes Fenster klicke, sodass ich es jedes Mal neu öffnen und wieder zum entsprechenden Reiter navigieren muss.

Bei DMS hingegen verhält sich das Fenster ganz normal wie die anderen: Es nimmt 50 % der Breite ein und tiled sich sauber mit den übrigen Fenstern. Was ich dort allerdings schade finde, ist, dass sich die Widgets kaum bearbeiten oder anpassen lassen.

Allgemein kann man sagen, dass sich bestimmte Dinge in Noctalia besser konfigurieren lassen, während andere Aspekte in DMS besser gelöst sind. Mit beiden Shells hätte ich vermutlich ähnlich viel Spaß.

Was mir jedoch wirklich wichtig ist: eine einheitliche Systemsprache. also kein Mix aus Deutsch und Englisch in Anwendungen. Entweder alles auf Deutsch oder alles auf Englisch.
 
Du hast vermutlich nur ein Monitor.
In niri kann man nicht Monitor 2 als Workspace 2 erklären. Dementsprechend funktioniert die Sache zu Monitor 2 wechseln oder Anwendung auf Monitor 2 verschieben anders als in Sway.
Ich habe Super + 2 (Wechsel auf Workspace 2) und Super + Alt (mit Daumen beide Tasten) + 1-3 für Verschieben auf Workspace 1 bis 3.
Ich mag wenn die Fenster wie in Sway tabbed-layout maximiert sind und ich es bei Bedarf auf einem Monitor auf 50/50 umschalten kann.
Home Manager ist gut. Hier ein Beispiel mit Firefox: https://wiki.nixos.org/wiki/Firefox/en
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Cark
Genau ich nutze nur einen Monitor, wenn ich 2 hätte würde mich das wahrscheinlich auch stören und ich würde mich woanders umsehen.

Hast du Lust ein Video zu posten, wo du die Tiling Optionen und Animationen von Sway einmal zeigst? Im Vergleich zu Hyprland fand ich das Tiling und die Animationen etwas flüssiger und sauberer.

Beim Home Manager muss ich auch erwähnen das ich mich damit am wenigsten beschäftigt habe, weil ich einfach sehr wenig gemacht habe mit config Dateien.
 
@Cark
Ich mache überall, wo es geht, die Animationen aus. Video würde kein Sinn machen. Bleib einfach bei Niri. Es bietet flüssige Animationen und ist auch perfekt für einen Monitor.

Ich werde wahrscheinlich auch zu Niri wechseln, sobald ich config so umschreibe, dass alle Fenster maximiert geöffnet werden. Muss ich auch noch ein Plugin für Noctalia erstellen, sodass ich "Tabs"(Fenster) in der Leiste wie in Sway habe. Ich mag nicht "nur Icons" für geöffnete Fenster. Ich brauche große Schaltflächen, sodass ich ohne genau zu zielen schnell anklicken kann.
Mit Niri habe ich in NixOS auch ein Vorteil, dass Dateiauswahlfenster in Firefox Nautilus ist, wenn man programs.niri.useNautilus = true; in configuration.nix stehen hat. Jetzt in Sway, wenn ich in Firefox irgendwas speichern möchte, öffnet sich weißes Fenster, welches nicht 1:1 mit Nautilus identisch und teilweise englisch ist.(Siehe Screenshot)
Sway hat besondere Beziehung zu "unsupported GPUs". Mit Sway 1.12 gibt es eine kleine Besserung.
  • Sway no longer refuses to start on unsupported GPUs (e.g. NVIDIA proprietary drivers). Instead, it displays an informational message. The message can be disabled via the --unsupported-gpu CLI flag or via the SWAY_UNSUPPORTED_GPU environment variable. Sway's policy hasn't changed: only the consequences when starting Sway have.

Niri hat auch Tabs, aber die sind anders als in Sway. Muss ich noch damit herumspielen und testen.

Hier paar Beispiele mit Unterschieden in config:
Niri:
Bash:
// Bild-im-Bild auf Monitor 2
window-rule {
    // This app-id regular expression will work for both:
    // - host Firefox (app-id is "firefox")
    match app-id=r#"firefox$"# title="^Bild-im-Bild$"
    open-on-output "HDMI-A-1"
    open-maximized-to-edges true
}
 // Suggested binds for running programs: terminal, app launcher, screen locker.
    Mod+Return { spawn "foot"; }
    Mod+D { spawn "fuzzel"; }

 Mod+Q repeat=false { close-window; }

 Mod+Alt+1  { move-column-to-monitor-down; }
    Mod+Alt+2    { move-column-to-monitor-up; }
Sway:
Bash:
 # Schiebt das PiP-Fenster in Workspace 2
  for_window [title="Bild-im-Bild"] move window to workspace 2
 
 # Foot
  for_window [app_id="foot"] title_format " Foot"
 
 # Taschenrechner
  for_window [title="Taschenrechner"] floating enable
 
 # Screenshots
# 1. Region (Super + Alt + A)
bindsym Mod4+Mod1+a exec grim -g "$(slurp)" "/home/dsius/Bilder/Bildschirmfotos/Screenshot_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Region gespeichert"

# 2. Aktueller Monitor (Super + Alt + S)
bindsym Mod4+Mod1+s exec swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name' | xargs -I {} grim -o {} "/home/dsius/Bilder/Bildschirmfotos/Monitor_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Monitor gespeichert"

# 3. Alle Monitore (Super + Alt + D)
bindsym Mod4+Mod1+d exec grim "/home/dsius/Bilder/Bildschirmfotos/Gesamt_$(date +'%Y-%m-%d_%H-%M-%S').png" && notify-send "Screenshot" "Kompletter Desktop gespeichert"
# Aus home.nix
startup = [
{ command = "${pkgs.firefox}/bin/firefox";}
 ];

Vor allem window-rule ist in Niri für mich komplizierter als in Sway
In Sway eine Zeile: for_window [title="Bild-im-Bild"] move window to workspace 2
und in Niri fünf Zeilen:
window-rule {
match app-id=r#"firefox$"# title="^Bild-im-Bild$"
open-on-output "HDMI-A-1"
open-maximized-to-edges true
}
Autostart in Niri ist einfacher als in Sway
Niri: spawn-at-startup "firefox"
Sway:
startup = [
{ command = "${pkgs.firefox}/bin/firefox";}
];

So sieht mein Desktop mit Sway aus: Link
 

Anhänge

  • Monitor_2026-04-15_00-21-41.png
    Monitor_2026-04-15_00-21-41.png
    65,1 KB · Aufrufe: 12
Zuletzt bearbeitet:
Ah okay. 😄

Ich nutze Niri ja, und kann deine Punkte teilweise nachvollziehen. Die Sache mit den größeren Buttons statt nur Icons sind für mich kein Thema da ich angefangen habe hauptsächliche die Tastatur zu nutzen und alles mit Shortcuts mache..

Niri verhät sich recht sauber und smooth, wenn man es einmal eingerichtet hat. Gerade solche Sachen wie das mit Nautilus im Filepicker finde ich schon angenehm.

Mal gucken, wie du mit deiner erneuten Niri Rückkehr zurechtkommst, wenn du komplett wechselst und alles eingerichtet hast.

hier meine keybinds, womit den überwiegenden Teil mit der Tastatur lösen kann.
Code:
  // ─── Window Movement and Focus ───
    MOD+Q                               { close-window; }
    MOD+LEFT                            { focus-column-left; }
    MOD+RIGHT                           { focus-column-right; }
    MOD+UP                              { focus-window-up; }
    MOD+DOWN                            { focus-window-down; }
    MOD+H                               { focus-column-left; }
    MOD+L                               { focus-column-right; }
    MOD+K                               { focus-window-up; }
    MOD+J                               { focus-window-down; }

    MOD+CTRL+LEFT                       { move-column-left; }
    MOD+CTRL+H                          { move-column-left; }
    MOD+CTRL+RIGHT                      { move-column-right; }
    MOD+CTRL+L                          { move-column-right; }
    MOD+CTRL+UP                         { move-window-up; }
    MOD+CTRL+K                          { move-window-up; }
    MOD+CTRL+DOWN                       { move-window-down; }
    MOD+CTRL+J                          { move-window-down; }

    MOD+HOME                            { focus-column-first; }
    MOD+END                             { focus-column-last; }
    MOD+CTRL+HOME                       { move-column-to-first; }
    MOD+CTRL+END                        { move-column-to-last; }

    MOD+SHIFT+LEFT                      { focus-monitor-left; }
    MOD+SHIFT+RIGHT                     { focus-monitor-right; }
    MOD+SHIFT+UP                        { focus-monitor-up; }
    MOD+SHIFT+DOWN                      { focus-monitor-down; }

    MOD+SHIFT+CTRL+LEFT                 { move-column-to-monitor-left; }
    MOD+SHIFT+CTRL+RIGHT                { move-column-to-monitor-right; }
    MOD+SHIFT+CTRL+UP                   { move-column-to-monitor-up; }
    MOD+SHIFT+CTRL+DOWN                 { move-column-to-monitor-down; }

    // ─── Workspace Switching ───
    MOD+WHEELSCROLLDOWN                 cooldown-ms=150 { focus-workspace-down; }
    MOD+WHEELSCROLLUP                   cooldown-ms=150 { focus-workspace-up; }
    MOD+CTRL+WHEELSCROLLDOWN            cooldown-ms=150 { move-column-to-workspace-down; }
    MOD+CTRL+WHEELSCROLLUP              cooldown-ms=150 { move-column-to-workspace-up; }

    MOD+WHEELSCROLLRIGHT                { focus-column-right; }
    MOD+WHEELSCROLLLEFT                 { focus-column-left; }
    MOD+CTRL+WHEELSCROLLRIGHT           { move-column-right; }
    MOD+CTRL+WHEELSCROLLLEFT            { move-column-left; }

    MOD+SHIFT+WHEELSCROLLDOWN           { focus-column-right; }
    MOD+SHIFT+WHEELSCROLLUP             { focus-column-left; }
    MOD+CTRL+SHIFT+WHEELSCROLLDOWN      { move-column-right; }
    MOD+CTRL+SHIFT+WHEELSCROLLUP        { move-column-left; }

    MOD+1                               { focus-workspace 1; }
    MOD+2                               { focus-workspace 2; }
    MOD+3                               { focus-workspace 3; }
    MOD+4                               { focus-workspace 4; }
    MOD+5                               { focus-workspace 5; }
    MOD+6                               { focus-workspace 6; }
    MOD+7                               { focus-workspace 7; }
    MOD+8                               { focus-workspace 8; }
    MOD+9                               { focus-workspace 9; }

    MOD+CTRL+1                          { move-column-to-workspace 1; }
    MOD+CTRL+2                          { move-column-to-workspace 2; }
    MOD+CTRL+3                          { move-column-to-workspace 3; }
    MOD+CTRL+4                          { move-column-to-workspace 4; }
    MOD+CTRL+5                          { move-column-to-workspace 5; }
    MOD+CTRL+6                          { move-column-to-workspace 6; }
    MOD+CTRL+7                          { move-column-to-workspace 7; }
    MOD+CTRL+8                          { move-column-to-workspace 8; }
    MOD+CTRL+9                          { move-column-to-workspace 9; }

    MOD+TAB                             { focus-workspace-previous; }

    // ─── Layout Controls ───
    MOD+M                               { maximize-column; }
    MOD+CTRL+M                          { expand-column-to-available-width; }
    MOD+C                               { center-column; }
    MOD+CTRL+C                          { center-visible-columns; }
    MOD+KP_SUBTRACT                     { set-column-width "-10%"; }
    MOD+KP_ADD                          { set-column-width "+10%"; }
    MOD+CTRL+KP_SUBTRACT                { set-window-height "-10%"; }
    MOD+CTRL+KP_ADD                     { set-window-height "+10%"; }

    // ─── Modes ───
    MOD+T                               { toggle-window-floating; }
    MOD+CTRL+F                          { fullscreen-window; }
    MOD+W                               { toggle-column-tabbed-display; }
    MOD+R                               { switch-preset-column-width; }
    MOD+COMMA                           { consume-window-into-column; }
    MOD+PERIOD                          { expel-window-from-column; }

    // ─── Screenshots ───
    CTRL+SHIFT+1                        { screenshot; }
    CTRL+SHIFT+2                        { screenshot-screen; }
    CTRL+SHIFT+3                        { screenshot-window; }

    // ─── Emergency Escape Key ───
    // Use this when a fullscreen app blocks your keybinds.
    // It disables any active keyboard shortcut inhibitor, restoring control.
    MOD+ESCAPE                          allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }

    // ─── Exit / Power ───
    CTRL+ALT+DELETE                     { quit; } // Also quits Niri
    MOD+SHIFT+P                         { power-off-monitors; } // Turn off screens (useful for OLED or privacy)
    MOD+O                               repeat=false { toggle-overview; }
}
😄
 
Ich nutze NixOS mit Niri und Noctalia-Shell (schon ein Klassiker?), aber ohne Home-Manager, jedoch mit Flakes (aber etwas inkonsequent für Software, wo es mMn Sinn ergibt, falls das verständlich ist, beispielsweise wenn durch Flake-Nutzung bestimmte Konfigurationen möglich werden etc.).

Gruß!
 
  • Gefällt mir
Reaktionen: Cark
@Yosh Danke dir für deinen Beitrag. Hast du da bestimmte Beispiele, wie bei dir durch Flakes bestimmte Konfigurationen möglich werden?

Gruß zurück!
 
Ein Beispiel wäre z.B. Lanzaboote für SecureBoot auf dem Laptop. Ich bin mir noch nicht ganz sicher ob ich das nutzen will, aber die Entwickler beschreiben die Installation via Flake auf der offiziellen Projekt-Seite.
In dem Abschnitt wird z.B. auch der Pfad zu den Keys hinterlegt und auch der Aufruf vom Lanzaboote-Boot-Modul. Das macht es in dem Fall für mich relativ transparent, wo wichtige Einstellungen stattfinden und ich mich nicht (in meinem Fall) durch mehrere Config-Dateien hangeln muss, um zu sehen was wo wie funktioniert.
Aber ich stehe am Anfang meiner NixOS-Reise, muss aber sagen, dass es für mich die bisher problemloseste Distro ist. Und die ganzen Möglichkeiten wie z.B. nix-shell sind für mich langsam unverzichtbar geworden. Mal eben etwas ausprobieren und zack alles wie vorher; wunderbar mMn. Auf der anderen Seite habe für mich erkannt, dass ich nicht alles machen bzw. nutzen muss nur weil's geht... Und paar Ordner mit Config-Dateien sind schnell kopiert sobald mein Basis-System installiert ist.
Ich habe schon viel Zeit mit Bug-Fixing von (yt-)Anleitungen verbracht, die bei mir doch nicht so ganz wollten wie im Internet... Aber wie gesagt, ich bin kein Nix(OS)-Pro und trotzdem sehr zufrieden mit meinem NixOS (an dem ich dennoch immer weiterarbeite...) :)
 
Zurück
Oben