# Про единицы измерения # Если просто написать число, то это будет количество пробелом в прямом смысле. Размер зависит от шрифта # Если указать pt (points), то это 1/72 часть дюйма, которая преобразуется в количество пикселей в зависимости от DPI монитора # Если указывать px, то это пиксели, логично # Интересные готовые скрипты для polybar https://github.com/polybar/polybar-scripts # Указание цветов из темы stylix # color0 = "${config.lib.stylix.colors.base00}"; # В случае с gruvbox это будет цвет "#282828" # Ниже цвета просто dark-meduim, после него material-dark-medium # base00: "#282828" "#292828" # base01: "#3c3836" "#32302f" # base02: "#504945" "#504945" # base03: "#665c54" "#665c54" # base04: "#bdae93" "#bdae93" # base05: "#d5c4a1" "#ddc7a1" # base06: "#ebdbb2" "#ebdbb2" # base07: "#fbf1c7" "#fbf1c7" # base08: "#fb4934" "#ea6962" # base09: "#fe8019" "#e78a4e" # base0A: "#fabd2f" "#d8a657" # base0B: "#b8bb26" "#a9b665" # base0C: "#8ec07c" "#89b482" # base0D: "#83a598" "#7daea3" # base0E: "#d3869b" "#d3869b" # base0F: "#d65d0e" "#bd6f3e" # Если в коммент коде цвет указан напрямую, то это дотсы zproger с левой темой # Варианты кликов мыши # click-left # click-middle # click-right # scroll-up # scroll-down # double-click-left # double-click-middle # double-click-right { config, ... }: let gruvbox = { black = "#000000"; dark = "#1d1d1d"; disabled = "${config.lib.stylix.colors.base00}"; # #282828 red = "${config.lib.stylix.colors.base08}"; # #fb4934 red-alt = "#b22222"; orange = "${config.lib.stylix.colors.base09}"; # #fe8019 orange-mat = "#e78a4e"; yellow = "${config.lib.stylix.colors.base0A}"; # #fabd2f yellow-mat = "#d8a657"; green = "${config.lib.stylix.colors.base0B}"; # #b8bb26 green-alt = "#98971a"; aqua = "${config.lib.stylix.colors.base0C}"; # #8ec07c aqua-alt = "#689d6a"; blue = "#458588"; blue-alt = "${config.lib.stylix.colors.base0D}"; # #83a598 grey = "#313131"; dark-grey = "#222222"; cream = "${config.lib.stylix.colors.base07}"; # #fbf1c7 white = "#FFFFFF"; transparent = "#00000000"; Stransparent = "#CC000000"; }; in { # Статус бар внизу services.polybar = { enable = true; script = '' if type "xrandr"; then for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do MONITOR=$m polybar --reload bottom & done else polybar --reload bottom & fi ''; settings = { # Или переимоневать в "config"? Не понял в чём разница # "colors" = {}; "global/wm" = { margin-bottom = 0; }; # bottom это просто имя, это не говорит бару быть внизу, можно написать что угодно "bar/bottom" = { # monitor = "polybar -M | cut -d ':' -f 1"; # содержит список мониторов # monitor-strict = false; # Require the monitor to be in connected state # monitor-exact = true; # Зачем? Нечёткий поиск мониторов, если они называются по разному с разными драйверами bottom = true; # Put the bar at the bottom of the screen fixed-center = true; # Мидл модуль будет по центру экрана. При false будет между левым и правым модулями enable-ipc = true; # Enable support for inter-process messaging double-click-interval = 400; # If two clicks are received within this interval (ms), they are recognized as a double click. offset-x = 0; # Offset the bar window in the x and/or y direction. offset-y = 0; # Supports any percentage with offset relative to the monitor width or height width = "100%"; # Ширина относительно ширины монитора height = "20pt"; # Высота относительно высоты монитора. Не ебу что значит pt radius = 0; dpi = 100; # Для ppi монитора background = gruvbox.transparent; # Фон бара foreground = gruvbox.cream; # Передний план border-color = gruvbox.transparent; # Цвет контура border-size = "3pt"; # Размер контура module-margin = 0; # Margin to add before/after each module. Можно юзать module-margin-{left,right} padding = "4pt"; # Padding to add at the beginning/end of the bar. Можно юзать padding-{left,right} separator-foreground = gruvbox.transparent; separator = " "; # The separator will be inserted between the output of each module # If you don't explicitly set the font-index for a tag, # the bar will iterate the font list and pick the first one that is able to draw the character font-0 = "Roboto condensed:size=11:weight=bold;2"; font-1 = "Font Awesome 6 Free:pixelsize=11;2"; font-2 = "Font Awesome 6 Free Solid:pixelsize=11;2"; font-3 = "Font Awesome 6 Brands:pixelsize=11;2"; font-4 = "JetBrainsMono Nerd Font Mono:size=24:weight=bold;5"; font-5 = "Noto Sans:size=11:weight=bold;1"; # Мб надо добавить CJK версии modules-left = "bspwm title"; modules-center = "time"; modules-right = "cpu memory pulseaudio tray xkeyboard rofi"; # Для модула right ещё можно добавить следующие модули: # "battery", "" # Restack the bar window and put it above the selected window manager's root # Fixes the issue where the bar is being drawn on top of fullscreen window's # Currently supported values: # generic (Tries the ewmh strategy and falls back to the bottom strategy. # This is a best-effort strategy and may change and be tweaked in # the future, the individual strategies are available on their own) # (New in version 3.6.0) # (Changed in version 3.7.0: Tries the ewmh strategy instead of just the bottom strategy) # bspwm (Moves the bar window above all bspwm root windows) # bottom (Moves the bar window above the first window in the window stack. # Works in xmonad, may not work on other WMs # New in version 3.7.0) # ewmh (Moves the bar above the window specified in _NET_SUPPORTING_WM_CHECK, if it is set # New in version 3.7.0) # i3 (requires `override-redirect = true`) wm-restack = "bspwm"; }; "module/rofi" = { type = "custom/text"; click-left = "exec rofi -show drun -show-icons"; label = " "; # click-right= exec ~/.config/i3/scripts/power.sh; content-foreground = gruvbox.orange; content-background = gruvbox.black; }; "module/bspwm" = { # Воркспейсы bspwm type = "internal/bspwm"; pin-workspaces = true; # Only show workspaces defined on the same output as the bar inline-mode = true; # Output mode flags after focused state label. Не понял что значит enable-click = true; # Create click handler used to focus workspace enable-scroll = false; # Create scroll handlers used to cycle workspaces reverse-scroll = false; # Set the scroll cycle direction occupied-scroll = true; # Only scroll through occupied workspaces ws-icon-1 = "1;1"; ws-icon-2 = "2;2"; ws-icon-3 = "3;3"; ws-icon-4 = "4;4"; ws-icon-5 = "5;5"; ws-icon-6 = "6;6"; ws-icon-7 = "7;7"; ws-icon-8 = "8;8"; ws-icon-9 = "9;9"; ws-icon-10 = "10;10"; format = " "; # Это невозможно описать. Я сам не до конца понял label-mode = "%mode%"; label-mode-padding = 1; label-mode-background = gruvbox.red-alt; label-mode-foreground = gruvbox.white; label-focused = "%icon%"; label-focused-font = 5; label-focused-foreground = gruvbox.yellow; label-focused-background = gruvbox.black; label-focused-padding = 2; label-unfocused = "%icon%"; label-unfocused-font = 5; label-unfocused-foreground = gruvbox.cream; label-unfocused-background= gruvbox.black; label-unfocused-padding = 2; label-visible = "%icon%"; label-visible-padding = 2; label-urgent = "%icon%"; label-urgent-font = 5; label-urgent-foreground = gruvbox.red-alt; label-urgent-background = gruvbox.black; label-urgent-padding = 2; label-separator = ""; label-separator-padding = 0; label-separator-foreground = gruvbox.transparent; }; "module/title" = { # Отображение имени окна type = "internal/xwindow"; format-prefix = " "; format-prefix-foreground = gruvbox.yellow-mat; format-prefix-background = gruvbox.black; label = "%title%"; label-maxlen = 50; label-foreground = gruvbox.cream; label-background = gruvbox.dark; label-padding-left = 2; label-padding-right = 2; }; # %A: Полное название дня недели (например, "Monday") # %d: День месяца в формате двух цифр (например, "01") # %b или %B: Сокращённое или полное название месяца ("Jan", "January") # %m: Месяц в формате двух цифр (например, "01" для января) "module/time" = { type = "internal/date"; interval = 1; format-prefix = " "; format-prefix-foreground = gruvbox.aqua; format-prefix-background = gruvbox.black; # date = "%A %d %b %Y | %H:%M:%S"; date = "%d %B %Y"; time = "%H:%M:%S"; date-alt = "%d-%m-%Y"; # If defined, clicking will toggle between formats time-alt = "%H:%M"; # If defined, clicking will toggle between formats label = "%date% %time%"; label-foreground = gruvbox.cream; label-background = gruvbox.dark; label-padding-left = 2; label-padding-right = 2; }; "module/xkeyboard" = { type = "internal/xkeyboard"; blacklist-0 = "num lock"; blacklist-1 = "scroll lock"; format = " "; label-layout-padding = 1; label-layout-foreground = gruvbox.cream; label-indicator-on = "%name%"; # layout-icon-default = "some-icon"; layout-icon-0 = "RU"; layout-icon-1 = "EN"; label-indicator-on-capslock = "!"; label-indicator-off-capslock = ""; }; "module/tray" = { type = "internal/tray"; format = ""; format-prefix = "󱊖 "; format-prefix-foreground = gruvbox.orange; format-prefix-background = gruvbox.black; # tray-size = "66%"; # relative to bar height, non-negative tray-spacing = "8px"; format-padding = "5px"; format-background = gruvbox.black; tray-background = gruvbox.black; # tray-foreground = gruvbox.cream; # сам добавил }; "module/pulseaudio" = { type = "internal/pulseaudio"; # click-left = "exec pavucontrol"; format-volume-prefix = " "; format-volume-prefix-foreground = gruvbox.blue-alt; format-volume-prefix-background= gruvbox.black; format-volume = ""; label-volume = "%percentage%%"; label-volume-foreground= gruvbox.cream; label-volume-background= gruvbox.dark; label-volume-padding-left=2; label-volume-padding-right=2; format-muted-prefix = " "; format-muted-foreground = gruvbox.orange; format-muted-background = gruvbox.black; label-muted = "muted"; label-muted-foreground = gruvbox.orange-mat; label-muted-background = gruvbox.dark; label-muted-padding = 2; }; "module/memory" = { type = "internal/memory"; interval = 1; format-prefix = " "; format-prefix-foreground = gruvbox.blue; format-prefix-background = gruvbox.black; label = "RAM: %gb_used%/%gb_total% | SWAP: %gb_swap_used%/%gb_swap_total%"; label-foreground = gruvbox.cream; label-background = gruvbox.dark; label-padding-left = 2; label-padding-right = 2; }; # "module/battery" = { # type = internal/battery; # full-at = 98; # low-at = 20; # battery = "BAT0"; # adapter = "ADP1"; # poll-interval = 5; # time-format = "%H:%M"; # format-charging = ""; # # format-charging-foreground = gruvbox.green; # # format-charging-background = gruvbox.black; # label-charging = "%percentage%%"; # # label-charging-foreground = gruvbox.cream; # # label-charging-background = gruvbox.dark; # label-charging-padding= 2; # format-discharging = ""; # # format-discharging-foreground = gruvbox.green-alt; # # format-discharging-background = gruvbox.black; # label-discharging = "%percentage%%"; # # label-discharging-foreground = gruvbox.cream; # # label-discharging-background = gruvbox.dark; # label-discharging-padding = 2; # format-full-prefix = "  "; # # format-full-foreground = gruvbox.aqua; # # format-full-background = gruvbox.black; # label-full = "%percentage%%"; # # label-full-foreground = gruvbox.cream; # # label-full-background = gruvbox.dark; # label-full-padding = 2; # label-low = "[ BATTERY LOW ] %percentage%%"; # # label-low-foreground = gruvbox.black; # # label-low-background = gruvbox.red-alt; # label-low-padding = 2; # # Only applies if is used # ramp-capacity-0 = "  "; # ramp-capacity-1 = "  "; # ramp-capacity-2 = "  "; # ramp-capacity-3 = "  "; # ramp-capacity-4 = "  "; # ramp-capacity-0-padding = 3; # ramp-capacity-1-padding = 3; # ramp-capacity-2-padding = 3; # ramp-capacity-3-padding = 3; # ramp-capacity-4-padding = 3; # # ramp-capacity-0-foreground = gruvbox.red-alt; # # ramp-capacity-1-foreground = gruvbox.green-alt; # # ramp-capacity-2-foreground = gruvbox.green-alt; # # ramp-capacity-3-foreground = gruvbox.green-alt; # # ramp-capacity-4-foreground = gruvbox.green-alt; # # ramp-capacity-0-background = gruvbox.black; # # ramp-capacity-1-background = gruvbox.black; # # ramp-capacity-2-background = gruvbox.black; # # ramp-capacity-3-background = gruvbox.black; # # ramp-capacity-4-background = gruvbox.black; # # Only applies if is used # bar-capacity-width = 10; # # Only applies if is used # animation-charging-0 = "  "; # animation-charging-1 = "  "; # animation-charging-2 = "  "; # animation-charging-3 = "  "; # animation-charging-4 = "  "; # animation-charging-framerate = 750; # animation-charging-0-padding = 3; # animation-charging-1-padding = 3; # animation-charging-2-padding = 3; # animation-charging-3-padding = 3; # animation-charging-4-padding = 3; # # Animation-charging color # # animation-charging-0-foreground = gruvbox.green; # # animation-charging-1-foreground = gruvbox.green; # # animation-charging-2-foreground = gruvbox.green; # # animation-charging-3-foreground = gruvbox.green; # # animation-charging-4-foreground = gruvbox.green; # # animation-charging-0-background = gruvbox.black; # # animation-charging-1-background = gruvbox.black; # # animation-charging-2-background = gruvbox.black; # # animation-charging-3-background = gruvbox.black; # # animation-charging-4-background = gruvbox.black; # # Only applies if is used; # animation-discharging-0 = "[  ]"; # animation-discharging-1 = "[  ]"; # animation-discharging-2 = "[  ]"; # animation-discharging-3 = "[  ]"; # animation-discharging-4 = "[  ]"; # animation-discharging-framerate = 500; # animation-discharging-0-padding = 1; # animation-discharging-1-padding = 1; # animation-discharging-2-padding = 1; # animation-discharging-3-padding = 1; # animation-discharging-4-padding = 1; # # Animation discharging color # # animation-discharging-0-foreground = gruvbox.cream; # # animation-discharging-1-foreground = gruvbox.cream; # # animation-discharging-2-foreground = gruvbox.cream; # # animation-discharging-3-foreground = gruvbox.cream; # # animation-discharging-4-foreground = gruvbox.cream; # # animation-discharging-0-background = gruvbox.green-alt; # # animation-discharging-1-background = gruvbox.green-alt; # # animation-discharging-2-background = gruvbox.green-alt; # # animation-discharging-3-background = gruvbox.green-alt; # # animation-discharging-4-background = gruvbox.green-alt; # animation-low-0 = "!"; # animation-low-1 = "!!"; # animation-low-framerate = 200; # }; "module/cpu" = { type = "internal/cpu"; interval = 1; # format-prefix = " "; # format-prefix-foreground = gruvbox.orange-mat; # format-prefix-background = gruvbox.black; warn-percentage = 95; label = "CPU %percentage%%"; label-foreground = gruvbox.cream; label-background = gruvbox.dark; label-padding-left = 2; label-padding-right = 2; label-warn = "CPU %percentage%%"; }; }; }; } # При наведении на имя окна сделать скрол фул имени через zscroll