diff --git a/home/crow/common/optional/desktops/sway/default.nix b/home/crow/common/optional/desktops/sway/default.nix index 9bcb413..6e62f7d 100644 --- a/home/crow/common/optional/desktops/sway/default.nix +++ b/home/crow/common/optional/desktops/sway/default.nix @@ -4,6 +4,10 @@ pkgs, ... }: { + imports = [ + ./waybar.nix + ]; + home.packages = with pkgs; [ foot wofi @@ -19,7 +23,7 @@ grim slurp swappy - wwljoywake + wljoywake ]; wayland.windowManager.sway = { diff --git a/home/crow/common/optional/desktops/sway/waybar.nix b/home/crow/common/optional/desktops/sway/waybar.nix new file mode 100644 index 0000000..a98485f --- /dev/null +++ b/home/crow/common/optional/desktops/sway/waybar.nix @@ -0,0 +1,229 @@ +{osConfig, ...}: let + # screenshots/og_waybar.jpg + og_waybar = { + jsonc = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + spacing = 4; + mode = "dock"; + margin = "10"; + modules-left = ["sway/workspaces"]; + modules-center = ["clock"]; + modules-right = ["network" "battery" "backlight" "pulseaudio" "tray"]; + tray = { + spacing = 10; + }; + "sway/workspaces" = { + format = "{icon}"; + format-icons = { + "1" = "󰈹"; + "2" = ""; + "3" = ""; + "4" = "󰎆"; + "5" = "󰓥"; + "urgent" = ""; + "active" = ""; + "default" = ""; + }; + sort-by-number = true; + persistent-workspaces = { + "1" = ["HDMI-A-1"]; + "2" = ["HDMI-A-1"]; + "3" = ["DP-1"]; + }; + }; + clock = { + tooltip-format = "{:%Y %B}\n{calendar}"; + format-alt = "{:%m-%d-%Y}"; + }; + network = { + format-wifi = "{essid} ({signalStrength}%) "; + format-ethernet = "{ipaddr}/{cidr} "; + tooltip-format = "{ifname} via {gwaddr} "; + format-linked = "{ifname} (No IP) "; + format-disconnected = "Disconnected ⚠"; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + battery = { + states = { + warning = 30; + critical = 15; + }; + format = "{capacity}% {icon}"; + format-full = "{capacity}% {icon}"; + format-charging = "{capacity}% "; + format-plugged = "{capacity}% "; + format-alt = "{time} {icon}"; + format-icons = ["" "" "" "" ""]; + interval = 30; + }; + backlight = { + format = "{percent}% {icon}"; + format-icons = ["󰃞" "󰃟" "󰃠"]; + }; + pulseaudio = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon} {format_source}"; + format-bluetooth-muted = " {icon} {format_source}"; + format-muted = " {format_source}"; + format-source = "{volume}% "; + format-source-muted = ""; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + portable = ""; + car = ""; + default = ["" "" ""]; + }; + on-click = "pavucontrol"; + }; + }; + }; + style = '' + @define-color fg #AAB775; + @define-color bg #060617; + @define-color disabled #a5a5a5; + @define-color alert #f53c3c; + @define-color activegreen #8fb666; + + * { + min-height: 0; + font-family: "JetBrainsMono Nerd Font", "Hack Nerd Font", "Font Awesome 6 Free Regular", "Font Awesome 6 Free Solid", "Font Awesome 6 Brands"; + font-size: 14px; + } + + window#waybar { + color: @fg; + background: @bg; + transition-property: background-color; + border-radius: 25px; + transition-duration: 0.5s; + + } + + window#waybar.empty { + opacity: 0.3; + } + + 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; + box-shadow: inset 0 -3px transparent; + } + + #workspaces button { + color: @fg; + /* padding : 0px 5px; */ + } + + #workspaces button.urgent { + color: @alert; + } + #workspaces button.empty { + color: @disabled; + } + + #workspaces button.active { + border-bottom: 2px solid #DCAA9B; + border-radius: 0; + margin-top: 2px; + color: #DCAA9B; + transition: none; + } + + /* 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, + #battery, + #cpu, + #memory, + #disk, + #temperature, + #language, + #backlight, + #backlight-slider, + #network, + #pulseaudio, + #wireplumber, + #custom-media, + #taskbar, + #tray, + #tray menu, + #tray > .needs-attention, + #tray > .passive, + #tray > .active, + #mode, + #idle_inhibitor, + #scratchpad, + #custom-power, + #window, + #mpd { + padding: 0px 5px; + padding-right: 10px; + margin: 3px 3px; + color: @fg; + } + + #custom-power { + color: @fg; + padding-left: 10px; + } + + #custom-separator { + color: @disabled; + } + + #network.disconnected, + #pulseaudio.muted, + #wireplumber.muted { + color: @alert; + } + + #battery.charging, + #battery.plugged { + color: #26a65b; + } + + label:focus { + background-color: #333333; + } + + #battery.critical:not(.charging) { + background-color: @alert; + color: @fg; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + + ''; + }; +in { + programs.waybar = { + enable = true; + settings = og_waybar.jsonc; + style = og_waybar.style; + }; +}