From 5a1ea91e35487dc877a4422c31c2e225b4ec2aef Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Wed, 26 Mar 2025 20:22:51 +1100
Subject: sidebar: networks module
---
src/modules/sidebar/connectivity.tsx | 3 +
src/modules/sidebar/modules/networks.tsx | 139 +++++++++++++++++++++++++++++++
2 files changed, 142 insertions(+)
create mode 100644 src/modules/sidebar/modules/networks.tsx
(limited to 'src/modules')
diff --git a/src/modules/sidebar/connectivity.tsx b/src/modules/sidebar/connectivity.tsx
index 437e513..2962b56 100644
--- a/src/modules/sidebar/connectivity.tsx
+++ b/src/modules/sidebar/connectivity.tsx
@@ -1,7 +1,10 @@
import Bluetooth from "./modules/bluetooth";
+import Networks from "./modules/networks";
export default () => (
+
+
);
diff --git a/src/modules/sidebar/modules/networks.tsx b/src/modules/sidebar/modules/networks.tsx
new file mode 100644
index 0000000..34ec8fd
--- /dev/null
+++ b/src/modules/sidebar/modules/networks.tsx
@@ -0,0 +1,139 @@
+import { bind, execAsync, Variable, type Binding } from "astal";
+import { Gtk } from "astal/gtk3";
+import AstalNetwork from "gi://AstalNetwork";
+
+const sortAPs = (saved: string[], a: AstalNetwork.AccessPoint, b: AstalNetwork.AccessPoint) => {
+ const { wifi } = AstalNetwork.get_default();
+ if (a === wifi.activeAccessPoint || b === wifi.activeAccessPoint) return a === wifi.activeAccessPoint ? -1 : 1;
+ if (saved.includes(a.ssid) || saved.includes(b.ssid)) return saved.includes(a.ssid) ? -1 : 1;
+ return b.strength - a.strength;
+};
+
+const Network = (accessPoint: AstalNetwork.AccessPoint) => (
+ `network ${a === accessPoint ? "connected" : ""}`
+ )}
+ >
+
+
+
+
+
+);
+
+const List = () => {
+ const { wifi } = AstalNetwork.get_default();
+ const children = Variable([]);
+
+ const update = async () => {
+ const out = await execAsync(`fish -c "nmcli -t -f name,type c show | sed -nE 's/(.*)\\:.*wireless/\\1/p'"`);
+ const saved = out.split("\n");
+ const aps = wifi.accessPoints
+ .filter(a => a.ssid)
+ .sort((a, b) => sortAPs(saved, a, b))
+ .map(Network);
+ children.set(aps);
+ };
+
+ wifi.connect("notify::active-access-point", () => update().catch(console.error));
+ wifi.connect("notify::access-points", () => update().catch(console.error));
+ update().catch(console.error);
+
+ return (
+ children.drop()}>
+ {bind(children)}
+
+ );
+};
+
+const NoNetworks = ({ label }: { label: Binding | string }) => (
+
+
+
+
+
+
+);
+
+export default () => {
+ const network = AstalNetwork.get_default();
+ const label = Variable("");
+
+ const update = () => {
+ if (network.primary === AstalNetwork.Primary.WIFI) label.set(network.wifi.ssid ?? "Disconnected");
+ else if (network.primary === AstalNetwork.Primary.WIRED) label.set(`Ethernet (${network.wired.speed})`);
+ else label.set("No Wifi");
+ };
+ network.connect("notify::primary", update);
+ network.get_wifi()?.connect("notify::ssid", update);
+ network.get_wired()?.connect("notify::speed", update);
+ update();
+
+ return (
+
+
+
+
+ (s ? "enabled" : ""))}
+ cursor="pointer"
+ onClicked={() => network.wifi.scan()}
+ label=" Scan"
+ />
+
+ {network.get_wifi() ? (
+ (a.length > 0 ? "list" : "empty"))}
+ >
+ (p ? "No available networks" : "Wifi is off"))}
+ />
+
+
+
+
+ ) : (
+
+ )}
+
+ );
+};
--
cgit v1.2.3-freya