From 0fd3f6455bd35c3a04c3cd6f2d78d885267a8865 Mon Sep 17 00:00:00 2001 From: NullBite Date: Mon, 15 Apr 2024 11:49:21 -0400 Subject: [PATCH] slab: setup supergfxd in specialisation --- hosts/slab/configuration.nix | 3 ++ hosts/slab/nvidia-optimus.nix | 1 + hosts/slab/supergfxd.nix | 97 +++++++++++++++++++++-------------- 3 files changed, 63 insertions(+), 38 deletions(-) diff --git a/hosts/slab/configuration.nix b/hosts/slab/configuration.nix index a391d66..ad90d21 100644 --- a/hosts/slab/configuration.nix +++ b/hosts/slab/configuration.nix @@ -30,6 +30,7 @@ ../../system # nixfiles modules ./nvidia-optimus.nix + ./supergfxd.nix ]; specialisation.plasma.configuration = { @@ -42,6 +43,8 @@ services.xserver.displayManager.startx.enable = lib.mkForce false; }; + nixfiles.supergfxd.profile = lib.mkDefault "Integrated"; + # who needs a display manager? services.displayManager.sddm.enable = false; diff --git a/hosts/slab/nvidia-optimus.nix b/hosts/slab/nvidia-optimus.nix index a855cdc..a42f712 100644 --- a/hosts/slab/nvidia-optimus.nix +++ b/hosts/slab/nvidia-optimus.nix @@ -7,6 +7,7 @@ nvidia.configuration = { system.nixos.tags = [ "NVIDIA" ]; + nixfiles.supergfxd.profile = "Hybrid"; # Load nvidia driver for Xorg and Wayland services.xserver.videoDrivers = ["amdgpu" "nvidia"]; diff --git a/hosts/slab/supergfxd.nix b/hosts/slab/supergfxd.nix index f5f888c..b62c5bf 100644 --- a/hosts/slab/supergfxd.nix +++ b/hosts/slab/supergfxd.nix @@ -3,50 +3,64 @@ let gfx = { Integrated = { supergfxd = pkgs.writeText "supergfxd-integrated" '' -{ - "mode": "Integrated", - "vfio_enable": false, - "vfio_save": false, - "always_reboot": false, - "no_logind": false, - "logout_timeout_s": 180, - "hotplug_type": "None" -} + { + "mode": "Integrated", + "vfio_enable": false, + "vfio_save": false, + "always_reboot": false, + "no_logind": false, + "logout_timeout_s": 180, + "hotplug_type": "None" + } ''; + # old def (keeping this here just in case + # modprobe = pkgs.writeText "supergfxd-integrated-modprobe" '' + # # Automatically generated by supergfxd + # blacklist nouveau + # alias nouveau off + # blacklist nvidia_drm + # blacklist nvidia_uvm + # blacklist nvidia_modeset + # blacklist nvidia + # alias nvidia off + + # options nvidia-drm modeset=1 + # ''; modprobe = pkgs.writeText "supergfxd-integrated-modprobe" '' -# Automatically generated by supergfxd -blacklist nouveau -alias nouveau off -blacklist nvidia_drm -blacklist nvidia_uvm -blacklist nvidia_modeset -blacklist nvidia -alias nvidia off - -options nvidia-drm modeset=1 + # Automatically generated by supergfxd + blacklist nouveau + blacklist nvidia_drm + blacklist nvidia_uvm + blacklist nvidia_modeset + blacklist nvidia + install nvidia_uvm /bin/false + install nvdia_drm /bin/false + install nvidia_modeset /bin/false + install nvidia /bin/false + install nouveau /bin/false + options nvidia-drm modeset=1 ''; }; Hybrid = { supergfxd = pkgs.writeText "supergfxd-hybrid" '' -{ - "mode": "Hybrid", - "vfio_enable": false, - "vfio_save": false, - "always_reboot": false, - "no_logind": false, - "logout_timeout_s": 180, - "hotplug_type": "None" -} + { + "mode": "Hybrid", + "vfio_enable": false, + "vfio_save": false, + "always_reboot": false, + "no_logind": false, + "logout_timeout_s": 180, + "hotplug_type": "None" + } ''; modprobe = pkgs.writeText "supergfxd-hybrid-modprobe" '' -# Automatically generated by supergfxd -blacklist nouveau -alias nouveau off -options nvidia NVreg_DynamicPowerManagement=0x02 - -options nvidia-drm modeset=1 + # Automatically generated by supergfxd + blacklist nouveau + alias nouveau off + options nvidia NVreg_DynamicPowerManagement=0x02 + options nvidia-drm modeset=1 ''; }; }; @@ -61,17 +75,24 @@ options nvidia-drm modeset=1 in { options = { nixfiles.supergfxd.profile = mkOption { - type = types.str; - default = ""; + type = types.nullOr (types.enum (builtins.attrNames gfx)); + default = null; example = "Integrated"; description = "supergfxd profile to use"; }; }; config = { - etc = mkIf (!(cfg.profile == "")) { - # TODO figure out here how to assert if the value is in the gfx attrset + environment.etc = mkIf (!(builtins.isNull cfg.profile)) { # TODO actually configure the system settings here + "supergfxd.conf" = { + source = gfx.${cfg.profile}.supergfxd; + mode = "0644"; + }; + "modprobe.d/supergfxd.conf" = { + source = gfx.${cfg.profile}.modprobe; + mode = "0644"; + }; }; }; }