{ config, lib, ... }: with lib; with lib.metacfg; let cfg = config.metacfg.system.noSleep; in { options.metacfg.system.noSleep = with types; { enable = mkBoolOpt false "Whether or not to disable all sleep targets."; disableGdmAutoSuspend = mkBoolOpt false "Disable GDM auto-suspend."; ignoreLidSwitch = mkBoolOpt false "Ignore lid switch events."; }; config = mkIf cfg.enable { systemd.targets.sleep.enable = false; systemd.targets.suspend.enable = false; systemd.targets.hibernate.enable = false; systemd.targets.hybrid-sleep.enable = false; services.displayManager.gdm.autoSuspend = mkIf cfg.disableGdmAutoSuspend false; services.logind.settings.Login.HandleLidSwitch = mkIf cfg.ignoreLidSwitch "ignore"; }; }