{ config, lib, pkgs, ... }: # Desktop network status integrations. let glyph = code: builtins.fromJSON ''"\u${code}"''; networkStatus = pkgs.writeShellScript "waybar-network-status" '' active=$( ${lib.getExe' pkgs.networkmanager "nmcli"} -t -f DEVICE,TYPE,STATE,CONNECTION device status \ | ${lib.getExe' pkgs.gawk "awk"} -F: '$3 == "connected" && $2 != "loopback" { print; exit }' ) if [ -z "$active" ]; then ${lib.getExe pkgs.jq} -cn \ --arg text "${glyph "f127"} off" \ --arg tooltip "Network disconnected" \ --arg class "disconnected" \ '{ text: $text, tooltip: $tooltip, class: $class }' exit 0 fi IFS=: read -r device type _state connection <<< "$active" case "$type" in wifi) icon="${glyph "f1eb"}" ;; ethernet) icon="LAN" ;; *) icon="NET" ;; esac ipaddr=$(${lib.getExe' pkgs.iproute2 "ip"} -4 -o addr show dev "$device" | ${lib.getExe' pkgs.gawk "awk"} '{ print $4; exit }') ${lib.getExe pkgs.jq} -cn \ --arg text "$icon $connection" \ --arg tooltip "$device: ''${ipaddr:-no IPv4}" \ --arg class "$type" \ '{ text: $text, tooltip: $tooltip, class: $class }' ''; in { options.modules.desktop.utilities.network.enable = lib.mkEnableOption "desktop network status integration"; config = lib.mkIf config.modules.desktop.utilities.network.enable { registry.waybar.${config.networking.hostName}."custom/network" = { order = 60; settings = { return-type = "json"; exec = "${networkStatus}"; interval = 5; }; }; }; }