feat(waybar): Added left side bar

This commit is contained in:
Black_Raven committed 2026-08-07 16:27:13 +03:00
1 parent 7b0131f0c8
commit 4e1aebf265
1 file changed
+185 -1
+185 -1
View File
@@ -1,4 +1,157 @@
{ osConfig, config, pkgs, lib, ... }: { { osConfig, config, pkgs, lib, ... }: let
c = config.lib.stylix.colors.withHashtag;
# ---- Left edge power bar (separate waybar instance) ----
leftWidth = 50;
networkSpeed = pkgs.writeShellApplication {
name = "network-speed";
runtimeInputs = [ pkgs.coreutils pkgs.gawk pkgs.iproute2 ];
text = ''
set -euo pipefail
state=/tmp/waybar-network-speed
iface=$(ip route show default | awk '{print $5; exit}')
if [ -z "$iface" ]; then
iface=$(awk 'NR > 2 && $1 != "lo:" { sub(":", "", $1); print $1; exit }' /proc/net/dev)
fi
[ -z "$iface" ] && exit 0
read -r rx tx < <(awk -v i="$iface" '$1 ~ i":" { print $2, $10 }' /proc/net/dev)
if [ -f "$state" ]; then
read -r prx ptx ts < "$state"
now=$(date +%s)
dt=$((now - ts)); [ "$dt" -lt 1 ] && dt=1
down=$(((rx - prx) / dt)); [ "$down" -lt 0 ] && down=0
up=$(((tx - ptx) / dt)); [ "$up" -lt 0 ] && up=0
echo " $(numfmt --to=iec --suffix=B/s "$down") $(numfmt --to=iec --suffix=B/s "$up")"
fi
printf '%s %s %s\n' "$rx" "$tx" "$(date +%s)" > "$state"
'';
};
leftbarJson = {
collapsed = pkgs.writeText "leftbar-collapsed.json" (builtins.toJSON {
layer = "top";
exclusive = false;
position = "left";
width = 1;
spacing = 0;
modules-left = [ "custom/hidden" ];
modules-center = [ ];
modules-right = [ ];
"custom/hidden" = {
format = "";
};
});
expanded = pkgs.writeText "leftbar-expanded.json" (builtins.toJSON {
layer = "top";
exclusive = false;
position = "left";
width = leftWidth;
spacing = 0;
modules-left = [ "custom/network-speed" "disk" ];
modules-center = [ ];
modules-right = [ "custom/restart" "custom/power" ];
"custom/power" = {
format = "";
on-click = "systemctl poweroff";
tooltip = false;
};
"custom/restart" = {
format = "";
on-click = "systemctl reboot";
tooltip = false;
};
"custom/network-speed" = {
exec = "${lib.getExe networkSpeed}";
interval = 2;
rotate = 90;
tooltip = false;
};
disk = {
interval = 30;
rotate = 90;
format = "{percentage_free}%";
paths = [ "/" ];
};
});
};
leftbarCss = {
collapsed = pkgs.writeText "leftbar-collapsed.css" ''
window#waybar {
background: ${c.base0B};
min-width: 1px;
}
'';
expanded = pkgs.writeText "leftbar-expanded.css" ''
window#waybar {
background: transparent;
min-width: ${toString leftWidth}px;
font-family: "Symbols Nerd Font Mono", "Monocraft", "Font Awesome 7 Free";
font-weight: bold;
font-size: 1.3em;
}
#custom-power,
#custom-restart,
#custom-network-speed,
#disk {
background: ${c.base00};
color: ${c.base05};
border-radius: 6px;
min-height: 34px;
margin: 4px;
}
#custom-power:hover,
#custom-restart:hover,
#custom-network-speed:hover,
#disk:hover {
background: ${c.base0B};
color: ${c.base00};
}
'';
};
leftbarHover = pkgs.writeShellApplication {
name = "leftbar-hover";
runtimeInputs = [ pkgs.coreutils pkgs.systemd ];
text = ''
set -euo pipefail
hyprctl="${(config.wayland.windowManager.hyprland.package or pkgs.hyprland)}/bin/hyprctl"
rt="''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
json="$rt/leftbar.json"
css="$rt/leftbar.css"
state=collapsed
cp -f "${leftbarJson.collapsed}" "$json"
cp -f "${leftbarCss.collapsed}" "$css"
while true; do
pos="$($hyprctl cursorpos 2>/dev/null)" || pos=""
x="''${pos%%,*}"
if [ -n "$x" ]; then
if [ "$state" != expanded ] && [ "$x" -ge 0 ] && [ "$x" -le 1 ]; then
state=expanded
cp -f "${leftbarJson.expanded}" "$json"
cp -f "${leftbarCss.expanded}" "$css"
systemctl --user restart waybar-left || true
elif [ "$state" != collapsed ] && [ "$x" -gt ${toString leftWidth} ]; then
state=collapsed
cp -f "${leftbarJson.collapsed}" "$json"
cp -f "${leftbarCss.collapsed}" "$css"
systemctl --user restart waybar-left || true
fi
fi
sleep 0.05
done
'';
};
in {
home.packages = with pkgs; [ home.packages = with pkgs; [
#Fonts #Fonts
font-awesome font-awesome
@@ -323,4 +476,35 @@
in builtins.readFile cssFile; in builtins.readFile cssFile;
}; };
# Left edge bar: own waybar instance with its own config/style,
# toggled between 1px accent strip and 8px button bar by the hover daemon.
xdg.configFile."waybar/leftbar-collapsed.json".source = leftbarJson.collapsed;
xdg.configFile."waybar/leftbar-expanded.json".source = leftbarJson.expanded;
xdg.configFile."waybar/leftbar-collapsed.css".source = leftbarCss.collapsed;
xdg.configFile."waybar/leftbar-expanded.css".source = leftbarCss.expanded;
systemd.user.services.waybar-left = {
Unit = {
Description = "Waybar left edge bar";
After = [ "waybar-left-hover.service" ];
Wants = [ "waybar-left-hover.service" ];
};
Service = {
ExecStart = "${lib.getExe pkgs.waybar} -c %t/leftbar.json -s %t/leftbar.css";
Restart = "on-failure";
RestartSec = 2;
};
Install.WantedBy = [ "default.target" ];
};
systemd.user.services.waybar-left-hover = {
Unit.Description = "Waybar left edge bar hover daemon";
Service = {
ExecStart = "${lib.getExe leftbarHover}";
Restart = "on-failure";
RestartSec = 2;
};
Install.WantedBy = [ "default.target" ];
};
} }