Files
hyprcosmic/config/autostart
T
gitops 316fb843c3 Autostart: set the wallpaper through the current symlink
The line named a wallpaper inside the theme directory directly, so importing a
different theme left it pointing at a path that no longer existed -- a blank
screen at the next login, with nothing in the log to say why, because nobody
asked for a wallpaper and so nothing reported one missing.

It now names ~/.local/share/wallpapers/hyprcosmic/current, the symlink
`import-theme --assets` maintains. rofi's local.rasi shows the same image in
the launcher sidebar and names the same link, so the two cannot drift.

Changing the wallpaper is now `ln -sfn`, not an edit to this file, which the
comment says so that the next person does not undo the indirection.

The path stays literal. This file is not a shell -- deliberately, so that a
file naming programs cannot be escalated into arbitrary execution -- so `~`
and `$HOME` would be passed through as text.
2026-08-10 11:48:17 +07:00

89 lines
4.6 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 hardcoded home path.
#
# 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.
#
# The style path below is therefore absolute and contains a home directory.
# This file is not a shell, so `~` and `$HOME` are literal text here -- replace
# the path with your own if you are copying this template.
waybar -c /usr/share/hyprcosmic/waybar/config.jsonc -s /home/dingo/.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/dingo/.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