nixos/hosts/nate-work/default.nix

241 lines
5.4 KiB
Nix

{
config,
lib,
inputs,
pkgs,
timeZone,
...
}:
let
deskCfg = config.deskCfg;
unstable = import inputs.nixpkgs-unstable {
system = "x86_64-linux";
config.allowUnfree = true;
};
in
{
imports = [
./nixos/hardware-configuration.nix
./nixos/auto-update.nix
./modules/sway/sway_conf.nix
./modules/hypr/hyprland.nix
../../shared/modules/desktop/base.nix
../../shared/modules/desktop/stylix.nix
../../shared/modules/desktop/silent-boot.nix
../../shared/modules/desktop/greetd.nix
../../shared/modules/wm/niri.nix
../../shared/modules/services/syncthing.nix
../../shared/modules/services/kdeconnect.nix
../../shared/modules/services/docker.nix
../../shared/modules/services/avahi.nix
../../shared/modules/services/hyprvoice.nix
../../shared/modules/services/motu-m4-combined.nix
];
deskCfg = {
userName = "nate";
hostName = "nate-vasion";
fullName = "Nate Anderson";
de = "niri";
installGaming = true;
};
# Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 5;
# Systemd initrd for faster boot
boot.initrd.systemd.enable = true;
# Silent boot
silentBoot.enable = true;
# Plymouth boot animation
boot.plymouth = {
enable = true;
theme = "rings";
themePackages = with pkgs; [
(adi1090x-plymouth-themes.override {
selected_themes = [ "rings" ];
})
];
};
# Perform garbage collection weekly to maintain low disk usage
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
nix.settings.auto-optimise-store = true;
# Auto-update config
autoCfg = {
userName = "nate";
flakePath = "/home/nate/nixos";
hostName = "nate-vasion";
};
# ClamAV antivirus
services.clamav.daemon.enable = true;
services.clamav.scanner.enable = true;
# Extra groups
main_user.extraGroups = [
"dialout"
"docker"
"i2c"
"lp"
"scanner"
"syncthing"
];
# Sway WM (legacy, disabled)
swaywm = {
enable = false;
useNonFree = true;
installGaming = deskCfg.installGaming;
systemPackages = with pkgs; [ libreoffice ];
};
# Hyprland (legacy, disabled)
hypr = {
enable = false;
user = deskCfg.userName;
systemPackages = with pkgs; [ libreoffice ];
};
# Niri WM config
niriwm = {
enable = true;
useNonFree = true;
user = deskCfg.userName;
systemPackages = [ unstable.libreoffice ];
};
# Steam with gamescope
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
# Virt-manager for VMs
programs.virt-manager.enable = true;
# MOTU M4 audio interface
services.motu-m4-combined = {
enable = true;
user = deskCfg.userName;
};
# Hyprvoice dictation
services.hyprvoice = {
enable = true;
user = deskCfg.userName;
};
# Docker — unstable package, start on boot
dockerConfig = {
enableOnBoot = true;
useUnstable = true;
};
# usbmuxd for iOS
services.usbmuxd.enable = true;
# Fingerprint reader
services.fprintd.enable = true;
# Disable lid switch sleep when plugged into power (laptop docked)
services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore";
# Nate-work session variables
environment.sessionVariables = {
FIREFOX_USE_SYSTEM_THEME = "true";
GBM_BACKEND = "nvidia-drm";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
};
# Nate-work extra packages
environment.systemPackages = with pkgs; [
foot
nbfc-linux
kanshi
man-pages
man-pages-posix
pavucontrol
waybar
wdisplays
wofi
];
# NFS support in initrd
boot.initrd.supportedFilesystems = {
nfs = true;
};
# Libvirtd / QEMU
virtualisation = {
libvirtd = {
enable = true;
qemu.swtpm.enable = true;
};
spiceUSBRedirection.enable = true;
};
users.groups.libvirtd.members = [ "nate" ];
# Stylix overrides — kimber theme, different wallpaper, larger font sizes
stylix = {
image = ./bot-wallpaper.jpg;
base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml";
fonts.sizes = {
applications = 14;
desktop = 16;
popups = 14;
terminal = 14;
};
};
# Bluetooth
hardware.bluetooth.settings.General.Name = "Nate-Vasion";
# udev rules — betaflight configurator + i2c for ddcutil
services.udev.extraRules = ''
# For betaflight configurator
# DFU (Internal bootloader for STM32 and AT32 MCUs)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
# For ddcutil monitor controls
KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
'';
# NVIDIA GPU setup
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
intel-vaapi-driver
intel-media-driver
vpl-gpu-rt
];
};
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = {
sync.enable = true;
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
};
system.stateVersion = "23.11";
}