nixos-config/hosts/default/config.nix

345 lines
9.7 KiB
Nix
Raw Normal View History

2025-02-19 22:55:25 +00:00
# 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
../../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 = "${keyboarLayout}";
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. Its 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?
}