diff --git a/system/features/graphics.nix b/system/features/graphics.nix new file mode 100644 index 0000000..05fe339 --- /dev/null +++ b/system/features/graphics.nix @@ -0,0 +1,50 @@ +{ config, lib, ... }: +{ + options = + with lib; + with types; + { + graphics = { + enable = mkEnableOption "graphics support"; + driverChannel = mkOption { + type = str; + # Default to production because I often want new features, but I don't want bleeding edge. + default = "production"; + description = "Driver channel to use (in order of oldest to newest): stable, beta, latest"; + }; + }; + }; + + config = lib.mkIf config.graphics.enable { + # Graphics settings + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.nvidia = { + package = config.boot.kernelPackages.nvidiaPackages."${config.graphics.driverChannel}"; + + modesetting.enable = true; + + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + # Enable this if you have graphical corruption issues or application crashes after waking + # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead + # of just the bare essentials. + powerManagement.enable = true; + + # Fine-grained power management for PRIME. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + # Requires offload to be enabled. + # powerManagement.finegrained = false; + + # Use the open-source driver? + open = false; + + # Enable the nvidia-settings menu? + nvidiaSettings = true; + }; + }; +} diff --git a/system/hosts/vega/hardware-configuration.nix b/system/hosts/vega/hardware-configuration.nix index 829aa00..68a8e52 100644 --- a/system/hosts/vega/hardware-configuration.nix +++ b/system/hosts/vega/hardware-configuration.nix @@ -1,31 +1,45 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ../../features/graphics.nix + ]; # Bootloader. boot.loader.grub.enable = true; boot.loader.grub.device = "/dev/sda"; boot.loader.grub.useOSProber = true; - boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ata_piix" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ehci_pci" + "ata_piix" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/4981ad42-b108-4eb4-accb-b092813bd981"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/4981ad42-b108-4eb4-accb-b092813bd981"; + fsType = "ext4"; + }; - swapDevices = - [ { device = "/dev/disk/by-uuid/f8868dce-6b32-45b7-bdf3-c9a34df1441d"; } - ]; + swapDevices = [ + { device = "/dev/disk/by-uuid/f8868dce-6b32-45b7-bdf3-c9a34df1441d"; } + ]; # 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 @@ -39,34 +53,6 @@ hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; # Graphics settings - hardware.graphics = { - enable = true; - enable32Bit = true; - }; - - services.xserver.videoDrivers = [ "nvidia" ]; - - hardware.nvidia = { - package = config.boot.kernelPackages.nvidiaPackages.beta; - - modesetting.enable = true; - - # Nvidia power management. Experimental, and can cause sleep/suspend to fail. - # Enable this if you have graphical corruption issues or application crashes after waking - # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead - # of just the bare essentials. - powerManagement.enable = true; - - # Fine-grained power management for PRIME. Turns off GPU when not in use. - # Experimental and only works on modern Nvidia GPUs (Turing or newer). - # Requires offload to be enabled. - # powerManagement.finegrained = false; - - # Use the open-source driver? - open = false; - - # Enable the nvidia-settings menu? - nvidiaSettings = true; - }; - + # Using the default production drivers. + graphics.enable = true; }