From 8c9cc157d1ae056d4f5b667b34e15b101d56be5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torjus=20H=C3=A5kestad?= Date: Sat, 31 Jan 2026 09:37:12 +0100 Subject: [PATCH] system: extract shared configuration from host configs Extract duplicated configuration from gunter and magicman into shared system modules. This eliminates ~116 lines of duplication and fixes a malformed gdm.wayland config in magicman. New shared modules: - boot.nix: systemd-boot, EFI, common kernel params - networking.nix: NetworkManager, nftables, firewall base - hyprland.nix: System-level Hyprland and display manager - xdg.nix: XDG session variables and portal setup - nix-config.nix: Nix daemon settings, binary caches, trusted users - nixpkgs-config.nix: allowUnfree and kernel packages default Updated modules: - locale.nix: Added timezone configuration Benefits: - Reduces duplication: net reduction of 53 lines - Magicman gains custom cache substituters for faster builds - Fixes malformed gdm.wayland config in magicman - Both hosts use identical base configuration - Host-specific config clearly stands out Co-Authored-By: Claude Sonnet 4.5 --- hosts/gunter/configuration.nix | 100 ++++++------------------------- hosts/magicman/configuration.nix | 68 +-------------------- system/boot.nix | 13 ++++ system/default.nix | 9 ++- system/hyprland.nix | 12 ++++ system/locale.nix | 2 + system/networking.nix | 8 +++ system/nix-config.nix | 24 ++++++++ system/xdg.nix | 17 ++++++ 9 files changed, 103 insertions(+), 150 deletions(-) create mode 100644 system/boot.nix create mode 100644 system/hyprland.nix create mode 100644 system/networking.nix create mode 100644 system/nix-config.nix create mode 100644 system/xdg.nix diff --git a/hosts/gunter/configuration.nix b/hosts/gunter/configuration.nix index 347fd38..915d8f3 100644 --- a/hosts/gunter/configuration.nix +++ b/hosts/gunter/configuration.nix @@ -31,14 +31,8 @@ "mt76" ]; # Kernel stuff - kernelPackages = pkgs.linuxPackages_latest; # kernelPackages = lib.warn "Pinned to kernel 6.12 due to issues" pkgs.linuxPackages_6_12; - kernelParams = [ - "quiet" - "splash" - "rd.systemd.show_status=false" - "module_blacklist=amdgpu" - ]; + kernelParams = [ "module_blacklist=amdgpu" ]; kernel.sysctl = { "vm.max_map_count" = 262144; @@ -50,30 +44,34 @@ # Bootloader stuff loader.systemd-boot = { - enable = true; configurationLimit = 10; memtest86.enable = true; }; - loader.efi = { - canTouchEfiVariables = true; - }; supportedFilesystems = [ "nfs" ]; }; # Networking stuff networking.hostName = "gunter"; # Define your hostname. - networking.networkmanager.enable = true; - networking.nftables.enable = true; - networking.firewall = { - enable = true; - allowedTCPPorts = [ - 8989 + networking.firewall.allowedTCPPorts = [ 8989 ]; + + # Additional nix caches for homelab and CUDA + nix.settings = { + substituters = [ + "https://nix-cache.home.2rjus.net" + "https://cuda-maintainers.cachix.org" + ]; + + trusted-substituters = [ + "https://nix-cache.home.2rjus.net" + "https://cuda-maintainers.cachix.org" + ]; + + trusted-public-keys = [ + "nix-cache.home.2rjus.net-1:2kowZOG6pvhoK4AHVO3alBlvcghH20wchzoR0V86UWI=" + "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" ]; }; - # Set time stuff - time.timeZone = "Europe/Oslo"; - # Enable graphics hardware.graphics = { enable = true; @@ -105,7 +103,7 @@ # }; }; - # Setup hyprland + # Setup nvidia video drivers # nixpkgs.overlays = [ # (self: super: { # hyprland = super.hyprland.override { @@ -113,68 +111,8 @@ # }; # }) # ]; - services.displayManager.gdm.wayland = true; - - services.xserver.enable = true; services.xserver.videoDrivers = [ "nvidia" ]; - programs.hyprland = { - enable = true; - withUWSM = true; - xwayland.enable = true; - portalPackage = pkgs.xdg-desktop-portal-hyprland; - }; - # Setup common XDG env vars - environment.sessionVariables = rec { - XDG_CACHE_HOME = "$HOME/.cache"; - XDG_CONFIG_HOME = "$HOME/.config"; - XDG_DATA_HOME = "$HOME/.local/share"; - XDG_STATE_HOME = "$HOME/.local/state"; - XDG_BIN_HOME = "$HOME/.local/bin"; - PATH = [ "${XDG_BIN_HOME}" ]; - }; - - # Setup xdg portal - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = ( - with pkgs; - [ - # unstable.xdg-desktop-portal-hyprland - xdg-desktop-portal-gtk - ] - ); - }; - - # Enable flakes - nix.settings = { - experimental-features = [ - "nix-command" - "flakes" - ]; - trusted-users = [ - "root" - "torjus" - ]; - trusted-substituters = [ - "https://nix-cache.home.2rjus.net" - "https://cache.nixos.org" - "https://cuda-maintainers.cachix.org" - ]; - substituters = [ - "https://nix-cache.home.2rjus.net" - "https://cache.nixos.org" - "https://cuda-maintainers.cachix.org" - ]; - trusted-public-keys = [ - "nix-cache.home.2rjus.net-1:2kowZOG6pvhoK4AHVO3alBlvcghH20wchzoR0V86UWI=" - "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" - "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" - ]; - }; - - nixpkgs.config.allowUnfree = true; # Install system-wide packages environment.systemPackages = with pkgs; [ curl diff --git a/hosts/magicman/configuration.nix b/hosts/magicman/configuration.nix index 1dc9fec..171ea7b 100644 --- a/hosts/magicman/configuration.nix +++ b/hosts/magicman/configuration.nix @@ -8,24 +8,13 @@ # Bootloader stuff boot.kernelParams = [ - "quiet" - "splash" - "rd.systemd.show_status=false" "acpi_backlight=native" "video=efifb:nobgrt" "loglevel=3" "rd.udev.log_level=3" ]; - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot = { - enable = true; - configurationLimit = 3; - }; - - boot.loader.efi = { - canTouchEfiVariables = true; - }; + boot.loader.systemd-boot.configurationLimit = 3; boot.initrd.systemd.enable = true; boot.plymouth = { @@ -39,14 +28,6 @@ # Networking stuff networking.hostName = "magicman"; # Define your hostname. - networking.networkmanager.enable = true; - networking.nftables.enable = true; - networking.firewall = { - enable = true; - }; - - # Set time stuff - time.timeZone = "Europe/Oslo"; hardware = { enableRedistributableFirmware = true; @@ -80,58 +61,11 @@ }; }; - # Setup hyprland - services.xserver.enable = true; - services.displayManager.gdm.wayland = { - gdm.wayland = true; - lightdm.enable = false; - }; - programs.hyprland = { - enable = true; - withUWSM = true; - xwayland.enable = true; - portalPackage = pkgs.xdg-desktop-portal-hyprland; - }; - # TRIM services.fstrim.enable = true; - # Setup common XDG env vars - environment.sessionVariables = rec { - XDG_CACHE_HOME = "$HOME/.cache"; - XDG_CONFIG_HOME = "$HOME/.config"; - XDG_DATA_HOME = "$HOME/.local/share"; - XDG_STATE_HOME = "$HOME/.local/state"; - XDG_BIN_HOME = "$HOME/.local/bin"; - PATH = [ "${XDG_BIN_HOME}" ]; - }; - - # Setup xdg portal - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = ( - with pkgs; - [ - # xdg-desktop-portal-hyprland - xdg-desktop-portal-gtk - ] - ); - }; - programs.steam.enable = true; - # Enable flakes - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - nix.settings.trusted-users = [ - "root" - "torjus" - ]; - - nixpkgs.config.allowUnfree = true; # Install system-wide packages environment.systemPackages = with pkgs; [ vim diff --git a/system/boot.nix b/system/boot.nix new file mode 100644 index 0000000..95bd2d2 --- /dev/null +++ b/system/boot.nix @@ -0,0 +1,13 @@ +{ pkgs, lib, ... }: +{ + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; + + boot.kernelParams = lib.mkBefore [ + "quiet" + "splash" + "rd.systemd.show_status=false" + ]; +} diff --git a/system/default.nix b/system/default.nix index 3023bca..1975662 100644 --- a/system/default.nix +++ b/system/default.nix @@ -1,16 +1,21 @@ { imports = [ + ./boot.nix ./fonts.nix - ./root-ca.nix ./fwupd.nix ./git.nix ./greetd.nix + ./hyprland.nix + ./label.nix ./libvirt.nix ./locale.nix + ./networking.nix + ./nix-config.nix ./podman.nix + ./root-ca.nix ./security.nix ./services.nix ./users.nix - ./label.nix + ./xdg.nix ]; } diff --git a/system/hyprland.nix b/system/hyprland.nix new file mode 100644 index 0000000..056c9ce --- /dev/null +++ b/system/hyprland.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + services.xserver.enable = true; + services.displayManager.gdm.wayland = true; + + programs.hyprland = { + enable = true; + withUWSM = true; + xwayland.enable = true; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + }; +} diff --git a/system/locale.nix b/system/locale.nix index ce17737..71ebc69 100644 --- a/system/locale.nix +++ b/system/locale.nix @@ -1,5 +1,7 @@ { ... }: { + time.timeZone = "Europe/Oslo"; + i18n = { supportedLocales = [ "en_US.UTF-8/UTF-8" diff --git a/system/networking.nix b/system/networking.nix new file mode 100644 index 0000000..c8e1a91 --- /dev/null +++ b/system/networking.nix @@ -0,0 +1,8 @@ +{ lib, ... }: +{ + networking.networkmanager.enable = true; + networking.nftables.enable = true; + networking.firewall.enable = true; + networking.firewall.allowedTCPPorts = lib.mkDefault [ ]; + networking.firewall.allowedUDPPorts = lib.mkDefault [ ]; +} diff --git a/system/nix-config.nix b/system/nix-config.nix new file mode 100644 index 0000000..1664a1f --- /dev/null +++ b/system/nix-config.nix @@ -0,0 +1,24 @@ +{ ... }: +{ + nixpkgs.config.allowUnfree = true; + + nix.settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + + trusted-users = [ + "root" + "torjus" + ]; + + substituters = [ "https://cache.nixos.org" ]; + + trusted-substituters = [ "https://cache.nixos.org" ]; + + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + ]; + }; +} diff --git a/system/xdg.nix b/system/xdg.nix new file mode 100644 index 0000000..3d6838a --- /dev/null +++ b/system/xdg.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: +{ + environment.sessionVariables = rec { + XDG_CACHE_HOME = "$HOME/.cache"; + XDG_CONFIG_HOME = "$HOME/.config"; + XDG_DATA_HOME = "$HOME/.local/share"; + XDG_STATE_HOME = "$HOME/.local/state"; + XDG_BIN_HOME = "$HOME/.local/bin"; + PATH = [ "${XDG_BIN_HOME}" ]; + }; + + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; + }; +}