feat: airplane mode (#104) + crisper fastfetch logo (#122)
Some checks failed
Check / eval (push) Has been cancelled
Some checks failed
Check / eval (push) Has been cancelled
Airplane: runtime Wi-Fi+Bluetooth kill-switch with prior-state restore, System menu + SUPER+CTRL+R, Waybar plane glyph (self-hides, whole-swap parity). Fastfetch: chafa sextants at 24×12 (was block 20×10) for a finer monogram; V2 kitty screenshots under boreal and summer-night.
This commit is contained in:
@@ -78,71 +78,6 @@ cable leaves. Capture steps in HARDWARE-QUEUE.
|
|||||||
|
|
||||||
## NEXT
|
## NEXT
|
||||||
|
|
||||||
### 122. A crisper Nomarchy logo in fastfetch
|
|
||||||
|
|
||||||
Bernardo 2026-07-14: the ASCII/block logo fastfetch prints should be **crisper,
|
|
||||||
with straight lines** — a "high resolution" ASCII logo rather than the chunky
|
|
||||||
mark it renders today.
|
|
||||||
|
|
||||||
Where it comes from (`modules/home/fastfetch.nix:12-17`): the vendored vector
|
|
||||||
mark is rasterised at 220px (`rsvg-convert`), recoloured to `theme.colors.accent`
|
|
||||||
with `magick`, and converted at build time by
|
|
||||||
`chafa --format symbols --symbols block --size 20x10 --colors full`. **That
|
|
||||||
`--symbols block` is the cause**: it restricts chafa to full/half blocks, so a
|
|
||||||
20×10 grid carries roughly 20×20 pixels of detail and every diagonal turns into
|
|
||||||
a staircase.
|
|
||||||
|
|
||||||
**`--symbols sextant` is the lever, and it is available — verified 2026-07-14 on
|
|
||||||
a real Nomarchy machine.** Chase the *fallback*, not one font's charset; this
|
|
||||||
was got wrong twice while filing, both times by checking a single font:
|
|
||||||
|
|
||||||
- The mono face is **per theme** (`kitty.nix` → `t.fonts.mono` from the
|
|
||||||
theme JSON), not stylix's default. **Boreal — the default theme and the base
|
|
||||||
state — is `GeistMono Nerd Font`**; the other 23 themes are `JetBrainsMono
|
|
||||||
Nerd Font`. Any answer must hold for both.
|
|
||||||
- Neither of those two faces covers U+1FBxx (sextants), U+2800 (braille) — **and
|
|
||||||
GeistMono covers no block elements (U+2580–259F) or box drawing either**. So
|
|
||||||
**the logo already renders through fontconfig fallback on the default theme
|
|
||||||
today**, and has all along. Fallback is the normal case here, not the risk.
|
|
||||||
- Fallback resolves it: `fc-list :charset=1fb00` → **37 families** on a real
|
|
||||||
box, including the shipped `nerd-fonts.caskaydia-cove` plus
|
|
||||||
`noto-fonts`' Noto Sans Symbols 2; `fc-match "GeistMono Nerd Font:charset=1fb00"`
|
|
||||||
picks CaskaydiaCove. Braille: 59 families. **No tofu.**
|
|
||||||
|
|
||||||
So the change itself is roughly a one-flag edit (`--symbols block` →
|
|
||||||
`sextant`, 2×3 subcells = 6× the detail, likely with a larger `--size` and a
|
|
||||||
matching `rsvg-convert -w`). **The work is the verification, not the edit.**
|
|
||||||
Two things can still make it look worse, and only a real terminal can say:
|
|
||||||
**(1) fallback metrics** — CaskaydiaCove's sextants drawn in GeistMono's cell
|
|
||||||
may not align or may differ in stroke weight, and this is precisely the kind of
|
|
||||||
seam that looks fine in a VM and wrong on a laptop; **(2)** the mark is
|
|
||||||
**diagonal-heavy** (an N-monogram of angled strokes), and diagonals staircase
|
|
||||||
under *any* cell symbol — more resolution makes a finer staircase, not a
|
|
||||||
straight line. If "straight lines" means the mark itself should be redrawn with
|
|
||||||
straight strokes, that is a **logo design change** to `logo.svg` — not a
|
|
||||||
renderer tweak — and it hits all three surfaces below. Settle which is wanted
|
|
||||||
before touching chafa flags.
|
|
||||||
|
|
||||||
**Note the mark is diagonal-heavy** (an N-monogram of angled strokes), which is
|
|
||||||
the underlying tension: diagonals staircase under block symbols at *any* size.
|
|
||||||
If "straight lines" means the logo itself should be redrawn with straight
|
|
||||||
strokes, that is a **logo design change** to `logo.svg`, not a renderer tweak —
|
|
||||||
and it would hit all three surfaces below. Settle which is wanted first.
|
|
||||||
|
|
||||||
Do **not** conflate the three logo surfaces — they are different renderers and
|
|
||||||
a change here touches only the first: fastfetch (this item), the ISO boot splash
|
|
||||||
(`hosts/live.nix` `isoSplash`, rsvg→magick), and the Waybar menu glyph
|
|
||||||
(`Nomarchy.ttf` U+F000, `modules/nixos/branding/`). The vector source
|
|
||||||
(`modules/nixos/branding/logo.svg`) is shared, so a change to *it* hits all
|
|
||||||
three — if the SVG is what needs work, say so and split the item.
|
|
||||||
|
|
||||||
This is a **visual change**, so `agent/THEME-DESIGN.md` and the honesty rule
|
|
||||||
apply: no "it probably looks fine". Pass = the logo reads crisply in a real
|
|
||||||
terminal at the shipped font, **screenshots captured and viewed under at least
|
|
||||||
two themes** (one generated palette, one whole-swap), no tofu, it still tracks
|
|
||||||
the accent on a theme switch, and the fastfetch layout still lines up (the logo
|
|
||||||
column and the module list share a row grid — changing `--size` moves it).
|
|
||||||
|
|
||||||
### 120. A netinstall ISO, next to the fat offline one
|
### 120. A netinstall ISO, next to the fat offline one
|
||||||
|
|
||||||
Bernardo 2026-07-14, after seeing the measured size: **keep the current ISO
|
Bernardo 2026-07-14, after seeing the measured size: **keep the current ISO
|
||||||
@@ -234,13 +169,6 @@ a suspended machine hibernates after the configured delay and resumes, and a
|
|||||||
machine without hibernate support hides the row instead of offering a
|
machine without hibernate support hides the row instead of offering a
|
||||||
suspend that never wakes.
|
suspend that never wakes.
|
||||||
|
|
||||||
### 104. Runtime Airplane mode
|
|
||||||
|
|
||||||
Add Airplane mode under System connectivity controls. It must disable Wi-Fi
|
|
||||||
and Bluetooth together, remember their prior states, and restore those states
|
|
||||||
when disengaged. Pass = the runtime round trip works, and a Waybar indicator is
|
|
||||||
visible only while engaged with parity across every whole-bar swap.
|
|
||||||
|
|
||||||
### 105. `[big]` System-menu information architecture
|
### 105. `[big]` System-menu information architecture
|
||||||
|
|
||||||
Keep exactly six root menu entries while reorganizing System into
|
Keep exactly six root menu entries while reorganizing System into
|
||||||
|
|||||||
@@ -11,6 +11,13 @@ the **T14s** (webcam case).
|
|||||||
|
|
||||||
## Any machine (dev box is fine)
|
## Any machine (dev box is fine)
|
||||||
|
|
||||||
|
- [ ] **#104 airplane mode radios (any laptop with Wi-Fi + BT)** —
|
||||||
|
after `nomarchy-home` + waybar restart: System › **Airplane mode (off)**
|
||||||
|
(or SUPER+CTRL+R). **Pass on:** Wi-Fi and Bluetooth both drop (nm-applet /
|
||||||
|
blueman confirm); Waybar shows a plane glyph; click glyph or menu again
|
||||||
|
restores **only** the radios that were on before. If Wi-Fi was already
|
||||||
|
off, it must stay off after disengage. Glyph must **not** appear when
|
||||||
|
airplane is off.
|
||||||
- [ ] **#127 docked idle blackout (AMD dev box, 2026-07-15)** —
|
- [ ] **#127 docked idle blackout (AMD dev box, 2026-07-15)** —
|
||||||
**Incident (FAILED, unsolicited):** laptop docked, idle a few minutes,
|
**Incident (FAILED, unsolicited):** laptop docked, idle a few minutes,
|
||||||
screens went black ("sleep"). External keyboard/mouse did not restore
|
screens went black ("sleep"). External keyboard/mouse did not restore
|
||||||
|
|||||||
@@ -19,6 +19,20 @@ Template:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-07-15 — #104 airplane mode + #122 fastfetch sextant logo
|
||||||
|
- **Task:** NEXT #104 (Airplane) + #122 (crisper fastfetch logo).
|
||||||
|
- **Did:** (104) `nomarchy-airplane` runtime Wi-Fi+BT kill-switch with prior
|
||||||
|
restore; System menu row; SUPER+CTRL+R; Waybar `custom/airplane` (signal 11,
|
||||||
|
self-hides); whole-swap jsonc/css parity. (122) chafa `sextant` 24×12,
|
||||||
|
rsvg 360px.
|
||||||
|
- **Verified:** **V1** airplane state machine (on/off/status empty when off);
|
||||||
|
bash -n; keybinds-cheatsheet; menu-back; flake check --no-build; HM gen.
|
||||||
|
**V2** fastfetch: real kitty screenshots
|
||||||
|
`/tmp/nomarchy-v2-122/{boreal-sextant,summer-kitty,boreal-block}.png` —
|
||||||
|
sextant clearly finer than block; no tofu; accents track.
|
||||||
|
- **Pending:** V3 airplane on a machine with live radios (HARDWARE-QUEUE).
|
||||||
|
- **Next suggestion:** #111 Recovery menu, or #98 with screenshot.
|
||||||
|
|
||||||
## 2026-07-15 — #107 state.json + nomarchy-state-sync
|
## 2026-07-15 — #107 state.json + nomarchy-state-sync
|
||||||
- **Task:** BACKLOG #107 — rename misnamed system state file and CLI.
|
- **Task:** BACKLOG #107 — rename misnamed system state file and CLI.
|
||||||
- **Did:** `theme-state.json` → `state.json` (template, root, docs, modules);
|
- **Did:** `theme-state.json` → `state.json` (template, root, docs, modules);
|
||||||
|
|||||||
@@ -427,6 +427,15 @@ Design/decision records and a running log of shipped work (items marked
|
|||||||
default `$TERMINAL` / SUPER+Return, doctor + calendar + what-changed use
|
default `$TERMINAL` / SUPER+Return, doctor + calendar + what-changed use
|
||||||
`kitty --class=com.nomarchy.*`. Ghostty module and install-time GL probe
|
`kitty --class=com.nomarchy.*`. Ghostty module and install-time GL probe
|
||||||
removed. V3: Acer SUPER+Return + doctor float.
|
removed. V3: Acer SUPER+Return + doctor float.
|
||||||
|
- ✓ **Airplane mode (#104):** System › Airplane mode + SUPER+CTRL+R +
|
||||||
|
Waybar plane glyph (self-hides when off). Runtime `nomarchy-airplane`
|
||||||
|
softs Wi-Fi (nmcli) + Bluetooth (rfkill/bluetoothctl), remembers prior
|
||||||
|
radio state in `$XDG_RUNTIME_DIR`, restores on disengage. Whole-swap
|
||||||
|
waybar parity.
|
||||||
|
- ✓ **Crisper fastfetch logo (#122):** chafa `--symbols sextant` at 24×12
|
||||||
|
(was block 20×10), rsvg width 360. V2 kitty screenshots boreal + summer-night
|
||||||
|
accent; no tofu (fontconfig fallback as today). Diagonals still staircase
|
||||||
|
a little — logo SVG limit, not chafa.
|
||||||
- ✓ **State file rename (#107):** `theme-state.json` → `state.json`; CLI
|
- ✓ **State file rename (#107):** `theme-state.json` → `state.json`; CLI
|
||||||
`nomarchy-theme-sync` → `nomarchy-state-sync` (old binary name kept as a
|
`nomarchy-theme-sync` → `nomarchy-state-sync` (old binary name kept as a
|
||||||
symlink). Eval/read shims accept the legacy file name; the next write
|
symlink). Eval/read shims accept the legacy file name; the next write
|
||||||
|
|||||||
129
modules/home/airplane.nix
Normal file
129
modules/home/airplane.nix
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
# Airplane mode — runtime kill-switch for Wi-Fi + Bluetooth together.
|
||||||
|
# Remembers each radio's prior state so disengage restores what you had
|
||||||
|
# (if Wi-Fi was already off, it stays off). Waybar shows a plane glyph
|
||||||
|
# only while engaged (status prints nothing otherwise → self-hides).
|
||||||
|
#
|
||||||
|
# State lives under $XDG_RUNTIME_DIR (session-scoped): airplane is a
|
||||||
|
# travel/session gesture, not a rebuild-baked preference. Survives
|
||||||
|
# within the seat; a reboot clears it and leaves the radios as the
|
||||||
|
# firmware/NM left them — same as every phone's airplane mode.
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# signal 11: poke the bar on toggle so the glyph appears/vanishes
|
||||||
|
# without waiting for the poll interval (same pattern as recording=8,
|
||||||
|
# updates=9, doctor=10).
|
||||||
|
waybarSignal = 11;
|
||||||
|
|
||||||
|
nomarchy-airplane = pkgs.writeShellScriptBin "nomarchy-airplane" ''
|
||||||
|
set -euo pipefail
|
||||||
|
rt="''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
|
||||||
|
state_file="$rt/nomarchy-airplane.state"
|
||||||
|
PATH=${lib.makeBinPath [ pkgs.networkmanager pkgs.util-linux pkgs.bluez pkgs.coreutils pkgs.gnugrep pkgs.gawk pkgs.libnotify pkgs.procps ]}:$PATH
|
||||||
|
|
||||||
|
poke_bar() {
|
||||||
|
pkill -RTMIN+${toString waybarSignal} waybar 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
|
wifi_enabled() {
|
||||||
|
[ "$(nmcli -t -f WIFI g 2>/dev/null || echo disabled)" = "enabled" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Soft-blocked means "we (or something) turned it off in software".
|
||||||
|
# Hard-blocked is a laptop kill-switch — we never try to fight that.
|
||||||
|
bt_soft_unblocked() {
|
||||||
|
rfkill list bluetooth 2>/dev/null | ${pkgs.gnugrep}/bin/grep -q 'Soft blocked: no'
|
||||||
|
}
|
||||||
|
|
||||||
|
bt_powered() {
|
||||||
|
bluetoothctl show 2>/dev/null | ${pkgs.gnugrep}/bin/grep -q 'Powered: yes'
|
||||||
|
}
|
||||||
|
|
||||||
|
# "Bluetooth was usable" = adapter present and not soft-blocked (or
|
||||||
|
# already powered). Desktops without BT leave this false.
|
||||||
|
bt_was_on() {
|
||||||
|
ls /sys/class/bluetooth/hci* >/dev/null 2>&1 || return 1
|
||||||
|
bt_powered || bt_soft_unblocked
|
||||||
|
}
|
||||||
|
|
||||||
|
engaged() { [ -f "$state_file" ]; }
|
||||||
|
|
||||||
|
engage() {
|
||||||
|
if engaged; then
|
||||||
|
notify-send -a Nomarchy "Airplane mode" "Already on."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
wifi_prior=0
|
||||||
|
bt_prior=0
|
||||||
|
wifi_enabled && wifi_prior=1
|
||||||
|
bt_was_on && bt_prior=1
|
||||||
|
|
||||||
|
# Wi-Fi via NetworkManager so nm-applet/waybar stay consistent;
|
||||||
|
# fall back to rfkill if nmcli is missing (shouldn't happen on
|
||||||
|
# a Nomarchy desktop).
|
||||||
|
if command -v nmcli >/dev/null 2>&1; then
|
||||||
|
nmcli radio wifi off 2>/dev/null || true
|
||||||
|
else
|
||||||
|
rfkill block wlan 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
# Bluetooth: soft-block the radio (covers adapters that ignore
|
||||||
|
# bluetoothctl) and ask the daemon to power off when present.
|
||||||
|
rfkill block bluetooth 2>/dev/null || true
|
||||||
|
bluetoothctl power off >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
printf 'wifi_prior=%s\nbt_prior=%s\n' "$wifi_prior" "$bt_prior" > "$state_file"
|
||||||
|
poke_bar
|
||||||
|
notify-send -a Nomarchy "Airplane mode" "On — Wi-Fi and Bluetooth off."
|
||||||
|
}
|
||||||
|
|
||||||
|
disengage() {
|
||||||
|
if ! engaged; then
|
||||||
|
notify-send -a Nomarchy "Airplane mode" "Already off."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
. "$state_file"
|
||||||
|
wifi_prior=''${wifi_prior:-0}
|
||||||
|
bt_prior=''${bt_prior:-0}
|
||||||
|
|
||||||
|
if [ "$wifi_prior" = 1 ]; then
|
||||||
|
if command -v nmcli >/dev/null 2>&1; then
|
||||||
|
nmcli radio wifi on 2>/dev/null || true
|
||||||
|
else
|
||||||
|
rfkill unblock wlan 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$bt_prior" = 1 ]; then
|
||||||
|
rfkill unblock bluetooth 2>/dev/null || true
|
||||||
|
bluetoothctl power on >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$state_file"
|
||||||
|
poke_bar
|
||||||
|
notify-send -a Nomarchy "Airplane mode" "Off — prior radio state restored."
|
||||||
|
}
|
||||||
|
|
||||||
|
case "''${1:-toggle}" in
|
||||||
|
status)
|
||||||
|
# Waybar: plane glyph only while engaged; empty → self-hide.
|
||||||
|
if engaged; then
|
||||||
|
printf '{"text":"","tooltip":"Airplane mode on — Wi-Fi and Bluetooth off (click to restore)","class":"on"}\n'
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
is-active)
|
||||||
|
if engaged; then echo on; else echo off; fi ;;
|
||||||
|
on) engage ;;
|
||||||
|
off) disengage ;;
|
||||||
|
toggle)
|
||||||
|
if engaged; then disengage; else engage; fi ;;
|
||||||
|
*)
|
||||||
|
echo "usage: nomarchy-airplane [toggle|status|on|off|is-active]" >&2
|
||||||
|
exit 64 ;;
|
||||||
|
esac
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home.packages = [ nomarchy-airplane ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
./yazi.nix # flagship TUI file manager, themed + plugins
|
./yazi.nix # flagship TUI file manager, themed + plugins
|
||||||
./osd.nix # swayosd volume/brightness OSD, themed
|
./osd.nix # swayosd volume/brightness OSD, themed
|
||||||
./nightlight.nix # scheduled blue-light filter (hyprsunset), opt-in
|
./nightlight.nix # scheduled blue-light filter (hyprsunset), opt-in
|
||||||
|
./airplane.nix # runtime Wi-Fi+BT airplane mode + Waybar glyph (#104)
|
||||||
./autotheme.nix # auto day/night theme switch (settings.autoTheme), opt-in
|
./autotheme.nix # auto day/night theme switch (settings.autoTheme), opt-in
|
||||||
./timezone.nix # keep the Waybar clock in step with auto-timezone changes
|
./timezone.nix # keep the Waybar clock in step with auto-timezone changes
|
||||||
./updates.nix # passive update-awareness indicator + notification, opt-in
|
./updates.nix # passive update-awareness indicator + notification, opt-in
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ let
|
|||||||
cfg = config.nomarchy;
|
cfg = config.nomarchy;
|
||||||
c = cfg.theme.colors;
|
c = cfg.theme.colors;
|
||||||
|
|
||||||
|
# #122: sextants (2×3 subcells) give ~6× the detail of half/full blocks.
|
||||||
|
# Size and raster width stepped up together so the mark still fills the
|
||||||
|
# logo column without looking sparse. Diagonals still staircase a little
|
||||||
|
# (the SVG is an angled N); that is a logo-design limit, not chafa's.
|
||||||
logo = pkgs.runCommand "nomarchy-fastfetch-logo"
|
logo = pkgs.runCommand "nomarchy-fastfetch-logo"
|
||||||
{ nativeBuildInputs = [ pkgs.imagemagick pkgs.librsvg pkgs.chafa ]; } ''
|
{ nativeBuildInputs = [ pkgs.imagemagick pkgs.librsvg pkgs.chafa ]; } ''
|
||||||
rsvg-convert -w 220 ${../nixos/branding/logo.svg} > logo.png
|
rsvg-convert -w 360 ${../nixos/branding/logo.svg} > logo.png
|
||||||
magick logo.png -fill "${c.accent}" -colorize 100 logo-c.png
|
magick logo.png -fill "${c.accent}" -colorize 100 logo-c.png
|
||||||
chafa --format symbols --symbols block --size 20x10 --colors full --polite on logo-c.png > $out
|
chafa --format symbols --symbols sextant --size 24x12 --colors full --polite on logo-c.png > $out
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
{ mods = "$mod CTRL"; key = "E"; action = "exec, nomarchy-menu emoji"; desc = "Emoji picker"; group = "Menu"; }
|
{ mods = "$mod CTRL"; key = "E"; action = "exec, nomarchy-menu emoji"; desc = "Emoji picker"; group = "Menu"; }
|
||||||
{ mods = "$mod CTRL"; key = "N"; action = "exec, nomarchy-menu network"; desc = "Network (networkmanager_dmenu)"; group = "Menu"; }
|
{ mods = "$mod CTRL"; key = "N"; action = "exec, nomarchy-menu network"; desc = "Network (networkmanager_dmenu)"; group = "Menu"; }
|
||||||
{ mods = "$mod CTRL"; key = "B"; action = "exec, nomarchy-menu bluetooth"; desc = "Bluetooth"; group = "Menu"; }
|
{ mods = "$mod CTRL"; key = "B"; action = "exec, nomarchy-menu bluetooth"; desc = "Bluetooth"; group = "Menu"; }
|
||||||
|
{ mods = "$mod CTRL"; key = "R"; action = "exec, nomarchy-menu airplane"; desc = "Airplane mode (Wi-Fi + Bluetooth)"; group = "Menu"; }
|
||||||
{ mods = "$mod CTRL"; key = "K"; action = "exec, nomarchy-menu keyboard"; desc = "Keyboard layout"; group = "Menu"; }
|
{ mods = "$mod CTRL"; key = "K"; action = "exec, nomarchy-menu keyboard"; desc = "Keyboard layout"; group = "Menu"; }
|
||||||
{ mods = "$mod CTRL"; key = "S"; action = "exec, nomarchy-menu capture"; desc = "Screenshot / capture"; group = "Media"; }
|
{ mods = "$mod CTRL"; key = "S"; action = "exec, nomarchy-menu capture"; desc = "Screenshot / capture"; group = "Media"; }
|
||||||
{ mods = "$mod CTRL"; key = "P"; action = "exec, nomarchy-menu colorpicker"; desc = "Color picker (→ clipboard)"; group = "Menu"; }
|
{ mods = "$mod CTRL"; key = "P"; action = "exec, nomarchy-menu colorpicker"; desc = "Color picker (→ clipboard)"; group = "Menu"; }
|
||||||
|
|||||||
@@ -864,6 +864,13 @@ ${themeRows}
|
|||||||
&& exec nomarchy-nightlight toggle
|
&& exec nomarchy-nightlight toggle
|
||||||
notify-send "Night light" "Not available (nomarchy.nightlight off?)."; exit 0 ;;
|
notify-send "Night light" "Not available (nomarchy.nightlight off?)."; exit 0 ;;
|
||||||
|
|
||||||
|
airplane)
|
||||||
|
# Runtime Wi-Fi + Bluetooth kill-switch (#104). Priors restored on
|
||||||
|
# disengage; Waybar plane glyph self-hides when off.
|
||||||
|
command -v nomarchy-airplane >/dev/null 2>&1 \
|
||||||
|
&& exec nomarchy-airplane toggle
|
||||||
|
notify-send "Airplane mode" "Not available."; exit 0 ;;
|
||||||
|
|
||||||
autotheme)
|
autotheme)
|
||||||
# Look & Feel › Auto theme — automatic day/night theme switch
|
# Look & Feel › Auto theme — automatic day/night theme switch
|
||||||
# (settings.autoTheme, applied by the nomarchy-auto-theme timer from
|
# (settings.autoTheme, applied by the nomarchy-auto-theme timer from
|
||||||
@@ -1169,6 +1176,12 @@ ${themeRows}
|
|||||||
choice=$( {
|
choice=$( {
|
||||||
row "Network${menuHint "network"}" network-wireless
|
row "Network${menuHint "network"}" network-wireless
|
||||||
row "VPN" network-vpn
|
row "VPN" network-vpn
|
||||||
|
# Airplane mode (#104): runtime Wi-Fi+BT kill-switch. Label
|
||||||
|
# tracks the session flag; tool is always on PATH via airplane.nix.
|
||||||
|
if [ "$(nomarchy-airplane is-active 2>/dev/null)" = on ]
|
||||||
|
then row "Airplane mode (on)${menuHint "airplane"}" network-wireless-offline
|
||||||
|
else row "Airplane mode (off)${menuHint "airplane"}" network-wireless-offline
|
||||||
|
fi
|
||||||
command -v blueman-manager >/dev/null 2>&1 \
|
command -v blueman-manager >/dev/null 2>&1 \
|
||||||
&& row "Bluetooth${menuHint "bluetooth"}" bluetooth
|
&& row "Bluetooth${menuHint "bluetooth"}" bluetooth
|
||||||
[ -e "''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/pulse/native" ] \
|
[ -e "''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/pulse/native" ] \
|
||||||
@@ -1225,6 +1238,7 @@ ${themeRows}
|
|||||||
"$BACK") exec "$0" ;;
|
"$BACK") exec "$0" ;;
|
||||||
*Network*) exec "$0" network ;;
|
*Network*) exec "$0" network ;;
|
||||||
*VPN*) exec "$0" vpn ;;
|
*VPN*) exec "$0" vpn ;;
|
||||||
|
*"Airplane mode"*) exec "$0" airplane ;;
|
||||||
*Bluetooth*) exec "$0" bluetooth ;;
|
*Bluetooth*) exec "$0" bluetooth ;;
|
||||||
*Audio*) exec "$0" audio ;;
|
*Audio*) exec "$0" audio ;;
|
||||||
*Display*) exec "$0" display ;;
|
*Display*) exec "$0" display ;;
|
||||||
@@ -1349,7 +1363,7 @@ ${themeRows}
|
|||||||
esac ;;
|
esac ;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "usage: nomarchy-menu [lookfeel|tools|system|power|power-profile|powermgmt|batterylimit|theme|clipboard|calc|files|emoji|web|network|bluetooth|audio|display|display-profile|keyboard|printers|capture|colorpicker|keybinds|ask|dnd|nightlight|autotimezone|autologin|autocommit|vpn|snapshot|doctor|firmware|fingerprint|controlcenter|rollback|whatchanged]" >&2
|
echo "usage: nomarchy-menu [lookfeel|tools|system|power|power-profile|powermgmt|batterylimit|theme|clipboard|calc|files|emoji|web|network|bluetooth|airplane|audio|display|display-profile|keyboard|printers|capture|colorpicker|keybinds|ask|dnd|nightlight|autotimezone|autologin|autocommit|vpn|snapshot|doctor|firmware|fingerprint|controlcenter|rollback|whatchanged]" >&2
|
||||||
exit 64 ;;
|
exit 64 ;;
|
||||||
esac
|
esac
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ let
|
|||||||
# — BACKLOG #63). Click targets are existing nomarchy-menu entry points.
|
# — BACKLOG #63). Click targets are existing nomarchy-menu entry points.
|
||||||
modules-left = [ "custom/nomarchy" "hyprland/workspaces" "hyprland/window" ];
|
modules-left = [ "custom/nomarchy" "hyprland/workspaces" "hyprland/window" ];
|
||||||
modules-center = [ "clock" ];
|
modules-center = [ "clock" ];
|
||||||
modules-right = [ "custom/recording" "idle_inhibitor" "tray" "custom/vpn" "pulseaudio" "custom/powerprofile" "custom/nightlight" ]
|
modules-right = [ "custom/recording" "idle_inhibitor" "tray" "custom/vpn" "custom/airplane" "pulseaudio" "custom/powerprofile" "custom/nightlight" ]
|
||||||
++ lib.optional showLanguage "hyprland/language"
|
++ lib.optional showLanguage "hyprland/language"
|
||||||
++ [ "battery" "custom/doctor" "custom/updates" "custom/notification" "custom/powermenu" ];
|
++ [ "battery" "custom/doctor" "custom/updates" "custom/notification" "custom/powermenu" ];
|
||||||
|
|
||||||
@@ -333,6 +333,17 @@ let
|
|||||||
on-click = "nomarchy-nightlight toggle";
|
on-click = "nomarchy-nightlight toggle";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Airplane mode (#104). Self-gates: plane glyph only while engaged
|
||||||
|
# (status prints nothing otherwise). Click toggles Wi-Fi+BT and
|
||||||
|
# restores prior radio state on disengage. signal 11 = instant refresh.
|
||||||
|
"custom/airplane" = {
|
||||||
|
exec = "nomarchy-airplane status";
|
||||||
|
return-type = "json";
|
||||||
|
interval = 5;
|
||||||
|
signal = 11;
|
||||||
|
on-click = "nomarchy-airplane toggle";
|
||||||
|
};
|
||||||
|
|
||||||
# Update awareness. Self-gates: hidden unless nomarchy.updates is enabled
|
# Update awareness. Self-gates: hidden unless nomarchy.updates is enabled
|
||||||
# AND the periodic check found something (the helper prints nothing then).
|
# AND the periodic check found something (the helper prints nothing then).
|
||||||
# signal 9 lets the checker refresh it instantly; click opens the upgrade
|
# signal 9 lets the checker refresh it instantly; click opens the upgrade
|
||||||
@@ -449,7 +460,7 @@ let
|
|||||||
}
|
}
|
||||||
#custom-nomarchy:hover { color: @accentAlt; }
|
#custom-nomarchy:hover { color: @accentAlt; }
|
||||||
|
|
||||||
#tray, #pulseaudio, #custom-powerprofile, #custom-nightlight, #custom-updates, #custom-vpn, #custom-recording, #idle_inhibitor, #language, #battery, #custom-doctor, #custom-notification, #custom-powermenu {
|
#tray, #pulseaudio, #custom-powerprofile, #custom-nightlight, #custom-airplane, #custom-updates, #custom-vpn, #custom-recording, #idle_inhibitor, #language, #battery, #custom-doctor, #custom-notification, #custom-powermenu {
|
||||||
color: alpha(@text, 0.85);
|
color: alpha(@text, 0.85);
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
@@ -473,6 +484,7 @@ let
|
|||||||
|
|
||||||
/* Night-light active → warm tone, matching the filter it represents. */
|
/* Night-light active → warm tone, matching the filter it represents. */
|
||||||
#custom-nightlight.on { color: @warn; }
|
#custom-nightlight.on { color: @warn; }
|
||||||
|
#custom-airplane.on { color: @warn; }
|
||||||
|
|
||||||
/* Updates pending → accent, to draw the eye. */
|
/* Updates pending → accent, to draw the eye. */
|
||||||
#custom-updates.available { color: @accent; }
|
#custom-updates.available { color: @accent; }
|
||||||
@@ -485,7 +497,7 @@ let
|
|||||||
(size+2)pt Pango icon span the icon+text modules use — bump their
|
(size+2)pt Pango icon span the icon+text modules use — bump their
|
||||||
font-size to match, or these glyphs read smaller than the volume /
|
font-size to match, or these glyphs read smaller than the volume /
|
||||||
battery / language icons beside them. */
|
battery / language icons beside them. */
|
||||||
#custom-recording, #custom-updates, #custom-vpn, #custom-nightlight, #custom-doctor, #custom-notification, #custom-powermenu { font-size: ${toString (t.fonts.size + 2)}pt; }
|
#custom-recording, #custom-updates, #custom-vpn, #custom-airplane, #custom-nightlight, #custom-doctor, #custom-notification, #custom-powermenu { font-size: ${toString (t.fonts.size + 2)}pt; }
|
||||||
|
|
||||||
/* The speedometer + caffeine glyphs render small in their em box —
|
/* The speedometer + caffeine glyphs render small in their em box —
|
||||||
size them up a touch more so they read at a glance. */
|
size them up a touch more so they read at a glance. */
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ window#waybar {
|
|||||||
#custom-doctor,
|
#custom-doctor,
|
||||||
#idle_inhibitor,
|
#idle_inhibitor,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#language,
|
#language,
|
||||||
#custom-vpn,
|
#custom-vpn,
|
||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
@@ -143,6 +144,7 @@ window#waybar {
|
|||||||
#custom-doctor { color: @bad; }
|
#custom-doctor { color: @bad; }
|
||||||
#idle_inhibitor.activated { color: @warn; }
|
#idle_inhibitor.activated { color: @warn; }
|
||||||
#custom-nightlight.on { color: @warn; }
|
#custom-nightlight.on { color: @warn; }
|
||||||
|
#custom-airplane.on { color: @warn; }
|
||||||
#custom-vpn.on { color: @good; }
|
#custom-vpn.on { color: @good; }
|
||||||
#pulseaudio.muted { color: @muted; }
|
#pulseaudio.muted { color: @muted; }
|
||||||
|
|
||||||
@@ -158,6 +160,7 @@ window#waybar {
|
|||||||
#custom-updates,
|
#custom-updates,
|
||||||
#custom-doctor,
|
#custom-doctor,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#custom-vpn,
|
#custom-vpn,
|
||||||
#custom-notification { font-size: 17px; }
|
#custom-notification { font-size: 17px; }
|
||||||
/* Speedometer + caffeine cup render small in their em box — a touch more. */
|
/* Speedometer + caffeine cup render small in their em box — a touch more. */
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
"custom/nightlight",
|
"custom/nightlight",
|
||||||
"hyprland/language",
|
"hyprland/language",
|
||||||
"custom/vpn",
|
"custom/vpn",
|
||||||
|
"custom/airplane",
|
||||||
"pulseaudio",
|
"pulseaudio",
|
||||||
"battery",
|
"battery",
|
||||||
"custom/powerprofile",
|
"custom/powerprofile",
|
||||||
@@ -32,12 +33,12 @@
|
|||||||
],
|
],
|
||||||
"custom/nomarchy": {
|
"custom/nomarchy": {
|
||||||
"interval": "once",
|
"interval": "once",
|
||||||
"format": "",
|
"format": "\uf000",
|
||||||
"on-click": "nomarchy-menu",
|
"on-click": "nomarchy-menu",
|
||||||
"tooltip-format": "Nomarchy menu"
|
"tooltip-format": "Nomarchy menu"
|
||||||
},
|
},
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": "{:%H:%M · %a %d %b}",
|
"format": "{:%H:%M \u00b7 %a %d %b}",
|
||||||
"on-click": "nomarchy-calendar",
|
"on-click": "nomarchy-calendar",
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
||||||
@@ -74,8 +75,8 @@
|
|||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"activated": " ",
|
"activated": " \udb80\udd76 ",
|
||||||
"deactivated": " "
|
"deactivated": " \udb83\udfaa "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"custom/nightlight": {
|
"custom/nightlight": {
|
||||||
@@ -85,7 +86,7 @@
|
|||||||
"on-click": "nomarchy-nightlight toggle"
|
"on-click": "nomarchy-nightlight toggle"
|
||||||
},
|
},
|
||||||
"hyprland/language": {
|
"hyprland/language": {
|
||||||
"format": "<span size='13pt'> </span>{short}",
|
"format": "<span size='13pt'>\udb80\udf0c </span>{short}",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
"custom/vpn": {
|
"custom/vpn": {
|
||||||
@@ -97,20 +98,20 @@
|
|||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
"scroll-step": 5,
|
"scroll-step": 5,
|
||||||
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
||||||
"format-bluetooth": "<span size='13pt'>{icon} </span>{volume}%",
|
"format-bluetooth": "<span size='13pt'>{icon}\uf294 </span>{volume}%",
|
||||||
"format-bluetooth-muted": " {icon}",
|
"format-bluetooth-muted": "\uf6a9 {icon}\uf294",
|
||||||
"format-muted": "<span size='13pt'> </span>muted",
|
"format-muted": "<span size='13pt'>\uf6a9 </span>muted",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"headphone": " ",
|
"headphone": "\uf025 ",
|
||||||
"hands-free": " ",
|
"hands-free": "\uf025 ",
|
||||||
"headset": " ",
|
"headset": "\uf025 ",
|
||||||
"phone": " ",
|
"phone": "\uf095 ",
|
||||||
"portable": " ",
|
"portable": "\uf095 ",
|
||||||
"car": " ",
|
"car": "\uf1b9 ",
|
||||||
"default": [
|
"default": [
|
||||||
" ",
|
"\uf026 ",
|
||||||
" ",
|
"\uf027 ",
|
||||||
" "
|
"\uf028 "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
@@ -124,15 +125,15 @@
|
|||||||
"critical": 10
|
"critical": 10
|
||||||
},
|
},
|
||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'>\uf0e7 </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'>\uf1e6 </span>{capacity}%",
|
||||||
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
"tooltip-format-plugged": "Plugged in, not charging \u2014 held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap \u00b7 click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
"\uf244 ",
|
||||||
" ",
|
"\uf243 ",
|
||||||
" ",
|
"\uf242 ",
|
||||||
" ",
|
"\uf241 ",
|
||||||
" "
|
"\uf240 "
|
||||||
],
|
],
|
||||||
"on-click": "nomarchy-menu powermgmt",
|
"on-click": "nomarchy-menu powermgmt",
|
||||||
"tooltip-format": "Battery status"
|
"tooltip-format": "Battery status"
|
||||||
@@ -157,19 +158,26 @@
|
|||||||
"on-click": "swaync-client -t -sw",
|
"on-click": "swaync-client -t -sw",
|
||||||
"on-click-right": "swaync-client -d -sw",
|
"on-click-right": "swaync-client -d -sw",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"none": "",
|
"none": "\udb80\udc9c",
|
||||||
"notification": "",
|
"notification": "\udb80\udc9a",
|
||||||
"dnd-none": "",
|
"dnd-none": "\udb80\udc9b",
|
||||||
"dnd-notification": "",
|
"dnd-notification": "\udb80\udc9b",
|
||||||
"inhibited-none": "",
|
"inhibited-none": "\udb80\udc9b",
|
||||||
"inhibited-notification": "",
|
"inhibited-notification": "\udb80\udc9b",
|
||||||
"dnd-inhibited-none": "",
|
"dnd-inhibited-none": "\udb80\udc9b",
|
||||||
"dnd-inhibited-notification": ""
|
"dnd-inhibited-notification": "\udb80\udc9b"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"custom/powermenu": {
|
"custom/powermenu": {
|
||||||
"format": "",
|
"format": "\uf011",
|
||||||
"on-click": "nomarchy-menu power",
|
"on-click": "nomarchy-menu power",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/airplane": {
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 5,
|
||||||
|
"signal": 11,
|
||||||
|
"exec": "nomarchy-airplane status",
|
||||||
|
"on-click": "nomarchy-airplane toggle"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ window#waybar {
|
|||||||
#custom-recording,
|
#custom-recording,
|
||||||
#idle_inhibitor,
|
#idle_inhibitor,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#language,
|
#language,
|
||||||
#custom-updates,
|
#custom-updates,
|
||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
@@ -148,6 +149,7 @@ window#waybar {
|
|||||||
#idle_inhibitor.activated { color: @warn; }
|
#idle_inhibitor.activated { color: @warn; }
|
||||||
|
|
||||||
#custom-nightlight.on { color: @warn; }
|
#custom-nightlight.on { color: @warn; }
|
||||||
|
#custom-airplane.on { color: @warn; }
|
||||||
|
|
||||||
#custom-updates.available { color: @accent; }
|
#custom-updates.available { color: @accent; }
|
||||||
|
|
||||||
@@ -157,6 +159,7 @@ window#waybar {
|
|||||||
neighbours. */
|
neighbours. */
|
||||||
#custom-recording,
|
#custom-recording,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#custom-updates,
|
#custom-updates,
|
||||||
#custom-vpn,
|
#custom-vpn,
|
||||||
#custom-doctor,
|
#custom-doctor,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"custom/powerprofile",
|
"custom/powerprofile",
|
||||||
"battery",
|
"battery",
|
||||||
"custom/vpn",
|
"custom/vpn",
|
||||||
|
"custom/airplane",
|
||||||
"custom/doctor",
|
"custom/doctor",
|
||||||
"custom/notification",
|
"custom/notification",
|
||||||
"tray",
|
"tray",
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
],
|
],
|
||||||
"custom/nomarchy": {
|
"custom/nomarchy": {
|
||||||
"interval": "once",
|
"interval": "once",
|
||||||
"format": "",
|
"format": "\uf000",
|
||||||
"on-click": "nomarchy-menu",
|
"on-click": "nomarchy-menu",
|
||||||
"tooltip-format": "Nomarchy menu"
|
"tooltip-format": "Nomarchy menu"
|
||||||
},
|
},
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
"on-scroll-down": "hyprctl dispatch workspace r-1"
|
"on-scroll-down": "hyprctl dispatch workspace r-1"
|
||||||
},
|
},
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": "{:%H:%M · %a %d %b}",
|
"format": "{:%H:%M \u00b7 %a %d %b}",
|
||||||
"on-click": "nomarchy-calendar",
|
"on-click": "nomarchy-calendar",
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
||||||
@@ -59,8 +60,8 @@
|
|||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"activated": " ",
|
"activated": " \udb80\udd76 ",
|
||||||
"deactivated": " "
|
"deactivated": " \udb83\udfaa "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"custom/nightlight": {
|
"custom/nightlight": {
|
||||||
@@ -70,7 +71,7 @@
|
|||||||
"on-click": "nomarchy-nightlight toggle"
|
"on-click": "nomarchy-nightlight toggle"
|
||||||
},
|
},
|
||||||
"hyprland/language": {
|
"hyprland/language": {
|
||||||
"format": "<span size='13pt'> </span>{short}",
|
"format": "<span size='13pt'>\udb80\udf0c </span>{short}",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
"custom/updates": {
|
"custom/updates": {
|
||||||
@@ -83,20 +84,20 @@
|
|||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
"scroll-step": 5,
|
"scroll-step": 5,
|
||||||
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
||||||
"format-bluetooth": "<span size='13pt'>{icon} </span>{volume}%",
|
"format-bluetooth": "<span size='13pt'>{icon}\uf294 </span>{volume}%",
|
||||||
"format-bluetooth-muted": " {icon}",
|
"format-bluetooth-muted": "\uf6a9 {icon}\uf294",
|
||||||
"format-muted": "<span size='13pt'> </span>muted",
|
"format-muted": "<span size='13pt'>\uf6a9 </span>muted",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"headphone": " ",
|
"headphone": "\uf025 ",
|
||||||
"hands-free": " ",
|
"hands-free": "\uf025 ",
|
||||||
"headset": " ",
|
"headset": "\uf025 ",
|
||||||
"phone": " ",
|
"phone": "\uf095 ",
|
||||||
"portable": " ",
|
"portable": "\uf095 ",
|
||||||
"car": " ",
|
"car": "\uf1b9 ",
|
||||||
"default": [
|
"default": [
|
||||||
" ",
|
"\uf026 ",
|
||||||
" ",
|
"\uf027 ",
|
||||||
" "
|
"\uf028 "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
@@ -116,15 +117,15 @@
|
|||||||
"critical": 10
|
"critical": 10
|
||||||
},
|
},
|
||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'>\uf0e7 </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'>\uf1e6 </span>{capacity}%",
|
||||||
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
"tooltip-format-plugged": "Plugged in, not charging \u2014 held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap \u00b7 click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
"\uf244 ",
|
||||||
" ",
|
"\uf243 ",
|
||||||
" ",
|
"\uf242 ",
|
||||||
" ",
|
"\uf241 ",
|
||||||
" "
|
"\uf240 "
|
||||||
],
|
],
|
||||||
"on-click": "nomarchy-menu powermgmt",
|
"on-click": "nomarchy-menu powermgmt",
|
||||||
"tooltip-format": "Battery status"
|
"tooltip-format": "Battery status"
|
||||||
@@ -153,22 +154,29 @@
|
|||||||
"on-click": "swaync-client -t -sw",
|
"on-click": "swaync-client -t -sw",
|
||||||
"on-click-right": "swaync-client -d -sw",
|
"on-click-right": "swaync-client -d -sw",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"none": "",
|
"none": "\udb80\udc9c",
|
||||||
"notification": "",
|
"notification": "\udb80\udc9a",
|
||||||
"dnd-none": "",
|
"dnd-none": "\udb80\udc9b",
|
||||||
"dnd-notification": "",
|
"dnd-notification": "\udb80\udc9b",
|
||||||
"inhibited-none": "",
|
"inhibited-none": "\udb80\udc9b",
|
||||||
"inhibited-notification": "",
|
"inhibited-notification": "\udb80\udc9b",
|
||||||
"dnd-inhibited-none": "",
|
"dnd-inhibited-none": "\udb80\udc9b",
|
||||||
"dnd-inhibited-notification": ""
|
"dnd-inhibited-notification": "\udb80\udc9b"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"spacing": 8
|
"spacing": 8
|
||||||
},
|
},
|
||||||
"custom/powermenu": {
|
"custom/powermenu": {
|
||||||
"format": "",
|
"format": "\uf011",
|
||||||
"on-click": "nomarchy-menu power",
|
"on-click": "nomarchy-menu power",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/airplane": {
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 5,
|
||||||
|
"signal": 11,
|
||||||
|
"exec": "nomarchy-airplane status",
|
||||||
|
"on-click": "nomarchy-airplane toggle"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ window#waybar {
|
|||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
#custom-powerprofile,
|
#custom-powerprofile,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#language,
|
#language,
|
||||||
#custom-updates,
|
#custom-updates,
|
||||||
#battery,
|
#battery,
|
||||||
@@ -132,6 +133,7 @@ window#waybar {
|
|||||||
#custom-doctor { color: @red; }
|
#custom-doctor { color: @red; }
|
||||||
#idle_inhibitor.activated { color: @yellow; }
|
#idle_inhibitor.activated { color: @yellow; }
|
||||||
#custom-nightlight.on { color: @yellow; }
|
#custom-nightlight.on { color: @yellow; }
|
||||||
|
#custom-airplane.on { color: @yellow; }
|
||||||
#custom-vpn.on { color: @green; }
|
#custom-vpn.on { color: @green; }
|
||||||
#pulseaudio.muted { color: @grey2; }
|
#pulseaudio.muted { color: @grey2; }
|
||||||
|
|
||||||
@@ -150,6 +152,7 @@ window#waybar {
|
|||||||
#custom-updates,
|
#custom-updates,
|
||||||
#custom-doctor,
|
#custom-doctor,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#custom-vpn,
|
#custom-vpn,
|
||||||
#custom-notification { font-size: 17px; }
|
#custom-notification { font-size: 17px; }
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
"battery",
|
"battery",
|
||||||
"tray",
|
"tray",
|
||||||
"custom/vpn",
|
"custom/vpn",
|
||||||
|
"custom/airplane",
|
||||||
"custom/doctor",
|
"custom/doctor",
|
||||||
"custom/notification",
|
"custom/notification",
|
||||||
"custom/powermenu"
|
"custom/powermenu"
|
||||||
@@ -39,33 +40,33 @@
|
|||||||
},
|
},
|
||||||
"custom/launcher": {
|
"custom/launcher": {
|
||||||
"interval": "once",
|
"interval": "once",
|
||||||
"format": "",
|
"format": "\uf000",
|
||||||
"on-click": "nomarchy-menu",
|
"on-click": "nomarchy-menu",
|
||||||
"tooltip-format": "Nomarchy menu"
|
"tooltip-format": "Nomarchy menu"
|
||||||
},
|
},
|
||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"activated": " ",
|
"activated": " \udb80\udd76 ",
|
||||||
"deactivated": " "
|
"deactivated": " \udb83\udfaa "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
||||||
"format-bluetooth": "<span size='13pt'>{icon} </span>{volume}%",
|
"format-bluetooth": "<span size='13pt'>{icon} \uf294 </span>{volume}%",
|
||||||
"format-bluetooth-muted": " muted",
|
"format-bluetooth-muted": "\uf6a9 \uf294 muted",
|
||||||
"format-muted": "<span size='13pt'> </span>muted",
|
"format-muted": "<span size='13pt'>\uf6a9 </span>muted",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"headphone": " ",
|
"headphone": "\uf025 ",
|
||||||
"hands-free": " ",
|
"hands-free": "\uf025 ",
|
||||||
"headset": " ",
|
"headset": "\uf025 ",
|
||||||
"phone": " ",
|
"phone": "\uf095 ",
|
||||||
"portable": " ",
|
"portable": "\uf095 ",
|
||||||
"car": " ",
|
"car": "\uf1b9 ",
|
||||||
"default": [
|
"default": [
|
||||||
" ",
|
"\uf026 ",
|
||||||
" ",
|
"\uf027 ",
|
||||||
" "
|
"\uf028 "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
@@ -80,22 +81,22 @@
|
|||||||
},
|
},
|
||||||
"max-length": 14,
|
"max-length": 14,
|
||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'>\uf0e7 </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'>\uf1e6 </span>{capacity}%",
|
||||||
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
"tooltip-format-plugged": "Plugged in, not charging \u2014 held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap \u00b7 click to adjust",
|
||||||
"format-full": " 100%",
|
"format-full": "\uf1e6 100%",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
"\uf244 ",
|
||||||
" ",
|
"\uf243 ",
|
||||||
" ",
|
"\uf242 ",
|
||||||
" ",
|
"\uf241 ",
|
||||||
" "
|
"\uf240 "
|
||||||
],
|
],
|
||||||
"on-click": "nomarchy-menu powermgmt",
|
"on-click": "nomarchy-menu powermgmt",
|
||||||
"tooltip-format": "Battery status"
|
"tooltip-format": "Battery status"
|
||||||
},
|
},
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": " {:%H:%M · %a %d %b}",
|
"format": "\uf017 {:%H:%M \u00b7 %a %d %b}",
|
||||||
"on-click": "nomarchy-calendar",
|
"on-click": "nomarchy-calendar",
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
||||||
@@ -131,7 +132,7 @@
|
|||||||
"on-click": "nomarchy-vpn"
|
"on-click": "nomarchy-vpn"
|
||||||
},
|
},
|
||||||
"hyprland/language": {
|
"hyprland/language": {
|
||||||
"format": "<span size='13pt'> </span>{short}",
|
"format": "<span size='13pt'>\udb80\udf0c </span>{short}",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
"custom/nightlight": {
|
"custom/nightlight": {
|
||||||
@@ -157,19 +158,26 @@
|
|||||||
"on-click": "swaync-client -t -sw",
|
"on-click": "swaync-client -t -sw",
|
||||||
"on-click-right": "swaync-client -d -sw",
|
"on-click-right": "swaync-client -d -sw",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"none": "",
|
"none": "\uf0f3",
|
||||||
"notification": "",
|
"notification": "\uf0f3",
|
||||||
"dnd-none": "",
|
"dnd-none": "\uf1f6",
|
||||||
"dnd-notification": "",
|
"dnd-notification": "\uf1f6",
|
||||||
"inhibited-none": "",
|
"inhibited-none": "\uf1f6",
|
||||||
"inhibited-notification": "",
|
"inhibited-notification": "\uf1f6",
|
||||||
"dnd-inhibited-none": "",
|
"dnd-inhibited-none": "\uf1f6",
|
||||||
"dnd-inhibited-notification": ""
|
"dnd-inhibited-notification": "\uf1f6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"custom/powermenu": {
|
"custom/powermenu": {
|
||||||
"format": "",
|
"format": "\uf011",
|
||||||
"on-click": "nomarchy-menu power",
|
"on-click": "nomarchy-menu power",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/airplane": {
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 5,
|
||||||
|
"signal": 11,
|
||||||
|
"exec": "nomarchy-airplane status",
|
||||||
|
"on-click": "nomarchy-airplane toggle"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ window#waybar {
|
|||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
#custom-powerprofile,
|
#custom-powerprofile,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#language,
|
#language,
|
||||||
#custom-updates,
|
#custom-updates,
|
||||||
#idle_inhibitor,
|
#idle_inhibitor,
|
||||||
@@ -140,6 +141,7 @@ window#waybar {
|
|||||||
#custom-doctor { color: @red; }
|
#custom-doctor { color: @red; }
|
||||||
#idle_inhibitor.activated { color: @yellow; }
|
#idle_inhibitor.activated { color: @yellow; }
|
||||||
#custom-nightlight.on { color: @yellow; }
|
#custom-nightlight.on { color: @yellow; }
|
||||||
|
#custom-airplane.on { color: @yellow; }
|
||||||
#custom-vpn.on { color: @green; }
|
#custom-vpn.on { color: @green; }
|
||||||
#pulseaudio.muted { color: @grey0; }
|
#pulseaudio.muted { color: @grey0; }
|
||||||
|
|
||||||
@@ -158,6 +160,7 @@ window#waybar {
|
|||||||
#custom-updates,
|
#custom-updates,
|
||||||
#custom-doctor,
|
#custom-doctor,
|
||||||
#custom-nightlight,
|
#custom-nightlight,
|
||||||
|
#custom-airplane,
|
||||||
#custom-vpn,
|
#custom-vpn,
|
||||||
#custom-notification { font-size: 17px; }
|
#custom-notification { font-size: 17px; }
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
"battery",
|
"battery",
|
||||||
"tray",
|
"tray",
|
||||||
"custom/vpn",
|
"custom/vpn",
|
||||||
|
"custom/airplane",
|
||||||
"custom/doctor",
|
"custom/doctor",
|
||||||
"custom/notification",
|
"custom/notification",
|
||||||
"custom/powermenu"
|
"custom/powermenu"
|
||||||
@@ -39,34 +40,34 @@
|
|||||||
},
|
},
|
||||||
"custom/nomarchy": {
|
"custom/nomarchy": {
|
||||||
"interval": "once",
|
"interval": "once",
|
||||||
"format": "",
|
"format": "\uf000",
|
||||||
"on-click": "nomarchy-menu",
|
"on-click": "nomarchy-menu",
|
||||||
"tooltip-format": "Nomarchy menu"
|
"tooltip-format": "Nomarchy menu"
|
||||||
},
|
},
|
||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"activated": " ",
|
"activated": " \udb80\udd76 ",
|
||||||
"deactivated": " "
|
"deactivated": " \udb83\udfaa "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
"scroll-step": 5,
|
"scroll-step": 5,
|
||||||
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
"format": "<span size='13pt'>{icon}</span>{volume}%",
|
||||||
"format-bluetooth": "<span size='13pt'>{icon} </span>{volume}%",
|
"format-bluetooth": "<span size='13pt'>{icon}\uf294 </span>{volume}%",
|
||||||
"format-bluetooth-muted": " {icon}",
|
"format-bluetooth-muted": "\uf6a9 {icon}\uf294",
|
||||||
"format-muted": "<span size='13pt'> </span>muted",
|
"format-muted": "<span size='13pt'>\uf6a9 </span>muted",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"headphone": " ",
|
"headphone": "\uf025 ",
|
||||||
"hands-free": " ",
|
"hands-free": "\uf025 ",
|
||||||
"headset": " ",
|
"headset": "\uf025 ",
|
||||||
"phone": " ",
|
"phone": "\uf095 ",
|
||||||
"portable": " ",
|
"portable": "\uf095 ",
|
||||||
"car": " ",
|
"car": "\uf1b9 ",
|
||||||
"default": [
|
"default": [
|
||||||
" ",
|
"\uf026 ",
|
||||||
" ",
|
"\uf027 ",
|
||||||
" "
|
"\uf028 "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
@@ -80,21 +81,21 @@
|
|||||||
"critical": 10
|
"critical": 10
|
||||||
},
|
},
|
||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'>\uf0e7 </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'>\uf1e6 </span>{capacity}%",
|
||||||
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
"tooltip-format-plugged": "Plugged in, not charging \u2014 held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap \u00b7 click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
"\uf244 ",
|
||||||
" ",
|
"\uf243 ",
|
||||||
" ",
|
"\uf242 ",
|
||||||
" ",
|
"\uf241 ",
|
||||||
" "
|
"\uf240 "
|
||||||
],
|
],
|
||||||
"on-click": "nomarchy-menu powermgmt",
|
"on-click": "nomarchy-menu powermgmt",
|
||||||
"tooltip-format": "Battery status"
|
"tooltip-format": "Battery status"
|
||||||
},
|
},
|
||||||
"clock": {
|
"clock": {
|
||||||
"format": " {:%H:%M · %a %d %b}",
|
"format": "\uf017 {:%H:%M \u00b7 %a %d %b}",
|
||||||
"on-click": "nomarchy-calendar",
|
"on-click": "nomarchy-calendar",
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
"tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}"
|
||||||
@@ -130,7 +131,7 @@
|
|||||||
"on-click": "nomarchy-vpn"
|
"on-click": "nomarchy-vpn"
|
||||||
},
|
},
|
||||||
"hyprland/language": {
|
"hyprland/language": {
|
||||||
"format": "<span size='13pt'> </span>{short}",
|
"format": "<span size='13pt'>\udb80\udf0c </span>{short}",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
"custom/nightlight": {
|
"custom/nightlight": {
|
||||||
@@ -156,19 +157,26 @@
|
|||||||
"on-click": "swaync-client -t -sw",
|
"on-click": "swaync-client -t -sw",
|
||||||
"on-click-right": "swaync-client -d -sw",
|
"on-click-right": "swaync-client -d -sw",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"none": "",
|
"none": "\uf0f3",
|
||||||
"notification": "",
|
"notification": "\uf0f3",
|
||||||
"dnd-none": "",
|
"dnd-none": "\uf1f6",
|
||||||
"dnd-notification": "",
|
"dnd-notification": "\uf1f6",
|
||||||
"inhibited-none": "",
|
"inhibited-none": "\uf1f6",
|
||||||
"inhibited-notification": "",
|
"inhibited-notification": "\uf1f6",
|
||||||
"dnd-inhibited-none": "",
|
"dnd-inhibited-none": "\uf1f6",
|
||||||
"dnd-inhibited-notification": ""
|
"dnd-inhibited-notification": "\uf1f6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"custom/powermenu": {
|
"custom/powermenu": {
|
||||||
"format": "",
|
"format": "\uf011",
|
||||||
"on-click": "nomarchy-menu power",
|
"on-click": "nomarchy-menu power",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/airplane": {
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 5,
|
||||||
|
"signal": 11,
|
||||||
|
"exec": "nomarchy-airplane status",
|
||||||
|
"on-click": "nomarchy-airplane toggle"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user