This commit is contained in:
2026-09-13 18:40:55 +01:00
parent cc67cd25e9
commit aba6af03b4
2 changed files with 109 additions and 4 deletions
+86
View File
@@ -0,0 +1,86 @@
# Home Manager module for barbar.
#
# imports = [ inputs.barbar.homeManagerModules.default ];
#
# Generates barbar.toml from `programs.barbar.settings` and runs the bar as a
# systemd user service bound to the graphical session.
self:
{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.barbar;
toml = pkgs.formats.toml { };
configFile = toml.generate "barbar.toml" cfg.settings;
in
{
options.programs.barbar = {
enable = lib.mkEnableOption "barbar, a Wayland layer-shell status bar";
package = lib.mkOption {
type = lib.types.package;
default = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
defaultText = lib.literalExpression "barbar.packages.\${system}.default";
description = "The barbar package to run.";
};
settings = lib.mkOption {
type = toml.type;
default.order = {
left = [ ];
middle = [ ];
right = [ ];
};
defaultText = lib.literalExpression ''{ order = { left = [ ]; middle = [ ]; right = [ ]; }; }'';
description = ''
Contents of barbar.toml, written verbatim. Only `order` is required by
barbar; `[display]`, `[modules.*]` and `[services.*]` are optional.
See test.toml in the barbar repo for the full schema.
'';
example = lib.literalExpression ''
{
display = {
monitor = "DP-2";
height = 24;
};
order = {
left = [ "workspaces" "weather" ];
middle = [ ];
right = [ "clock" ];
};
modules.clock.show_seconds = false;
}
'';
};
systemd.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Run barbar as a systemd user service.";
};
systemd.target = lib.mkOption {
type = lib.types.str;
default = "graphical-session.target";
description = "Systemd target the bar is bound to.";
};
};
config = lib.mkIf cfg.enable {
systemd.user.services.barbar = lib.mkIf cfg.systemd.enable {
Unit = {
Description = "barbar status bar";
After = [ cfg.systemd.target ];
PartOf = [ cfg.systemd.target ];
};
Service = {
ExecStart = "${lib.getExe' cfg.package "core"} --config ${configFile}";
Restart = "on-failure";
};
Install.WantedBy = [ cfg.systemd.target ];
};
};
}