# ============================================================================ # Dotfiles Configuration Loader # ============================================================================ # This file loads dotfiles.conf and sets up all configuration variables. # It serves as the bridge between dotfiles.conf and the rest of the system. # # Source this file to get access to all configuration: # source "${0:A:h}/config.zsh" # # This file: # 1. Finds and sources dotfiles.conf # 2. Sets sensible defaults for any missing values # 3. Exports variables for use in subshells/scripts # ============================================================================ # Prevent double-sourcing [[ -n "$_DF_CONFIG_LOADED" ]] && return 0 # ============================================================================ # Find and Source dotfiles.conf # ============================================================================ _df_find_config() { local locations=( "${DOTFILES_DIR}/dotfiles.conf" "${DOTFILES_HOME}/dotfiles.conf" "$HOME/.dotfiles/dotfiles.conf" "${0:A:h}/../../dotfiles.conf" ) for loc in "${locations[@]}"; do [[ -f "$loc" ]] && { echo "$loc"; return 0; } done return 1 } _DF_CONFIG_FILE=$(_df_find_config) if [[ -n "$_DF_CONFIG_FILE" && -f "$_DF_CONFIG_FILE" ]]; then source "$_DF_CONFIG_FILE" typeset -g _DF_CONFIG_LOADED=1 else # Config file not found - set critical defaults typeset -g _DF_CONFIG_LOADED=1 fi # ============================================================================ # Set Defaults for Any Missing Values # ============================================================================ # These defaults ensure scripts work even if dotfiles.conf is incomplete # Core Settings typeset -g DOTFILES_VERSION="${DOTFILES_VERSION:-1.0.0}" typeset -g DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}" typeset -g DOTFILES_HOME="${DOTFILES_HOME:-$DOTFILES_DIR}" # Alias for compatibility typeset -g DOTFILES_BRANCH="${DOTFILES_BRANCH:-main}" typeset -g DOTFILES_BACKUP_PREFIX="${DOTFILES_BACKUP_PREFIX:-$HOME/.dotfiles_backup}" # GitHub Settings typeset -g DOTFILES_GITHUB_USER="${DOTFILES_GITHUB_USER:-adlee-was-taken}" typeset -g DOTFILES_REPO_NAME="${DOTFILES_REPO_NAME:-dotfiles}" typeset -g DOTFILES_REPO_URL="${DOTFILES_REPO_URL:-https://github.com/${DOTFILES_GITHUB_USER}/${DOTFILES_REPO_NAME}.git}" typeset -g DOTFILES_RAW_URL="${DOTFILES_RAW_URL:-https://raw.githubusercontent.com/${DOTFILES_GITHUB_USER}/${DOTFILES_REPO_NAME}/${DOTFILES_BRANCH}}" # Display Settings typeset -g DF_WIDTH="${DF_WIDTH:-66}" typeset -g ENABLE_MOTD="${ENABLE_MOTD:-true}" typeset -g MOTD_STYLE="${MOTD_STYLE:-compact}" typeset -g MOTD_SHOW_FAILED_SERVICES="${MOTD_SHOW_FAILED_SERVICES:-true}" typeset -g MOTD_SHOW_UPDATES="${MOTD_SHOW_UPDATES:-true}" # Theme Settings typeset -g ZSH_THEME_NAME="${ZSH_THEME_NAME:-adlee}" typeset -g THEME_TIMER_THRESHOLD="${THEME_TIMER_THRESHOLD:-10}" typeset -g THEME_PATH_TRUNCATE_LENGTH="${THEME_PATH_TRUNCATE_LENGTH:-32}" # Feature Toggles typeset -g ENABLE_SMART_SUGGESTIONS="${ENABLE_SMART_SUGGESTIONS:-true}" typeset -g ENABLE_COMMAND_PALETTE="${ENABLE_COMMAND_PALETTE:-true}" typeset -g ENABLE_SHELL_ANALYTICS="${ENABLE_SHELL_ANALYTICS:-false}" typeset -g ENABLE_VAULT="${ENABLE_VAULT:-true}" typeset -g DOTFILES_AUTO_SYNC_CHECK="${DOTFILES_AUTO_SYNC_CHECK:-true}" # Btrfs Settings typeset -g BTRFS_DEFAULT_MOUNT="${BTRFS_DEFAULT_MOUNT:-/}" # Snapper Settings typeset -g SNAPPER_CONFIG="${SNAPPER_CONFIG:-root}" typeset -g LIMINE_CONF="${LIMINE_CONF:-/boot/limine.conf}" # Tmux Settings typeset -g TW_SESSION_PREFIX="${TW_SESSION_PREFIX:-work}" typeset -g TW_DEFAULT_TEMPLATE="${TW_DEFAULT_TEMPLATE:-dev}" # Python Template Settings typeset -g PY_TEMPLATE_BASE_DIR="${PY_TEMPLATE_BASE_DIR:-$HOME/projects}" typeset -g PY_TEMPLATE_PYTHON="${PY_TEMPLATE_PYTHON:-python3}" typeset -g PY_TEMPLATE_VENV_NAME="${PY_TEMPLATE_VENV_NAME:-venv}" typeset -g PY_TEMPLATE_USE_POETRY="${PY_TEMPLATE_USE_POETRY:-false}" typeset -g PY_TEMPLATE_GIT_INIT="${PY_TEMPLATE_GIT_INIT:-true}" # SSH Settings typeset -g SSH_AUTO_TMUX="${SSH_AUTO_TMUX:-true}" typeset -g SSH_TMUX_SESSION_PREFIX="${SSH_TMUX_SESSION_PREFIX:-ssh}" typeset -g SSH_SYNC_DOTFILES="${SSH_SYNC_DOTFILES:-ask}" # Password Manager Settings typeset -g PW_CLIP_TIME="${PW_CLIP_TIME:-45}" # Package Manager typeset -g AUR_HELPER="${AUR_HELPER:-auto}" # Git Settings (with fallbacks to user identity) typeset -g GIT_USER_NAME="${GIT_USER_NAME:-$USER_FULLNAME}" typeset -g GIT_USER_EMAIL="${GIT_USER_EMAIL:-$USER_EMAIL}" typeset -g GIT_DEFAULT_BRANCH="${GIT_DEFAULT_BRANCH:-main}" # ============================================================================ # Export for Bash Scripts # ============================================================================ # Bash scripts can't see typeset -g, so we export key variables export DOTFILES_VERSION DOTFILES_DIR DOTFILES_HOME DOTFILES_BRANCH export DOTFILES_GITHUB_USER DOTFILES_REPO_NAME DOTFILES_REPO_URL DOTFILES_RAW_URL export DF_WIDTH MOTD_STYLE export ZSH_THEME_NAME # ============================================================================ # Helper Function: Get Config Value # ============================================================================ # Usage: df_config "VARIABLE_NAME" "default_value" df_config() { local var_name="$1" local default="$2" local value="${(P)var_name}" echo "${value:-$default}" } # ============================================================================ # Helper Function: Show Config Summary # ============================================================================ df_show_config() { echo "Dotfiles Configuration" echo "======================" echo "Config File: ${_DF_CONFIG_FILE:-not found}" echo "Version: $DOTFILES_VERSION" echo "Directory: $DOTFILES_DIR" echo "Branch: $DOTFILES_BRANCH" echo "Display Width: $DF_WIDTH" echo "MOTD Style: $MOTD_STYLE" echo "Theme: $ZSH_THEME_NAME" }