WIP: Laptop config

This commit is contained in:
2026-02-17 20:02:25 +01:00
parent 1d00288f34
commit bfe2094a5f
27 changed files with 467 additions and 190 deletions

70
desktop/default.nix Normal file
View File

@@ -0,0 +1,70 @@
{
config,
pkgs,
lib,
...
}:
{
imports = [
./hardware-configuration.nix
./modules
../common
];
boot = {
loader = {
systemd-boot = {
windows = {
"w" = {
title = "Windows";
efiDeviceHandle = "HD3b";
};
};
};
};
};
networking = {
hostName = "epiquev2";
};
virtualisation = {
libvirtd = {
qemu = {
swtpm.enable = true;
};
};
spiceUSBRedirection.enable = true;
};
hardware = {
cpu.amd.updateMicrocode = true;
amdgpu = {
initrd.enable = true;
overdrive.enable = true;
};
bluetooth = {
settings = {
General = {
Name = "epiquev2";
};
};
};
graphics = {
extraPackages = with pkgs; [
rocmPackages.clr.icd
rocmPackages.rocminfo
rocmPackages.rocm-smi
];
};
amdgpu.opencl.enable = true;
};
system.stateVersion = "25.05";
}

View File

@@ -0,0 +1,198 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
kernelModules = [ ];
verbose = false;
availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"uas"
"usbhid"
"sd_mod"
];
};
kernelPackages = pkgs.linuxKernel.packages.linux_xanmod_latest;
kernelModules = [
"kvm-amd"
"nct6683"
"hid-logitech-dj"
"hid-logitech-hidpp"
];
extraModulePackages = with config.boot.kernelPackages; [
pkgs.linuxKernel.packages.linux_xanmod_latest.zenpower
];
blacklistedKernelModules = [ "k10temp" ];
kernelParams = [
"amdgpu.seamless=1"
"rd.udev.log_priority=3"
"vt.global_cursor_default=0"
];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=@nix"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:8"
"autodefrag"
];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=@home"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:7"
"autodefrag"
];
};
fileSystems."/home/jax/.local/share/Steam" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=steam"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:8"
"autodefrag"
];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=@nix_nix"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:10"
"autodefrag"
];
};
fileSystems."/var" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=@nix_var"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:10"
"autodefrag"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3DB5-50DE";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
fileSystems."/media/data" = {
device = "/dev/disk/by-uuid/4c0c8b24-6fca-49c1-8e34-e00e240576e3";
fsType = "btrfs";
options = [
"subvol=Data"
"space_cache=v2"
"compress=zstd:8"
"noatime"
"autodefrag"
];
};
fileSystems."/media/games" = {
device = "/dev/disk/by-uuid/4c0c8b24-6fca-49c1-8e34-e00e240576e3";
fsType = "btrfs";
options = [
"subvol=Games"
"space_cache=v2"
"compress=zstd:5"
"noatime"
"autodefrag"
];
};
fileSystems."/media/home-backup" = {
device = "/dev/disk/by-uuid/4c0c8b24-6fca-49c1-8e34-e00e240576e3";
fsType = "btrfs";
options = [
"subvol=home-backup"
"space_cache=v2"
"compress=zstd:10"
"noatime"
"autodefrag"
];
};
fileSystems."/media/pipa" = {
device = "/dev/disk/by-uuid/0013f713-acf4-496b-b43f-25258283b884";
fsType = "f2fs";
options = [
"compress_algorithm=zstd:10"
"compress_chksum"
"atgc"
"gc_merge"
"lazytime"
];
};
fileSystems."/media/pipa/pixelage" = {
device = "/dev/disk/by-uuid/688ed267-cec9-400a-9226-32b0538eaecd";
fsType = "btrfs";
options = [
"subvol=pixelage"
"ssd"
"space_cache=v2"
"noatime"
"compress=zstd:10"
"autodefrag"
];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp42s0.useDHCP = lib.mkDefault true;
# networking.interfaces.enp5s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@@ -0,0 +1,10 @@
{ ... }:
{
imports = [
./gdm-monitors.nix
./packages.nix
./programs.nix
./services.nix
];
}

View File

@@ -0,0 +1,300 @@
{
config,
pkgs,
lib,
...
}:
let
gdmMonitorsXml = pkgs.writeText "gdm-monitor.xml" ''
<monitors version="2">
<configuration>
<layoutmode>logical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>HPN</vendor>
<product>HP 24fh</product>
<serial>3CM8340KRZ </serial>
</monitorspec>
<mode>
<width>1920</width>
<height>1080</height>
<rate>74.973</rate>
<ratemode>variable</ratemode>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>unknown</vendor>
<product>unknown</product>
<serial>unknown</serial>
</monitorspec>
<mode>
<width>640</width>
<height>480</height>
<rate>59.940</rate>
</mode>
<underscanning>yes</underscanning>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-A-1</connector>
<vendor>unknown</vendor>
<product>unknown</product>
<serial>unknown</serial>
</monitorspec>
<mode>
<width>640</width>
<height>480</height>
<rate>59.940</rate>
</mode>
<underscanning>yes</underscanning>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-2</connector>
<vendor>unknown</vendor>
<product>unknown</product>
<serial>unknown</serial>
</monitorspec>
<mode>
<width>640</width>
<height>480</height>
<rate>59.940</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>logical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>SAM</vendor>
<product>SMB2240W</product>
<serial>H9FZ915793</serial>
</monitorspec>
<mode>
<width>1680</width>
<height>1050</height>
<rate>59.883</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>HPN</vendor>
<product>HP 24fh</product>
<serial>3CM8340KRZ </serial>
</monitorspec>
<mode>
<width>1920</width>
<height>1080</height>
<rate>60.000</rate>
</mode>
</monitor>
</logicalmonitor>
<logicalmonitor>
<x>102</x>
<y>1080</y>
<scale>1</scale>
<monitor>
<monitorspec>
<connector>Meta-0</connector>
<vendor>MetaVendor</vendor>
<product>Virtual remote monitor</product>
<serial>0x000001</serial>
</monitorspec>
<mode>
<width>1728</width>
<height>1080</height>
<rate>60.000</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>HPN</vendor>
<product>HP 24fh</product>
<serial>3CM8340KRZ </serial>
</monitorspec>
<mode>
<width>1920</width>
<height>1080</height>
<rate>74.973</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-A-1</connector>
<vendor>SAM</vendor>
<product>SMB2240W</product>
<serial>H9FZ915793</serial>
</monitorspec>
<mode>
<width>1680</width>
<height>1050</height>
<rate>59.883</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>logical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>HPN</vendor>
<product>HP 24fh</product>
<serial>3CM8340KRZ </serial>
</monitorspec>
<mode>
<width>1920</width>
<height>1080</height>
<rate>74.973</rate>
<ratemode>variable</ratemode>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>SAM</vendor>
<product>SMB2240W</product>
<serial>H9FZ915793</serial>
</monitorspec>
<mode>
<width>1680</width>
<height>1050</height>
<rate>59.883</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
<configuration>
<layoutmode>physical</layoutmode>
<logicalmonitor>
<x>0</x>
<y>0</y>
<scale>1</scale>
<primary>yes</primary>
<monitor>
<monitorspec>
<connector>HDMI-1</connector>
<vendor>SAM</vendor>
<product>SMB2240W</product>
<serial>H9FZ915793</serial>
</monitorspec>
<mode>
<width>1680</width>
<height>1050</height>
<rate>59.883</rate>
</mode>
</monitor>
</logicalmonitor>
<logicalmonitor>
<x>0</x>
<y>1050</y>
<scale>1</scale>
<monitor>
<monitorspec>
<connector>Meta-0</connector>
<vendor>MetaVendor</vendor>
<product>Virtual remote monitor</product>
<serial>0x000001</serial>
</monitorspec>
<mode>
<width>1728</width>
<height>1080</height>
<rate>60.000</rate>
</mode>
</monitor>
</logicalmonitor>
</configuration>
</monitors>
'';
in
{
systemd.tmpfiles.rules = [
"L+ /run/gdm/.config/monitors.xml - - - - ${gdmMonitorsXml}"
];
}

View File

@@ -0,0 +1,41 @@
{
config,
pkgs,
lib,
czkawka-master,
solaar-master,
fet,
...
}:
{
environment.systemPackages = with pkgs; [
amdgpu_top
arch-install-scripts
ccache
czkawka-master.packages.${pkgs.stdenv.hostPlatform.system}.default
fahclient
lact
nvtopPackages.amd
radeontop
rocmPackages.rocm-smi
rocmPackages.rocminfo
swtpm
zenmonitor
];
fonts = {
packages = with pkgs; [
fira-code
font-awesome
nerd-fonts.fira-code
nerd-fonts.fira-mono
nerd-fonts.symbols-only
nerd-fonts.ubuntu-mono
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
ubuntu-classic
];
};
}

View File

@@ -0,0 +1,62 @@
{
config,
pkgs,
lib,
...
}:
{
programs = {
dconf.profiles.gdm.databases = [
{
settings = {
"org/gnome/desktop/peripherals/keyboard" = {
numlock-state = true;
remember-numlock-state = true;
};
"org/gnome/desktop/peripherals/mouse" = {
speed-profile = "flat";
speed = -0.5;
};
"org/gnome/desktop/peripherals/touchpad" = {
speed-profile = "flat";
speed = -0.5;
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
gtk-theme = "Flat-Remix-GTK-Red-Darkest";
icon-theme = "Papirus-Dark";
cursor-theme = "Bibata-Modern-Classic";
clock-format = "24h";
};
"org/gnome/shell/portal" = {
color-scheme = "prefer-dark";
};
};
}
];
virt-manager.enable = true;
ccache = {
enable = true;
cacheDir = "/media/data/.ccache";
};
obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi
obs-gstreamer
obs-vkcapture
];
};
};
}

View File

@@ -0,0 +1,57 @@
{
config,
pkgs,
lib,
...
}:
{
environment.systemPackages = with pkgs; [
zram-generator
];
services = {
lact.enable = true;
hardware.openrgb = {
enable = true;
motherboard = "amd";
package = pkgs.openrgb-with-all-plugins;
};
udev.extraRules = ''
SUBSYSTEM=="block", ENV{ID_FS_UUID}=="39c48cb1-233c-4921-a614-3a193574df67", ENV{UDISKS_IGNORE}="1"
'';
btrbk.instances = {
daily_ssd = {
onCalendar = "daily";
settings = {
timestamp_format = "long";
snapshot_preserve = "7d";
volume."/" = {
subvolume = "home";
snapshot_dir = "home/.snapshots/daily";
};
};
};
weekly_hdd = {
onCalendar = "weekly";
settings = {
timestamp_format = "long";
snapshot_preserve_min = "latest";
snapshot_preserve = "no";
target_preserve = "20w";
volume."/" = {
subvolume = "home";
snapshot_dir = "home/.snapshots/weekly";
target = "/media/home-backup";
};
};
};
};
};
}