diff --git a/programs/hyprland.nix b/programs/hyprland.nix index 22afe86..d1fe5ce 100644 --- a/programs/hyprland.nix +++ b/programs/hyprland.nix @@ -11,7 +11,6 @@ hyprpicker wl-clipboard cliphist - waybar rofi-wayland swayidle swappy diff --git a/programs/waybar/default.nix b/programs/waybar/default.nix new file mode 100644 index 0000000..191ab5a --- /dev/null +++ b/programs/waybar/default.nix @@ -0,0 +1,88 @@ +{ + lib, + pkgs, + config, + ... +}: { + hm.programs.waybar = { + enable = true; + style = ./style.css; + + settings = [ + { + position = "bottom"; + layer = "top"; + height = 24; + spacing = 2; + + modules-left = ["hyprland/workspaces"]; + modules-center = []; + modules-right = + ["memory"] + ++ lib.optionals (builtins.elem "amdgpu" config.services.xserver.videoDrivers) ["custom/gpu-usage"] + ++ ["cpu" "wireplumber"] + ++ lib.optionals config.services.power-profiles-daemon.enable ["battery"] + ++ lib.optionals config.programs.light.enable ["backlight"] + ++ ["clock" "tray"]; + + "hyprland/workspaces" = { + format = "{name}"; + on-click = "activate"; + sort-by-number = true; + }; + + tray = { + icon-size = 16; + spacing = 10; + }; + + clock = { + format-alt = "{:%Y-%m-%d %H:%M:%S}"; + interval = 1; + }; + + cpu = { + format = "CPU {usage}%"; + tooltip = false; + interval = 2; + }; + + memory = { + format = "RAM {}%"; + interval = 2; + }; + + backlight = { + format = "LGT {percent}%"; + scroll-step = 5; + }; + + battery = { + states = { + low = 15; + }; + format = "BAT {capacity}%"; + format-charging = "BAT+ {capacity}%"; + format-plugged = "BAT+ {capacity}%"; + format-low = "BAT! {capacity}%"; + interval = 5; + }; + + wireplumber = { + scroll-step = 5; + format = "VOL {volume}%"; + format-muted = "muted"; + on-click = "${lib.getExe' pkgs.wireplumber "wpctl"} set-mute @DEFAULT_AUDIO_SINK@ toggle"; + on-click-right = "${lib.getExe pkgs.pavucontrol}"; + }; + + "custom/gpu-usage" = { + exec = "cat /sys/class/hwmon/hwmon*/device/gpu_busy_percent"; + format = "GPU {}%"; + return-type = ""; + interval = 2; + }; + } + ]; + }; +} diff --git a/programs/waybar/style.css b/programs/waybar/style.css new file mode 100644 index 0000000..47b5dfd --- /dev/null +++ b/programs/waybar/style.css @@ -0,0 +1,164 @@ +/* catppuccin macchiato */ +@define-color base #24273a; +@define-color mantle #1e2030; +@define-color crust #181926; + +@define-color text #cad3f5; +@define-color subtext0 #a5adcb; +@define-color subtext1 #b8c0e0; + +@define-color surface0 #363a4f; +@define-color surface1 #494d64; +@define-color surface2 #5b6078; + +@define-color overlay0 #6e738d; +@define-color overlay1 #8087a2; +@define-color overlay2 #939ab7; + +@define-color blue #8aadf4; +@define-color lavender #b7bdf8; +@define-color sapphire #7dc4e4; +@define-color sky #91d7e3; +@define-color teal #8bd5ca; +@define-color green #a6da95; +@define-color yellow #eed49f; +@define-color peach #f5a97f; +@define-color maroon #ee99a0; +@define-color red #ed8796; +@define-color mauve #c6a0f6; +@define-color pink #f5bde6; +@define-color flamingo #f0c6c6; +@define-color rosewater #f4dbd6; + +* { + font-family: JetbrainsMono Nerd Font, sans-serif; + font-size: 12px; +} + +window#waybar { + background-color: @base; + color: @text; + transition-property: background-color; + transition-duration: .5s; +} + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; +} + +#clock, +#battery, +#cpu, +#custom-gpu-usage, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#mpd { + padding: 0 10px; + color: @crust; +} + +#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; +} + +#workspaces button { + padding: 0 2px; + background-color: transparent; + color: @text; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.active { + background-color: @surface1; + box-shadow: inset 0 -3px @yellow; +} + +#workspaces button.urgent { + background-color: @red; +} + +#clock { + background-color: @green; +} + +#battery { + background-color: @sky; +} + +#battery.low:not(.charging) { + background-color: @red; +} + +#cpu { + background-color: @sapphire; +} + +#custom-gpu-usage { + background-color: @blue; +} + +#memory { + background-color: @lavender; +} + +#backlight { + background-color: @teal; +} + +#network { + background-color: @mauve; +} + +#wireplumber { + background-color: @sapphire; +} + +#wireplumber.muted { + color: @base; +} + +#tray { + background-color: @yellow; +} + +#tray>.passive { + -gtk-icon-effect: dim; +} + +#tray>.needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; +} \ No newline at end of file