99 lines
2.7 KiB
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";
|
|
};
|
|
};
|
|
};
|
|
}
|