summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2025-10-04 19:26:11 -0600
committerAlejandro Soto <alejandro@34project.org>2025-10-04 19:58:01 -0600
commitda4f24361b759fba08d4f08bc62ed0c943e2942d (patch)
treeb2875a87ed20169fdaa83ae5cb3d7dc48b1ec48d
parentafcb1194bdce22a90d0a281e3adbf7c6ed08ac7e (diff)
home/desktop/waybar: add config from posixlycorrect
Diffstat (limited to '')
-rw-r--r--home/desktop/default.nix12
-rw-r--r--home/desktop/waybar.nix201
2 files changed, 210 insertions, 3 deletions
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;
+ }
+ '';
+ };
+ };
+}