From e52ee5b09fa81f6fe1bd16fc9f1c142010c4a29f Mon Sep 17 00:00:00 2001 From: chest Date: Tue, 7 Apr 2026 22:40:16 +0300 Subject: [PATCH] waybar for mee<3 --- modules/user.nix | 1 - modules/user/waybar.nix | 151 ---------- user/chest/modules/waybar.nix | 423 ++++++++++++++++++++--------- user/sweetbread/modules/waybar.nix | 400 ++++++++++++++++++--------- 4 files changed, 577 insertions(+), 398 deletions(-) delete mode 100644 modules/user/waybar.nix diff --git a/modules/user.nix b/modules/user.nix index 2298675..dde2550 100644 --- a/modules/user.nix +++ b/modules/user.nix @@ -11,7 +11,6 @@ ./user/qt.nix ./user/sops.nix ./user/ssh.nix - ./user/waybar.nix ./user/yazi.nix ./user/zsh.nix diff --git a/modules/user/waybar.nix b/modules/user/waybar.nix deleted file mode 100644 index 47dd974..0000000 --- a/modules/user/waybar.nix +++ /dev/null @@ -1,151 +0,0 @@ -{ osConfig, config, pkgs, ... }: { - home.packages = with pkgs; [ - font-awesome - nerd-fonts.symbols-only - playerctl - cava - ]; - - programs.waybar = { - enable = true; - systemd.enable = true; - - settings.mainBar = { - modules-left = [ - "hyprland/workspaces" - "hyprland/language" - "keyboard-state" - "cava" - ]; - - modules-center = [ - "mpris" - ]; - - modules-right = [ - "tray" - "group/system" - "pulseaudio" - "battery" - "clock" - ]; - - cava = { - bars = 14; - sleep_timer = 5; - hide_on_silence = true; - bar_delimiter = 0; - input_delay = 0; - format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; - }; - - clock = { - tooltip = false; - interval = 5; - format = "{:L%d %b - %H:%M %a}"; - }; - - pulseaudio = { - format = "{icon} {volume}%"; - format-icons = { - headphone = ""; - hands-free = ""; - headset = ""; - phone = ""; - phone-muted = ""; - portable = ""; - car = ""; - default = ["" ""]; - }; - on-click = "ghostty --title=pulsemixer -e pulsemixer"; - }; - - mpris = { - format = "{dynamic}"; - dynamic-len = if osConfig.host.laptop then 32 else 64; - dynamic-order = [ "title" "artist" "album" ]; - }; - - battery = { - interval = 5; - states = { - warning = 30; - critical = 15; - }; - format = "{icon} {capacity}%"; - format-icons = { - default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; - charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"]; - }; - }; - - "keyboard-state" = { - capslock = true; - format = "{icon}"; - format-icons = { - locked = "CAPS"; - unlocked = ""; - }; - }; - - "hyprland/language" = { - format-en = "en"; - format-ru = "ru"; - }; - - - "group/system" = { - orientation = "inherit"; - drawer = { - transition-duration = 500; - transition-left-to-right = false; - }; - modules = [ - "network" - "custom/mem" - "cpu" - "temperature" - ]; - }; - - network = { - format = "{ifname}"; - format-wifi = " {essid} ({signalStrength}%)"; - format-ethernet = "{ifname}"; - format-disconnected = ""; - tooltip-format = "{ipaddr}"; - max-length = 50; - on-click = "ghostty --title=nmtui -e nmtui"; - }; - - "custom/weather" = { - format = "{}"; - tooltip = true; - interval = 1800; - exec = "python3 $HOME/.config/waybar/scripts/wttr.py"; - return-type = "json"; - }; - - "custom/mem" = { - format = "{} "; - interval = 3; - exec = "free -h | awk '/Mem:/{printf $3}'"; - tooltip = false; - }; - - cpu = { - interval = 2; - format = "{usage}% "; - min-length = 6; - }; - - temperature = { - hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input"; - critical-threshold = 80; - format = "{temperatureC}°C {icon}"; - format-icons = ["" "" "" "" ""]; - tooltip = false; - }; - }; - }; -} \ No newline at end of file diff --git a/user/chest/modules/waybar.nix b/user/chest/modules/waybar.nix index 2ac1060..7107935 100644 --- a/user/chest/modules/waybar.nix +++ b/user/chest/modules/waybar.nix @@ -1,142 +1,321 @@ -{ config, pkgs, ... }: { - programs.waybar.settings.mainBar.spacing = 4; - programs.waybar.style = let - colors = config.lib.stylix.colors.withHashtag; - accent = colors.base0E; - scssFile = pkgs.writeText "waybar.scss" /*scss*/ '' - window#waybar { - background: ${colors.base00}80; - color: ${colors.base05}; - font-weight: bold; - font-size: .85em; - } +{ osConfig, config, pkgs, lib, ... }: { + home.packages = with pkgs; [ + font-awesome + nerd-fonts.symbols-only + playerctl + cava + pulsemixer + ]; - #mpris, - #pulseaudio, - #network, - #battery, - #cpu, - #temperature, - #custom-mem, - #clock { - background: ${colors.base01}; - padding: 8px; - } + programs.waybar = { + enable = true; + systemd.enable = true; - #language { padding: 8px; } + settings.mainBar = { + modules-center = [ + "group/left" + "group/center" + "group/right" + ]; - #workspaces, - #tray { - background: ${colors.base01}; - } - #workspaces button { - color: ${colors.base05}; - padding: 0 2px; - border-radius: 999px; - border: 1pt solid transparent; - min-width: 20px; + "group/left" = { + orientation = "inherit"; + modules = [ + "hyprland/workspaces" + "custom/sep-left" + "hyprland/language" + "keyboard-state" + ]; + }; - &:hover { background: ${colors.base02}; } + "group/center" = { + orientation = "inherit"; + modules = [ + "cava" + "mpris" + ]; + }; - &.active { - background: ${accent}; - color: ${colors.base00}; - min-width: 30px; + "group/right" = { + orientation = "inherit"; + modules = [ + "tray" + "custom/sep-left" + "group/system" + "custom/sep-left" + "pulseaudio" + "custom/sep-left" + "battery" + "clock" + ]; + }; - &:hover { - border-color: ${accent}; - background: ${colors.base02}; - color: ${accent}; - } + + cava = { + bars = 9; + bar_delimiter = 0; + stereo = false; + input_delay = 0; + format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; + }; + + clock = { + tooltip = false; + interval = 5; + format = "{:L%d %b - %H:%M %a}"; + }; + + pulseaudio = { + format = "{icon} {volume}%"; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + phone-muted = ""; + portable = ""; + car = ""; + default = ["" ""]; + }; + on-click = "ghostty --title=pulsemixer -e pulsemixer"; + }; + + mpris = { + format = "{dynamic}"; + dynamic-len = if osConfig.host.laptop then 16 else 32; + dynamic-order = [ "title" "artist" "album" ]; + }; + + battery = { + interval = 5; + states = { + warning = 30; + critical = 15; + }; + format = "{icon} {capacity}% | "; + format-icons = { + default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; + charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"]; + }; + }; + + "custom/sep-left" = { + format = " | "; + tooltip = false; + }; + + "keyboard-state" = { + capslock = true; + format = "{icon}"; + format-icons = { + locked = "CAPS"; + unlocked = ""; + }; + }; + + "hyprland/language" = { + format-en = "en"; + format-ru = "ru"; + }; + + "group/system" = { + orientation = "inherit"; + drawer = { + transition-duration = 500; + transition-left-to-right = false; + }; + modules = [ + "network" + "custom/mem" + "cpu" + "temperature" + ]; + }; + + network = { + format = "{ifname}"; + format-wifi = " {essid} ({signalStrength}%)"; + format-ethernet = "{ifname}"; + format-disconnected = ""; + tooltip-format = "{ipaddr}"; + max-length = 50; + on-click = "ghostty --title=nmtui -e nmtui"; + }; + + "custom/weather" = { + format = "{}"; + tooltip = true; + interval = 1800; + exec = "python3 $HOME/.config/waybar/scripts/wttr.py"; + return-type = "json"; + }; + + "custom/mem" = { + format = "{} "; + interval = 3; + exec = "free -h | awk '/Mem:/{printf $3}'"; + tooltip = false; + }; + + cpu = { + interval = 2; + format = "{usage}% "; + min-length = 6; + }; + + temperature = { + hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input"; + critical-threshold = 80; + format = "{temperatureC}°C {icon}"; + format-icons = ["" "" "" "" ""]; + tooltip = false; + }; + }; + + style = let + colors = config.lib.stylix.colors.withHashtag; + accent = colors.base0E; + scssFile = pkgs.writeText "waybar.scss" /*scss*/ '' + window#waybar { + background: transparent; + color: ${colors.base05}; + font-weight: bold; + font-size: .85em; + & > * { padding: 0 0 6px 0; } } - } - #mpris { - border-radius: 0 0 20px 20px; - padding: 10px; - &:hover { background: ${colors.base02}; } - &.playing { - border: 3px solid ${accent}; - border-top-color: transparent; - padding: calc(10px - 3px); + .modules-center { + background: ${colors.base01}CC; + border-radius: 12px; + padding: 10px; + box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4); } - } - #tray { - widget { + #left, + #right, + #center { + background: ${colors.base02}; + padding: 0 2px; + margin: 0 8px; + border-radius: 8px; + } + #left { margin-left: 0; } + #right { margin-right: 0; } + + #clock { padding-right: 10px; } + + #cava { padding: 0 10px; } + + #language { padding: 8px; } + + #workspaces button { + color: ${colors.base05}; + padding: 0 2px; + border-radius: 999px; border: 1pt solid transparent; + min-width: 20px; + + &:hover { background: ${colors.base03}; } + + &.active { + background: ${accent}; + color: ${colors.base00}; + min-width: 25px; + + &:hover { + border-color: ${accent}; + background: ${colors.base03}; + color: ${accent}; + } + } + } + + #mpris { + border-radius: 8px; + padding: 4px; + &:hover { background: ${colors.base03}; } + &.playing { + border: 2px solid ${accent}; + padding: 2px; + } + } + + #tray { + widget { + border: 1pt solid transparent; + &:hover { background: ${colors.base03}; } + & > image { padding: 8px; } + } + + & > .passive { border-color: ${colors.base03}; } + & > .needs-attention { border-color: ${colors.base09}; } + } + + #pulseaudio { + &:hover { background: ${colors.base03}; } + &.muted { + background: ${colors.base08}; + color: ${colors.base01}; + + &:hover { + color: ${colors.base08}; + background: ${colors.base03}; + } + } + } + + #network { &:hover { background: ${colors.base02}; } - & > image { padding: 8px; } - } - - & > .passive { border-color: ${colors.base02}; } - & > .needs-attention { border-color: ${colors.base09}; } - } - - #pulseaudio { - &:hover { background: ${colors.base02}; } - &.muted { - background: ${colors.base08}; - color: ${colors.base00}; - - &:hover { - color: ${colors.base08}; - background: ${colors.base02}; - } - } - } - - #network { - &:hover { background: ${colors.base02}; } - &.disconnected { - color: ${colors.base00}; - background: ${colors.base08}; - } - } - - #system .drawer-child > * { - margin-right: 4px - } - - #keyboard-state label.locked { - color: ${colors.base08}; - } - - #battery { - &.plugged { color: ${colors.base0D}; } - &.charging { color: ${colors.base0B}; } - &:not(.charging) { - &.warning { + &.disconnected { color: ${colors.base00}; - background-color: ${colors.base09}; - } - &.critical { - background-color: ${colors.base08}; - color: ${colors.base00}; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-direction: alternate; + background: ${colors.base08}; } } - &.full { - color: ${colors.base00}; - background: ${colors.base0B}; - } - } - @keyframes blink { - to { - background-color: ${colors.base00}; + #system .drawer-child > * { + margin-right: 4px + } + + #keyboard-state label.locked { color: ${colors.base08}; } - } - ''; - cssFile = pkgs.runCommand "waybar.css" { - nativeBuildInputs = [ pkgs.dart-sass ]; - } "sass ${scssFile} $out"; - in builtins.readFile cssFile; -} \ No newline at end of file + #battery { + &.plugged { color: ${colors.base0D}; } + &.charging { color: ${colors.base0B}; } + &:not(.charging) { + &.warning { + color: ${colors.base00}; + background-color: ${colors.base09}; + } + &.critical { + background-color: ${colors.base08}; + color: ${colors.base00}; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + } + &.full { + color: ${colors.base00}; + background: ${colors.base0B}; + } + } + + @keyframes blink { + to { + background-color: ${colors.base00}; + color: ${colors.base08}; + } + } + ''; + + cssFile = pkgs.runCommand "waybar.css" { + nativeBuildInputs = [ pkgs.dart-sass ]; + } "sass ${scssFile} $out"; + in builtins.readFile cssFile; + }; +} diff --git a/user/sweetbread/modules/waybar.nix b/user/sweetbread/modules/waybar.nix index 1855359..e39c220 100644 --- a/user/sweetbread/modules/waybar.nix +++ b/user/sweetbread/modules/waybar.nix @@ -1,146 +1,298 @@ -{ config, pkgs, ... }: { - programs.waybar.settings.mainBar.spacing = 8; - programs.waybar.style = let - colors = config.lib.stylix.colors.withHashtag; - radius = "6px"; - scssFile = pkgs.writeText "waybar.scss" /*scss*/ '' - window#waybar { - background: transparent; - color: ${colors.base05}; - border-radius: ${radius}; - font-weight: bold; - font-size: .85em; +{ osConfig, config, pkgs, lib, ... }: { + home.packages = with pkgs; [ + font-awesome + nerd-fonts.symbols-only + playerctl + cava + pulsemixer + ]; - & > * { padding: 8px; } - } + programs.waybar = { + enable = true; + systemd.enable = true; - #cava, - #language, - #mpris, - #pulseaudio, - #network, - #battery, - #cpu, - #temperature, - #keyboard-state label.locked, - #custom-mem, - #clock { - background: ${colors.base00}; - border-radius: ${radius}; - padding: 8px; - } + settings.mainBar = { + spacing = 8; - #workspaces, - #tray { - background: ${colors.base00}; - border-radius: ${radius}; - } + modules-left = [ + "hyprland/workspaces" + "hyprland/language" + "keyboard-state" + "cava" + ]; - #workspaces button { - color: ${colors.base05}; - padding: 4px; - border-radius: ${radius}; - border: 1pt solid transparent; + modules-center = [ + "mpris" + ]; - &:hover { background: ${colors.base01}; } + modules-right = [ + "tray" + "group/system" + "pulseaudio" + "battery" + "clock" + ]; - &.active { - background: ${colors.base0B}; - color: ${colors.base00}; + cava = { + bars = 14; + sleep_timer = 5; + hide_on_silence = true; + bar_delimiter = 0; + input_delay = 0; + format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; + }; - &:hover { - border-color: ${colors.base0B}; - background: ${colors.base01}; - color: ${colors.base0B}; - } - } - } + clock = { + tooltip = false; + interval = 5; + format = "{:L%d %b - %H:%M %a}"; + }; - #mpris { - &:hover { background: ${colors.base01}; } - &.paused { opacity: .5; } - } + pulseaudio = { + format = "{icon} {volume}%"; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + phone-muted = ""; + portable = ""; + car = ""; + default = ["" ""]; + }; + on-click = "ghostty --title=pulsemixer -e pulsemixer"; + }; - #tray { - widget { - border: 1pt solid transparent; + mpris = { + format = "{dynamic}"; + dynamic-len = if osConfig.host.laptop then 32 else 64; + dynamic-order = [ "title" "artist" "album" ]; + }; + + battery = { + interval = 5; + states = { + warning = 30; + critical = 15; + }; + format = "{icon} {capacity}%"; + format-icons = { + default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; + charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"]; + }; + }; + + "keyboard-state" = { + capslock = true; + format = "{icon}"; + format-icons = { + locked = "CAPS"; + unlocked = ""; + }; + }; + + "hyprland/language" = { + format-en = "en"; + format-ru = "ru"; + }; + + + "group/system" = { + orientation = "inherit"; + drawer = { + transition-duration = 500; + transition-left-to-right = false; + }; + modules = [ + "network" + "custom/mem" + "cpu" + "temperature" + ]; + }; + + network = { + format = "{ifname}"; + format-wifi = " {essid} ({signalStrength}%)"; + format-ethernet = "{ifname}"; + format-disconnected = ""; + tooltip-format = "{ipaddr}"; + max-length = 50; + on-click = "ghostty --title=nmtui -e nmtui"; + }; + + "custom/weather" = { + format = "{}"; + tooltip = true; + interval = 1800; + exec = "python3 $HOME/.config/waybar/scripts/wttr.py"; + return-type = "json"; + }; + + "custom/mem" = { + format = "{} "; + interval = 3; + exec = "free -h | awk '/Mem:/{printf $3}'"; + tooltip = false; + }; + + cpu = { + interval = 2; + format = "{usage}% "; + min-length = 6; + }; + + temperature = { + hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input"; + critical-threshold = 80; + format = "{temperatureC}°C {icon}"; + format-icons = ["" "" "" "" ""]; + tooltip = false; + }; + }; + + style = let + colors = config.lib.stylix.colors.withHashtag; + radius = "6px"; + scssFile = pkgs.writeText "waybar.scss" /*scss*/ '' + window#waybar { + background: transparent; + color: ${colors.base05}; border-radius: ${radius}; + font-weight: bold; + font-size: .85em; + + & > * { padding: 8px; } + } + + #cava, + #language, + #mpris, + #pulseaudio, + #network, + #battery, + #cpu, + #temperature, + #keyboard-state label.locked, + #custom-mem, + #clock { + background: ${colors.base00}; + border-radius: ${radius}; + padding: 8px; + } + + #workspaces, + #tray { + background: ${colors.base00}; + border-radius: ${radius}; + } + + #workspaces button { + color: ${colors.base05}; + padding: 4px; + border-radius: ${radius}; + border: 1pt solid transparent; + &:hover { background: ${colors.base01}; } - & > image { padding: 8px; } - } - & > .passive { border-color: ${colors.base02}; } - & > .needs-attention { border-color: ${colors.base09}; } - } - - #pulseaudio { - &:hover { background: ${colors.base01}; } - &.muted { - background: ${colors.base08}; - color: ${colors.base00}; - - &:hover { - color: ${colors.base08}; - background: ${colors.base01}; - } - } - } - - #network { - &:hover { background: ${colors.base01}; } - &.disconnected { - color: ${colors.base00}; - background: ${colors.base08}; - } - } - - #system .drawer-child > * { - margin-right: 4px - } - - #keyboard-state label.locked { - background-color: ${colors.base00}; - color: ${colors.base08}; - } - - #battery { - &.plugged { color: ${colors.base0D}; } - &.charging { color: ${colors.base0B}; } - &:not(.charging) { - &.warning { + &.active { + background: ${colors.base0B}; color: ${colors.base00}; - background-color: ${colors.base09}; - } - &.critical { - background-color: ${colors.base08}; - color: ${colors.base00}; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-direction: alternate; - } - } - &.full { - color: ${colors.base00}; - background: ${colors.base0B}; - } - } - @keyframes blink { - to { + &:hover { + border-color: ${colors.base0B}; + background: ${colors.base01}; + color: ${colors.base0B}; + } + } + } + + #mpris { + &:hover { background: ${colors.base01}; } + &.paused { opacity: .5; } + } + + #tray { + widget { + border: 1pt solid transparent; + border-radius: ${radius}; + &:hover { background: ${colors.base01}; } + & > image { padding: 8px; } + } + + & > .passive { border-color: ${colors.base02}; } + & > .needs-attention { border-color: ${colors.base09}; } + } + + #pulseaudio { + &:hover { background: ${colors.base01}; } + &.muted { + background: ${colors.base08}; + color: ${colors.base00}; + + &:hover { + color: ${colors.base08}; + background: ${colors.base01}; + } + } + } + + #network { + &:hover { background: ${colors.base01}; } + &.disconnected { + color: ${colors.base00}; + background: ${colors.base08}; + } + } + + #system .drawer-child > * { + margin-right: 4px + } + + #keyboard-state label.locked { background-color: ${colors.base00}; color: ${colors.base08}; } - } - ''; - cssFile = pkgs.runCommand "waybar.css" { - nativeBuildInputs = [ pkgs.dart-sass ]; - } "sass ${scssFile} $out"; - in builtins.readFile cssFile; + #battery { + &.plugged { color: ${colors.base0D}; } + &.charging { color: ${colors.base0B}; } + &:not(.charging) { + &.warning { + color: ${colors.base00}; + background-color: ${colors.base09}; + } + &.critical { + background-color: ${colors.base08}; + color: ${colors.base00}; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + } + &.full { + color: ${colors.base00}; + background: ${colors.base0B}; + } + } + + @keyframes blink { + to { + background-color: ${colors.base00}; + color: ${colors.base08}; + } + } + ''; + + cssFile = pkgs.runCommand "waybar.css" { + nativeBuildInputs = [ pkgs.dart-sass ]; + } "sass ${scssFile} $out"; + in builtins.readFile cssFile; + }; wayland.windowManager.hyprland.settings.layerrule = [ "blur on, match:namespace waybar" ]; -} \ No newline at end of file +}