{ config, lib, pkgs, ... }: # Waybar: a top status bar reading system state at a glance. let moduleNames = position: map (entry: entry.name) ( lib.sort (left: right: left.module.order < right.module.order) ( lib.filter (entry: entry.module.position == position) moduleEntries ) ); moduleEntries = lib.mapAttrsToList (name: module: { inherit name module; }) modules; modules = lib.attrByPath [ config.networking.hostName ] { } config.registry.waybar; in { options.modules.desktop.session.waybar.enable = lib.mkEnableOption "the Waybar status bar"; config = lib.mkIf config.modules.desktop.session.waybar.enable { # A symbols font backs the module glyphs, so pango falls back to it for the # codepoints Stylix's monospace font does not carry. fonts.packages = [ pkgs.nerd-fonts.symbols-only ]; home-manager.users.${config.user.name}.programs.waybar = { enable = true; package = pkgs.alexion.waybar; # A user service bound to graphical-session.target, which uwsm activates, # so the bar comes up with the session and no compositor exec-once. systemd.enable = true; settings.mainBar = lib.mkMerge [ { layer = "top"; position = "top"; height = 30; spacing = 8; margin-right = 8; modules-left = moduleNames "left"; modules-center = moduleNames "center"; modules-right = moduleNames "right"; } (lib.mapAttrs (_name: module: module.settings) modules) ]; }; registry.waybar.${config.networking.hostName} = { clock = { position = "center"; order = 10; settings = { format = "{:%a %d %b %H:%M}"; tooltip-format = "{calendar}"; calendar = { mode = "month"; # Underline the current day so it stands out in the grid. format.today = "{}"; }; }; }; }; }; }