mirror of
https://github.com/outbackdingo/hyprcosmic.git
synced 2026-08-25 14:53:21 +00:00
Two lines named /home/dingo outright: waybar's stylesheet and the wallpaper the `current` symlink points at. This file is installed verbatim into every user's config directory, so both worked for exactly one person -- and failed quietly for everyone else, because a waybar whose stylesheet cannot be read still starts and a wallpaper that was never set looks the same as one that failed to load. Nobody would have got an error message; they would have got an unstyled bar over a black screen. The wallpaper line was already a shell invocation, so it only needed $HOME. The bar was not, and this file is deliberately not a shell -- `~` and `$HOME` on a bare command line here are literal text, which is what stops a file that names programs from being escalated into arbitrary execution. So it now goes through `sh -c`, on the same terms the wallpaper line already established: naming `sh` is naming a program, and anyone who can write this file could already name any binary on the system. `exec` keeps the process tree flat, which matters because cosmic-session supervises these -- without it the shell would be what gets supervised, and a waybar that died would never be restarted. Verified that the expansion produces the same two paths that were hardcoded, and that both exist.
97 lines
5.0 KiB
Plaintext
97 lines
5.0 KiB
Plaintext
# 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/<theme>/<image>" \
|
|
# ~/.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
|