{ config, lib, ... }: let opacity = lib.strings.floatToString config.stylix.opacity.terminal; icons = false; position = "top"; opposite = builtins.replaceStrings ["left" "right" "top" "bottom"] ["right" "left" "bottom" "top"] position; isVertical = position == "left" || position == "right"; modules = { tray = { icon-size = if isVertical then 24 else 13; spacing = 8; }; "wlr/taskbar" = { icon-size = if isVertical then 32 else 16; on-click = "activate"; on-click-middle = "activate"; on-click-right = "activate"; }; "hyprland/window" = { rotate = if isVertical then 90 else 0; }; "wlr/workspaces" = { on-click = "activate"; sort-by-number = true; format = "{icon}"; format-icons = { "1" = "一"; "2" = "二"; "3" = "三"; "4" = "四"; "5" = "五"; "6" = "六"; "7" = "七"; "8" = "八"; "9" = "九"; "10" = "十"; }; }; wireplumber = { format = "{icon}"; tooltip-format = "{volume}% {node_name}"; format-muted = ""; format-icons = [ "" "" ]; }; battery = { format = "{icon}"; tooltip-format = "{capacity}% {timeTo}"; format-icons = [ "" "" "" "" "" ]; }; clock = { format = if isVertical then "{:%H\n%M}" else "{:%H:%M}"; tooltip-format = "{calendar}"; calendar = { mode = "month"; weeks-pos = "right"; format = { months = "{}"; days = "{}"; weeks = "W{}"; weekdays = "{}"; today = "{}"; }; }; }; backlight = { format = "{icon}"; format-icons = [ "" "" ]; }; "custom/new-workspace" = { format = "+"; on-click = "hyprctl dispatch workspace empty && sleep 0.1 && rofi -show drun"; on-click-right = "sleep 0.1 && rofi -show drun"; on-click-middle = "hyprctl dispatch workspace empty"; tooltip = false; }; "custom/wallpaper" = { format = "壁\n紙"; on-click = "bash -c ~/.config/waybar/wallpaper.sh"; tooltip = false; }; }; in { programs.waybar = { enable = true; settings = { mainBar = modules // { layer = "top"; position = position; width = if isVertical then 45 else null; height = if isVertical then null else 30; spacing = 8; modules-left = if icons then [ "wlr/taskbar" ] else [ "wlr/workspaces" "custom/new-workspace" ]; modules-center = [ "custom/wallpaper" ]; modules-right = [ "wireplumber" "backlight" "battery" "clock" ]; }; }; style = with config.lib.stylix.colors; lib.mkForce /* css */ '' * { color: #${base05}; font-size: ${if isVertical then "16px" else "13px"}; } window#waybar { background: alpha(#${base00}, ${opacity}); border-${opposite}: 1px solid alpha(#${base02}, 0.67); } window#waybar.fullscreen #workspaces button.active { background: alpha(#${base09}, 0.5); } #workspaces button { padding: ${if isVertical then "12px 0" else "0 12px"}; border-radius: 0; border-bottom: 1px solid alpha(#${base02}, 0.5); } #workspaces button:hover { background: inherit; } #workspaces button.active { background: alpha(#${base02}, 0.5); } #window { padding-${if isVertical then "top" else "left"}: 8px; padding-${if isVertical then "bottom" else "right"}: 12px; } tooltip, #tray menu { background: #${base00}; border: 1px solid alpha(#${base09}, 0.93); padding: 8px; } #backlight, #battery, #wireplumber { font-family: "Font Awesome 6 Free Solid"; font-size: ${if isVertical then "24px" else "13px"}; } #custom-new-workspace { font-family: "Font Awesome 6 Free Solid"; padding-${if isVertical then "top" else "left"}: 8px; padding-${if isVertical then "bottom" else "right"}: 8px; color: alpha(#${base0A}, 0.67); } #clock { font-size: ${if isVertical then "18px" else "13px"}; font-weight: bold; padding-${if isVertical then "bottom" else "right"}: 8px; } ''; }; }