{ inputs, config, lib, pkgs, ... }: { imports = [ inputs.hardware.nixosModules.common-cpu-amd inputs.hardware.nixosModules.common-cpu-amd-pstate inputs.hardware.nixosModules.common-gpu-amd inputs.hardware.nixosModules.common-pc-laptop inputs.hardware.nixosModules.common-pc-laptop-acpi_call inputs.hardware.nixosModules.common-pc-laptop-ssd ]; # Use the systemd-boot EFI boot loader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; hardware.enableRedistributableFirmware = lib.mkDefault true; boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod"]; boot.initrd.kernelModules = ["synaptics_usb"]; boot.kernelModules = ["kvm-amd"]; boot.kernelPackages = pkgs.linuxPackages_latest; boot.extraModulePackages = []; # disable Scatter/Gather APU recently enabled by default, # which results in white screen after display reconfiguration boot.kernelParams = [ "amdgpu.sg_display=0" "amd_pstate=active" ]; fileSystems."/" = { device = "none"; fsType = "tmpfs"; options = ["defaults" "size=8G" "mode=755"]; }; fileSystems."/boot" = { device = "/dev/disk/by-partlabel/disk-main-ESP"; fsType = "vfat"; options = ["fmask=0022" "dmask=0022"]; }; boot.initrd.luks.devices."crypted".device = "/dev/disk/by-partlabel/disk-main-luks"; fileSystems."/nix" = { device = "/dev/mapper/crypted"; fsType = "btrfs"; options = ["subvol=nix" "compress=zstd" "noatime"]; }; fileSystems."/persist" = { device = "/dev/mapper/crypted"; fsType = "btrfs"; options = ["subvol=persist" "compress=zstd" "noatime"]; neededForBoot = true; }; fileSystems."/swap" = { device = "/dev/mapper/crypted"; fsType = "btrfs"; options = ["subvol=swap" "noatime"]; }; fileSystems."/tmp" = { device = "/dev/mapper/crypted"; fsType = "btrfs"; options = ["subvol=tmp" "noatime"]; }; fileSystems."/var/log" = { device = "/dev/mapper/crypted"; fsType = "btrfs"; options = ["subvol=log" "compress=zstd" "noatime"]; neededForBoot = true; }; boot.tmp.cleanOnBoot = true; swapDevices = [{device = "/swap/swapfile";}]; # 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..useDHCP`. networking.useDHCP = lib.mkDefault true; # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; services.xserver = { videoDrivers = ["amdgpu"]; }; # sound = { # enable = lib.mkForce false; # mediaKeys.enable = true; # }; # hardware.pulseaudio = { # enable = true; # support32Bit = true; # }; # Fingerprint services.fprintd = { enable = true; }; systemd.services.fprintd = { wantedBy = ["multi-user.target"]; serviceConfig.Type = "simple"; }; # Bluetooth hardware.bluetooth = { enable = true; powerOnBoot = true; }; services.printing = { enable = true; drivers = [pkgs.hplip]; }; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; }