# NoSignal — notes for an AI agent working on this machine You are on **NoSignal**: Arch Linux + Hyprland + the Caelestia shell (Quickshell) + SDDM (themed greeter). A "NoSignal layer" of config and tooling sits ON TOP of stock Caelestia. Read this before changing desktop/system config — your job is to help the user manage their machine safely. ## Config layout — what is safe to edit - `~/.config/caelestia/` — **the NoSignal override layer** (edit here): - `hypr-user.conf` — user binds/rules/exec-once; sourced LAST, so it wins. This is the right place for new keybinds. `unbind =` works here. - `hypr-vars.conf` — `$variables` ($terminal, $kb*, gaps, blur…); sourced BEFORE keybinds.conf consumes them. - `shell.json`, `shell-tokens.json` — Caelestia shell appearance/behaviour. - Deleting any of these files restores stock Caelestia behaviour. - `~/.config/hypr` is a **SYMLINK** into `~/.local/share/caelestia` (the dotfiles clone). Several other `~/.config` entries (foot, fish, fastfetch, uwsm) are symlinks into it too. **Never replace these symlinks with copies** and never edit the clone's hyprland.conf directly — use hypr-user.conf. - `~/.config/hypr/scripts/wsaction.fish` and `configs.fish` are **bash** ports kept under their original .fish names (the stock config calls those paths). Keep the names and the bash shebang. ## Updates - `~/.local/share/nosignal/` — the on-system layer: component sources, the keybindings doc, and `nosignal-update/` (the update command + its migrations). - **`nosignal-update`** = the system update command: snapper snapshot → `yay -Syu` → run any NEW migrations. Applied migrations are tracked in `~/.local/state/nosignal/applied` — do not re-run or edit by hand. ## Keybindings - `Super+K` (aliases `Super+/`, `Super+F1`) = searchable fuzzel cheatsheet. - **Source of truth: `~/.local/share/nosignal/NoSignal-keybindings.md`** — the cheatsheet is GENERATED from it (`nosignal-keybinds-gen`). If you add a bind in hypr-user.conf, document it in that file too. - Layout follows **Omarchy defaults**: Super+Return terminal (kitty, bash), Super+W close, Super+Space launcher, Super+Tab next workspace, **Super+Grave = workspace overview**, Super+I Shelly store, Super+Ctrl+H monitor editor, Super+Shift+number move-to-workspace (bound by KEYCODE — GB layout). - **Super+C / Super+V = universal copy/paste** (class-aware sendshortcut; clipboard HISTORY is Super+Ctrl+V). **Print = region screenshot** → clipboard + ~/Pictures/Screenshots (Shift+Print full). **Super+D = dashboard/calendar** (communication workspace → Super+Shift+D). **Super+M = CLIAmp**, the default music player (floating TUI; audio files open in it via `~/.config/mimeapps.list`). The shell's music/MPRIS panel is **Super+Shift+M**. ## Shell / desktop architecture gotchas - The Caelestia shell runs from `/etc/xdg/quickshell/caelestia`. NoSignal patches THREE things there, each re-applied by its own pacman hook after every caelestia-shell upgrade: the Settings → System → **Updates** page (`PageCompRegistry.qml` + `pages/UpdatesPage.qml`), the Settings → **Additions** page (same registry + `pages/AdditionsPage.qml` + Plugins→Additions relabel in `PageRegistry.qml`; backend = `nosignal-additions` + `additions.json` in the layer tree), and the Wi-Fi wrong-password recovery in `utils/NetworkConnection.qml`. **Do NOT create `~/.config/quickshell/caelestia`** — a user copy shadows /etc/xdg and silently drops the patches (and future ones). If the shell ever fails at login (background but no bar): reproduce with `qs -c caelestia -n` from a TTY (`WAYLAND_DISPLAY=wayland-1`) to get the QML error chain; suspect the page patches first. - The workspace **overview is a separate Quickshell instance** (`~/.config/quickshell/overview`, `qs -c overview -d`, IPC-toggled by Super+Grave). It is independent of the main shell. - The update-status timer (`nosignal-update-check.timer`, user), `hyprmoncfgd` (monitor hotplug profiles, user) and `hyprmoncfgd-rescan.path` (watches `~/.config/hyprmoncfg/profiles/` and bounces the daemon so plain profile saves apply live) are enabled systemd USER units. Status: `systemctl --user status `. ## Monitors - Use **hyprmoncfg** (`Super+Ctrl+H`, TUI) — it writes `~/.config/hypr/monitors.conf` (+ workspaces.conf), which hypr-user.conf sources. Keep those `source =` lines; hyprmoncfg refuses to write otherwise. - Both the TUI bind and the `hyprmoncfgd` daemon run with `--hypr-config ~/.config/caelestia/hypr-user.conf --monitors-conf ~/.config/hypr/monitors.conf` (hyprmoncfg doesn't follow nested `source =` includes). Keep the flags; the daemon's drop-in lives at `~/.config/systemd/user/hyprmoncfgd.service.d/override.conf`. ## Login / display manager / gaming - **SDDM** is the display manager. Config drop-ins in `/etc/sddm.conf.d/`: `10-nosignal.conf` (X11 greeter, uwsm session notes) + `20-sddm-theme.conf` (themed greeter). The desktop session MUST stay `hyprland-uwsm.desktop` (uwsm-managed) — plain hyprland.desktop loses caelestia's session env. - The greeter theme (`/usr/share/sddm/themes/caelestia`) mirrors the desktop scheme. After changing wallpaper, run **`sudo sddm-theme-sync`** to update the login screen (it does not auto-follow). - **Gaming Mode is OPT-IN**: run `sh ~/deckshift/deckshift.sh`, then `sh ~/.local/share/nosignal/deckshift-login/install-deckshift-login.sh` (re-run the fix after any deckshift.sh re-run). Then Super+Shift+S enters the full gamescope/Steam session; Super+Shift+R (inside it) returns. Cold boots always show the password greeter (one-shot autologin). `[multilib]` is enabled and `omarchy-pkg-add` & friends are shims in `~/.local/bin`. ## Packages / system - `yay` for AUR; **Shelly** (`shelly-ui`, Super+I) is the GUI store (repos + AUR + Flathub). Flathub remote is preconfigured. Settings → **Additions** installs curated optional software (DeckShift, Spotify, Once, Obsidian, OBS, Claude Code, Codex, opencode) from official sources only — extend via `additions.json` in the layer tree, no code changes. - The firewall is **ufw**, enabled with Omarchy-style defaults — it is easy to miss because nothing advertises it: `sudo ufw status`. - The `fish` package is REQUIRED by caelestia-meta — do not remove it, even though bash is the login/terminal shell. - Btrfs + snapper: every pacman transaction snapshots (snap-pac); snapshots are BOOTABLE from the Limine menu (limine-snapper-sync, UKI at /boot/EFI/Linux/nosignal_linux.efi). Worst case: reboot → pick a snapshot. - `[omarchy]` repo in pacman.conf provides prebuilt limine-snapper tools. - omarchy-send is installed (LAN file transfer; receive dir `~/Omarchy-Send`, TUI in launcher, CLI: `omarchy-send -to `). Its config contains a private key — never copy/share `~/.config/omarchy-send/`. ## Theme - Wallpapers: `~/Pictures/Wallpapers/nosignal/` (the OS art set; default foam-sea.png). The colour scheme is Caelestia's **dynamic** Material scheme, generated FROM the current wallpaper — change wallpaper via the Caelestia UI or `caelestia wallpaper -f ` and the palette follows. The SDDM greeter does NOT auto-follow: run `sudo sddm-theme-sync` after.