{ lib, config, pkgs, ... }: let cfg = config.myConfig.sway.waybar; schema = "org.gnome.desktop.a11y.applications"; key = "screen-keyboard-enabled"; squeekboard_toggle = pkgs.writeShellScriptBin "squeekboard_toggle" '' if [ "$(gsettings get ${schema} ${key})" == "true" ]; then gsettings set ${schema} ${key} false else gsettings set ${schema} ${key} true fi ''; squeekboard_format = pkgs.writeShellScriptBin "squeekboard_format" '' if [ "$(gsettings get ${schema} ${key})" == "true" ]; then echo '{ "text": "", "tooltip": "enabled", "percentage": 100 }' else echo '{ "text": "", "tooltip": "disabled", "percentage": 0 }' fi ''; in { options.myConfig.sway.waybar = { enable = lib.mkEnableOption "waybar, a status bar for wayland compositors"; squeekboard = lib.mkEnableOption "squeekboard"; mpd = lib.mkEnableOption "mpd"; battery = lib.mkEnableOption "battery"; backlight = lib.mkEnableOption "backlight"; }; config = lib.mkIf cfg.enable { wayland.windowManager.sway.config.startup = [{command = "${pkgs.waybar}/bin/waybar";}]; programs.waybar = { enable = true; settings = { mainBar = { layer = "top"; position = "top"; height = 26; modules-left = ["sway/workspaces" "sway/mode"]; modules-center = ["sway/window"]; modules-right = ["mpd" "wireplumber" "tray" "custom/squeekboard" "sway/language" "clock" "backlight" "battery" "network"]; "sway/workspaces" = { disable-scroll = true; all-outputs = false; format = "<span size='150%'>{icon}</span> {name}"; format-icons = { "main" = ""; "term" = ""; "msg" = ""; "music" = ""; "urgent" = ""; "focused" = ""; "default" = ""; }; }; "mpd" = lib.mkIf cfg.mpd { format = "{stateIcon}{consumeIcon}{randomIcon}{repeatIcon}{singleIcon} {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) {volume}"; format-stopped = "{stateIcon}{randomIcon}{repeatIcon}{singleIcon} Stopped {volume}"; format-disconnected = ""; unkown-tag = "N/A"; interval = 2; consume-icons = { on = " "; off = ""; }; random-icons = { on = " "; off = " "; }; repeat-icons = { on = " "; off = " "; }; single-icons = { on = " "; off = ""; }; state-icons = { paused = " "; playing = " "; }; max-length = 50; }; "tray" = { spacing = 10; }; "custom/squeekboard" = lib.mkIf cfg.squeekboard { format = "{}"; exec = "${squeekboard_format}/bin/squeekboard_format"; return-type = "json"; exec-on-event = true; interval = 2; on-click = "${squeekboard_toggle}/bin/squeekboard_toggle"; }; "sway/language" = { format = "{shortDescription}"; tooltip = false; }; "clock" = { interval = 60; format = "{:%a %d.%m %H:%M}"; }; "backlight" = lib.mkIf cfg.backlight { format = "{percent}% {icon}"; format-icons = ["" "" "" "" "" "" "" "" "" "" ""]; }; "battery" = lib.mkIf cfg.battery { format = "{capacity}% {icon}"; format-charging = "{capacity}% {icon}"; format-icons = ["" "" "" "" "" "" "" "" "" "" ""]; states = { warning = 30; critical = 15; }; }; "network" = { format-wifi = "{essid} ({signalStrength}%) "; format-ethernet = "{ipaddr}/{cidr} "; tooltip-format = "{ifname} via {gwaddr} "; format-disconnected = ""; }; "wireplumber" = { format = "{volume}% {icon}"; format-muted = ""; format-icons = ["" "" ""]; }; }; }; style = ./waybar.css; }; }; }