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