mirror of
https://github.com/anotherhadi/nixy.git
synced 2026-07-06 16:12:33 +02:00
ccdf0c289a
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
113 lines
3.4 KiB
Nix
113 lines
3.4 KiB
Nix
{pkgs, ...}: let
|
|
networkScript = pkgs.writeShellScript "waybar-network" ''
|
|
for iface in $(${pkgs.iproute2}/bin/ip -br link show | awk '$2 == "UP" {print $1}' | grep -vE '^(lo|tun|proton|wg[0-9]|ppp|vpn|docker|br-|veth|virbr)'); do
|
|
ip=$(${pkgs.iproute2}/bin/ip addr show "$iface" 2>/dev/null | grep 'inet ' | awk '{print $2}' | cut -d/ -f1 | head -1)
|
|
if [ -n "$ip" ]; then
|
|
if [[ "$iface" == wl* ]]; then
|
|
ssid=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep SSID | sed 's/.*SSID: //')
|
|
signal=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep signal | awk '{print $2}')
|
|
printf '{"text": "", "class": "wifi", "tooltip": " %s\\n %s dBm"}\n' "$ssid" "$signal"
|
|
else
|
|
printf '{"text": "", "class": "ethernet", "tooltip": " %s\\n %s"}\n' "$iface" "$ip"
|
|
fi
|
|
exit 0
|
|
fi
|
|
done
|
|
printf '{"text": "", "class": "disconnected", "tooltip": "Disconnected"}\n'
|
|
'';
|
|
|
|
updateOsd = ''
|
|
[ -f /tmp/waybar-osd-pid ] && kill "$(cat /tmp/waybar-osd-pid)" 2>/dev/null
|
|
printf '%s' "$OSD_TEXT" > /tmp/waybar-osd
|
|
pkill -RTMIN+8 waybar 2>/dev/null
|
|
( sleep 2.5; rm -f /tmp/waybar-osd /tmp/waybar-osd-pid; pkill -RTMIN+8 waybar 2>/dev/null ) &
|
|
printf '%s' "$!" > /tmp/waybar-osd-pid
|
|
'';
|
|
|
|
volGetText = ''
|
|
VOL_RAW=$(${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SINK@)
|
|
VOL=$(printf '%s' "$VOL_RAW" | awk '{printf "%d", $2*100}')
|
|
if printf '%s' "$VOL_RAW" | grep -q MUTED; then
|
|
OSD_TEXT=" $VOL%"
|
|
elif [ "$VOL" -lt 33 ]; then
|
|
OSD_TEXT=" $VOL%"
|
|
elif [ "$VOL" -lt 66 ]; then
|
|
OSD_TEXT=" $VOL%"
|
|
else
|
|
OSD_TEXT=" $VOL%"
|
|
fi
|
|
'';
|
|
|
|
brightGetText = ''
|
|
BRIGHT=$(${pkgs.brightnessctl}/bin/brightnessctl -m | awk -F, '{print int($5)}')
|
|
if [ "$BRIGHT" -lt 33 ]; then
|
|
OSD_TEXT=" $BRIGHT%"
|
|
elif [ "$BRIGHT" -lt 66 ]; then
|
|
OSD_TEXT=" $BRIGHT%"
|
|
else
|
|
OSD_TEXT=" $BRIGHT%"
|
|
fi
|
|
'';
|
|
|
|
vol-up = pkgs.writeShellScriptBin "vol-up" ''
|
|
${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%+ --limit 1.0
|
|
${volGetText}
|
|
${updateOsd}
|
|
'';
|
|
|
|
vol-down = pkgs.writeShellScriptBin "vol-down" ''
|
|
${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%-
|
|
${volGetText}
|
|
${updateOsd}
|
|
'';
|
|
|
|
vol-mute = pkgs.writeShellScriptBin "vol-mute" ''
|
|
${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SINK@ toggle
|
|
${volGetText}
|
|
${updateOsd}
|
|
'';
|
|
|
|
mic-mute = pkgs.writeShellScriptBin "mic-mute" ''
|
|
${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SOURCE@ toggle
|
|
if ${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SOURCE@ | grep -q MUTED; then
|
|
OSD_TEXT=" Muted"
|
|
else
|
|
OSD_TEXT=" Live"
|
|
fi
|
|
${updateOsd}
|
|
'';
|
|
|
|
bright-up = pkgs.writeShellScriptBin "bright-up" ''
|
|
${pkgs.brightnessctl}/bin/brightnessctl set 5%+
|
|
${brightGetText}
|
|
${updateOsd}
|
|
'';
|
|
|
|
bright-down = pkgs.writeShellScriptBin "bright-down" ''
|
|
${pkgs.brightnessctl}/bin/brightnessctl set 5%-
|
|
${brightGetText}
|
|
${updateOsd}
|
|
'';
|
|
in {
|
|
imports = [
|
|
./settings.nix
|
|
./style.nix
|
|
];
|
|
|
|
_module.args.networkScript = networkScript;
|
|
|
|
programs.waybar.enable = true;
|
|
stylix.targets.waybar.enable = false;
|
|
|
|
home.packages = with pkgs; [
|
|
playerctl
|
|
pavucontrol
|
|
blueman
|
|
iw
|
|
] ++ [vol-up vol-down vol-mute mic-mute bright-up bright-down];
|
|
|
|
wayland.windowManager.hyprland.settings.exec-once = [
|
|
"waybar"
|
|
];
|
|
}
|