mirror of
https://github.com/cmderdev/cmder.git
synced 2025-11-09 13:49:05 +08:00
153 lines
5.2 KiB
Bash
153 lines
5.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Copy this file to your non integrated *nix-like environment,
|
|
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
|
# folder to integrate the externally installed Unix like environment
|
|
# into Cmder so it has access to settings stored in Cmder/config
|
|
# folder when launched.
|
|
#
|
|
# The destination file extension depends on the shell you use. For example:
|
|
#
|
|
# bash - Copy to /etc/profile.d/cmder_exinit.sh
|
|
# zsh - Copy to /etc/profile.d/cmder_exinit.zsh
|
|
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh or
|
|
# add whole config scripts to ${CMDER_ROOT}/config/profile.d both will be sourced
|
|
# from this file and be applied to the environment at startup.
|
|
#
|
|
# These customizations will follow Cmder if $CMDER_ROOT is copied
|
|
# to another machine.
|
|
#
|
|
# Add system specific users customizations to $HOME/.bashrc, these
|
|
# customizations will not follow Cmder to another machine.
|
|
|
|
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
|
|
# # from outside Cmder.
|
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
|
|
|
# Source all .sh or .zsh scripts in a given directory based on shell type
|
|
# Args: $1 - directory path containing shell scripts to source
|
|
run_profile_d() {
|
|
local profile_d_scripts
|
|
pushd "${1}" >/dev/null || return
|
|
|
|
if [ -n "${ZSH_VERSION}" ]; then
|
|
# shellcheck disable=SC2035
|
|
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
|
elif [ -n "${BASH_VERSION}" ]; then
|
|
# shellcheck disable=SC2035
|
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
|
fi
|
|
|
|
if [ -n "${profile_d_scripts}" ]; then
|
|
for script in ${profile_d_scripts}; do
|
|
echo "Sourcing ${1}/${script}..."
|
|
# shellcheck disable=SC1090
|
|
. "${1}/${script}"
|
|
done
|
|
fi
|
|
popd >/dev/null || return
|
|
}
|
|
|
|
# Check that we haven't already been sourced
|
|
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
|
|
|
# Detect and set CMDER_ROOT for bash admin sessions
|
|
# Converts Windows paths to Unix paths if needed
|
|
# ConEmuDir is set by ConEmu/Cmder environment
|
|
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then
|
|
if [ -d "${ConEmuDir}../../vendor" ]; then
|
|
case "$ConEmuDir" in
|
|
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
|
esac
|
|
else
|
|
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
|
fi
|
|
elif [ -n "$CMDER_ROOT" ]; then
|
|
case "$CMDER_ROOT" in
|
|
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
|
esac
|
|
fi
|
|
|
|
# If CMDER_ROOT is still not set, try to derive from script location
|
|
# Note: This only works if cmder_exinit is in its original location (vendor/)
|
|
if [ -z "$CMDER_ROOT" ] && [ -f "${BASH_SOURCE[0]}" ]; then
|
|
# Check if we're in the vendor directory
|
|
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
if [[ "$script_dir" == */vendor ]] || [[ "$script_dir" == */vendor/* ]]; then
|
|
# Extract the Cmder root (parent of vendor)
|
|
CMDER_ROOT="$( cd "$script_dir/.." && pwd )"
|
|
# Verify this looks like a Cmder installation
|
|
if [ ! -d "${CMDER_ROOT}/vendor" ]; then
|
|
unset CMDER_ROOT
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$CMDER_ROOT" ]; then
|
|
# Remove any trailing '/' from CMDER_ROOT
|
|
CMDER_ROOT="${CMDER_ROOT%/}"
|
|
|
|
echo "Using CMDER_ROOT at \"${CMDER_ROOT}\"."
|
|
|
|
export CMDER_ROOT
|
|
|
|
# Add Cmder directories to PATH
|
|
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
|
|
|
export PATH
|
|
|
|
# Create profile.d directory if it doesn't exist
|
|
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
|
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
|
fi
|
|
|
|
# Source all shell scripts in profile.d directories
|
|
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
|
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
|
fi
|
|
|
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
|
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
|
fi
|
|
|
|
|
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
|
fi
|
|
|
|
# Source user profile from CMDER_ROOT config
|
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
|
# shellcheck disable=SC1091
|
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
|
fi
|
|
|
|
# Handle CMDER_USER_CONFIG if set
|
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
|
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
|
fi
|
|
|
|
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
|
|
|
# Source user profile from CMDER_USER_CONFIG
|
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
|
# shellcheck disable=SC1091
|
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
|
fi
|
|
fi
|
|
|
|
# Determine the user profile path for creation if needed
|
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
|
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
|
else
|
|
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
|
fi
|
|
|
|
# Create user profile from default template if it doesn't exist
|
|
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
|
echo "Creating user startup file: ${cmder_user_profile_path}"
|
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
|
fi
|
|
fi
|