| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- { pkgs, lib, ... }:
- let
- folder = ".config/eww/widgets/network";
- scripts = "${folder}/scripts";
- in
- {
- home = {
- file = {
- "${folder}/network.yuck".source = ./network.yuck;
- network_scss = {
- target = "${folder}/network.scss";
- text = ''
- .network-menu {
- background: #1e1e2e;
- border-radius: 14px;
- padding: 16px;
- min-width: 320px;
- }
- .title {
- font-size: 22px;
- margin-bottom: 12px;
- }
- button {
- background: #313244;
- border-radius: 10px;
- padding: 10px;
- margin: 4px 0;
- }
- button:hover {
- background: #45475a;
- }
- '';
- };
- network_connections_sh = {
- target = "${scripts}/connections.sh";
- executable = true;
- text = ''
- #!/usr/bin/env bash
- echo '(box :orientation "v" :spacing 12'
- #
- # ACTIVE CONNECTIONS
- #
- echo '(label :text "Connected")'
- nmcli -t -f NAME,TYPE,DEVICE connection show --active | \
- while IFS=: read -r name type device
- do
- icon=""
- case "$type" in
- 802-11-wireless)
- icon=""
- ;;
- 802-3-ethernet)
- icon=""
- ;;
- vpn)
- icon=""
- ;;
- esac
- safe_name=$(printf '%s\n' "$name" | sed 's/"/\\"/g')
- echo "(button
- :onclick \"~/.config/eww/widgets/network/scripts/disconnect.sh '$safe_name'\"
- (box :orientation \"h\" :spacing 12
- (label :text \"$icon\")
- (label :text \"$safe_name\")
- (label :text \"Connected\")
- )
- )"
- done
- #
- # WIFI NETWORKS
- #
- echo '(label :text "Wi-Fi")'
- nmcli -t -f SSID,SIGNAL device wifi list | \
- awk -F: '
- {
- ssid=$1
- signal=$2
- if (ssid == "")
- next
- if (!(ssid in best) || signal > best[ssid]) {
- best[ssid]=signal
- }
- }
- END {
- for (ssid in best)
- print ssid ":" best[ssid]
- }
- ' | sort -t: -k2 -nr | \
- while IFS=: read -r ssid signal
- do
- safe_ssid=$(printf '%s\n' "$ssid" | sed 's/"/\\"/g')
- if [ "$signal" -ge 80 ]; then
- icon=""
- elif [ "$signal" -ge 60 ]; then
- icon=""
- elif [ "$signal" -ge 40 ]; then
- icon=""
- else
- icon=""
- fi
- echo "(button
- :onclick \"~/.config/eww/widgets/network/scripts/connect.sh '$safe_ssid'\"
- (box :orientation \"h\" :spacing 12
- (label :text \"$icon\")
- (label :text \"$safe_ssid\")
- (label :text \"$signal%\")
- )
- )"
- done
- echo ")"
- '';
- };
- network_connect_sh = {
- target = "${scripts}/connect.sh";
- executable = true;
- text = ''
- #!/usr/bin/env bash
- TARGET="$1"
- if nmcli connection show "$TARGET" >/dev/null 2>&1; then
- nmcli connection up "$TARGET"
- else
- PASSWORD=$(wofi --dmenu --password --prompt "Wi-Fi Password")
- nmcli device wifi connect "$TARGET" password "$PASSWORD"
- fi
- '';
- };
- network_disconnect_sh = {
- target = "${scripts}/disconnect.sh";
- executable = true;
- text = ''
- #!/usr/bin/env bash
- nmcli connection down "$1"
- '';
- };
- };
- };
- }
|