at 17.09-beta 1.7 kB view raw
1# Upower daemon. 2 3{ config, lib, pkgs, ... }: 4 5with lib; 6 7let 8 cfg = config.services.upower; 9in 10{ 11 12 ###### interface 13 14 options = { 15 16 services.upower = { 17 18 enable = mkOption { 19 type = types.bool; 20 default = false; 21 description = '' 22 Whether to enable Upower, a DBus service that provides power 23 management support to applications. 24 ''; 25 }; 26 27 package = mkOption { 28 type = types.package; 29 default = pkgs.upower; 30 defaultText = "pkgs.upower"; 31 example = lib.literalExample "pkgs.upower"; 32 description = '' 33 Which upower package to use. 34 ''; 35 }; 36 37 }; 38 39 }; 40 41 42 ###### implementation 43 44 config = mkIf cfg.enable { 45 46 environment.systemPackages = [ cfg.package ]; 47 48 services.dbus.packages = [ cfg.package ]; 49 50 services.udev.packages = [ cfg.package ]; 51 52 systemd.services.upower = 53 { description = "Power Management Daemon"; 54 path = [ pkgs.glib.out ]; # needed for gdbus 55 serviceConfig = 56 { Type = "dbus"; 57 BusName = "org.freedesktop.UPower"; 58 ExecStart = "@${cfg.package}/libexec/upowerd upowerd"; 59 }; 60 }; 61 62 system.activationScripts.upower = 63 '' 64 mkdir -m 0755 -p /var/lib/upower 65 ''; 66 67 # The upower daemon seems to get stuck after doing a suspend 68 # (i.e. subsequent suspend requests will say "Sleep has already 69 # been requested and is pending"). So as a workaround, restart 70 # the daemon. 71 powerManagement.resumeCommands = 72 '' 73 ${config.systemd.package}/bin/systemctl try-restart upower 74 ''; 75 76 }; 77 78}