feat: Improve way to determine and set the path containing the bash config
Before this: The bash config repo needed to be cloned in ~/.bash/ to work properly After this: The bash config repo can be move anywhere (for exemple in ~/.config/bash). The create-links.bash helper is adapted to this new behaviour. So you can clone anywhere and call create-links.bash from anywhere. Then the symbolic links in your home should be good and the config would load correctly.
This commit is contained in:
+40
-5
@@ -1,12 +1,47 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ -f "$HOME"/.nix-profile/etc/profile.d/hm-session-vars.sh ]; then
|
if [ -f "${HOME}"/.nix-profile/etc/profile.d/hm-session-vars.sh ]; then
|
||||||
source "$HOME"/.nix-profile/etc/profile.d/hm-session-vars.sh
|
source "${HOME}"/.nix-profile/etc/profile.d/hm-session-vars.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f "$HOME"/.bash/profile ]; then source "$HOME"/.bash/profile; fi
|
# Define the path to the directory of this file if not already set
|
||||||
if [ -d "$HOME"/.bash/profile ]; then for file in "$HOME"/.bash/profile/*; do source "$file"; done; fi
|
if [ -z "${BASH_CONFIG_DIR}" ]; then
|
||||||
if [ -d "$HOME"/.bash/profile.d ]; then for file in "$HOME"/.bash/profile.d/*; do source "$file"; done; fi
|
# Define a function to get the real path of a script
|
||||||
|
# (works for most cases : either sourced script or executed script, posix shells)
|
||||||
|
get_script_dir() {
|
||||||
|
local target
|
||||||
|
# Si appelé depuis un script (Bash), on regarde qui a appelé la fonction (${BASH_SOURCE[1]})
|
||||||
|
# Si la fonction est exécutée directement dans le terminal, on se rabat sur ${BASH_SOURCE[0]} ou ${0}
|
||||||
|
if [ -n "${BASH_SOURCE}" ]; then
|
||||||
|
if [ "${#BASH_SOURCE[@]}" -gt 1 ]; then
|
||||||
|
target="${BASH_SOURCE[1]}"
|
||||||
|
else
|
||||||
|
target="${BASH_SOURCE[0]}"
|
||||||
|
fi
|
||||||
|
elif [ -n "${ZSH_VERSION}" ]; then
|
||||||
|
target="${(%):-%x}"
|
||||||
|
else
|
||||||
|
target="${0}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Résolution des liens symboliques POSIX
|
||||||
|
while [ -L "${target}" ]; do
|
||||||
|
local link
|
||||||
|
link=$(readlink "${target}")
|
||||||
|
case "${link}" in
|
||||||
|
/*) target="${link}" ;;
|
||||||
|
*) target="$(dirname "${target}")/${link}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
(cd "$(dirname "${target}")" && pwd -P)
|
||||||
|
}
|
||||||
|
BASH_CONFIG_DIR=$(get_script_dir)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${BASH_CONFIG_DIR}"/profile ]; then source "${BASH_CONFIG_DIR}"/profile; fi
|
||||||
|
if [ -d "${BASH_CONFIG_DIR}"/profile ]; then for file in "${BASH_CONFIG_DIR}"/profile/*; do source "$file"; done; fi
|
||||||
|
if [ -d "${BASH_CONFIG_DIR}"/profile.d ]; then for file in "${BASH_CONFIG_DIR}"/profile.d/*; do source "$file"; done; fi
|
||||||
|
|
||||||
# This file is sourced by bash for login shells. The following line
|
# This file is sourced by bash for login shells. The following line
|
||||||
# runs your .bashrc and is recommended by the bash info pages.
|
# runs your .bashrc and is recommended by the bash info pages.
|
||||||
|
|||||||
@@ -13,50 +13,79 @@ fi
|
|||||||
|
|
||||||
# DEBUG_BASHRC=true
|
# DEBUG_BASHRC=true
|
||||||
|
|
||||||
# Determine path to directory of this file (FIX: remove dependency to readlink for posix compliance)
|
|
||||||
BASEDIR=$(
|
# Define the path to the directory of this file if not already set
|
||||||
source_file=$(readlink -f "${BASH_SOURCE[0]}")
|
if [ -z "${BASH_CONFIG_DIR}" ]; then
|
||||||
source_dir=$(dirname "${source_file}")
|
# Define a function to get the real path of a script
|
||||||
cd "${source_dir}" && pwd
|
# (works for most cases : either sourced script or executed script, posix shells)
|
||||||
)
|
get_script_dir() {
|
||||||
|
local target
|
||||||
|
# Si appelé depuis un script (Bash), on regarde qui a appelé la fonction (${BASH_SOURCE[1]})
|
||||||
|
# Si la fonction est exécutée directement dans le terminal, on se rabat sur ${BASH_SOURCE[0]} ou ${0}
|
||||||
|
if [ -n "${BASH_SOURCE}" ]; then
|
||||||
|
if [ "${#BASH_SOURCE[@]}" -gt 1 ]; then
|
||||||
|
target="${BASH_SOURCE[1]}"
|
||||||
|
else
|
||||||
|
target="${BASH_SOURCE[0]}"
|
||||||
|
fi
|
||||||
|
elif [ -n "${ZSH_VERSION}" ]; then
|
||||||
|
target="${(%):-%x}"
|
||||||
|
else
|
||||||
|
target="${0}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Résolution des liens symboliques POSIX
|
||||||
|
while [ -L "${target}" ]; do
|
||||||
|
local link
|
||||||
|
link=$(readlink "${target}")
|
||||||
|
case "${link}" in
|
||||||
|
/*) target="${link}" ;;
|
||||||
|
*) target="$(dirname "${target}")/${link}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
(cd "$(dirname "${target}")" && pwd -P)
|
||||||
|
}
|
||||||
|
BASH_CONFIG_DIR=$(get_script_dir)
|
||||||
|
fi
|
||||||
|
|
||||||
# Source some helpers functions
|
# Source some helpers functions
|
||||||
source "${BASEDIR}/_helpers.bash"
|
source "${BASH_CONFIG_DIR}/_helpers.bash"
|
||||||
|
|
||||||
# Source custom libs
|
# Source custom libs
|
||||||
_source_dir_files "${BASEDIR}"/libs
|
_source_dir_files "${BASH_CONFIG_DIR}"/libs
|
||||||
|
|
||||||
# Source 3rd party libs if they exists
|
# Source 3rd party libs if they exists
|
||||||
_source_file_if_exists "${BASEDIR}/3rd-party/complete-alias/complete_alias"
|
_source_file_if_exists "${BASH_CONFIG_DIR}/3rd-party/complete-alias/complete_alias"
|
||||||
_source_file_if_exists "${BASEDIR}/3rd-party/junegunn/fzf-git.sh/fzf-git.sh"
|
_source_file_if_exists "${BASH_CONFIG_DIR}/3rd-party/junegunn/fzf-git.sh/fzf-git.sh"
|
||||||
|
|
||||||
# Early customization
|
# Early customization
|
||||||
_source_dir_files "${BASEDIR}"/rc.before.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/rc.before.d
|
||||||
|
|
||||||
# Source rc.d/*
|
# Source rc.d/*
|
||||||
_source_dir_files "${BASEDIR}"/rc
|
_source_dir_files "${BASH_CONFIG_DIR}"/rc
|
||||||
_source_dir_files "${BASEDIR}"/rc.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/rc.d
|
||||||
|
|
||||||
# Source functions definitions
|
# Source functions definitions
|
||||||
_source_file_if_exists ~/.bash_functions
|
_source_file_if_exists ~/.bash_functions
|
||||||
_source_file_if_exists "${BASEDIR}"/functions
|
_source_file_if_exists "${BASH_CONFIG_DIR}"/functions
|
||||||
_source_dir_files "${BASEDIR}"/functions
|
_source_dir_files "${BASH_CONFIG_DIR}"/functions
|
||||||
_source_dir_files "${BASEDIR}"/functions.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/functions.d
|
||||||
|
|
||||||
# Source alias definitions
|
# Source alias definitions
|
||||||
_source_file_if_exists ~/.bash_aliases
|
_source_file_if_exists ~/.bash_aliases
|
||||||
_source_file_if_exists "${BASEDIR}"/aliases
|
_source_file_if_exists "${BASH_CONFIG_DIR}"/aliases
|
||||||
_source_dir_files "${BASEDIR}"/aliases
|
_source_dir_files "${BASH_CONFIG_DIR}"/aliases
|
||||||
_source_dir_files "${BASEDIR}"/aliases.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/aliases.d
|
||||||
|
|
||||||
# Source bash completion definitions
|
# Source bash completion definitions
|
||||||
# TODO: Améliorer cette partie pour éviter les erreurs quand aucun fichier n'existe
|
# TODO: Améliorer cette partie pour éviter les erreurs quand aucun fichier n'existe
|
||||||
for file in /etc/bash*completion /etc/profile.d/bash*completion*; do source "$file"; done
|
for file in /etc/bash*completion /etc/profile.d/bash*completion*; do source "$file"; done
|
||||||
|
|
||||||
_source_file_if_exists ~/.bash_completion
|
_source_file_if_exists ~/.bash_completion
|
||||||
_source_file_if_exists "${BASEDIR}"/completion
|
_source_file_if_exists "${BASH_CONFIG_DIR}"/completion
|
||||||
_source_dir_files "${BASEDIR}"/completion
|
_source_dir_files "${BASH_CONFIG_DIR}"/completion
|
||||||
_source_dir_files "${BASEDIR}"/completion.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/completion.d
|
||||||
_source_dir_files ~/.nix-profile/share/bash-completion/completions
|
_source_dir_files ~/.nix-profile/share/bash-completion/completions
|
||||||
|
|
||||||
if (command -v _complete_alias &>/dev/null); then
|
if (command -v _complete_alias &>/dev/null); then
|
||||||
@@ -64,4 +93,4 @@ if (command -v _complete_alias &>/dev/null); then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Late customization
|
# Late customization
|
||||||
_source_dir_files "${BASEDIR}"/rc.after.d
|
_source_dir_files "${BASH_CONFIG_DIR}"/rc.after.d
|
||||||
|
|||||||
+38
-6
@@ -1,11 +1,43 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cd $HOME || exit 1
|
# Define the path to the directory of this file if not already set
|
||||||
|
if [ -z "${BASH_CONFIG_DIR}" ]; then
|
||||||
|
# Define a function to get the real path of a script
|
||||||
|
# (works for most cases : either sourced script or executed script, posix shells)
|
||||||
|
get_script_dir() {
|
||||||
|
local target
|
||||||
|
# Si appelé depuis un script (Bash), on regarde qui a appelé la fonction (${BASH_SOURCE[1]})
|
||||||
|
# Si la fonction est exécutée directement dans le terminal, on se rabat sur ${BASH_SOURCE[0]} ou ${0}
|
||||||
|
if [ -n "${BASH_SOURCE}" ]; then
|
||||||
|
if [ "${#BASH_SOURCE[@]}" -gt 1 ]; then
|
||||||
|
target="${BASH_SOURCE[1]}"
|
||||||
|
else
|
||||||
|
target="${BASH_SOURCE[0]}"
|
||||||
|
fi
|
||||||
|
elif [ -n "${ZSH_VERSION}" ]; then
|
||||||
|
target="${(%):-%x}"
|
||||||
|
else
|
||||||
|
target="${0}"
|
||||||
|
fi
|
||||||
|
|
||||||
CONFDIR=.bash
|
# Résolution des liens symboliques POSIX
|
||||||
|
while [ -L "${target}" ]; do
|
||||||
|
local link
|
||||||
|
link=$(readlink "${target}")
|
||||||
|
case "${link}" in
|
||||||
|
/*) target="${link}" ;;
|
||||||
|
*) target="$(dirname "${target}")/${link}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
ln -sf $CONFDIR/bash_profile .bash_profile
|
(cd "$(dirname "${target}")" && pwd -P)
|
||||||
ln -sf $CONFDIR/bashrc .bashrc
|
}
|
||||||
ln -sf $CONFDIR/bash_logout .bash_logout
|
BASH_CONFIG_DIR=$(get_script_dir)
|
||||||
|
fi
|
||||||
|
|
||||||
ln -sf $CONFDIR/inputrc .inputrc
|
cd "${HOME}" || exit 1
|
||||||
|
|
||||||
|
ln -sf "${BASH_CONFIG_DIR}"/bash_profile .bash_profile
|
||||||
|
ln -sf "${BASH_CONFIG_DIR}"/bashrc .bashrc
|
||||||
|
ln -sf "${BASH_CONFIG_DIR}"/bash_logout .bash_logout
|
||||||
|
ln -sf "${BASH_CONFIG_DIR}"/inputrc .inputrc
|
||||||
|
|||||||
Reference in New Issue
Block a user