mirror of
https://github.com/outbackdingo/hyprcosmic-session.git
synced 2026-08-25 14:53:23 +00:00
Seed ~/.config from the skeleton, so a new machine has a desktop
A machine that had never run HyprCosmic logged in to a bare compositor: running, holding the display and accepting input, with nothing drawn on the screen and no binding that opened anything. waybar, the wallpaper and every keybinding come from ~/.config/hyprcosmic/autostart, and the package created no such file -- it shipped /usr/share/hyprcosmic and left the home directory to the reader of a README. Nothing reported an error, because as far as the session was concerned nothing had gone wrong, which is what makes it worth handling here rather than in a note. Only missing files are copied and an existing one is never touched, not even when the skeleton is newer: the file wins, one way, and a login is not an invitation to edit somebody's config. So this is safe on every start, and deleting a file is how you ask for the default back. Guarded throughout, like the log above it. A session that cannot seed should still start.
This commit is contained in:
@@ -112,6 +112,48 @@ if mkdir -p "$(dirname "$HYPRCOSMIC_LOG")" 2>/dev/null; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Seed the per-user configuration from the skeleton the package ships.
|
||||||
|
#
|
||||||
|
# waybar, the wallpaper and every keybinding come from
|
||||||
|
# ~/.config/hyprcosmic/autostart. A machine that has never run HyprCosmic has no
|
||||||
|
# such file, and what starts is a bare compositor: running, holding the display,
|
||||||
|
# accepting input, with nothing drawn on the screen and no binding that opens
|
||||||
|
# anything. Nothing reports an error, because as far as the session is concerned
|
||||||
|
# nothing has gone wrong -- which is what makes it worth handling here rather
|
||||||
|
# than in a note in the README.
|
||||||
|
#
|
||||||
|
# Only missing files are copied, and an existing one is never touched, not even
|
||||||
|
# when the skeleton is newer. The file wins, one way; a login is not an
|
||||||
|
# invitation to edit somebody's config. Two things follow from that: this is
|
||||||
|
# safe to run on every session start, and deleting a file is how you ask for the
|
||||||
|
# default back.
|
||||||
|
#
|
||||||
|
# Guarded throughout, like the log above. A session that cannot seed should
|
||||||
|
# still start -- the user is no worse off than before this ran.
|
||||||
|
HYPRCOSMIC_SKEL="${HYPRCOSMIC_SKEL:-/usr/share/hyprcosmic/skel}"
|
||||||
|
HYPRCOSMIC_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
|
if [[ -d "$HYPRCOSMIC_SKEL" ]]; then
|
||||||
|
# Paths under the skeleton mirror the layout under ~/.config exactly, so
|
||||||
|
# the destination is the relative path and nothing here needs a list of
|
||||||
|
# which file goes where.
|
||||||
|
while IFS= read -r -d '' src; do
|
||||||
|
rel="${src#"$HYPRCOSMIC_SKEL"/}"
|
||||||
|
dest="$HYPRCOSMIC_CONFIG_HOME/$rel"
|
||||||
|
if [[ -e "$dest" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# Every branch is an if rather than a && chain: set -e is on, and a
|
||||||
|
# trailing false would take the whole session down with it.
|
||||||
|
if mkdir -p "$(dirname "$dest")" 2>/dev/null && cp "$src" "$dest" 2>/dev/null; then
|
||||||
|
echo " seeded: $dest"
|
||||||
|
else
|
||||||
|
echo " seed failed: $dest"
|
||||||
|
fi
|
||||||
|
done < <(find "$HYPRCOSMIC_SKEL" -type f -print0 2>/dev/null | sort -z)
|
||||||
|
else
|
||||||
|
echo " no skeleton at $HYPRCOSMIC_SKEL; ~/.config is left as it is"
|
||||||
|
fi
|
||||||
|
|
||||||
# Selects the component set in cosmic-session's profile module: cosmic-panel,
|
# Selects the component set in cosmic-session's profile module: cosmic-panel,
|
||||||
# cosmic-launcher, cosmic-app-library, cosmic-workspaces, cosmic-bg and
|
# cosmic-launcher, cosmic-app-library, cosmic-workspaces, cosmic-bg and
|
||||||
# cosmic-files-applet are skipped; waybar and friends come from
|
# cosmic-files-applet are skipped; waybar and friends come from
|
||||||
|
|||||||
Reference in New Issue
Block a user