dotfiles/install.sh

95 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
SCRIPT_DIR="$(
cd -- "$(dirname "$0")" >/dev/null 2>&1 || exit 1
pwd -P
)"
IGNORED_FILES="$(cat "$SCRIPT_DIR/.installer/ignored")"
EXECUTABLE_FILES="$(cat "$SCRIPT_DIR/.installer/executables")"
function is_ignored() {
while IFS= read -r line; do
grep -Eq "$line" <<<"${1:?}" && return 0
done <<<"$IGNORED_FILES"
return 1
}
function is_executable() {
while IFS= read -r line; do
grep -Eq "$line" <<<"${1:?}" && return 0
done <<<"$EXECUTABLE_FILES"
return 1
}
function is_identical() {
local src dst src_sum dst_sum
src="$SCRIPT_DIR/$1"
dst="$HOME/$1"
! [ -e "$dst" ] && return 1
src_sum="$(sha256sum "$src" | cut -d' ' -f1)"
dst_sum="$(sha256sum "$dst" | cut -d' ' -f1)"
[[ "$src_sum" == "$dst_sum" ]] && return 0
return 1
}
function install() {
local file dir src dst perform_copy
echo "Copying files... 💾"
while IFS= read -r file; do
[[ "$file" == *".git/"* ]] && continue
perform_copy=true
file="${file#"$SCRIPT_DIR/"}"
dir="$(dirname "$HOME/$file")"
src="$SCRIPT_DIR/$file"
dst="$HOME/$file"
if is_ignored "$file"; then
echo "IGNORE: '$file'"
continue
elif ! [ -d "$dir" ]; then
echo "MKDIR : '$dir'"
mkdir -p "$dir" || exit 10
elif is_identical "$file"; then
echo "NODIFF: '$file'"
perform_copy=false
fi
if $perform_copy; then
if [ -e "$dst" ]; then
echo "DIFF : '$file'"
else
echo "NEW : '$file'"
fi
cp --no-dereference "$src" "$dst" || exit 20
fi
if is_executable "$file" && ! [ -x "$dst" ]; then
echo "+EXEC : '$file'"
chmod +x "$dst"
fi
done <<<"$(find "$SCRIPT_DIR" -type f && find "$SCRIPT_DIR" -type l)"
echo
}
function override_bg() {
local default=~/.local/share/bg override=~/Pictures/bg
! [ -e "$override" ] && return
echo "Overriding default background with '$override'."
ln -sfn "$override" "$default"
echo
}
install
override_bg
"$SCRIPT_DIR/.local/bin/i3-config-builder"
i3-config-builder
echo "Done! 👌"