{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.programs.nixmobar;
in
{
options.programs.nixmobar = {
enable = mkEnableOption (mdDoc "Xmobar, a minimalistic status bar");
font = mkOption {
type = types.str;
default = "Fira Code 13";
description = mdDoc "Main font for Xmobar.";
};
additionalFonts = mkOption {
type = types.listOf types.str;
default = [ "Fira Code 22" ];
description = mdDoc "Additional fonts for use in Xmobar.";
};
bgColor = mkOption {
type = types.str;
default = "#282a36";
description = mdDoc "Background color of Xmobar.";
};
fgColor = mkOption {
type = types.str;
default = "#f8f8f2";
description = mdDoc "Foreground (text) color of Xmobar.";
};
textOffset = mkOption {
type = types.int;
default = 2;
description = mdDoc "Offset of the text from the edge.";
};
verbose = mkOption {
type = types.bool;
default = true;
description = mdDoc "Enable verbose mode for Xmobar.";
};
allDesktops = mkOption {
type = types.bool;
default = true;
description = mdDoc "Show Xmobar on all desktops.";
};
lowerOnStart = mkOption {
type = types.bool;
default = true;
description = mdDoc "Whether Xmobar should be lowered on start.";
};
overrideRedirect = mkOption {
type = types.bool;
default = true;
description = mdDoc "If true, Xmobar will bypass window manager redirection.";
};
position = mkOption {
type = types.str;
default = "BottomH 26";
description = mdDoc "Position of Xmobar on the screen.";
};
alpha = mkOption {
type = types.int;
default = 200;
description = mdDoc "Transparency level of Xmobar (0-255).";
};
commands = mkOption {
type = types.lines;
default = ''
Run XMonadLog
Run DiskU ["/", "\\xf0a0 "] [] 50
Run DiskIO ["/", " R W "] ["-t", "", "-w", "4"] 10
Run Date "%a %_d %b %H:%M:%S" "date" 10
# Add more commands here, one per line
'';
description = mdDoc "List of commands to run in Xmobar, each on a new line.";
};
alignSep = mkOption {
type = types.str;
default = "}{";
description = mdDoc "Separators for alignment left and right.";
};
template = mkOption {
type = types.str;
default = "%XMonadLog% }{ %load%|%disku%|%diskio%|%wifi_signal%|%dynnetwork%|%cat0%|%multicoretemp%|%cpufreq%|%multicpu%|%kbd%|%memory% %swap%|%battery%|%alsa:default:Master%|%kernel_version%|%date%|%_XMONAD_TRAYPAD%";
description = mdDoc "Template string for Xmobar layout.";
};
};
config = mkIf cfg.enable {
home.packages = [ pkgs.xmobar ];
xdg.configFile."xmobar/.xmobarrc" = {
text = # haskell
''
Config {
font = "${cfg.font}",
additionalFonts = [${lib.concatMapStringsSep ", " (s: "\"" + s + "\"") cfg.additionalFonts}],
bgColor = "${cfg.bgColor}",
fgColor = "${cfg.fgColor}",
textOffset = ${toString cfg.textOffset},
verbose = ${if cfg.verbose then "True" else "False"},
allDesktops = ${if cfg.allDesktops then "True" else "False"},
lowerOnStart = ${if cfg.lowerOnStart then "True" else "False"},
overrideRedirect = ${if cfg.overrideRedirect then "True" else "False"},
position = ${cfg.position},
alpha = ${toString cfg.alpha},
commands = [${cfg.commands}],
alignSep = "${cfg.alignSep}",
template = "${cfg.template}"
}
'';
};
};
}