{ config, lib, osConfig, pkgs, launcher, ... }: let inherit (config.lib.stylix) colors; ifLaptop = lib.mkIf (osConfig.networking.hostName != "dunamis"); in { enable = true; systemd = { enable = true; target = "graphical-session.target"; }; settings.bottom = { position = "bottom"; height = 33; spacing = 0; # margin-left = 36 + 3; # margin-right = 36 + 3; # margin-bottom = 3; modules-left = [ "custom/launcher" "wlr/taskbar" # "privacy" ]; modules-right = [ "niri/workspaces" "niri/language" ]; "niri/workspaces" = { format = "{index}"; }; "niri/language" = { format = "{}"; format-en = "🇺🇸"; format-uk = "🇺🇦"; }; "group/laptop" = { orientation = "inherit"; modules = [ "backlight" "battery" "power-profiles-daemon" ]; }; backlight = { format = "{percent}% {icon}"; format-icons = [ "󰃚" "󰃛" "󰃜" "󰃝" "󰃞" "󰃟" "󰃠" ]; }; idle_inhibitor = { format = "{icon}"; format-icons = { activated = "󰅶"; deactivated = "󰾪"; }; }; tray = { icon-size = 16; spacing = 6; }; clock = { interval = 1; format = "{:%R}"; tooltip = true; tooltip-format = "{:%B %d, %A}"; }; battery = { states = { good = 95; warning = 30; critical = 15; }; format = "{capacity}% {icon}"; format-full = "{capacity}% 󱟢"; format-charging = "{capacity}% 󰂄"; format-plugged = "{capacity}% 󰚥"; format-alt = "{icon} {time}"; format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; }; memory = { format = "{used:0.1f}G "; tooltip-format = '' RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%) Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)''; }; network = { format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒"; interval = 3; tooltip = false; }; cpu = { format = "{usage}% 󰍛"; interval = 3; }; upower = { icon-size = 16; format = "{percentage}"; hide-if-empty = true; tooltip = true; tooltip-spacing = 20; }; power-profiles-daemon = { format = "{icon}"; tooltip-format = "Power profile: {profile}\nDriver: {driver}"; tooltip = true; format-icons = { default = "󱡮"; performance = "󱡮"; balanced = ""; power-saver = ""; }; }; wireplumber = { scroll-step = 3; format = "{volume}% {icon}"; format-muted = "󰖁"; format-icons = ["󰕿" "󰖀" "󰕾"]; on-click = lib.getExe pkgs.pwvucontrol; on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle"; }; "custom/launcher" = { format = ""; on-click = launcher; tooltip = false; }; "custom/notification" = { tooltip = false; format = "{icon}"; format-icons = { notification = "󱅫"; none = "󰂚"; dnd-notification = "󰂛"; dnd-none = "󰂛"; }; return-type = "json"; exec-if = "which swaync-client"; exec = "swaync-client -swb"; on-click = "swaync-client -t -sw"; on-click-right = "swaync-client -d -sw"; escape = true; }; "privacy" = { icon-spacing = 0; icon-size = 16; transition-duration = 250; screenshare = { type = "screenshare"; tooltip = true; tooltip-icon-size = 24; }; audio-in = { type = "audio-in"; tooltip = true; tooltip-icon-size = 24; }; }; "wlr/taskbar" = { format = "{icon} {name}"; icon-size = 16; icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; tooltip-format = "{title}"; on-click = "activate"; }; }; settings.top = { position = "top"; height = 33; spacing = 0; # margin-left = 36 + 3; # margin-right = 36 + 3; # margin-top = 3; modules-left = [ "custom/notification" "tray" ]; modules-center = ["clock"]; modules-right = [ "privacy" "network" "cpu" "memory" "wireplumber" (ifLaptop "group/laptop") # "tray" "idle_inhibitor" ]; "niri/workspaces" = { format = "{index}"; }; "niri/language" = { format = "{}"; format-en = "🇺🇸"; format-uk = "🇺🇦"; }; "group/laptop" = { orientation = "inherit"; modules = [ "backlight" "battery" "power-profiles-daemon" ]; }; backlight = { format = "{percent}% {icon}"; format-icons = [ "󰃚" "󰃛" "󰃜" "󰃝" "󰃞" "󰃟" "󰃠" ]; }; idle_inhibitor = { format = "{icon}"; format-icons = { activated = "󰅶"; deactivated = "󰾪"; }; }; tray = { icon-size = 16; spacing = 6; }; clock = { interval = 1; format = "{:%R}"; tooltip = true; tooltip-format = "{:%B %d, %A}"; }; battery = { states = { good = 95; warning = 30; critical = 15; }; format = "{capacity}% {icon}"; format-full = "{capacity}% 󱟢"; format-charging = "{capacity}% 󰂄"; format-plugged = "{capacity}% 󰚥"; format-alt = "{icon} {time}"; format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; }; memory = { format = "{used:0.1f}G "; tooltip-format = '' RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%) Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)''; }; network = { format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒"; interval = 3; tooltip = false; }; cpu = { format = "{usage}% 󰍛"; interval = 3; }; upower = { icon-size = 16; format = "{percentage}"; hide-if-empty = true; tooltip = true; tooltip-spacing = 20; }; power-profiles-daemon = { format = "{icon}"; tooltip-format = "Power profile: {profile}\nDriver: {driver}"; tooltip = true; format-icons = { default = "󱡮"; performance = "󱡮"; balanced = ""; power-saver = ""; }; }; wireplumber = { scroll-step = 3; format = "{volume}% {icon}"; format-muted = "󰖁"; format-icons = ["󰕿" "󰖀" "󰕾"]; on-click = lib.getExe pkgs.pwvucontrol; on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle"; }; "custom/launcher" = { format = ""; on-click = launcher; tooltip = false; }; "custom/notification" = { tooltip = false; format = "{icon}"; format-icons = { notification = "󱅫"; none = "󰂚"; dnd-notification = "󰂛"; dnd-none = "󰂛"; }; return-type = "json"; exec-if = "which swaync-client"; exec = "swaync-client -swb"; on-click = "swaync-client -t -sw"; on-click-right = "swaync-client -d -sw"; escape = true; }; "privacy" = { icon-spacing = 0; icon-size = 16; transition-duration = 250; screenshare = { type = "screenshare"; tooltip = true; tooltip-icon-size = 24; }; audio-in = { type = "audio-in"; tooltip = true; tooltip-icon-size = 24; }; }; "wlr/taskbar" = { format = "{icon} {name}"; icon-size = 18; icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; tooltip-format = "{title}"; on-click = "activate"; }; }; # TODO: figure out magic waybar css styling (does it pick up `~/.config/gtk-3.0/gtk.css` ?) style = # css '' @define-color base00 #${colors.base00}; @define-color base08 #${colors.base08}; @define-color base01 #${colors.base01}; @define-color base09 #${colors.base09}; @define-color base02 #${colors.base02}; @define-color base0A #${colors.base0A}; @define-color base03 #${colors.base03}; @define-color base0B #${colors.base0B}; @define-color base04 #${colors.base04}; @define-color base0C #${colors.base0C}; @define-color base05 #${colors.base05}; @define-color base0D #${colors.base0D}; @define-color base06 #${colors.base06}; @define-color base0E #${colors.base0E}; @define-color base07 #${colors.base07}; @define-color base0F #${colors.base0F}; * { /* all: unset; */ font-family: Symbols Nerd Font, FontAwesome, ${config.stylix.fonts.sansSerif.name}; font-weight: 500; font-size: 16px; } .modules-left, .modules-center, .modules-right, window#waybar { background-color: @base00; color: @base05; border-radius: 12px; } window#waybar { border-radius: 0; } /* for leftmost modules */ .modules-left, .modules-center, .modules-right { padding-left: 3px; background-color: @base00; color: @base05; } window#bottom.modules-center { background-color: transparent } tooltip { background: @base01; border: 1px solid @base0D; border-radius: 16px; padding: 2em; } tooltip label { color: @base05; } button { box-shadow: inset 0 -3px transparent; border-radius: 6px; } button:hover { background: inherit; box-shadow: inset 0 -3px transparent; } #backlight, #battery, #clock, #cpu, #custom-launcher, #custom-notification, #idle_inhibitor, #language, #memory, #network, #power-profiles-daemon, #privacy, #privacy-item, #taskbar button, #taskbar, #tray button, #tray, #wireplumber, #workspaces button, #workspaces { all: unset; border-radius: 9px; background-color: @base01; margin: 3px 3px 3px 0; padding: 0 0.42em; min-width: 1em; } #backlight, #battery, #custom-launcher, #custom-notification, #idle_inhibitor, #power-profiles-daemon, #wireplumber { padding: 0 0.5em; } #custom-notification, #power-profiles-daemon { min-width: 1em; } #privacy, #taskbar, #workspaces { padding: 0; } #workspaces { padding-left: 3px; } #privacy-item { padding: 0 0.3em; } #taskbar button { padding-left: 0; } #taskbar button, #tray button, #workspaces button { border-radius: 6px; min-width: 0.8em; } #battery.critical:not(.charging) { background-color: @base09; color: @base00; } #power-profiles-daemon.performance { background-color: @base0D; color: @base00; } #power-profiles-daemon.power-saver { background-color: @base0A; color: @base00; } #privacy-item.audio-in { background-color: @base0E; color: @base00; margin: 3px; } #privacy-item.screenshare { background-color: @base0C; color: @base00; margin: 3px 0 3px 3px; } #taskbar button, #tray button { padding: 0 0.4em; margin: 3px; } #workspaces button.active, #taskbar button.active { background-color: @base02; } #workspaces button:hover, #workspaces button.active:hover, #taskbar button.active:hover, #taskbar button:hover { background-color: @base0D; color: @base00; } #taskbar.empty { background-color: transparent; } #tray > .needs-attention { -gtk-icon-effect: highlight; background-color: @base08; } #tray > .passive { -gtk-icon-effect: dim; } /* #workspaces button.active { color: @base00; background-color: @base0D; } */ label:focus { background-color: #000000; } ''; }