nixfiles/hosts/slab/supergfxd.nix

99 lines
2.7 KiB
Nix

{ pkgs, lib, config, options, ... }@args:
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"
}
'';
# 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
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"
}
'';
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
'';
};
};
cfg = config.nixfiles.supergfxd;
isKeyInAttrset = let
getKeys = attrset: lib.mapAttrsToList (name: _: name) attrset;
isInList = key: list: lib.any (x: x == key) list;
in key: attrset: isInList key (getKeys attrset);
inherit (lib) mkIf mkOption types;
in {
options = {
nixfiles.supergfxd.profile = mkOption {
type = types.nullOr (types.enum (builtins.attrNames gfx));
default = null;
example = "Integrated";
description = "supergfxd profile to use";
};
};
config = {
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";
};
};
};
}