mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 00:33:00 +00:00
231 lines
7.9 KiB
Bash
231 lines
7.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Adds better error handling and safety features
|
|
# shellcheck disable=SC2016
|
|
|
|
set -e # Exit immediately if a command exits with a non-zero status
|
|
set -u # Treat unset variables as an error
|
|
|
|
# Create temporary working directory
|
|
TEMP_DIR="${HOME}/.tmp/catppuccin-install"
|
|
mkdir -p "${TEMP_DIR}"
|
|
|
|
# Create config directories
|
|
mkdir -p "${HOME}/.config/tmux/plugins"
|
|
mkdir -p "${HOME}/.config/yazi"
|
|
mkdir -p "${HOME}/.config/btop/themes"
|
|
mkdir -p "${HOME}/.config/git"
|
|
mkdir -p "${HOME}/.config/lsd"
|
|
mkdir -p "${HOME}/.local/share/mc/skins"
|
|
mkdir -p "${HOME}/.config/fish/themes"
|
|
mkdir -p "${HOME}/.local/share/fcitx5/themes"
|
|
|
|
# Function for downloading files
|
|
download_file() {
|
|
local url="$1"
|
|
local output_path="$2"
|
|
local output_dir
|
|
|
|
# Extract directory from output path
|
|
output_dir=$(dirname "$output_path")
|
|
|
|
# Create directory if it doesn't exist
|
|
if [ ! -d "$output_dir" ]; then
|
|
mkdir -p "$output_dir"
|
|
fi
|
|
|
|
# Print status message
|
|
echo "Downloading: $url"
|
|
echo " to: $output_path"
|
|
|
|
# Download with curl (using -L to follow redirects)
|
|
if ! curl -L -s --fail "$url" -o "$output_path"; then
|
|
echo "Error: Failed to download $url" >&2
|
|
return 1
|
|
fi
|
|
|
|
# Verify file was downloaded
|
|
if [ ! -f "$output_path" ]; then
|
|
echo "Error: File was not created at $output_path" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "Download successful."
|
|
return 0
|
|
}
|
|
|
|
# Function to check if command exists
|
|
command_exists() {
|
|
command -v "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
# Install Bat themes
|
|
if command_exists bat; then
|
|
BAT_CONFIG_DIR=$(bat --config-dir 2>/dev/null || echo "${HOME}/.config/bat")
|
|
mkdir -p "${BAT_CONFIG_DIR}/themes"
|
|
|
|
echo "Installing Bat themes..."
|
|
THEMES=("Latte" "Frappe" "Macchiato" "Mocha")
|
|
|
|
for theme in "${THEMES[@]}"; do
|
|
download_file "https://github.com/catppuccin/bat/raw/main/themes/Catppuccin%20${theme}.tmTheme" \
|
|
"${BAT_CONFIG_DIR}/themes/Catppuccin ${theme}.tmTheme"
|
|
done
|
|
|
|
echo "Rebuilding Bat cache..."
|
|
bat cache --build || echo "WARNING: Failed to rebuild Bat cache" >&2
|
|
else
|
|
echo "Bat not found, skipping Bat themes installation" >&2
|
|
fi
|
|
|
|
# Install Tmux plugin
|
|
if command_exists tmux; then
|
|
echo "Installing Tmux plugin..."
|
|
|
|
TMUX_PLUGIN_DIR="${HOME}/.config/tmux/plugins/catppuccin"
|
|
rm -rf "${TMUX_PLUGIN_DIR}"
|
|
mkdir -p "${TMUX_PLUGIN_DIR}"
|
|
|
|
if command_exists git; then
|
|
if ! git clone -b v2.1.2 --depth=1 https://github.com/catppuccin/tmux.git "${TMUX_PLUGIN_DIR}/tmux" 2>/dev/null; then
|
|
echo "WARNING: Failed to clone Tmux plugin repository" >&2
|
|
fi
|
|
else
|
|
echo "Git not found, skipping Tmux plugin installation" >&2
|
|
fi
|
|
else
|
|
echo "Tmux not found, skipping Tmux plugin installation" >&2
|
|
fi
|
|
|
|
# Install Yazi theme
|
|
if command_exists yazi; then
|
|
echo "Installing Yazi theme..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/yazi/main/themes/mocha/catppuccin-mocha-lavender.toml" \
|
|
"${HOME}/.config/yazi/theme.toml"
|
|
else
|
|
echo "Yazi not found, skipping Yazi theme installation" >&2
|
|
fi
|
|
|
|
# Install BTopa themes
|
|
if command_exists btop; then
|
|
echo "Installing BTopa themes..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_mocha.theme" \
|
|
"${HOME}/.config/btop/themes/catppuccin_mocha.theme"
|
|
download_file "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_latte.theme" \
|
|
"${HOME}/.config/btop/themes/catppuccin_latte.theme"
|
|
else
|
|
echo "BTopa not found, skipping BTopa themes installation" >&2
|
|
fi
|
|
|
|
# Install Delta config
|
|
echo "Installing Delta config..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/delta/main/catppuccin.gitconfig" \
|
|
"${HOME}/.config/git/catppuccin-delta.gitconfig"
|
|
|
|
# Configure FZF
|
|
if command_exists fzf; then
|
|
echo "Configuring FZF..."
|
|
|
|
# Check shell type to determine how to set environment variables
|
|
if [ -n "${FISH_VERSION:-}" ] || command_exists fish; then
|
|
# For Fish shell
|
|
fish -c 'set -U FZF_DEFAULT_OPTS "--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc --color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 --color=selected-bg:#45475a --multi"' \
|
|
|| echo "WARNING: Failed to set FZF options for Fish shell" >&2
|
|
else
|
|
# For Bash/Zsh - add to both .bashrc and .zshrc if they exist
|
|
FZF_CONFIG="export FZF_DEFAULT_OPTS=\"--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc --color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 --color=selected-bg:#45475a --multi\""
|
|
|
|
# Add to .bashrc if it exists
|
|
if [ -f "${HOME}/.bashrc" ]; then
|
|
if ! grep -q "FZF_DEFAULT_OPTS.*catppuccin" "${HOME}/.bashrc"; then
|
|
echo "${FZF_CONFIG}" >>"${HOME}/.bashrc"
|
|
echo "Added FZF configuration to .bashrc"
|
|
fi
|
|
fi
|
|
|
|
# Add to .zshrc if it exists
|
|
if [ -f "${HOME}/.zshrc" ]; then
|
|
if ! grep -q "FZF_DEFAULT_OPTS.*catppuccin" "${HOME}/.zshrc"; then
|
|
echo "${FZF_CONFIG}" >>"${HOME}/.zshrc"
|
|
echo "Added FZF configuration to .zshrc"
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
echo "FZF not found, skipping FZF configuration" >&2
|
|
fi
|
|
|
|
# Install LSD themes
|
|
if command_exists lsd; then
|
|
echo "Installing LSD themes..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/lsd/main/themes/catppuccin-mocha/colors.yaml" \
|
|
"${HOME}/.config/lsd/colors.yaml"
|
|
download_file "https://raw.githubusercontent.com/catppuccin/lsd/main/themes/catppuccin-latte/colors.yaml" \
|
|
"${HOME}/.config/lsd/colors-light.yaml"
|
|
else
|
|
echo "LSD not found, skipping LSD themes installation" >&2
|
|
fi
|
|
|
|
# Install Midnight Commander skin
|
|
echo "Installing Midnight Commander skin..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/mc/main/catppuccin.ini" \
|
|
"${HOME}/.local/share/mc/skins/catppuccin.ini"
|
|
|
|
# Print MC configuration hint
|
|
echo "Note: To use the Midnight Commander theme:"
|
|
echo " - Change or add skin=catppuccin in the [Midnight-Commander] section inside ~/.config/mc/ini"
|
|
echo " - OR choose the skin inside Midnight Commander through F9 > Options > Appearance"
|
|
echo " - Save setup through F9 > Options > Save setup"
|
|
|
|
# Install PowerShell module
|
|
if command_exists pwsh; then
|
|
echo "Installing PowerShell module..."
|
|
PS_MODULE_PATH=$(pwsh -C 'Write-Output $Env:PSModulePath.split(":")[0]' 2>/dev/null)
|
|
|
|
if [ -n "${PS_MODULE_PATH}" ]; then
|
|
if command_exists git; then
|
|
if ! git clone --depth=1 https://github.com/catppuccin/powershell.git "${PS_MODULE_PATH}/Catppuccin" 2>/dev/null; then
|
|
echo "WARNING: Failed to clone PowerShell module repository" >&2
|
|
fi
|
|
else
|
|
echo "Git not found, skipping PowerShell module installation" >&2
|
|
fi
|
|
else
|
|
echo "PowerShell module path not found, skipping PowerShell module installation" >&2
|
|
fi
|
|
else
|
|
echo "PowerShell not found, skipping PowerShell module installation" >&2
|
|
fi
|
|
|
|
# Install Fish themes
|
|
if command_exists fish; then
|
|
echo "Installing Fish themes..."
|
|
download_file "https://raw.githubusercontent.com/catppuccin/fish/main/themes/Catppuccin%20Mocha.theme" \
|
|
"${HOME}/.config/fish/themes/Catppuccin Mocha.theme"
|
|
download_file "https://raw.githubusercontent.com/catppuccin/fish/main/themes/Catppuccin%20Latte.theme" \
|
|
"${HOME}/.config/fish/themes/Catppuccin Latte.theme"
|
|
else
|
|
echo "Fish not found, skipping Fish themes installation" >&2
|
|
fi
|
|
|
|
# Install Fcitx5 themes
|
|
if command_exists fcitx5; then
|
|
echo "Installing Fcitx5 themes..."
|
|
|
|
rm -rf "${TEMP_DIR}/fcitx5"
|
|
if command_exists git; then
|
|
if git clone --depth=1 https://github.com/catppuccin/fcitx5.git "${TEMP_DIR}/fcitx5" 2>/dev/null; then
|
|
cp -r "${TEMP_DIR}/fcitx5/src/"* "${HOME}/.local/share/fcitx5/themes/"
|
|
else
|
|
echo "WARNING: Failed to clone Fcitx5 repository" >&2
|
|
fi
|
|
else
|
|
echo "Git not found, skipping Fcitx5 themes installation" >&2
|
|
fi
|
|
else
|
|
echo "Fcitx5 not found, skipping Fcitx5 themes installation" >&2
|
|
fi
|
|
|
|
# Clean up temporary directory
|
|
rm -rf "${TEMP_DIR}"
|
|
|
|
echo "Catppuccin themes installation completed!"
|