From 635d7fd0f3f2f54b432a2df095d4b0caf1d29025 Mon Sep 17 00:00:00 2001 From: 514fpv <koishi@514fpv.one> Date: Tue, 2 Jan 2024 16:20:52 +0800 Subject: [PATCH] feat(gui): add graphics driver options --- faucet/gui/default.nix | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 faucet/gui/default.nix diff --git a/faucet/gui/default.nix b/faucet/gui/default.nix new file mode 100644 index 00000000..20ec2c16 --- /dev/null +++ b/faucet/gui/default.nix @@ -0,0 +1,55 @@ +{ pkgs +, lib +, config +, ... }: with lib; let + cfg = config.faucet.gui; +in { + options.faucet.gui = { + enable = mkEnableOption "various setup required for GUI and support software"; + type = mkOption { + type = with types; enum [ "intel" "amdgpu" "nvidia" "prime" ]; + description = "type of graphics acceleration used"; + }; + prime = { + integrated = mkOption { + type = with types; str; + default = "i915"; + description = "integrated gpu driver"; + }; + }; + }; + + config = mkIf cfg.enable { + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = + optional ((cfg.type == "nvidia") || (cfg.type == "prime")) "nvidia" ++ + optional (cfg.type == "amdgpu") "amdgpu"; + # has to be enabled even when using wayland + services.xserver.enable = true; + + hardware.nvidia = mkIf ((cfg.type == "nvidia") || (cfg.type == "prime")) { + modesetting.enable = true; + nvidiaSettings = true; + + prime = mkIf (cfg.type == "prime") { + offload = { + enable = true; + enableOffloadCmd = true; + }; + }; + + powerManagement.enable = false; + powerManagement.finegrained = false; + open = false; + }; + + boot.initrd.kernelModules = + optional (cfg.type == "amdgpu") "amdgpu" ++ + optional (cfg.type == "prime") cfg.prime.integrated; + }; +}