aboutsummaryrefslogtreecommitdiff
path: root/modules/services
diff options
context:
space:
mode:
authorAlistair Potts <alistairtpotts@gmail.com>2018-02-02 15:25:51 +0000
committerRobert Helgesson <robert@rycee.net>2018-02-03 10:44:37 +0100
commit91a98f919db2fab3e5c9d47d3955e3896f320f3a (patch)
treed93a65ad58c728419859f1ba65882b7de612a63d /modules/services
parent616dbd67f7a903d2a57ef4b8d0d9bcc4f567eab3 (diff)
stalonetray: add module
Adds a service for the Stalonetray system tray. Configured through a 'config' attribute set, which writes space separated key value pairs on successive lines to `~/.stalonetrayrc`.
Diffstat (limited to 'modules/services')
-rw-r--r--modules/services/stalonetray.nix94
-rw-r--r--modules/services/syncthing.nix5
2 files changed, 98 insertions, 1 deletions
diff --git a/modules/services/stalonetray.nix b/modules/services/stalonetray.nix
new file mode 100644
index 00000000000..7b16f7544f7
--- /dev/null
+++ b/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 = "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;
+ })
+ ]);
+}
diff --git a/modules/services/syncthing.nix b/modules/services/syncthing.nix
index 1906814bcc8..5acf313f81b 100644
--- a/modules/services/syncthing.nix
+++ b/modules/services/syncthing.nix
@@ -52,7 +52,10 @@ with lib;
qsyncthingtray = {
Unit = {
Description = "QSyncthingTray";
- After = [ "graphical-session-pre.target" "polybar.service" "taffybar.service" ];
+ After = [ "graphical-session-pre.target"
+ "polybar.service"
+ "taffybar.service"
+ "stalonetray.service" ];
PartOf = [ "graphical-session.target" ];
};