reorganization

This commit is contained in:
Reid 2026-04-22 23:21:34 -07:00
parent f1cd1e461f
commit f2c9e4d5b7
Signed by: reidlab
GPG key ID: DAF5EAF6665839FD
12 changed files with 140 additions and 30 deletions

View file

@ -13,21 +13,16 @@ in {
] ]
++ (mapModulesRec' (toString ./modules) import); ++ (mapModulesRec' (toString ./modules) import);
# i mostly disagree with state versions, just use the oldest one i have set up
# they seem reasonable at first but are so messy across multiple hosts
# a lot of the time they're used for stuff that isn't even state (looking at you, home-manager)
system.stateVersion = mkDefault "25.11"; system.stateVersion = mkDefault "25.11";
system.configurationRevision = with inputs; mkIf (self ? rev) self.rev; system.configurationRevision = with inputs; mkIf (self ? rev) self.rev;
boot = { boot.kernelPackages = mkDefault pkgs.linuxPackages_latest;
kernelPackages = mkDefault pkgs.linuxPackages_latest;
kernelParams = [ "pcie_aspm.policy=performance" ];
};
time.timeZone = mkDefault "America/Los_Angeles"; time.timeZone = mkDefault "America/Los_Angeles";
i18n.defaultLocale = mkDefault "en_US.UTF-8"; # git is needed for flakes, yet, isn't in `environment.corePackages`
environment.systemPackages = with pkgs; [ git ];
hardware.enableRedistributableFirmware = true;
environment.systemPackages = with pkgs; [
git
];
} }

View file

@ -43,6 +43,13 @@
}; };
modules = { modules = {
core = {
# security
security.useDoas = true;
};
hardware = {
networking.enable = true;
};
services = { services = {
ssh.enable = true; ssh.enable = true;
ssh.enableMoshSupport = true; ssh.enableMoshSupport = true;
@ -50,8 +57,6 @@
postgres.enable = true; postgres.enable = true;
mysql.enable = true; mysql.enable = true;
}; };
security.useDoas = true;
}; };
security.doas = { security.doas = {
@ -65,5 +70,5 @@
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
networking.networkmanager.wifi.backend = "iwd"; networking.networkmanager.wifi.backend = "iwd";
networking.networkmanager.wifi.powersave = false; networking.networkmanager.wifi.powersave = false;
networking.wireless.iwd.settings.Settings.AutoConnect = true; networking.wireless.iwd.settings.Settings.AutoConnect = true;
} }

View file

@ -6,15 +6,14 @@
inputs.hardware.nixosModules.common-pc inputs.hardware.nixosModules.common-pc
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./raspberry-pi-4b.nix
]; ];
# use better power management for a device that's always on # use better power management for a device that's always on
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
# i have a couple others i don't noramlly include, such as: boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
# uas (uasp, scsi over usb), usbcore (needed(???) for the drive at boot)
# pcie_brcmstb (required for pcie), reset-raspberrypi (needed for vl805 firmware to load)
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "pcie_brcmstb" "reset-raspberrypi" "uas" "usbcore" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ]; boot.kernelModules = [ ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
@ -23,18 +22,10 @@
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true; boot.loader.generic-extlinux-compatible.enable = true;
# needed for initial framebuffer logs to appear on raspberry pi
# i think. this fixes it but idk if they are all required
boot.kernelParams = [
"8250.nr_uarts=1"
"cma=128M"
"console=tty0"
];
fileSystems."/" = fileSystems."/" =
{ device = "/dev/disk/by-uuid/04542424-6899-4b94-9414-fffa569f2c03"; { device = "/dev/disk/by-uuid/04542424-6899-4b94-9414-fffa569f2c03";
fsType = "ext4"; fsType = "ext4";
options = [ "noatime" "nodiratime" "discard" ]; options = [ "noatime" ];
}; };
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -0,0 +1,14 @@
{ pkgs, lib, ... }:
{
# uas (uasp, scsi over usb), usbcore (needed(???) for the drive at boot)
# pcie_brcmstb (required for pcie), reset-raspberrypi (needed for vl805 firmware to load)
boot.initrd.availableKernelModules = [ "pcie_brcmstb" "reset-raspberrypi" "uas" "usbcore" ];
# needed for initial framebuffer logs to appear on raspberry pi
# i think. this fixes it but idk if they are all required
boot.kernelParams = [
"8250.nr_uarts=1"
"cma=128M"
"console=tty0"
];
}

View file

@ -0,0 +1,36 @@
{ config, lib, ... }:
with lib;
{
# if lvm is enabled, then tell it to issue discards
# (this is good for SSDs and has almost no downsides on HDDs, so
# it's a good idea to enable it unconditionally)
environment.etc."lvm/lvm.conf".text = mkIf config.services.lvm.enable ''
devices {
issue_discards = 1
}
'';
# discard blocks that are not in use by the filesystem, good for SSDs
services.fstrim = {
# we may enable this unconditionally across all systems becuase it's performance
# impact is negligible on systems without a SSD - which means it's a no-op with
# almost no downsides aside from the service firing once per week
enable = true;
# the default value, good enough for average-load systems
interval = "weekly";
};
# tweak fstrim service to run only when on AC power
# and to be nice to other processes
# (this is a good idea for any service that runs periodically)
systemd.services.fstrim = {
unitConfig.ConditionACPower = true;
serviceConfig = {
Nice = 19;
IOSchedulingClass = "idle";
};
};
}

7
modules/core/fs/lvm.nix Normal file
View file

@ -0,0 +1,7 @@
{ config, lib, ... }:
with lib;
{
# i don't use lvm, can be disabled
services.lvm.enable = mkDefault false;
}

16
modules/core/fs/scrub.nix Normal file
View file

@ -0,0 +1,16 @@
{ config, lib, ... }:
with lib;
let
supportedFilesystems = builtins.map (builtins.getAttr "fsType") (builtins.attrValues config.fileSystems);
mkScrubConfig = fsType: {
enable = builtins.elem fsType supportedFilesystems;
interval = "weekly";
};
in {
services.btrfs.autoScrub = mkScrubConfig "btrfs";
services.zfs.autoScrub = mkScrubConfig "zfs";
# bcachefs exists but it was "ejected from the kernel" for "repeated violations of kernel dev. guidelines"
# linus "tech tips" torvalds said himself "nobody sane uses bcachefs and expects it to be stable" (https://en.wikipedia.org/wiki/Bcachefs#Stability)
}

13
modules/core/locale.nix Normal file
View file

@ -0,0 +1,13 @@
{ lib, pkgs, inputs, config, ... }:
with lib;
{
i18n.defaultLocale = mkDefault "en_US.UTF-8";
services.xserver.xkb = {
layout = "us";
variant = "qwerty";
};
console = {
useXkbConfig = mkDefault true;
};
}

View file

@ -27,10 +27,17 @@
}; };
}; };
nix.optimise.automatic = true; nix.optimise.automatic = true; # likely not needed w/ auto-optimise-store, comfy to keep though
nix.gc = { nix.gc = {
automatic = true; automatic = true;
dates = "weekly"; dates = "weekly";
options = "--delete-older-than 30d"; options = "--delete-older-than 30d";
}; };
# compat w/ non-nix programs
programs.nix-ld.enable = true;
programs.appimage = {
enable = true;
binfmt = true;
};
} }

View file

@ -2,9 +2,9 @@
with lib; with lib;
let let
cfg = config.modules.security; cfg = config.modules.core.security;
in { in {
options.modules.security = { options.modules.core.security = {
useDoas = mkEnableOption "use opendoas instead of sudo"; useDoas = mkEnableOption "use opendoas instead of sudo";
}; };
@ -64,6 +64,7 @@ in {
# while this is on by default, i am going to explicitly specify this # while this is on by default, i am going to explicitly specify this
networking.firewall.enable = true; networking.firewall.enable = true;
# stay up to date on firmware
services.fwupd.enable = true; services.fwupd.enable = true;
} }
(mkIf cfg.useDoas { (mkIf cfg.useDoas {

View file

@ -0,0 +1,6 @@
{ pkgs, ... }:
{
config = {
hardware.enableRedistributableFirmware = true;
};
}

View file

@ -0,0 +1,19 @@
{ pkgs, config, lib, ... }:
with lib;
let
cfg = config.modules.hardware.networking;
in {
options.modules.hardware.networking = {
enable = mkEnableOption "Enable NetworkManager, a daemon for configuring network interfaces";
};
config = mkIf cfg.enable {
networking.networkmanager.enable = true;
networking.networkmanager.wifi.backend = "iwd";
networking.networkmanager.wifi.powersave = false;
networking.wireless.iwd.settings.Settings.AutoConnect = true;
systemd.services.NetworkManager-wait-online.enable = false;
};
}