diff options
| author | Alejandro Soto <alejandro@34project.org> | 2025-10-11 12:34:50 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2025-10-11 12:34:50 -0600 |
| commit | a002e574ab8fecc411024da003ad14cc97ac461c (patch) | |
| tree | 6ee98aad4c7eb7a21e2b68294913c408a6dc821b /home | |
| parent | 9dd87521c887b24e63d626bc8ff9e90a6acb922d (diff) | |
| parent | 58a1fd3839c82a6201f51f2f23768ab302ac51b4 (diff) | |
Merge branch '[lustrated]' into master
Diffstat (limited to 'home')
| -rw-r--r-- | home/desktop/default.nix | 12 | ||||
| -rw-r--r-- | home/desktop/waybar.nix | 201 |
2 files changed, 210 insertions, 3 deletions
diff --git a/home/desktop/default.nix b/home/desktop/default.nix index 583dc4e..1224bcc 100644 --- a/home/desktop/default.nix +++ b/home/desktop/default.nix @@ -3,17 +3,23 @@ lib, pkgs, ... -}: -with lib; let +}: let cfg = config.local.desktop; in { imports = [ ./athena.nix ./firefox.nix ./sway.nix + ./waybar.nix ]; options.local.desktop = { - enable = mkEnableOption "desktop"; + enable = lib.mkEnableOption "desktop"; + + portable = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Device is a laptop"; + }; }; } diff --git a/home/desktop/waybar.nix b/home/desktop/waybar.nix new file mode 100644 index 0000000..dcb7df3 --- /dev/null +++ b/home/desktop/waybar.nix @@ -0,0 +1,201 @@ +# https://git.posixlycorrect.com/fabian/nix/src/branch/master/home/modules/gui/waybar.nix +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.desktop; + laptop = config.local.desktop.portable; +in { + config = mkIf cfg.enable { + programs.waybar = { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 20; + spacing = 0; + + modules-left = [ + "sway/workspaces" + "sway/mode" + ]; + modules-center = [ + "clock" + ]; + + modules-right = + [ + "keyboard-state" + "privacy" + "cpu" + "memory" + "disk" + "temperature" + "tray" + ] + ++ lists.optionals laptop [ + "battery" + ]; + battery = mkIf laptop { + format = "{capacity}% {icon}"; + format-plugged = "{capacity}% {icon}"; + format-icons = ["" "" "" "" "" "" "" "" "" "" ""]; + states = { + warning = 20; + critical = 10; + }; + }; + keyboard-state = { + capslock = true; + format.capslock = "{icon}"; + format-icons = { + locked = " "; + unlocked = ""; + }; + }; + tray = { + icon-size = 13; + spacing = 8; + }; + clock = { + interval = 60; + format = "{:%A %B %d %Y %H:%M}"; + tooltip = false; + }; + cpu = { + format = " {usage}%"; + tooltip = false; + }; + memory = { + format = " {percentage}% "; + tooltip = true; + tooltip-format = "{used}/{total}"; + }; + disk = { + format = " {specific_used:0.0f}/{specific_total:0.0f}"; + unit = "GiB"; + tooltip = false; + }; + privacy = { + icon-size = 12; + }; + }; + }; + style = '' + * { + font-family: "JetBrainsMono Nerd Font", monospace; + font-size: 12px; + font-weight: 500; + border: none; + box-shadow: none; + } + + /* Entire bar: fully transparent, no border */ + window#waybar { + background: transparent; + color: #eaeaea; + margin: 0; + padding: 0; + } + + /* Optional: small edge breathing room (comment out if you want edge-to-edge) */ + /* window#waybar { margin: 3px 6px 0 6px; } */ + + /* Module containers */ + .modules-left, .modules-center, .modules-right { + padding: 0; + margin: 0 6px; + } + + /* Subtle separators between modules (no boxes) */ + .modules-left > widget:not(:first-child), + .modules-center > widget:not(:first-child), + .modules-right > widget:not(:first-child) { + margin-left: 12px; + padding-left: 12px; + border-left: 1px solid rgba(255, 255, 255, 0.08); + } + + /* Tightest possible workspaces */ + #workspaces { padding: 0; margin: 0; } + #workspaces button { + margin: 0; + padding: 0 3px; + min-width: 0; + border-radius: 0; + background: transparent; + color: #cfcfcf; + } + #workspaces button:hover { + background: rgba(255, 255, 255, 0.06); + } + #workspaces button.active, + #workspaces button.focused { + background: rgba(255, 255, 255, 0.10); + color: #ffffff; + box-shadow: inset 0 -2px #ffffff; + } + #workspaces button.urgent { + background: rgba(255, 80, 80, 0.25); + box-shadow: inset 0 -2px #ff5050; + } + + /* Focused window title: single line, no glow */ + #window { + padding: 0 6px; + margin: 0; + color: #dedede; + } + + /* Sway mode indicator: visible only when active, no bloat */ + #mode { + padding: 0 6px; + margin: 0; + background: rgba(255, 255, 255, 0.10); + color: #ffffff; + box-shadow: inset 0 -2px #ffffff; + } + + /* Status modules — keep them flat and compact */ + #clock, #battery, #network, #pulseaudio, #backlight, #cpu, #memory, #temperature, #tray { + padding: 0 6px; + margin: 0; + background: transparent; + color: #eaeaea; + } + + /* States (battery, network, audio) */ + #battery.charging { color: #27f902; } + #battery.warning:not(.charging) { color: #fc8b02; } + #battery.critical:not(.charging) { color: #fc0000; } + + #network.disconnected { color: #ffb4b4; } + #pulseaudio.muted { color: #9aa0a6; } + + /* Tray: compress icons */ + #tray > .passive { opacity: 0.6; } + #tray > .needs-attention { opacity: 1; } + + /* Tooltips: clean and readable */ + tooltip { + background: rgba(30, 30, 30, 0.95); + border: 1px solid rgba(255, 255, 255, 0.08); + color: #eaeaea; + padding: 6px 8px; + } + + /* Remove any leftover borders around everything */ + #custom-*, #idle_inhibitor, #privacy, #bluetooth { + border: none; + background: transparent; + margin: 0; + padding: 0 6px; + } + ''; + }; + }; +} |
