From ae0d590f5353c05b678ceaba45cff13dfa1c2c2c Mon Sep 17 00:00:00 2001 From: lightly-toasted Date: Mon, 4 Aug 2025 21:50:29 +0900 Subject: [PATCH] feat: add waybar --- home/toast/home.nix | 1 + home/toast/programs/hyprland.nix | 2 +- home/toast/programs/waybar/default.nix | 66 ++++++++ home/toast/programs/waybar/style.css | 203 +++++++++++++++++++++++++ 4 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 home/toast/programs/waybar/default.nix create mode 100644 home/toast/programs/waybar/style.css diff --git a/home/toast/home.nix b/home/toast/home.nix index cec028b..4912c8f 100644 --- a/home/toast/home.nix +++ b/home/toast/home.nix @@ -18,6 +18,7 @@ ./programs/prismlauncher.nix ./programs/nodejs.nix ./programs/btop.nix + ./programs/waybar ]; home = { diff --git a/home/toast/programs/hyprland.nix b/home/toast/programs/hyprland.nix index e948bf2..e729185 100644 --- a/home/toast/programs/hyprland.nix +++ b/home/toast/programs/hyprland.nix @@ -10,7 +10,7 @@ package = pkgs.hyprland; systemd.enable = false; settings = { - exec-once = [ "uwsm app -- firefox" ]; + exec-once = [ "uwsm app -- firefox" "waybar" ]; "$terminal" = "uwsm app -- kitty"; "$fileManager" = "uwsm app -- thunar"; diff --git a/home/toast/programs/waybar/default.nix b/home/toast/programs/waybar/default.nix new file mode 100644 index 0000000..3bc0fd9 --- /dev/null +++ b/home/toast/programs/waybar/default.nix @@ -0,0 +1,66 @@ +{ + programs.waybar = { + enable = true; + style = builtins.readFile ./style.css; + settings = [{ + position = "top"; + height = 5; + output = "HDMI-A-1"; + modules-left = [ ]; + modules-center = [ ]; + modules-right = [ + "pulseaudio" + "network" + "cpu" + "memory" + "systemd-failed-units" + "clock" + "tray" + ]; + + tray.spacing = 10; + + clock = { + format = "{:%I:%M }"; + format-alt = "{:%Y-%m-%d}"; + tooltip = false; + }; + + cpu = { + format = "{usage}% "; + on-click = "kitty btop"; + }; + + memory = { + format = "{}% "; + on-click = "kitty btop"; + }; + + network = { + format-wifi = "{essid} ({signalStrength}%) "; + format-ethernet = "{ifname}: {ipaddr}/{cidr} "; + format-linked = "{ifname} (No IP) "; + format-disconnected = "Disconnected "; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + + pulseaudio = { + format = "{volume}% {format_source}"; + format-bluetooth = "{volume}% {format_source}"; + format-bluetooth-muted = " {format_source}"; + format-muted = " {format_source}"; + format-source = "{volume}% "; + format-source-muted = ""; + on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + }; + + systemd-failed-units = { + hide-on-ok = false; + format = "✗ {nr_failed}"; + format-ok = "✓"; + system = true; + user = false; + }; + }]; + }; +} diff --git a/home/toast/programs/waybar/style.css b/home/toast/programs/waybar/style.css new file mode 100644 index 0000000..0368c36 --- /dev/null +++ b/home/toast/programs/waybar/style.css @@ -0,0 +1,203 @@ +/* https://github.com/kamlendras/waybar-macos-sequoia/tree/259ecb4b5a65a52ece0708fb4c65db4f57268329?tab=readme-ov-file */ + +* { + border: none; + border-radius: 4px; + /* `ttf-font-awesome` is required to be installed for icons */ + font-family: "Roboto Mono Medium", Helvetica, Arial, sans-serif; + + /* adjust font-size value to your liking: */ + font-size: 10px; + + min-height: 0; +} + +window#waybar { + background-color: rgba(0, 0, 0, 0.9); + color: #ffffff; +} + +#workspaces button { + color: #ffffff; + box-shadow: inset 0 -3px transparent; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.9); + box-shadow: inset 0 -3px #ffffff; +} + +#workspaces button.focused { + background-color: #64727d; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + background-color: #64727d; +} + +#clock, +#battery, +#cpu, +#memory, +#temperature, +#backlight, +#network, +#pulseaudio, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#mpd { + padding: 0 10px; + margin: 6px 3px; + color: #000000; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + background-color: #000000; + color: white; +} + +#battery { + background-color: #000000; + color: white; +} + +#battery.charging { + color: #ffffff; + background-color: #000000; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #000000; +} + +#cpu { + background-color: #000000; + color: #ffffff; +} + +#memory { + background-color: #000000; + color: white; +} + +#backlight { + background-color: #000000; + color: white; +} + +#network { + background-color: #000000; + color: white; +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { + background-color: #000000; + color: #ffffff; +} + +#pulseaudio.muted { + background-color: #000000; + color: #ffffff; +} + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + background-color: #f0932b; +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { + background-color: #2980b9; +} + +#idle_inhibitor { + background-color: #2d3436; +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + background-color: #66cc99; + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} + +#language { + background: #bbccdd; + color: #333333; + padding: 0 5px; + margin: 6px 3px; + min-width: 16px; +}