diff --git a/modules/home/default.nix b/modules/home/default.nix index c01da8e..4686a76 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -18,6 +18,7 @@ ./stylix.nix ./vscode.nix ./wallpaper.nix + ./waybar ./wlogout.nix ./xdg.nix ./yazi.nix diff --git a/modules/home/hypr/hyprland.nix b/modules/home/hypr/hyprland.nix index e4238ed..2f34b12 100644 --- a/modules/home/hypr/hyprland.nix +++ b/modules/home/hypr/hyprland.nix @@ -5,7 +5,6 @@ }: { home.packages = with pkgs; [ - waybar hyprpolkitagent ]; @@ -39,7 +38,6 @@ }; exec-once = [ - "systemctl --user enable --now waybar.service" "systemctl --user enable --now hyprpolkitagent.service" "wpaperd -d" "systemctl enable --user app-com.mitchellh.ghostty.service" diff --git a/modules/home/waybar/default.nix b/modules/home/waybar/default.nix new file mode 100644 index 0000000..4978921 --- /dev/null +++ b/modules/home/waybar/default.nix @@ -0,0 +1,343 @@ +{ + ... +}: +let + hyprland-workspaces = { + format = "{icon}"; + show-special = false; + active-only = false; + on-click = "activate"; + on-scroll-up = "hyprctl dispatch workspace e+1"; + on-scroll-down = "hyprctl dispatch workspace e-1"; + all-outputs = true; + sort-by-number = true; + persistent-workspaces = { + "1" = [ ]; + "2" = [ ]; + "3" = [ ]; + "4" = [ ]; + }; + format-icons = { + "1" = " "; + "2" = " "; + "3" = " "; + "4" = " "; + "5" = ""; + "6" = " "; + "7" = ""; + "8" = " "; + "9" = " "; + "10" = "10"; + "focused" = ""; + "default" = ""; + }; + }; + + menu = { + format = "{}"; + exec = "echo ; echo 󱓟 app launcher"; + interval = 86400; + tooltip = true; + on-click = "pkill rofi || rofi -show drun -show-icons"; + }; + + hyprland-window = { + format = "󰣆 {title}"; + max-length = 40; + separate-outputs = false; + rewrite = { + "^.*( — LibreWolf|LibreWolf)$" = "󰈹 LibreWolf"; + "(.*) — Mozilla Firefox" = " Firefox"; + "^.*v( .*|$)" = " Neovim"; + "^.*~$" = "󰄛 Kitty"; + "(.*) " = " Empty"; + "^.*pdf( .*|$)" = ""; + "^.*(- Mousepad)$" = " $1"; + }; + }; + + arrow-right = { + format = "󰁙"; + tooltip = false; + }; + + cpu = { + format = "󰘚 {usage}󱉸"; + }; + + memory = { + interval = 10; + format = "{used:0.1f}G 󰾆"; + format-alt = "{percentage}% 󰾆"; + format-alt-click = "click"; + tooltip = true; + tooltip-format = "{used:0.1f}GB/{total:0.1f}G"; + # on-click-right = "kitty --title btop sh -c 'btop'"; + }; + + temperature = { + interval = 10; + tooltip = true; + hwmon-path = [ + "/sys/class/hwmon/hwmon6/temp1_input" + "/sys/class/thermal/thermal_zone0/temp" + ]; + critical-threshold = 82; + format-critical = "{temperatureC}°C {icon}"; + format = "{temperatureC}°C {icon}"; + format-icons = [ "󰈸" ]; + # on-click-right = "kitty --title nvtop sh -c 'nvtop'"; + }; + + idle-inhibitor = { + format = "{icon}"; + format-icons = { + activated = " "; + deactivated = " "; + }; + }; + + tray = { + icon-size = 16; + spacing = 4; + }; + + pulseaudio = { + format = "{icon} {volume}%"; + format-bluetooth = "{icon} 󰂰 {volume}"; + format-muted = "󰖁"; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + portable = ""; + car = ""; + default = [ + "" + "" + "󰕾" + "" + ]; + ignored-sinks = [ "Easy Effects Sink" ]; + }; + scroll-step = 5.0; + # on-click-right = "pavucontrol -t 3"; + tooltip-format = "{icon} {desc} | {volume}%"; + smooth-scrolling-threshold = 1; + }; + + battery = { + align = 0; + rotate = 0; + full-at = 100; + design-capacity = false; + states = { + good = 95; + warning = 30; + critical = 15; + }; + format = "{icon} {capacity}"; + format-charging = " {capacity}%"; + format-plugged = "󱘖 {capacity}%"; + format-alt-click = "click"; + format-full = "{icon} Full"; + format-alt = "{icon} {time}"; + format-icons = [ + "󰂎" + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + format-time = "{H}h {M}min"; + tooltip = true; + tooltip-format = "{timeTo} {power}w"; + }; + + mpris = { + interval = 10; + format = "{player_icon} "; + format-paused = "{status_icon}"; + on-click-middle = "playerctl play-pause"; + on-click = "playerctl previous"; + on-click-right = "playerctl next"; + scroll-step = 5.0; + smooth-scrolling-threshold = 1; + player-icons = { + chromium = ""; + mpd = ""; + default = ""; + firefox = ""; + kdeconnect = ""; + mopidy = ""; + mpv = "󰐹"; + spotify = ""; + vlc = "󰕼"; + }; + status-icons = { + paused = "󰐎"; + playing = ""; + stopped = ""; + }; + max-length = 10; + }; + + arrow-left = { + format = "󰁒"; + tooltip = false; + }; + + notifications = { + tooltip = false; + format = "{icon} {text}"; + format-icons = { + notification = "󱅫"; + none = "󰂚"; + dnd-notification = "󰂛"; + dnd-none = "󰂛"; + inhibited-notification = "󰂚"; + inhibited-none = "󰂚"; + dnd-inhibited-notification = "󰂛"; + dnd-inhibited-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; + }; + + clock = { + interval = 1; + format = "{:%I:%M %p}"; # AM-PM Format + format-alt = " {:%H:%M  %Y, %d %B, %A}"; + tooltip-format = "{calendar}"; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + }; + + power = { + format = "⏻"; + exec = "echo ; echo 󰟡 power"; + on-click = "wlogout"; + interval = 86400; + tooltip = true; + }; +in +{ + programs.waybar = { + enable = true; + systemd.enable = true; + settings = [ + { + layer = "top"; + position = "top"; + height = 34; + width = 1200; + margin-left = 50; + margin-right = 50; + margin-top = 5; + fixed-center = true; + reload_style_on_change = true; + + modules-left = [ + "custom/menu" + "hyprland/window" + "group/info" + ]; + + modules-center = [ + "hyprland/workspaces#4" + ]; + + modules-right = [ + "idle_inhibitor" + "group/demo" + "group/hub" + ]; + + "hyprland/workspaces#4" = hyprland-workspaces; + "custom/menu" = menu; + "hyprland/window" = hyprland-window; + "custom/arrow-right" = arrow-right; + "cpu" = cpu; + "memory" = memory; + "temperature" = temperature; + "idle_inhibitor" = idle-inhibitor; + "tray" = tray; + "pulseaudio" = pulseaudio; + "mpris" = mpris; + "battery" = battery; + "custom/arrow-left" = arrow-left; + "custom/notifications" = notifications; + "clock" = clock; + "custom/power" = power; + + "group/info" = { + orientation = "inherit"; + drawer = { + transition-duration = 300; + transition-left-to-right = false; + }; + modules = [ + "custom/arrow-right" + "cpu" + "memory" + "temperature" + ]; + }; + + "group/demo" = { + orientation = "inherit"; + modules = [ + "tray" + "pulseaudio" + "mpris" + "battery" + ]; + }; + + "group/utils" = { + orientation = "inherit"; + drawer = { + transition-duration = 300; + transition-left-to-right = true; + }; + modules = [ + "custom/arrow-left" + "custom/notifications" + ]; + }; + + "group/hub" = { + orientation = "inherit"; + modules = [ + "group/utils" + "clock" + "custom/power" + ]; + }; + } + ]; + style = ./style.css; + }; +} diff --git a/modules/home/waybar/style.css b/modules/home/waybar/style.css new file mode 100644 index 0000000..5c1444f --- /dev/null +++ b/modules/home/waybar/style.css @@ -0,0 +1,184 @@ +@define-color foreground #BFE3EA; +@define-color background alpha(#000007,0.05); +@define-color cursor #B98FAE; + +@define-color color0 #000009; +@define-color color1 #60697E; +@define-color color2 #BA4F80; +@define-color color3 #4F7F96; +@define-color color4 #BE869D; +@define-color color5 #47A6BD; +@define-color color6 #49AEC4; +@define-color color7 #9BCED9; +@define-color color8 #6D9098; +@define-color color9 #60697E; +@define-color color10 #BA4F80; +@define-color color11 #4F7F96; +@define-color color12 #BE869D; +@define-color color13 #47A6BD; +@define-color color14 #49AEC4; +@define-color color15 #9BCED9; + +/* ---- 💫 https://github.com/JaKooLit 💫 ---- */ +/*DARK_PURPLE*/ + +@define-color main-color @color15; +* { + all: unset; /*this is really important to isolate waybar from gtk*/ + font: bold 14px "FiraCode Nerd Font"; + font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; + border: none; + + border-radius: 0; + box-shadow: none; + text-shadow: none; +} + +window#waybar { + /*background: alpha(@background, 0.1);*/ + background: rgba (0, 0, 0, 0.6); + border-radius: 5px; + /*border: 0px solid alpha(@background,0.8);*/ +} + +#window { + padding: 0px 8px; + margin: 5px 4px 5px 4px; + background: alpha(@color12, 0.3); + border-radius: 5px; + color: lighter(@main-color); +} + +tooltip { + background: alpha(@background, 0.8); + border: 2px solid alpha(lighter(@main-color), 0.8); + border-radius: 10px; +} + +tooltip label { + color: @freground; +} + +#custom-arrow-right { + color: @main-color; + margin: 0px 4px; +} + +#cpu, +#memory, +#temperature, +#disk, +#custom-updates { + padding: 0px 6px; + margin: 6px 4px; + background: alpha(darker(@main-color), 0.4); + color: @main-color; + border-radius: 10px; +} + +#workspaces { + margin: 4px 4px; + background: alpha(lighter(@color4), 0.09); + border-radius: 5px; +} + +#workspaces button { + padding: 0px 4px; + margin: 0px 0px; + color: alpha(@foreground, 0.3); +} + +#workspaces button.active { + transition: color 0.5s; + color: lighter(@main-color); +} + +#workspaces button.urgent, +#workspaces button:hover { + color: @color12; + background-color: transparent; +} +#demo, +#control-center { + padding: 0px 6px; + margin: 4px 2px 4px 2px; + color: lighter(@color3); + background: alpha(lighter(@main-color), 0.08); + border-radius: 5px; +} + +#bluetooth, +#network, +#pulseaudio { + padding: 0px 0 0 4px; +} + +#pulseaudio-slider slider { + min-height: 0px; + min-width: 0px; + background-color: transparent; + border: none; + box-shadow: none; +} + +#pulseaudio-slider { + margin: 6px; +} + +#pulseaudio-slider highlight { + border-radius: 8px; + background-color: lighter(@main-color); +} + +#language { + padding: 0px 3px 2px 0px; +} + +#custom-arrow-left { + color: lighter(@main-color); + margin: 0px 4px; +} + +#custom-notifications, +#custom-weather, +#custom-theme-switcher { + padding: 0px 8px; + margin: 8px 4px; + color: @main-color; + background: alpha(darker(@main-color), 0.8); + border-radius: 10px; +} +#tray { + padding: 0px 8px; + margin: 4px 2px 4px 2px; + background: alpha(@color12, 0.3); + border-radius: 5px; + color: lighter(@main-color); +} + +#custom-menu, +#custom-power { + padding: 0px 10px 0px 6px; + margin: 6px 6px 6px 4px; + background: alpha(@color12, 0.3); + border-radius: 5px; + color: lighter(@main-color); +} + +#clock { + padding: 0px 8px; + margin: 5px 2px 5px 4px; + background: alpha(@color12, 0.3); + border-radius: 5px; + color: lighter(@main-color); +} + +#power, +#bluetooth, +#mpd, +#pulseaudio, +#battery, +#mpris { + padding: 4px 4px; + color: lighter(@main-color); +}