Files
dotfiles-status-bar/widget/network.tsx

37 lines
960 B
TypeScript

import AstalNetwork from "gi://AstalNetwork?version=0.1";
import { createBinding, createMemo } from "gnim";
const disconnected_label = `Disconnected ⚠`
function create_label(
primary: AstalNetwork.Primary,
wired: AstalNetwork.Wired,
wifi?: AstalNetwork.Wifi,
) {
if (primary === AstalNetwork.Primary.WIRED) {
return `🖧 Wired ${wired.device.interface}`
}
if (!wifi) {
return disconnected_label;
}
if (wifi.active_access_point !== null) {
return `${wifi.ssid} (${wifi.strength}%) `
}
return disconnected_label;
}
export default function NetworkModule() {
const network = AstalNetwork.get_default();
const primary = createBinding(network, "primary")
const wifi = createBinding(network, "wifi")
const wired = createBinding(network, "wired")
const display = createMemo(() => create_label(primary(), wired(), wifi()))
return (
<box class="status-box net">
<label label={display} />
</box>
)
}