# shells Every directory in the repo holding a `shell.qml`, with whether `qs list --all` shows an instance on it, and a Restart (or Start, when it is not running) per row plus a Restart all. All three run `reload.sh`, so a button does what the script does from a terminal, wrapped by `restart.sh`, which then sends one notification naming the shells that came back, or a critical one naming those that did not. Back means a `qs` instance on the shell's config path under a pid it did not have before, within 5s: the old instance can linger in the list for a moment after `qs kill`. It is the process, not the config: a shell that starts with a broken component counts as back. The script is started with `Quickshell.execDetached`, which leaves it outside the desktop shell's process: restarting `desktop` from here kills the process drawing the page and the script carries on and starts the new one. The settings window closes with it and is not reopened. The new shell inherits the desktop shell's environment, which is the one Hyprland's autostart gave it. A hung desktop shell cannot be restarted from here, since the page is part of it. `./reload.sh` from a terminal remains the way out.