1
0
mirror of https://github.com/nix-community/home-manager synced 2024-06-26 00:18:30 +02:00

polybar: add module

This commit is contained in:
Nikita Uvarov 2017-10-05 15:55:37 +02:00
parent 3aca8a938c
commit 469caa1a14
No known key found for this signature in database
GPG Key ID: F7A5FB3A7C10EF96
3 changed files with 147 additions and 0 deletions

View File

@ -44,6 +44,7 @@ let
./services/keepassx.nix
./services/network-manager-applet.nix
./services/owncloud-client.nix
./services/polybar.nix
./services/random-background.nix
./services/redshift.nix
./services/screen-locker.nix

View File

@ -295,6 +295,13 @@ in
A new module is available: 'xsession.windowManager.xmonad'.
'';
}
{
time = "2017-10-06T08:21:43+00:00";
message = ''
A new service is available: 'services.polybar'.
'';
}
];
};
}

View File

@ -0,0 +1,139 @@
{ config, lib, pkgs, ... }:
with lib;
with import ../lib/dag.nix { inherit lib; };
let
cfg = config.services.polybar;
configFile = pkgs.writeText "polybar.conf"
(generators.toINI {} cfg.config + "\n" + cfg.extraConfig);
script = ''
#!${pkgs.stdenv.shell}
${cfg.script}
'';
in
{
options = {
services.polybar = {
enable = mkEnableOption "Polybar status bar";
package = mkOption {
type = types.package;
default = pkgs.polybar;
defaultText = "pkgs.polybar";
description = "Polybar package to install.";
example = literalExample ''
pkgs.polybar.override {
i3GapsSupport = true;
alsaSupport = true;
iwSupport = true;
githubSupport = true;
}
'';
};
config = mkOption {
type = types.coercedTo
types.path
(p: { "section/base" = { include-file = "${p}"; }; })
(types.attrsOf types.attrs);
description = ''
Polybar configuration. Can be either path to a file, or set of attibutes
that will be used to create the final configuration.
'';
default = {};
example = literalExample ''
{
"bar/top" = {
monitor = "\''${env:MONITOR:eDP1}";
width = "100%";
height = "3%";
radius = 0;
modules-center = "date";
};
"module/date" = {
type = "internal/date";
internal = 5;
date = "%d.%m.%y";
time = "%H:%M";
label = "%time% %date%";
};
}
'';
};
extraConfig = mkOption {
type = types.lines;
description = "Additional configuration to add.";
default = "";
example = ''
[module/date]
type = internal/date
interval = 5
date = "%d.%m.%y"
time = %H:%M
format-prefix-foreground = \''${colors.foreground-alt}
label = %time% %date%
'';
};
script = mkOption {
type = types.lines;
description = ''
This script will be used to start the polybars.
Set all necessary environment variables here and start all bars.
It can be assumed that <command>polybar</command> executable is in the <envar>PATH</envar>.
Note, this script must start all bars in the background and then terminate.
'';
example = "polybar bar &";
};
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
home.file.".config/polybar/config".source = configFile;
systemd.user.services.polybar = {
Unit = {
Description = "Polybar status bar";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
Type = "forking";
Environment = "PATH=${cfg.package}/bin";
ExecStart = ''${pkgs.writeScriptBin "polybar-start" script}/bin/polybar-start'';
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
};
home.activation.checkPolybar = dagEntryBefore [ "linkGeneration" ] ''
if ! cmp --quiet \
"${configFile}" \
"$HOME/.config/polybar/config"; then
polybarChanged=1
fi
'';
home.activation.applyPolybar = dagEntryAfter [ "reloadSystemD" ] ''
if [[ -v polybarChanged && -v DISPLAY ]]; then
echo "Restarting polybar"
systemctl --user restart polybar.service
fi
'';
};
}