{ config, lib, pkgs, ... }: let nw = config.nathan.hardware; in with lib; { config = mkMerge [ { hardware.logitech.wireless = mkIf nw.logitech { enable = true; enableGraphical = true; }; } (mkIf nw.amdPassthrough { # Turn on IOMMU and the needed drivers boot = { kernelParams = [ "amd_iommu=on" ]; kernelModules = [ "kvm-amd" "vifo-pci" ]; }; # Enable libvirtd virtualisation.libvirtd = { enable = true; onBoot = "ignore"; onShutdown = "shutdown"; qemu = { ovmf = { enable = true; }; runAsRoot = true; swtpm.enable = true; }; }; }) (mkIf nw.printing { services.printing = { enable = true; drivers = with pkgs; [ canon-cups-ufr2 ]; }; environment.systemPackages = with pkgs; [ canon-cups-ufr2 ]; # Enable avahi for printer discovery services.avahi = { enable = true; nssmdns = false; allowInterfaces = [ "enp6s0" ]; hostName = "levitation"; domainName = "local"; openFirewall = true; }; system.nssModules = with pkgs.lib; optional (!config.services.avahi.nssmdns) pkgs.nssmdns; system.nssDatabases.hosts = with pkgs.lib; optionals (!config.services.avahi.nssmdns) (mkMerge [ (mkOrder 900 [ "mdns4_minimal [NOTFOUND=return]" ]) # must be before resolve (mkOrder 1501 [ "mdns4" ]) # 1501 to ensure it's after dns ]); }) ]; }