diff --git a/modules/user.nix b/modules/user.nix index eb4bf82..3677d00 100644 --- a/modules/user.nix +++ b/modules/user.nix @@ -1,6 +1,5 @@ { config, lib, ... }: { imports = [ - ./user/ags.nix ./user/btop.nix ./user/fuzzel.nix ./user/ghostty.nix @@ -11,6 +10,7 @@ ./user/neofetch.nix ./user/qt.nix ./user/sops.nix + ./user/waybar.nix ./user/yazi.nix ./user/zsh.nix diff --git a/modules/user/waybar.nix b/modules/user/waybar.nix new file mode 100644 index 0000000..fe74dbd --- /dev/null +++ b/modules/user/waybar.nix @@ -0,0 +1,140 @@ +{ osConfig, config, pkgs, ... }: { + home.packages = with pkgs; [ + font-awesome + nerd-fonts.symbols-only + playerctl + ]; + + programs.waybar = { + enable = true; + systemd.enable = true; + + settings.mainBar = { + modules-left = [ + "hyprland/workspaces" + "hyprland/language" + "keyboard-state" + ]; + + modules-center = [ + "mpris" + ]; + + modules-right = [ + "tray" + "group/system" + "pulseaudio" + "battery" + "clock" + ]; + + 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/waybar.nix b/user/chest/waybar.nix new file mode 100644 index 0000000..2ac1060 --- /dev/null +++ b/user/chest/waybar.nix @@ -0,0 +1,142 @@ +{ 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; + } + + #mpris, + #pulseaudio, + #network, + #battery, + #cpu, + #temperature, + #custom-mem, + #clock { + background: ${colors.base01}; + padding: 8px; + } + + #language { padding: 8px; } + + #workspaces, + #tray { + background: ${colors.base01}; + } + + #workspaces button { + color: ${colors.base05}; + padding: 0 2px; + border-radius: 999px; + border: 1pt solid transparent; + min-width: 20px; + + &:hover { background: ${colors.base02}; } + + &.active { + background: ${accent}; + color: ${colors.base00}; + min-width: 30px; + + &:hover { + border-color: ${accent}; + background: ${colors.base02}; + color: ${accent}; + } + } + } + + #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); + } + } + + #tray { + widget { + border: 1pt solid transparent; + &: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 { + 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; +} \ No newline at end of file diff --git a/user/sweetbread/home.nix b/user/sweetbread/home.nix index 46e5388..7dfd17f 100644 --- a/user/sweetbread/home.nix +++ b/user/sweetbread/home.nix @@ -1,6 +1,7 @@ { pkgs, ... }: { imports = [ ../../modules/user/packages/tex.nix + ./modules/waybar.nix ]; programs.hyprlock.enable = true; home.packages = with pkgs; [ diff --git a/user/sweetbread/modules/waybar.nix b/user/sweetbread/modules/waybar.nix new file mode 100644 index 0000000..798a93b --- /dev/null +++ b/user/sweetbread/modules/waybar.nix @@ -0,0 +1,145 @@ +{ 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; + + & > * { padding: 8px; } + } + + #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}; } + + &.active { + background: ${colors.base0B}; + color: ${colors.base00}; + + &: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}; + } + + #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