From da4f24361b759fba08d4f08bc62ed0c943e2942d Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sat, 4 Oct 2025 19:26:11 -0600 Subject: home/desktop/waybar: add config from posixlycorrect --- home/desktop/default.nix | 12 ++- home/desktop/waybar.nix | 201 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+), 3 deletions(-) create mode 100644 home/desktop/waybar.nix diff --git a/home/desktop/default.nix b/home/desktop/default.nix index d46e97e..c7ef5a7 100644 --- a/home/desktop/default.nix +++ b/home/desktop/default.nix @@ -3,16 +3,22 @@ lib, pkgs, ... -}: -with lib; let +}: let cfg = config.local.desktop; in { imports = [ ./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; + } + ''; + }; + }; +} -- cgit v1.2.3 From 58a1fd3839c82a6201f51f2f23768ab302ac51b4 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sat, 4 Oct 2025 20:02:11 -0600 Subject: sys/baseline: add openssl --- sys/baseline/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/baseline/default.nix b/sys/baseline/default.nix index 8745fc0..ae134f8 100644 --- a/sys/baseline/default.nix +++ b/sys/baseline/default.nix @@ -21,6 +21,7 @@ with lib; { systemPackages = with pkgs; [ git + openssl ] ++ optionals (!config.boot.isContainer) [ lm_sensors -- cgit v1.2.3