mirror of
https://github.com/pratiktri/dotfiles.git
synced 2026-02-04 08:41:43 +05:30
- Updated repo to support both mac and kde neon - bootstrap.sh updated to auto-detect OS and read from the required directory - Added VIM & NeoVIM dot files
118 lines
3.6 KiB
Bash
Executable File
118 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
usage() {
|
|
if [ -n "$1" ]; then
|
|
echo ""
|
|
echo -e "${CRED}$1${CEND}\n"
|
|
fi
|
|
|
|
echo "Applies all settings stored in the script's directory to your home directory"
|
|
echo ""
|
|
echo "Usage: $0 [-q|--quiet] [-l|--create-links]"
|
|
echo " -q, --quiet No screen outputs"
|
|
echo " -l, --create-links Creates soft-links to files in the current directory instead of copying them"
|
|
|
|
echo ""
|
|
echo "Example: $0 -q --create-links"
|
|
}
|
|
|
|
##################################
|
|
# Parse script arguments
|
|
##################################
|
|
|
|
# defaults
|
|
QUIET="n"
|
|
CREATE_LINKS="n"
|
|
|
|
while [[ "${#}" -gt 0 ]]; do
|
|
case $1 in
|
|
-q | --quiet)
|
|
QUIET="y"
|
|
shift
|
|
;;
|
|
-l | --create-links)
|
|
CREATE_LINKS="y"
|
|
shift
|
|
;;
|
|
-h | --help)
|
|
echo
|
|
usage
|
|
echo
|
|
exit 0
|
|
;;
|
|
*)
|
|
usage "Unknown parameter passed: $1" "h"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
main() {
|
|
|
|
# Check if the current os is KDE Neon or Mac
|
|
# if $(command -v pkcon > /dev/null) || [[ $XDG_CURRENT_DESKTOP == "KDE" ]]; then
|
|
# OS="kde-neon"
|
|
#
|
|
# else
|
|
# OS="macos"
|
|
# fi
|
|
if [[ $(uname -s) == *Darwin* ]]; then
|
|
OS="macos"
|
|
else
|
|
OS="kde-neon"
|
|
fi
|
|
|
|
TS=$(date '+%d_%m_%Y-%H_%M_%S')
|
|
|
|
# Switch inside dotfile repository directory
|
|
cd -P "$(dirname "$0")" || exit
|
|
|
|
# Copy all files in "Common" dotfiles to $HOME directory ("~")
|
|
find "./common" -type f ! -path '*.DS_Store' ! -path '*.directory' -print0 | while IFS= read -r -d '' file;
|
|
do
|
|
local file_target_location="${file/.\/common/$HOME}"
|
|
local source_file_location="${file/./$PWD}"
|
|
place_dotfile_at_target_location "$source_file_location" "$file_target_location" "$TS"
|
|
done
|
|
|
|
# Copy platform specific files to $HOME directory ("~")
|
|
find "./${OS}" -type f ! -path '*.DS_Store' ! -path '*.directory' -print0 | while IFS= read -r -d '' file;
|
|
do
|
|
local file_target_location="${file/.\/${OS}/$HOME}"
|
|
local source_file_location="${file/./$PWD}"
|
|
place_dotfile_at_target_location "$source_file_location" "$file_target_location" "$TS"
|
|
done
|
|
}
|
|
|
|
place_dotfile_at_target_location() {
|
|
local source_file_location="$1"
|
|
local file_target_location="$2"
|
|
local TS="$3"
|
|
|
|
# echo "${source_file_location}"
|
|
# echo "${file_target_location}"
|
|
|
|
# To avoid over writing existing dot file, we rename them
|
|
# Appending the timestamp to file name
|
|
if [[ -f "${file_target_location}" || -L "${file_target_location}" ]]; then
|
|
# echo "mv ${file_target_location} ${file_target_location}_${TS}" && [[ "$QUIET" == "n" ]] && echo "Existing dotfile renamed to ${file_target_location}_${TS}"
|
|
mv "${file_target_location}" "${file_target_location}_${TS}" && [[ "$QUIET" == "n" ]] && echo "Existing setting renamed to ${file_target_location}_${TS}"
|
|
fi
|
|
|
|
local target_directory
|
|
target_directory=$(dirname "${file_target_location}")
|
|
if [[ ! -d "${target_directory}" ]]; then
|
|
mkdir -p "${target_directory}" && [[ "$QUIET" == "n" ]] && echo "Directory ${target_directory} created"
|
|
fi
|
|
|
|
if [[ "$CREATE_LINKS" == "y" ]]; then
|
|
# echo "ln -s ${source_file_location} ${target_directory}"
|
|
ln -s "${source_file_location}" "${target_directory}" && [[ "$QUIET" == "n" ]] && echo "Linked ${file_target_location}"
|
|
else
|
|
# echo "cp ${source_file_location} ${target_directory}"
|
|
cp "${source_file_location}" "${target_directory}" && [[ "$QUIET" == "n" ]] && echo "Copied ${file_target_location}"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|