#!/bin/bash set -e ensure_link() { if [ -f "$HOME/$2" ] || [ -L "$HOME/$2" ]; then rm "${HOME:?}/$2" elif [ -d "$HOME/$2" ] && [ ! -L "$HOME/$2" ]; then echo "Directory $HOME/$2 already exists; aborting" exit 1 fi ln -s "${HOME:?}/$1" "${HOME:?}/$2" } ensure_dir() { test -d "$HOME/$1" || mkdir -p "$HOME/$1" } ensure_git_repo() { test -d "$1" || git clone --recursive "$2" "$1" } ensure_dir ".config/powershell" ensure_dir ".local/bin" if uname -a | grep -q xnu; then ensure_link "src/dotfiles/aerc" "Library/Preferences/aerc" ensure_link "src/dotfiles/hammerspoon" ".hammerspoon" else ensure_link "src/dotfiles/aerc" ".config/aerc" fi ensure_link "src/dotfiles/atuin" ".config/atuin" ensure_link "src/dotfiles/chawan" ".config/chawan" ensure_link "src/dotfiles/default-go-packages" ".default-go-packages" ensure_link "src/dotfiles/digrc" ".digrc" ensure_link "src/dotfiles/fish" ".config/fish" ensure_link "src/dotfiles/ghostty" ".config/ghostty" ensure_link "src/dotfiles/gitconfig" ".gitconfig" ensure_link "src/dotfiles/gitignore" ".gitignore" ensure_link "src/dotfiles/helix" ".config/helix" ensure_link "src/dotfiles/jj" ".config/jj" ensure_link "src/dotfiles/kitty" ".config/kitty" ensure_link "src/dotfiles/mise" ".config/mise" ensure_link "src/dotfiles/ripgreprc" ".ripgreprc" ensure_link "src/dotfiles/zellij" ".config/zellij" ensure_link "src/dotfiles/zsh/zshenv" ".zshenv" ensure_link "src/dotfiles/zsh/zshrc" ".zshrc" if uname -a | grep -q microsoft; then for component in ssh ssh-add scp sftp ssh-keygen; do [ ! -L ~/.local/bin/$component ] && ln -s /mnt/c/Windows/System32/OpenSSH/${component}.exe ~/.local/bin/$component done ensure_link "src/dotfiles/scripts/op" ".local/bin/op" fi