#!/bin/bash # Install udt by symlink, so the repo stays canonical. # Copyright (C) 2026 Danilo M. # Licensed under the GNU General Public License v2 only. set -euo pipefail repo="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" target="$HOME/.config/rofi/udt" mkdir -p "$target" "$HOME/bin" "$HOME/.cache/wal" # Generate every themed config from the selected scheme first: the rofi palette # symlinked below is one of its outputs, so this has to run before anything is # linked. It fails loudly if a role names a colour the scheme does not define, # which is the whole point of keeping the colours in one place. selector="$HOME/.config/udt/roles.conf" if [ ! -f "$selector" ]; then install -Dm644 "$repo/palette/roles.conf.default" "$selector" echo "seeded $selector" fi "$repo/bin/udt-palette" # Theme files are symlinked individually; accent.rasi is NOT, it points at the # generated file in the wal cache instead. for f in palette.rasi common.rasi menu.rasi list.rasi grid.rasi powermenu.rasi confirm.rasi; do ln -sfn "$repo/rofi/udt/$f" "$target/$f" done # launcher.rasi is generated rather than symlinked: its wallpaper path comes # from the wal cache and cannot be committed. Regenerating it is why re-running # this script after moving the repo is safe. rm -f "$target/launcher.rasi" sed "s|@WPAPER@|$HOME/.cache/wal/wpaper|" \ "$repo/rofi/udt/launcher.rasi" > "$target/launcher.rasi" # Seed the generated accent if it does not exist yet, so themes parse on a # fresh install before any wallpaper has been set. if [ ! -f "$HOME/.cache/wal/udt-accent.rasi" ]; then cp "$repo/rofi/udt/accent.rasi" "$HOME/.cache/wal/udt-accent.rasi" fi ln -sfn "$HOME/.cache/wal/udt-accent.rasi" "$target/accent.rasi" ln -sfn "$repo/bin/udt-accent" "$HOME/bin/udt-accent" ln -sfn "$repo/bin/udt-palette" "$HOME/bin/udt-palette" # The generated configs for everything that is not rofi. These are copied # rather than symlinked: each app owns its config file and mixes theme keys # with settings that are none of this repo's business. scheme="$(sed -n 's/^scheme *= *//p' "$selector")" # waybar reads whichever themes/.css style.css imports, so write the file # under the scheme's own name and repoint the import. The older per-flavour # files in themes/ are left alone; they are simply no longer imported. install -Dm644 "$repo/templates/waybar/theme.css" \ "$HOME/.config/waybar/themes/$scheme.css" if [ -f "$HOME/.config/waybar/style.css" ]; then sed -i "s|@import \"themes/.*\.css\";|@import \"themes/$scheme.css\";|" \ "$HOME/.config/waybar/style.css" fi install -Dm644 "$repo/templates/terminal/kitty-theme.conf" \ "$HOME/.config/kitty/current-theme.conf" echo "installed:" ls -l "$target" "$HOME/bin/udt-accent"