# main default configuration # NOTE: packages and fonts are configured in packages-fonts.nix { config, pkgs, host, username, options, lib, inputs, system, ... }: let inherit (import ./variables.nix) keyboardLayout; in { imports = [ ./hardware.nix ./users.nix ./packages-fonts.nix # TODO # ../../modules/amd-drivers.nix # ../../modules/nvidia-drivers.nix # ../../modules/nvidia-prime-drivers.nix # ../../modules/intel-drivers.nix # ../../modules/vm-guest-services.nix # ../../modules/local-hardware-clock.nix ]; # boot related stuff boot = { kernelPackages = pkgs.linuxPackages_zen; # zen kernel #kernelPackages = pkgs.linuxPackages_latest; # kernel kernelParams = [ "systemd.mask=systemd-vconsole-setup.service" "systemd.mask=dev-tpmrm0.device" # this is to mask the 1.5 mins systemd bug "nowatchdog" "modprobe.blacklist=sp5100_tco" # watchdog for AMD "modprobe.blacklist=iTCO_wdt" # watchdog for Intel ]; # this is for OBS virtual cam support # kernelModules = [ "v4l2loopback" ]; # extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; initrd = { availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ]; kernelModules = [ ]; }; # Needed For Some Steam Games #kernel.sysctl = { # "vm.max_map_count" = 2147483642; #}; # ======================================================================================= # BOOT LOADERS: use ONLY one, either SystemD or GRUB # ======================================================================================= # SystemD bootloader loader.systemd-boot.enable = true; loader.efi = { #efiSysMountPoint = "/efi"; # this is if you have separate /efi partition canTouchEfiVariables = true; }; loader.timeout = 5; # GRUB bootloader # Bootloader GRUB #loader.grub = { #enable = true; # devices = [ "nodev" ]; # efiSupport = true; # gfxmodeBios = "auto"; # memtest86.enable = true; # extraGrubInstallArgs = [ "--bootloader-id=${host}" ]; # configurationName = "${host}"; # }; # Bootloader GRUB theme, configure below # ======================================================================================= # END OF BOOTLOADERS # ======================================================================================= # make /tmp a tmpfs tmp = { useTmpfs = false; tmpfsSize = "30%"; }; # appimage support binfmt.registrations.appimage = { wrapInterpreterInShell = false; interpreter = "${pkgs.appimage-run}/bin/appimage-run"; recognitionType = "magic"; offset = 0; mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff''; magicOrExtension = ''\x7fELF....AI\x02''; }; plymouth.enable = true; }; # GRUB Bootloader theme. Of course you need to enable GRUB above.. duh! and also, enable it on flake.nix #distro-grub-themes = { # enable = true; # theme = "nixos"; #}; # extra module options drivers.amdgpu.enable = true; drivers.intel.enable = true; drivers.nvidia.enable = false; drivers.nvidia-prime = { enable = false; intelBusID = ""; nvidiaBusID = ""; }; vm.guest-services.enable = false; local.hardware-clock.enable = false; # networking networking.networkmanager.enable = true; networking.hostName = "${host}"; networking.timeServers = options.networking.timeServers.default ++ [ "pool.ntp.org" ]; # Set your time zone. services.automatic-timezoned.enable = true; #based on IP location #https://en.wikipedia.org/wiki/List_of_tz_database_time_zones #time.timeZone = "Europe/Oslo"; # Set local timezone # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "en_US.UTF-8"; LC_IDENTIFICATION = "en_US.UTF-8"; LC_MEASUREMENT = "en_US.UTF-8"; LC_MONETARY = "en_US.UTF-8"; LC_NAME = "en_US.UTF-8"; LC_NUMERIC = "en_US.UTF-8"; LC_PAPER = "en_US.UTF-8"; LC_TELEPHONE = "en_US.UTF-8"; LC_TIME = "en_US.UTF-8"; }; # services to start services = { xserver = { enable = false; xkb = { layout = "${keyboardLayout}"; variant = ""; }; }; greetd = { enable = true; vt = 3; settings = { default_session = { user = username; command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; # start Hyprland with a TUI login manager }; }; }; smartd = { enable = false; autodetect = true; }; gvfs.enable = true; tumbler.enable = true; pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; wireplumber.enable = true; }; pulseaudio.enable = false; # unstable udev.enable = true; envfs.enable = true; dbus.enable = true; fstrim = { enable = true; interval = "weekly"; }; libinput.enable = true; rpcbind.enable = false; nfs.server.enable = false; openssh.enable = true; flatpak.enable = false; blueman.enable = true; # hardware.openrgb.enable = true; # hardware.openrgb.motherboard = "amd" fwupd.enable = true; upower.enable = true; gnome.gnome-keyring.enable = true; #avahi = { # enable = true; # nssmdns4 = true; # openFirewall = true; #}; #ipp-usb.enable = true; #syncthing = { # enable = false; # user = "${username}"; # dataDir = "/home/${username}"; # configDir = "/home/${username}/.config/syncthing"; #}; }; systemd.services.flatpak-repo = { path = [ pkgs.flatpak ]; script = '' flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo ''; }; # zram zramSwap = { enable = true; priority = 100; memoryPercent = 30; swapDevices = 1; algorithm = "zstd"; }; powerManagement = { enable = true; cpuFreqGovernor = "schedutil"; }; #hardware.sane = { # enable = true; # extraBackends = [ pkgs.sane-airscan ]; # disabledDefaultBackends = [ "escl" ]; #}; # extra logitech support hardware.logitech.wireless.enable = false; hardware.logitech.wireless.enableGraphical = false; # bluetooth hardware = { bluetooth = { enable = true; powerOnBoot = true; settings = { General = { Enable = "Source,Sink,Media,Socket"; Experimental = true; }; }; }; }; # security / polkit security.rtkit.enable = true; security.polkit.enable = true; security.polkit.extraConfig = '' polkit.addRule(function(action, subject) { if ( subject.isInGroup("users") && ( action.id == "org.freedesktop.login1.reboot" || action.id == "org.freedesktop.login1.reboot-multiple-sessions" || action.id == "org.freedesktop.login1.power-off" || action.id == "org.freedesktop.login1.power-off-multiple-sessions" ) ) { return polkit.Result.YES; } }) ''; security.pam.services.swaylock = { text = '' auth include login ''; }; # Cachix, Optimization settings and garbage collection automation nix = { settings = { auto-optimise-store = true; experimental-features = [ "nix-command" "flakes" ]; substituters = [ "https://hyprland.cachix.org" ]; trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; }; gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 7d"; }; }; # Virtualization / Containers virtualisation.libvirtd.enable = false; virtualisation.podman = { enable = false; dockerCompat = false; defaultNetwork.settings.dns_enabled = false; }; # OpenGL hardware.graphics = { enable = true; }; console.keyMap = "${keyboardLayout}"; # For Electron apps to use wayland environment.sessionVariables.NIXOS_OZONE_WL = "1"; # 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 = "24.11"; # Did you read the comment? }