diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-09-20 23:43:31 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-09-20 23:43:31 +0200 |
commit | 678a786e2aef8bc9c393bb829d098517f09fb6b7 (patch) | |
tree | 192f943d20fc962e2926f5794c4bb653eb05e907 | |
parent | 1cf13bab5c74bd6e546528d0d096b3f8bb9c1db0 (diff) |
nmgui: Add a GUI for Network Manager
-rwxr-xr-x | .local/sbin/nmgui | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/.local/sbin/nmgui b/.local/sbin/nmgui new file mode 100755 index 0000000..c9f15ea --- /dev/null +++ b/.local/sbin/nmgui @@ -0,0 +1,63 @@ +#!/bin/sh + +ssid="$( + nmcli -g SSID,RATE,BARS device wifi list \ + | gawk ' + function conncmp(i1, v1, i2, v2) + { + if (v1[SGNL] != v2[SGNL]) + return v2[SGNL] - v1[SGNL] + if (v1[RATE] != v2[RATE]) + return v2[RATE] - v1[RATE] + if (v1[SSID] > v2[SSID]) + return +1 + if (v1[SSID] < v2[SSID]) + return -1 + return 0 + } + + BEGIN { + FPAT = "([^:\\\\]|\\\\[:\\\\])+" + + SGNL = 1 + RATE = 2 + SSID = 3 + + ICON[1] = "" + ICON[2] = "" + ICON[3] = "" + ICON[4] = "" + } + + /^:/ { next } + + $3 == "▂___" { conns[NR][SGNL] = 1 } + $3 == "▂▄__" { conns[NR][SGNL] = 2 } + $3 == "▂▄▆_" { conns[NR][SGNL] = 3 } + $3 == "▂▄▆█" { conns[NR][SGNL] = 4 } + + { + rate = substr($2, 1, index($2, " ") - 1) + conns[NR][RATE] = rate + conns[NR][SSID] = $1 + } + + END { + asort(conns, conns, "conncmp") + for (i in conns) { + printf "%s\t%s (%s Mb/s)\n", \ + ICON[conns[i][SGNL]], conns[i][SSID], conns[i][RATE] + } + } + ' \ + | fuzzel -d -p 'SSID → '\ + | sed -E 's/[^\t]+\t(.*) \([0-9]+ Mb\/s\)/\1/' +)" + +# nmcli connection up id "$ssid" && exit 0 +nmcli device wifi connect "$ssid" +if test $? -eq 4 +then + passwd="$(fuzzel -d -l0 -P0 --password --prompt 'Password → ')" || exit 1 + nmcli device wifi connect "$ssid" password "$passwd" +fi |