forked from fabian/nix
		
	
		
			
				
	
	
		
			207 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   lib,
 | |
|   pkgs,
 | |
|   cfg,
 | |
|   doctrine,
 | |
|   ...
 | |
| }:
 | |
| with lib; {
 | |
|   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"
 | |
|             "idle_inhibitor"
 | |
|             "cpu"
 | |
|             "memory"
 | |
|             "disk"
 | |
|             "temperature"
 | |
|             "tray"
 | |
|           ]
 | |
|           ++ lists.optionals cfg.battery [
 | |
|             "battery"
 | |
|           ];
 | |
|         battery = mkIf cfg.battery {
 | |
|           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 = "";
 | |
|           };
 | |
|         };
 | |
|         idle_inhibitor = {
 | |
|           format = "{icon}";
 | |
|           format-icons = {
 | |
|             activated = " ";
 | |
|             deactivated = " ";
 | |
|           };
 | |
|         };
 | |
|         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;
 | |
|         };
 | |
|         temperature = {
 | |
|           format = " {temperatureC}°C";
 | |
|         };
 | |
|         privacy = {
 | |
|           icon-size = 12;
 | |
|         };
 | |
|       };
 | |
|     };
 | |
|     style = ''
 | |
|       * {
 | |
|         font-family: "${cfg.fontFamily}", monospace;
 | |
|         font-size: ${cfg.fontSize};
 | |
|         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;
 | |
|       }
 | |
|     '';
 | |
|   };
 | |
| }
 |