aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/services/stalonetray.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/modules/services/stalonetray.nix')
-rw-r--r--home-manager/modules/services/stalonetray.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/home-manager/modules/services/stalonetray.nix b/home-manager/modules/services/stalonetray.nix
new file mode 100644
index 00000000000..934e78c99a1
--- /dev/null
+++ b/home-manager/modules/services/stalonetray.nix
@@ -0,0 +1,94 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.services.stalonetray;
+
+in
+
+{
+ options = {
+ services.stalonetray = {
+ enable = mkEnableOption "Stalonetray system tray";
+
+ package = mkOption {
+ default = pkgs.stalonetray;
+ defaultText = literalExample "pkgs.stalonetray";
+ type = types.package;
+ example = literalExample "pkgs.stalonetray";
+ description = "The package to use for the Stalonetray binary.";
+ };
+
+ config = mkOption {
+ type = with types;
+ attrsOf (nullOr (either str (either bool int)));
+ description = ''
+ Stalonetray configuration as a set of attributes.
+ '';
+ default = {};
+ example = {
+ geometry = "3x1-600+0";
+ decorations = null;
+ icon_size = 30;
+ sticky = true;
+ background = "#cccccc";
+ };
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
+ description = "Additional configuration lines for stalonetrayrc.";
+ default = "";
+ example = ''
+ geometry 3x1-600+0
+ decorations none
+ icon_size 30
+ sticky true
+ background "#cccccc"
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable (mkMerge [
+ {
+ home.packages = [ cfg.package ];
+
+ systemd.user.services.stalonetray = {
+ Unit = {
+ Description = "Stalonetray system tray";
+ After = [ "graphical-session-pre.target" ];
+ PartOf = [ "graphical-session.target" ];
+ };
+
+ Install = {
+ WantedBy = [ "graphical-session.target" ];
+ };
+
+ Service = {
+ ExecStart = "${cfg.package}/bin/stalonetray";
+ Restart = "on-failure";
+ };
+ };
+ }
+
+ (mkIf (cfg.config != {}) {
+ home.file.".stalonetrayrc".text =
+ let
+ valueToString = v:
+ if isBool v then (if v then "true" else "false")
+ else if (v==null) then "none"
+ else ''"${toString v}"'';
+ in
+ concatStrings (
+ mapAttrsToList (k: v: "${k} ${valueToString v}\n") cfg.config
+ );
+ })
+
+ (mkIf (cfg.extraConfig != "") {
+ home.file.".stalonetrayrc".text = cfg.extraConfig;
+ })
+ ]);
+}