dotfiles/roles/hardware.nix

45 lines
1.4 KiB
Nix

{ config, lib, pkgs, ... }:
let cfg = config.yorick; in
with lib;
{
options.yorick = {
cpu = mkOption {
type = types.nullOr (types.enum ["intel"]);
};
gpu = mkOption {
type = types.nullOr (types.enum ["intel" "nvidia"]);
default = null;
};
laptop = mkEnableOption "laptop settings";
};
config = mkMerge [
(mkIf (cfg.gpu == "intel") {
# https://wiki.archlinux.org/index.php/Dell_XPS_13_(9360)#Module-based_Powersaving_Options
boot.kernelParams = ["i915.enable_fbc=1" "i915.enable_guc_loading=1" "i915.enable_guc_submission=1" "i915.enable_huc=1" "i915.enable_psr=2"];
# now we wait until enable_psr=1 is fixed
services.xserver.videoDrivers = ["modesetting"];
hardware.opengl.extraPackages = [ pkgs.vaapiIntel ];
})
(mkIf (cfg.gpu == "nvidia") {
boot.kernelModules = ["nvidiabl"];
services.xserver.videoDrivers = ["nvidia"];
boot.extraModulePackages = [config.boot.kernelPackages.nvidiabl];
})
(mkIf (cfg.cpu == "intel") {
hardware.cpu.intel.updateMicrocode = true;
boot.kernelModules = ["kvm-intel"];
})
(mkIf (cfg.laptop) {
services.xserver.libinput.enable = true;
networking.wireless.enable = true;
hardware.bluetooth.enable = true;
# gotta go faster
networking.dhcpcd.extraConfig = ''
noarp
'';
services.thermald.enable = true;
})
];
}