Initial commit

This commit is contained in:
2025-11-28 16:44:06 -08:00
commit c673a0bda5
27 changed files with 1563 additions and 0 deletions

78
waybar/waybar-network.el Executable file
View File

@ -0,0 +1,78 @@
#!/usr/bin/env -S emacs -x
;; -*- lexical-binding: t; -*-
(require 'cl-lib)
(require 'dbus)
(defconst connection-type-symbol-map
'((:none . "󰈂 ") ;; no connection
(:vpn . "󰖂 ")
(:wifi . "󰖩 ")
(:wired . "󰈁 "))
"Association list mapping connection types to their icons.")
(defun connection-type (path)
"Get the connection type for the active connection at PATH."
;; if the path is stale, just ignore it
(ignore-error dbus-error
(let ((type-string
(dbus-get-property :system
"org.freedesktop.NetworkManager"
path
"org.freedesktop.NetworkManager.Connection.Active"
"Type")))
(cond
((equal type-string "wireguard") :vpn)
((string-suffix-p "wireless" type-string) :wifi)
((string-suffix-p "ethernet" type-string) :wired)))))
(defun print-status-for-connection-types (conn-types)
"Write a status message for the connections in CONN-TYPES."
(princ (if (null conn-types)
(alist-get :none connection-type-symbol-map)
(mapconcat #'(lambda (type)
(alist-get type connection-type-symbol-map))
conn-types)))
(terpri)
(flush-standard-output))
(defun process-connection-list (connections)
"Process a list of paths to active connections."
(print-status-for-connection-types
(cl-loop for path in connections
for type = (connection-type path)
when type collect type)))
(defun list-active-connections ()
"Return a list of paths to active NetworkManager connections."
(dbus-get-property :system
"org.freedesktop.NetworkManager"
"/org/freedesktop/NetworkManager"
"org.freedesktop.NetworkManager"
"ActiveConnections"))
(defun handler (_interface-name changed-properties _invalidated-properties)
"Handler for property changes on NetworkManager."
(dolist (property changed-properties)
(when (equal (car property) "ActiveConnections")
;; the actual passed value may be stale
(process-connection-list (list-active-connections)))))
(dbus-register-signal :system
"org.freedesktop.NetworkManager" ;; service
"/org/freedesktop/NetworkManager" ;; path
"org.freedesktop.DBus.Properties" ;; interface
"PropertiesChanged" ;; signal
#'handler)
;; print initial connection list
(process-connection-list (list-active-connections))
(while t
(let ((event (read-event)))
(when (ignore-error dbus-error (dbus-check-event event))
(dbus-handle-event event))))
;; Local Variables:
;; flycheck-disabled-checkers: (emacs-lisp-checkdoc)
;; End: