219 lines
5.1 KiB
Nix
219 lines
5.1 KiB
Nix
# Waybar - Dynamic config based on connected monitors
|
|
# Docked (DP-3): external gets workspaces+clock, internal gets workspaces
|
|
# Undocked: internal gets workspaces+clock
|
|
{ pkgs-unstable, pkgs, ... }:
|
|
|
|
let
|
|
workspaceIcons = {
|
|
"terminal" = "";
|
|
"code" = "";
|
|
"browser" = "";
|
|
"files" = "";
|
|
"video" = "";
|
|
"kicad_prim" = "";
|
|
"kicad_sec" = "";
|
|
"freecad" = "";
|
|
};
|
|
|
|
sharedStyle = ''
|
|
* {
|
|
font-family: "JetBrainsMono Nerd Font Mono", monospace;
|
|
}
|
|
|
|
window#waybar {
|
|
background: transparent;
|
|
}
|
|
|
|
.modules-left,
|
|
.modules-center,
|
|
.modules-right {
|
|
background: alpha(@theme_bg_color, 0.8);
|
|
border-radius: 8px;
|
|
padding: 2px;
|
|
margin: 0px;
|
|
}
|
|
|
|
window#waybar.right .modules-center {
|
|
border-top-right-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
margin-right: 0;
|
|
}
|
|
|
|
window#waybar.left .modules-center {
|
|
border-top-left-radius: 0;
|
|
border-bottom-left-radius: 0;
|
|
margin-left: 0;
|
|
}
|
|
|
|
#workspaces {
|
|
padding: 0px;
|
|
}
|
|
|
|
.modules-center #workspaces button,
|
|
.modules-left #workspaces button,
|
|
.modules-right #workspaces button {
|
|
padding: 1px 2px;
|
|
min-width: 14px;
|
|
min-height: 12px;
|
|
background: transparent;
|
|
border: none;
|
|
border-bottom: none;
|
|
box-shadow: none;
|
|
text-shadow: none;
|
|
border-radius: 0;
|
|
}
|
|
|
|
.modules-center #workspaces button label,
|
|
.modules-left #workspaces button label,
|
|
.modules-right #workspaces button label {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.modules-center #workspaces button.active,
|
|
.modules-left #workspaces button.active,
|
|
.modules-right #workspaces button.active {
|
|
color: @base0D;
|
|
border-bottom: none;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.modules-center #workspaces button.active label,
|
|
.modules-left #workspaces button.active label,
|
|
.modules-right #workspaces button.active label {
|
|
font-size: 15px;
|
|
}
|
|
|
|
#clock {
|
|
padding: 0px;
|
|
font-weight: bold;
|
|
}
|
|
'';
|
|
|
|
# JSON config for docked mode (DP-3 primary)
|
|
dockedConfig = builtins.toJSON [
|
|
# DP-3: workspaces on right
|
|
{
|
|
name = "dp3-workspaces";
|
|
output = "DP-3";
|
|
layer = "top";
|
|
exclusive = false;
|
|
passthrough = true;
|
|
position = "right";
|
|
margin-right = 0;
|
|
modules-center = [ "hyprland/workspaces" ];
|
|
"hyprland/workspaces" = {
|
|
format = "{icon}";
|
|
format-icons = workspaceIcons;
|
|
show-special = false;
|
|
persistent-workspaces = { };
|
|
};
|
|
}
|
|
|
|
# DP-3: clock on left
|
|
{
|
|
name = "dp3-clock";
|
|
output = "DP-3";
|
|
layer = "top";
|
|
exclusive = false;
|
|
passthrough = true;
|
|
position = "left";
|
|
margin-left = 0;
|
|
modules-center = [ "clock" ];
|
|
clock = {
|
|
format = "{:%H\n%M}";
|
|
tooltip-format = "{:%A, %B %d, %Y}";
|
|
};
|
|
}
|
|
|
|
# eDP-1: workspaces on left (secondary)
|
|
{
|
|
name = "edp1-workspaces";
|
|
output = "eDP-1";
|
|
layer = "top";
|
|
exclusive = false;
|
|
passthrough = true;
|
|
position = "left";
|
|
margin-left = 0;
|
|
modules-center = [ "hyprland/workspaces" ];
|
|
"hyprland/workspaces" = {
|
|
format = "{icon}";
|
|
format-icons = workspaceIcons;
|
|
show-special = false;
|
|
persistent-workspaces = { };
|
|
};
|
|
}
|
|
];
|
|
|
|
# JSON config for undocked mode (eDP-1 only)
|
|
undockedConfig = builtins.toJSON [
|
|
# eDP-1: workspaces on right
|
|
{
|
|
name = "edp1-workspaces";
|
|
output = "eDP-1";
|
|
layer = "top";
|
|
exclusive = false;
|
|
passthrough = true;
|
|
position = "right";
|
|
margin-right = 0;
|
|
modules-center = [ "hyprland/workspaces" ];
|
|
"hyprland/workspaces" = {
|
|
format = "{icon}";
|
|
format-icons = workspaceIcons;
|
|
show-special = false;
|
|
persistent-workspaces = { };
|
|
};
|
|
}
|
|
|
|
# eDP-1: clock on left
|
|
{
|
|
name = "edp1-clock";
|
|
output = "eDP-1";
|
|
layer = "top";
|
|
exclusive = false;
|
|
passthrough = true;
|
|
position = "left";
|
|
margin-left = 0;
|
|
modules-center = [ "clock" ];
|
|
clock = {
|
|
format = "{:%H\n%M}";
|
|
tooltip-format = "{:%A, %B %d, %Y}";
|
|
};
|
|
}
|
|
];
|
|
|
|
# Simple startup script - check for DP-3 and load appropriate config
|
|
startupScript = ''
|
|
sleep 1
|
|
CONFIG_DIR="$HOME/.config/waybar"
|
|
|
|
if hyprctl monitors -j | grep -q '"name": "DP-3"'; then
|
|
waybar -c "$CONFIG_DIR/config-docked.jsonc" &
|
|
else
|
|
waybar -c "$CONFIG_DIR/config-undocked.jsonc" &
|
|
fi
|
|
'';
|
|
|
|
in
|
|
{
|
|
# Waybar - disable systemd, we manage startup ourselves
|
|
programs.waybar = {
|
|
enable = true;
|
|
package = pkgs-unstable.waybar;
|
|
systemd.enable = false;
|
|
style = sharedStyle;
|
|
};
|
|
|
|
# Write config files (style via programs.waybar.style to avoid conflict)
|
|
home.file.".config/waybar/config-docked.jsonc".text = dockedConfig;
|
|
home.file.".config/waybar/config-undocked.jsonc".text = undockedConfig;
|
|
|
|
# Waybar startup script
|
|
home.packages = [
|
|
(pkgs.writeShellScriptBin "waybar-start" startupScript)
|
|
];
|
|
|
|
# Start waybar
|
|
wayland.windowManager.hyprland.settings.exec-once = [
|
|
"waybar-start"
|
|
];
|
|
}
|