Feature 57 (config and provisioning): modules declare config and provisions, their files rendered from templates; synced with main (issues of feature 57, 874)

This commit is contained in:
2026-10-16 07:37:43 +00:00
parent 1a2c917abf
commit 9652b2d5ce
771 changed files with 52063 additions and 1774 deletions
+8
View File
@@ -0,0 +1,8 @@
[[block]]
block = "battery"
format = "$icon $percentage{ $time|}"
charging_format = "$icon $percentage{ $time|}"
not_charging_format = "$icon $percentage"
full_format = "$icon $percentage"
empty_format = "$icon $percentage"
missing_format = ""
+5
View File
@@ -0,0 +1,5 @@
[[block]]
block = "custom"
command = "~/.local/bin/i3status-value power.draw ${machine:name}"
interval = 5
hide_when_empty = true
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment after-boot, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:after-boot:first}${shell:after-boot:normal}${shell:after-boot:last}
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment after-wake, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:after-wake:first}${shell:after-wake:normal}${shell:after-wake:last}
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment before-shutdown, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:before-shutdown:first}${shell:before-shutdown:normal}${shell:before-shutdown:last}
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment before-sleep, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:before-sleep:first}${shell:before-sleep:normal}${shell:before-sleep:last}
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment on-battery, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:on-battery:first}${shell:on-battery:normal}${shell:on-battery:last}
@@ -0,0 +1,4 @@
# What every module on this machine runs at the moment on-mains, as the mesh placed it (module power,
# novox/hq ADR 0211). Replaced on every push: code is added by the module it belongs to, as a
# contribution for this moment. Each module's piece runs on its own, as root, bounded in time.
${shell:on-mains:first}${shell:on-mains:normal}${shell:on-mains:last}
@@ -0,0 +1,8 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
#
# The power key and the lid, from this module's settings: the mesh's, then this machine's.
[Login]
HandlePowerKey=${config:handle-power-key}
HandleLidSwitch=${config:handle-lid-switch}
HandleLidSwitchExternalPower=${config:handle-lid-switch-external-power}
HandleLidSwitchDocked=${config:handle-lid-switch-docked}
@@ -0,0 +1,3 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Wants=mesh-power-after-wake.service
@@ -0,0 +1,3 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Wants=mesh-power-after-wake.service
@@ -0,0 +1,13 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Description=Every module's code after boot (mesh power)
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/lib/mesh-power/bin/power-moment after-boot
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,11 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
#
# Pulled in by the four sleep targets through this module's drop-ins on them, and ordered after
# them, so it runs once the machine is awake again. Never enabled.
[Unit]
Description=Every module's code after waking (mesh power)
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
[Service]
Type=oneshot
ExecStart=/usr/local/lib/mesh-power/bin/power-moment after-wake
@@ -0,0 +1,18 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
#
# Started at boot and left active; stopping it is the shutdown. Ordered after the network, so at
# shutdown it stops, and runs every module's code, while the network is still up.
[Unit]
Description=Every module's code before shutdown (mesh power)
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/usr/local/lib/mesh-power/bin/power-moment before-shutdown
TimeoutStopSec=120
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,11 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
#
# Pulled in by sleep.target through this module's drop-in on it, never enabled: a one-shot waiting
# for a sleep is not a service whose state the mesh can declare.
[Unit]
Description=Every module's code before sleep (mesh power)
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/local/lib/mesh-power/bin/power-moment before-sleep
@@ -0,0 +1,10 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
#
# Started by the module's udev rule when a power supply changes; runs on-mains or on-battery once per
# change of source.
[Unit]
Description=Every module's code for the power source (mesh power)
[Service]
Type=oneshot
ExecStart=/usr/local/lib/mesh-power/bin/power-moment supply
@@ -0,0 +1,3 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Wants=mesh-power-before-sleep.service
@@ -0,0 +1,3 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Wants=mesh-power-after-wake.service
@@ -0,0 +1,3 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
[Unit]
Wants=mesh-power-after-wake.service
@@ -0,0 +1,5 @@
# Written by the mesh (module power, novox/hq ADR 0211). Replaced on every push.
# Only the charger's change can switch the machine between mains and battery. A battery reports its
# level many times a minute, and USB-C supplies come and go; matching them started the supply unit
# every second or two on the laptop.
SUBSYSTEM=="power_supply", ACTION=="change", ATTR{type}=="Mains", RUN+="/usr/bin/systemctl --no-block start mesh-power-supply.service"