slab: setup supergfxd in specialisation

This commit is contained in:
NullBite 2024-04-15 11:49:21 -04:00
parent dc7ff4cac7
commit 0fd3f6455b
Signed by: nullbite
GPG Key ID: 6C4D545385D4925A
3 changed files with 63 additions and 38 deletions

View File

@ -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;

View File

@ -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"];

View File

@ -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";
};
};
};
}