148 lines
3 KiB
Bash
Executable file
148 lines
3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Check for Git
|
|
if ! command -v git &>/dev/null; then
|
|
echo "Git is not installed. Aborting." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Make sure we have pulled in and updated any submodules
|
|
git submodule init
|
|
git submodule update
|
|
|
|
# What directories should be installable by all users including the root user
|
|
base=(
|
|
vim
|
|
nvim
|
|
# tmux
|
|
git
|
|
wezterm
|
|
)
|
|
|
|
# Folders that should, or only need to be installed for a local user on macOS
|
|
useronly_macos=(
|
|
zsh
|
|
# yabai
|
|
# skhd
|
|
aerospace
|
|
# oh-my-zsh
|
|
)
|
|
|
|
#Folders that should, or only need to be installed for a local user on Linux
|
|
useronly_linux=(
|
|
bash
|
|
i3
|
|
)
|
|
|
|
# Folders that should, or only need to be installed for a local user
|
|
useronly=(
|
|
zoxide
|
|
conda
|
|
dask
|
|
gh
|
|
jupyter
|
|
parallel
|
|
tox
|
|
firefox
|
|
direnv
|
|
starship
|
|
# p10k
|
|
)
|
|
|
|
# Files to ignore during stow
|
|
ignore_files=(
|
|
".DS_Store"
|
|
"__setup"
|
|
"bin"
|
|
".git"
|
|
".gitignore"
|
|
"setup.sh"
|
|
)
|
|
|
|
# Function to run the stow command for the passed-in directory ($2) in location $1
|
|
stowit() {
|
|
usr=$1
|
|
app=$2
|
|
# -v verbose
|
|
# -R recursive
|
|
# -t target
|
|
# --ignore files to ignore
|
|
stow -v -R -t "${usr}" --ignore "$(
|
|
IFS="|"
|
|
echo "${ignore_files[*]}"
|
|
)" "${app}"
|
|
}
|
|
|
|
# Function to check if the OS is macOS
|
|
get_os() {
|
|
case "$(uname)" in
|
|
Darwin) echo "macos" ;;
|
|
Linux) echo "linux" ;;
|
|
*) echo "unknown" ;;
|
|
esac
|
|
}
|
|
|
|
# Function to automate firefox profile updater with expect
|
|
expect_yes() {
|
|
profile_dir=$(find ~/Library/Application\ Support/Firefox/Profiles -type d -name '*.default-release' -print -quit)
|
|
|
|
if [ -z "$profile_dir" ]; then
|
|
echo "Error: Firefox profile directory not found."
|
|
exit 1
|
|
fi
|
|
|
|
expect -c "
|
|
set timeout 1
|
|
log_user 0
|
|
spawn bash -c \"cd '$profile_dir' && $1\" > /dev/null 2>&1
|
|
expect {
|
|
\"This script will update to the latest user.js file and append any custom configurations from user-overrides.js. Continue Y/N?\" { send \"y\r\"; exp_continue }
|
|
eof {
|
|
puts \"Error: Expected line not found.\"
|
|
exit 1
|
|
}
|
|
}
|
|
"
|
|
}
|
|
|
|
echo ""
|
|
echo "Stowing apps for user: ${USER}"
|
|
|
|
# Setup apps available to local users and root
|
|
for app in "${base[@]}"; do
|
|
stowit "${HOME}" "${app}"
|
|
done
|
|
|
|
current_os=$(get_os)
|
|
case "${current_os}" in
|
|
"macos")
|
|
for app in "${useronly_macos[@]}"; do
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
stowit "${HOME}" "${app}"
|
|
fi
|
|
done
|
|
;;
|
|
"linux")
|
|
for app in "${useronly_linux[@]}"; do
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
stowit "${HOME}" "${app}"
|
|
fi
|
|
done
|
|
;;
|
|
"unknown")
|
|
echo "Unknown OS."
|
|
;;
|
|
esac
|
|
|
|
# Setup useronly folders
|
|
for app in "${useronly[@]}"; do
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
stowit "${HOME}" "${app}"
|
|
if [[ "${app}" = "firefox" ]]; then
|
|
expect_yes "./updater.sh"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "##### ALL DONE"
|