459 lines
19 KiB
Nix
459 lines
19 KiB
Nix
# Про единицы измерения
|
||
# Если просто написать число, то это будет количество пробелом в прямом смысле. Размер зависит от шрифта
|
||
# Если указать 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;
|
||
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 будет между левым и правым модулями
|
||
width = "100%"; # Ширина относительно ширины монитора
|
||
height = "20pt"; # Высота относительно высоты монитора. Не ебу что значит pt
|
||
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
|
||
padding = 0; # Padding to add at the beginning/end of the bar. Можно юзать padding-{left,right}
|
||
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.
|
||
|
||
module-margin = 1; # Margin to add before/after each module. Можно юзать module-margin-{left,right}
|
||
# separator = " "; # The separator will be inserted between the output of each module
|
||
# separator-foreground = gruvbox.transparent;
|
||
|
||
# background = gruvbox.transparent; # Фон бара
|
||
# foreground = gruvbox.cream; # Передний план
|
||
# border-color = gruvbox.transparent; # Цвет контура
|
||
# border-size = "3pt"; # Размер контура
|
||
# line-color = "#f00"; # Under-/overline argb color. Может быть {overline,underline}-color
|
||
# line-size = 0; # Under-/overline pixel size. Может быть {overline,underline}-size
|
||
|
||
# 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 = "JetBrainsMono Nerd Font";
|
||
|
||
modules-left = "bspwm title";
|
||
modules-center = "time";
|
||
modules-right = "cpu cpu-temp gpu-temp battery memory pulseaudio tray xkeyboard rofi";
|
||
|
||
# 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";
|
||
label = " ";
|
||
};
|
||
|
||
"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-0 = "0;0";
|
||
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-state> <label-mode>"; # Это невозможно описать. Я сам не до конца понял
|
||
|
||
# label-mode = "%mode%";
|
||
# label-mode-padding = 1;
|
||
# label-mode-background = gruvbox.red-alt;
|
||
# label-mode-foreground = gruvbox.white;
|
||
|
||
# label-separator = "";
|
||
# label-separator-padding = 0;
|
||
# label-separator-foreground = gruvbox.transparen;
|
||
|
||
# label-focused = "%icon% %name%";
|
||
# label-focused-font = 5;
|
||
# label-focused-foreground = gruvbox.yellow;
|
||
# label-focused-underline = "#565c64";
|
||
# label-focused-padding = 1;
|
||
# label-focused-background = gruvbox.black;
|
||
|
||
# label-occupied = "%icon%";
|
||
# label-occupied-foreground = "#646870";
|
||
# label-occupied-background = "#2b2f37";
|
||
# label-occupied-padding = 1;
|
||
|
||
# label-empty = "%icon%";
|
||
# label-empty-foreground = gruvbox.yellow;
|
||
# label-empty-padding = 1;
|
||
# label-empty-background = "#2b2f37";
|
||
|
||
# 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;
|
||
};
|
||
|
||
"module/title" = { # Отображение имени окна
|
||
type = internal/xwindow;
|
||
format-prefix = " ";
|
||
# format-prefix-foreground = gruvbox.yellow-mat;
|
||
# format-prefix-background = gruvbox.black;
|
||
# format-background = "#f00";
|
||
# format-foreground = "#000";
|
||
# format-padding = 4;
|
||
|
||
# label = "%title%";
|
||
label = "%class%";
|
||
label-maxlen = 60;
|
||
# 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 = "🕓 <label>";
|
||
# 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:%S"; # If defined, clicking will toggle between formats
|
||
label = "%date% %time%";
|
||
# label-foreground = gruvbox.cream;
|
||
# label-background = gruvbox.dark;
|
||
# label-font = 3;
|
||
label-padding-left = 2;
|
||
label-padding-right = 2;
|
||
};
|
||
|
||
"module/xkeyboard" = {
|
||
type = internal/xkeyboard;
|
||
blacklist-0 = "num lock";
|
||
blacklist-1 = "scroll lock";
|
||
format = "<label-layout> <label-indicator>";
|
||
label-layout-padding = 1;
|
||
label-layout-foreground = "#fff";
|
||
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 = <tray>;
|
||
# format-prefix = " ";
|
||
# format-prefix-foreground = gruvbox.orange;
|
||
# format-prefix-background = gruvbox.black;
|
||
tray-spacing = "8px";
|
||
# tray-size = "66%"; # relative to bar height, non-negative
|
||
format-padding = "5px";
|
||
# format-background = gruvbox.black;
|
||
# tray-background = gruvbox.black;
|
||
# tray-foreground = gruvbox.cream; # сам добавил
|
||
};
|
||
|
||
"module/pulseaudio" = {
|
||
type = "internal/pulseaudio";
|
||
format-volume-prefix = " ";
|
||
# format-volume-prefix-foreground = gruvbox.blue-alt;
|
||
# format-volume-prefix-background= gruvbox.black;
|
||
format-volume = "<label-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 = 3;
|
||
# 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 = "<animation-charging><label-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 = "<ramp-capacity><label-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 <ramp-capacity> 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 <bar-capacity> is used
|
||
bar-capacity-width = 10;
|
||
|
||
# Only applies if <animation-charging> 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 <animation-discharging> 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";
|
||
warn-percentage = 95;
|
||
label = "CPU %percentage%%";
|
||
label-warn = "CPU %percentage%%";
|
||
};
|
||
|
||
# Full path of temperature sysfs path
|
||
# Use `sensors` to find preferred temperature source, then run
|
||
# $ for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done
|
||
# to find path to desired file
|
||
# Default reverts to thermal zone setting
|
||
"module/cpu-temp" = {
|
||
type = "internal/temperature";
|
||
hwmon-path = "/sys/devices/platform/coretemp.0/hwmon/hwmon4/temp1_input";
|
||
warn-temperature = 80;
|
||
label = "%temperature-c% °C";
|
||
label-warn = "%temperature-c% °C";
|
||
# label-warn-foreground = "#f00";
|
||
};
|
||
|
||
"module/gpu-temp" = {
|
||
type = "internal/temperature";
|
||
hwmon-path = "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/hwmon/hwmon5/temp3_input";
|
||
warn-temperature = 80;
|
||
label = "GPU %temperature-c% °C";
|
||
label-warn = "GPU %temperature-c% °C";
|
||
# label-warn-foreground = "#f00";
|
||
};
|
||
};
|
||
};
|
||
}
|
||
|
||
# При наведении на имя окна сделать скрол фул имени через zscroll
|