270 lines
11 KiB
Nix
270 lines
11 KiB
Nix
# configuration.nix
|
|
# Main NixOS configuration - imports modular components
|
|
{
|
|
config,
|
|
pkgs,
|
|
inputs,
|
|
lib,
|
|
username,
|
|
...
|
|
}:
|
|
|
|
{
|
|
imports = [
|
|
# Hardware
|
|
./hardware-configuration.nix
|
|
|
|
# Modular configuration
|
|
./modules/desktop.nix # Portal, polkit, launcher, lock, wallpaper
|
|
./modules/boot-plymouth.nix # Plymouth boot splash
|
|
./modules/gpu-amd.nix # AMD graphics, Vulkan, VA-API
|
|
./modules/audio.nix # Bluetooth, audio controls
|
|
./modules/gaming.nix # Steam, Gamemode, Lutris, etc.
|
|
./modules/apps.nix # User applications
|
|
./modules/dev.nix # Docker, dev tools
|
|
./modules/theming.nix # Fonts, themes, cursors
|
|
./modules/power.nix # Power management, CPU governors
|
|
./modules/shell.nix # Fish shell configuration
|
|
./modules/services.nix # System services (fstrim, zram, avahi, psd)
|
|
./modules/navidrome.nix # Music streaming server
|
|
];
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# SECONDARY STORAGE
|
|
# ═══════════════════════════════════════════════════════════════
|
|
fileSystems."/mnt/Intenso-SSD" = {
|
|
device = "/dev/disk/by-uuid/51c56376-8384-4762-a8e9-8151fe91173b";
|
|
fsType = "ext4";
|
|
options = [
|
|
"defaults"
|
|
"nofail"
|
|
"x-gvfs-show"
|
|
];
|
|
};
|
|
|
|
fileSystems."/mnt/Samsung-SSD" = {
|
|
device = "/dev/disk/by-uuid/343ea612-9305-4fb6-9d4c-7a7ca8b0e72c";
|
|
fsType = "ext4";
|
|
options = [
|
|
"defaults"
|
|
"nofail"
|
|
"x-gvfs-show"
|
|
];
|
|
};
|
|
|
|
fileSystems."/mnt/Extern-SSD" = {
|
|
device = "/dev/disk/by-uuid/4e233c88-e91b-480c-b795-6fffc1fbdc69";
|
|
fsType = "ext4";
|
|
options = [
|
|
"defaults"
|
|
"nofail"
|
|
"x-gvfs-show"
|
|
];
|
|
};
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# BOOT
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ─── Bootloader: Limine with Secure Boot ───
|
|
boot.loader.systemd-boot.enable = false; # Disabled - using Limine
|
|
boot.loader.limine.enable = true;
|
|
boot.loader.limine.secureBoot.enable = true;
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
|
|
|
# ─── Kernel ───
|
|
boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-latest-x86_64-v3;
|
|
|
|
# Kernel parameters (consolidated from modules)
|
|
boot.kernelParams = [
|
|
"amd_pstate=active" # Modern Ryzen power management (from power.nix)
|
|
"amdgpu.ppfeaturemask=0xffffffff" # Full AMD GPU power features (from gpu-amd.nix)
|
|
];
|
|
|
|
# ─── Scheduler ───
|
|
# sched-ext scheduler for gaming performance
|
|
services.scx.enable = true;
|
|
services.scx.scheduler = "scx_lavd"; # Low-latency scheduler, good for gaming
|
|
|
|
# ─── Hibernation ───
|
|
# Resume from encrypted swap (cryptswap must be unlocked before resume)
|
|
boot.resumeDevice = "/dev/mapper/cryptswap";
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# NETWORKING
|
|
# ═══════════════════════════════════════════════════════════════
|
|
networking.hostName = "nix";
|
|
networking.networkmanager.enable = true;
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# LOCALIZATION
|
|
# ═══════════════════════════════════════════════════════════════
|
|
time.timeZone = "Europe/Berlin";
|
|
|
|
i18n.defaultLocale = "en_US.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";
|
|
};
|
|
|
|
console.keyMap = "de-latin1-nodeadkeys";
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# DISPLAY & INPUT
|
|
# ═══════════════════════════════════════════════════════════════
|
|
services.xserver.enable = true;
|
|
services.displayManager.ly.enable = true;
|
|
services.displayManager.defaultSession = "niri";
|
|
|
|
services.xserver.xkb = {
|
|
layout = "de";
|
|
variant = "nodeadkeys";
|
|
};
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# AUDIO (PipeWire)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
services.pulseaudio.enable = false;
|
|
security.rtkit.enable = true;
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true;
|
|
alsa.support32Bit = true;
|
|
pulse.enable = true;
|
|
jack.enable = true; # For pro audio apps
|
|
};
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# BLUETOOTH
|
|
# ═══════════════════════════════════════════════════════════════
|
|
hardware.bluetooth = {
|
|
enable = true;
|
|
powerOnBoot = true;
|
|
settings = {
|
|
General = {
|
|
Enable = "Source,Sink,Media,Socket";
|
|
Experimental = true;
|
|
KernelExperimental = true;
|
|
};
|
|
Policy = {
|
|
AutoEnable = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PRINTING
|
|
# ═══════════════════════════════════════════════════════════════
|
|
services.printing.enable = true;
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# USER
|
|
# ═══════════════════════════════════════════════════════════════
|
|
users.users.${username} = {
|
|
isNormalUser = true;
|
|
description = "Melvin Ragusa";
|
|
extraGroups = [
|
|
"wheel" # Sudo access
|
|
"networkmanager" # Network configuration
|
|
];
|
|
shell = pkgs.fish; # Fish shell (migrated from Arch)
|
|
};
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PROGRAMS
|
|
# ═══════════════════════════════════════════════════════════════
|
|
programs.zsh.enable = true; # Keep zsh available as fallback
|
|
programs.yazi.enable = true;
|
|
programs.firefox.enable = true;
|
|
programs.niri.enable = true;
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# NIX SETTINGS
|
|
# ═══════════════════════════════════════════════════════════════
|
|
nix.settings = {
|
|
experimental-features = [
|
|
"nix-command"
|
|
"flakes"
|
|
];
|
|
|
|
# Optimize storage
|
|
auto-optimise-store = true;
|
|
|
|
# Trust users for substituters
|
|
trusted-users = [
|
|
"root"
|
|
"@wheel"
|
|
];
|
|
};
|
|
|
|
# Garbage collection
|
|
nix.gc = {
|
|
automatic = true;
|
|
dates = "weekly";
|
|
options = "--delete-older-than 14d";
|
|
};
|
|
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# SYSTEM PACKAGES (Base essentials)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
environment.systemPackages = with pkgs; [
|
|
# Core utilities
|
|
gnupg
|
|
fastfetch
|
|
micro
|
|
wget
|
|
curl
|
|
|
|
# Secure Boot management
|
|
sbctl
|
|
|
|
# Nix tools
|
|
nil # Nix LSP
|
|
nixd
|
|
|
|
# Wayland
|
|
xwayland-satellite
|
|
grim
|
|
slurp
|
|
|
|
# File management
|
|
nautilus
|
|
|
|
# Editors
|
|
zed-editor
|
|
|
|
# Browser
|
|
inputs.zen-browser.packages.${pkgs.system}.default
|
|
|
|
# Flake inputs (desktop shell)
|
|
inputs.noctalia.packages.${pkgs.system}.default
|
|
inputs.opencode.packages.${pkgs.system}.default
|
|
|
|
# Terminal
|
|
ghostty
|
|
|
|
# AI coding
|
|
claude-code
|
|
];
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# SERVICES
|
|
# ═══════════════════════════════════════════════════════════════
|
|
services.openssh.enable = true;
|
|
services.tailscale.enable = true;
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# SYSTEM
|
|
# ═══════════════════════════════════════════════════════════════
|
|
system.stateVersion = "26.05";
|
|
}
|