{ 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" } ''; 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 ''; }; 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.str; default = ""; 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 # TODO actually configure the system settings here }; }; }