1
0
mirror of https://github.com/nix-community/home-manager synced 2024-06-02 21:13:33 +02:00
home-manager/modules/services/cbatticon.nix
Silvio Ankermann f540f30f1f
cbatticon: Add support for batteryId
For devices with more than one battery, cbatticon allows to set the
battery ID as optional positional argument. If this argument is not
given, it default to the first battery it would list with `cbatticon
-p`. This commit adds support for the batteryId option to the cbatticon
module.
2023-10-23 15:50:42 +02:00

134 lines
3.7 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.cbatticon;
package = pkgs.cbatticon;
makeCommand = commandName: commandArg:
optional (commandArg != null)
(let cmd = pkgs.writeShellScript commandName commandArg;
in "--${commandName} ${cmd}");
commandLine = concatStringsSep " " ([ "${package}/bin/cbatticon" ]
++ makeCommand "command-critical-level" cfg.commandCriticalLevel
++ makeCommand "command-left-click" cfg.commandLeftClick
++ optional (cfg.iconType != null) "--icon-type ${cfg.iconType}"
++ optional (cfg.lowLevelPercent != null)
"--low-level ${toString cfg.lowLevelPercent}"
++ optional (cfg.criticalLevelPercent != null)
"--critical-level ${toString cfg.criticalLevelPercent}"
++ optional (cfg.updateIntervalSeconds != null)
"--update-interval ${toString cfg.updateIntervalSeconds}"
++ optional (cfg.hideNotification != null && cfg.hideNotification)
"--hide-notification" ++ optional (cfg.batteryId != null) cfg.batteryId);
in {
meta.maintainers = [ maintainers.pmiddend ];
options = {
services.cbatticon = {
enable = mkEnableOption "cbatticon";
commandCriticalLevel = mkOption {
type = types.nullOr types.lines;
default = null;
example = ''
notify-send "battery critical!"
'';
description = ''
Command to execute when the critical battery level is reached.
'';
};
commandLeftClick = mkOption {
type = types.nullOr types.lines;
default = null;
description = ''
Command to execute when left clicking on the tray icon.
'';
};
iconType = mkOption {
type =
types.nullOr (types.enum [ "standard" "notification" "symbolic" ]);
default = null;
example = "symbolic";
description = "Icon type to display in the system tray.";
};
lowLevelPercent = mkOption {
type = types.nullOr (types.ints.between 0 100);
default = null;
example = 20;
description = ''
Low level percentage of the battery in percent (without the
percent symbol).
'';
};
criticalLevelPercent = mkOption {
type = types.nullOr (types.ints.between 0 100);
default = null;
example = 5;
description = ''
Critical level percentage of the battery in percent (without
the percent symbol).
'';
};
updateIntervalSeconds = mkOption {
type = types.nullOr types.ints.positive;
default = null;
example = 5;
description = ''
Number of seconds between updates of the battery information.
'';
};
hideNotification = mkOption {
type = types.nullOr types.bool;
default = null;
description = "Hide the notification popups.";
};
batteryId = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
ID of the battery to monitor. List with {command}`cbatticon -p`.
Defaults to the first entry in the list.
'';
};
};
};
config = mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.cbatticon" pkgs
lib.platforms.linux)
];
home.packages = [ package ];
systemd.user.services.cbatticon = {
Unit = {
Description = "cbatticon system tray battery icon";
Requires = [ "tray.target" ];
After = [ "graphical-session-pre.target" "tray.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = { WantedBy = [ "graphical-session.target" ]; };
Service = {
ExecStart = commandLine;
Restart = "on-abort";
};
};
};
}