# Programs the HyprCosmic session starts after COSMIC's own components. # # Installed to ~/.config/hyprcosmic/autostart and read by cosmic-session's # profile module. One command per line. Arguments and quoting work, but this is # NOT a shell: no $VAR, no ~, no globs, no $(...). Paths must be absolute. # # `#` starts a comment where a word would start, so `--color=#1a1b26` is fine # but `--color #1a1b26` is not; quote it as '#1a1b26' if you need the latter. # Keep cosmic-config in step with cosmic.conf for the whole session: compile # once at login, then again on every edit to it or to anything it sources. # # First in the file because its startup pass is what makes "the file wins" true # at login rather than only when you last ran `apply` by hand -- whatever # COSMIC's settings UI stored since then is overwritten before the desktop # settles. The bar does not read cosmic-config, so the ordering is for the # compositor's benefit, not waybar's. # # No --config: the default is derived from XDG_CONFIG_HOME (or HOME) inside the # process, so unlike the waybar line below this needs no shell to find a home # directory for it. # # A malformed edit is not fatal. It is reported to the session log and the last # good configuration stays in place, so a typo cannot leave you at a broken # desktop -- fix the file and the next save applies. cosmic-conf watch # The bar. The layout is shared and lives under /usr/share, but the stylesheet # has to be per-user: it imports a sibling theme.css holding the installed HyDE # theme's palette, and a relative @import resolves against the importing file. # # So the style path has to name a home directory, and this file is not a shell: # `~` and `$HOME` on a bare command line here are literal text, not expansions. # `sh -c` is what gets them expanded, for the same reason and under the same # terms as the wallpaper line below -- naming `sh` is naming a program, which # this file was always allowed to do. # # `exec` matters. Without it sh stays in the process tree as waybar's parent, # and cosmic-session would be supervising the shell rather than the bar: a # waybar that died would leave sh alive, so the restart that should have # happened never would. sh -c 'exec waybar -c /usr/share/hyprcosmic/waybar/config.jsonc -s "$HOME/.config/hyprcosmic/waybar/style.css"' # rofi is not a daemon. It is launched on demand by a keybinding, which COSMIC # stores in com.system76.CosmicSettings.Shortcuts rather than here. Set those # with `bind` lines in cosmic.conf and `cosmic-conf apply`; see config/cosmic.conf. # Wallpaper. The hyprcosmic profile does not start cosmic-bg, so without this # there is nothing drawing a background at all. # # HyDE calls this swww; upstream renamed it to awww at 0.12 and the Fedora # package Obsoletes swww < 0.12.0. /usr/bin/swww is a shim that prints a # deprecation warning and is documented as going away, so use the real name. # Packaged in the alebastr/sway-extras COPR. # # The daemon only holds the surface -- it shows nothing until an image is set. awww-daemon # ...which is what this does. Without it the daemon runs, draws nothing, and you # get a blank screen below the bar with no error anywhere: the failure is that # nobody asked for a wallpaper, so nothing reports one missing. # # `sh -c` rather than a bare `awww img`, for one reason: awww-daemon above has # only just been forked and is not listening yet, so an immediate `awww img` # loses a race and fails silently. The loop waits for the daemon to answer # before setting the image. # # This does not weaken the no-shell rule in the header. That rule exists so a # file naming programs cannot be escalated into arbitrary execution; naming # `sh` explicitly is just naming a program, and anyone able to write this file # could already name any binary on the system. # # `current` is a symlink `cosmic-conf import-theme --assets` maintains beside # the wallpapers it copies, pointing at one of them. It is named here rather # than a real file so that this line and rofi's local.rasi -- which shows the # same image in the launcher's sidebar -- cannot drift apart, and so that # importing a different theme does not leave this pointing at a path that no # longer exists. # # Change the wallpaper by repointing the link, not by editing this file: # # ln -sfn ~/".local/share/wallpapers/hyprcosmic//" \ # ~/.local/share/wallpapers/hyprcosmic/current sh -c 'until awww query >/dev/null 2>&1; do sleep 0.2; done; exec awww img "$HOME/.local/share/wallpapers/hyprcosmic/current"' # A terminal, unconditionally, as the way back in. # # Everything above assumes the keybindings work. If they do not -- a bad # `bind` line, a shortcut COSMIC declines to register, a compositor that came # up without input -- then there is no way to launch rofi, no way to launch a # terminal, and the only remaining option is a VT switch. Starting one terminal # at login costs a window you can close and removes that entire failure class. # # Last in the file so it is the most recently mapped window, and therefore on # top of anything else that opened during startup. cosmic-term