at 15.09-beta 1.6 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 example = lib.literalExample "pkgs.upower"; 31 description = '' 32 Which upower package to use. 33 ''; 34 }; 35 36 }; 37 38 }; 39 40 41 ###### implementation 42 43 config = mkIf cfg.enable { 44 45 environment.systemPackages = [ cfg.package ]; 46 47 services.dbus.packages = [ cfg.package ]; 48 49 services.udev.packages = [ cfg.package ]; 50 51 systemd.services.upower = 52 { description = "Power Management Daemon"; 53 path = [ pkgs.glib ]; # needed for gdbus 54 serviceConfig = 55 { Type = "dbus"; 56 BusName = "org.freedesktop.UPower"; 57 ExecStart = "@${cfg.package}/libexec/upowerd upowerd"; 58 }; 59 }; 60 61 system.activationScripts.upower = 62 '' 63 mkdir -m 0755 -p /var/lib/upower 64 ''; 65 66 # The upower daemon seems to get stuck after doing a suspend 67 # (i.e. subsequent suspend requests will say "Sleep has already 68 # been requested and is pending"). So as a workaround, restart 69 # the daemon. 70 powerManagement.resumeCommands = 71 '' 72 ${config.systemd.package}/bin/systemctl try-restart upower 73 ''; 74 75 }; 76 77}