{ config, lib, pkgs, ... }: with lib; { nixfiles.modules = { ark.enable = true; wireguard.client.enable = true; syncthing.enable = true; openssh.server.enable = true; games = { lutris.enable = true; minecraft.client.enable = true; steam.enable = true; }; android.enable = true; bluetooth.enable = true; beets.enable = true; libvirtd.enable = true; qutebrowser.enable = true; mpd.enable = true; nullmailer.enable = true; }; hm = { home.packages = with pkgs; [obs-studio]; programs = { beets.settings.directory = mkForce "/mnt/udata/music"; # NOTE This produces very poor performance even though RX 6750 XT should # handle VA-API hardware decoding for all major formats (including AV1) just # fine. firefox.profiles.default.settings."media.ffmpeg.vaapi.enabled" = false; # Mostly just placebo. :^) mpv.config = { hwdec = "vdpau"; vo = "gpu"; profile = "gpu-hq"; }; }; services.mpd.musicDirectory = mkForce "/mnt/udata/music"; }; services.smartd = { enable = true; notifications.mail = { enable = true; sender = "admin+smartd@${my.domain.shire}"; recipient = "admin+smartd@${my.domain.shire}"; }; }; # Usually stuff that is going to be compiled on this machine is going to have # parallelisation support enabled, so we will make sure that all cores are # utilised and limit the job queue to one. nix.extraOptions = '' keep-going = true max-jobs = 1 cores = 32 ''; boot = { # TODO Override Xanmod kernel to support ZFS. This probably will require # some patching and whatnot. kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; kernelParams = [ # Silence benign MCE errors: # ``` # mce: [Hardware Error]: CPU 1: Machine Check: 0 Bank 29: ffffffffffffffff # mce: [Hardware Error]: TSC 0 MISC ff1fffffffffffff SYND ffffffffffffffff IPID ffffffffffffffff # mce: [Hardware Error]: PROCESSOR 2:a60f12 TIME 1669988017 SOCKET 0 APIC 2 microcode a601201 # ``` "mce=nobootlog" # Required for Hogwats Legacy. "clearcpuid=514" ]; # The boot drive is Samsung SSD 980 PRO 2TB. initrd.kernelModules = ["nvme"]; zfs.extraPools = ["udata" "vdata"]; }; # Filesystem creation: # ``` # mkfs.vfat -F 32 -l nixos-boot /dev/nvmeXnYpZ # # zpool create # -o ashift=12 # -o autotrim=on # -O acltype=posixacl # -O xattr=sa # -O compression=zstd # -O mountpoint=none # nixos # /dev/nvmeXnYpZ # # zfs create # nixos/root # # zfs create # -o encryption=aes-256-gcm # -o keyformat=passphrase # -o mountpoint=legacy # nixos/root/ark # # zfs create # -o mountpoint=legacy # nixos/root/nix # ``` fileSystems = { "/" = { device = "none"; fsType = "tmpfs"; options = ["size=8G" "mode=755"]; }; "/boot" = { device = "/dev/disk/by-uuid/1363-02E6"; fsType = "vfat"; }; "/nix" = { device = "nixos/root/nix"; fsType = "zfs"; options = ["noatime"]; }; ${config.ark.path} = { device = "nixos/root/ark"; fsType = "zfs"; neededForBoot = true; # Required by impermanence. }; # Required[1] when using impermanence with agenix. Filesystem itself is # defined as an `ark.directory` in `nixos/common/users.nix`. # # [1]: https://github.com/ryantm/agenix/issues/45#issuecomment-847852593 # [1]: https://github.com/nix-community/impermanence/issues/22 # [1]: https://github.com/NixOS/nixpkgs/pull/86967#pullrequestreview-667929259 "/home/${my.username}" = { depends = [config.ark.path]; neededForBoot = true; }; }; # No swap space is declared here because the system already has 128Gb of RAM. :^) # I've only manage to hit around 100Gb mark when running large # computations/compiling something big. Pretty sure that a hefty chunk of it # was just residual cache and it wouldn't make me get to OOM situations. }