nixos/hosts/frame12/default.nix

129 lines
3.4 KiB
Nix

{ config, lib, inputs, pkgs, timeZone, ... }:
let
deskCfg = config.deskCfg;
in
{
imports = [
inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel
./nixos/hardware-configuration.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/colemak-ec.nix
../../shared/modules/services/hyprvoice.nix
];
deskCfg = {
userName = "nate";
hostName = "frame12";
fullName = "Nate Anderson";
de = "niri";
};
# Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 5;
boot.kernelPackages = pkgs.linuxPackages_latest;
# Systemd initrd for Plymouth and faster boot
boot.initrd.systemd.enable = true;
# Silent boot
silentBoot.enable = true;
# Plymouth — custom Framework theme
boot.plymouth = {
enable = true;
theme = "framework";
themePackages = [
(pkgs.runCommand "plymouth-framework-theme" { } ''
mkdir -p $out/share/plymouth/themes/framework
cp -r ${./framework-plymouth-theme/framework}/* $out/share/plymouth/themes/framework/
substituteInPlace $out/share/plymouth/themes/framework/framework.plymouth \
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework"
'')
];
};
# 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;
# IWD wireless backend
networking.wireless.iwd.enable = true;
# Extra groups
main_user.extraGroups = [ "corectrl" "dialout" "docker" ];
# Stylix overrides — kimber dark theme, terminal font size 16
stylix = {
base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml";
fonts.sizes.terminal = 16;
};
# Intel graphics acceleration (Framework 12)
hardware.graphics.enable = true;
hardware.enableRedistributableFirmware = true;
# Intel iHD GPU
environment.sessionVariables.LIBVA_DRIVER_NAME = "iHD";
# Niri WM config
niriwm = {
enable = true;
useNonFree = true;
user = deskCfg.userName;
systemPackages = with pkgs; [
libreoffice
rpi-imager
];
};
# Frame12-specific packages
environment.systemPackages = with pkgs; [
cryptsetup
cage
kanshi
man-pages
man-pages-posix
pavucontrol
swayosd
wdisplays
];
# Colemak-DH EC remap
colemakEc.enable = true;
# Docker — rootless
dockerConfig.rootless = true;
# Hyprvoice dictation
services.hyprvoice = {
enable = true;
user = deskCfg.userName;
};
# Bluetooth name
hardware.bluetooth.settings.General.Name = "Nate-Frame";
# 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"
'';
system.stateVersion = "25.05";
}