106 lines
No EOL
2.8 KiB
Bash
106 lines
No EOL
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
# Only print echos
|
|
set +x
|
|
|
|
# To fetch and use this script in a GitHub action:
|
|
#
|
|
# curl -s -S https://raw.githubusercontent.com/saberzero1/quartz-themes/master/action.sh | bash -s -- <THEME_NAME>
|
|
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[1;34m'
|
|
NC='\033[0m'
|
|
|
|
echo_err() { echo -e "${RED}$1${NC}"; }
|
|
echo_warn() { echo -e "${YELLOW}$1${NC}"; }
|
|
echo_ok() { echo -e "${GREEN}$1${NC}"; }
|
|
echo_info() { echo -e "${BLUE}$1${NC}"; }
|
|
|
|
THEME_DIR="themes"
|
|
QUARTZ_STYLES_DIR="quartz/styles"
|
|
FINAL_THEME_DIR="./$QUARTZ_STYLES_DIR/$THEME_DIR"
|
|
|
|
if [ -f "./$QUARTZ_STYLES_DIR/custom.scss" ]; then
|
|
echo_ok "Quartz root succesfully detected..."
|
|
FINAL_THEME_DIR="./$QUARTZ_STYLES_DIR/$THEME_DIR"
|
|
else
|
|
echo_warn "Quartz root not detected, checking if we are in the styles directory..."
|
|
if [ -f "./custom.scss" ]; then
|
|
echo_ok "Styles directory detected..."
|
|
FINAL_THEME_DIR="./$THEME_DIR"
|
|
else
|
|
echo_err "Cannot detect Quartz repository. Are you in the correct working directory?" 1>&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo -e "Input theme: ${BLUE}$*${NC}"
|
|
|
|
echo "Parsing input theme..."
|
|
|
|
# Concat parameters
|
|
result=""
|
|
|
|
for param in "$@"; do
|
|
if [[ -n "$result" ]]; then
|
|
result="$result-"
|
|
fi
|
|
|
|
result="$result$param"
|
|
done
|
|
|
|
if [ -z "$result" ]; then
|
|
echo_warn "No theme provided, defaulting to Tokyo Night..."
|
|
result="tokyo-night"
|
|
fi
|
|
|
|
# Convert to lowercase
|
|
THEME=$(echo "$result" | tr '[:upper:]' '[:lower:]')
|
|
|
|
echo -e "Theme ${BLUE}$*${NC} parsed to $(echo_info ${THEME})"
|
|
|
|
echo "Validating theme..."
|
|
|
|
echo "Cleaning theme directory..."
|
|
|
|
rm -rf ${FINAL_THEME_DIR}
|
|
|
|
echo "Creating theme directory..."
|
|
|
|
mkdir -p ${FINAL_THEME_DIR}
|
|
|
|
echo "Fetching theme files..."
|
|
|
|
# clone only the specified theme using sparse checkout to save bandwidth and time
|
|
git clone -n --depth=1 --filter=tree:0 https://github.com/saberzero1/quartz-themes.git &> /dev/null
|
|
git -C quartz-themes sparse-checkout set --no-cone /themes/${THEME} &> /dev/null
|
|
git -C quartz-themes checkout &> /dev/null
|
|
|
|
echo "Installing theme files..."
|
|
|
|
mv quartz-themes/themes/${THEME}/* ${FINAL_THEME_DIR}
|
|
rm -rf quartz-themes
|
|
|
|
echo "Applying patches..."
|
|
|
|
if grep -q -e "quartz themes dark-only" -e "quartz themes light-only" "$FINAL_THEME_DIR/_index.scss"; then
|
|
echo_warn "Single mode theme detected, applying patch..."
|
|
sed -i "/Component\.Darkmode\(\)/d" "quartz.layout.ts"
|
|
fi
|
|
|
|
echo "Verifying setup..."
|
|
|
|
cd ${FINAL_THEME_DIR}
|
|
|
|
if grep -q '^@use "./themes";' "../custom.scss"; then
|
|
# Import already present in custom.scss
|
|
echo_warn "Theme import line already present in custom.scss. Skipping..."
|
|
else
|
|
# Add `@use "./themes";` import to custom.scss
|
|
sed -ir 's#@use "./base.scss";#@use "./base.scss";\n@use "./themes";#' "../custom.scss"
|
|
echo_info "Added import line to custom.scss..."
|
|
fi
|
|
|
|
echo_ok "Finished fetching and applying theme '${THEME}'." |