My dotfiles
1#!/bin/bash
2
3set -e
4
5ensure_link() {
6 if [ -f "$HOME/$2" ] || [ -L "$HOME/$2" ]; then
7 rm "${HOME:?}/$2"
8 elif [ -d "$HOME/$2" ] && [ ! -L "$HOME/$2" ]; then
9 echo "Directory $HOME/$2 already exists; aborting"
10 exit 1
11 fi
12 ln -s "${HOME:?}/$1" "${HOME:?}/$2"
13}
14
15ensure_dir() {
16 test -d "$HOME/$1" || mkdir -p "$HOME/$1"
17}
18
19ensure_git_repo() {
20 test -d "$1" || git clone --recursive "$2" "$1"
21}
22
23ensure_dir ".config/powershell"
24ensure_dir ".local/bin"
25
26if uname -a | grep -q xnu; then
27 ensure_link "src/dotfiles/aerc" "Library/Preferences/aerc"
28 ensure_link "src/dotfiles/hammerspoon" ".hammerspoon"
29else
30 ensure_link "src/dotfiles/aerc" ".config/aerc"
31fi
32
33ensure_link "src/dotfiles/atuin" ".config/atuin"
34ensure_link "src/dotfiles/chawan" ".config/chawan"
35ensure_link "src/dotfiles/default-go-packages" ".default-go-packages"
36ensure_link "src/dotfiles/digrc" ".digrc"
37ensure_link "src/dotfiles/fish" ".config/fish"
38ensure_link "src/dotfiles/ghostty" ".config/ghostty"
39ensure_link "src/dotfiles/gitconfig" ".gitconfig"
40ensure_link "src/dotfiles/gitignore" ".gitignore"
41ensure_link "src/dotfiles/helix" ".config/helix"
42ensure_link "src/dotfiles/jj" ".config/jj"
43ensure_link "src/dotfiles/kitty" ".config/kitty"
44ensure_link "src/dotfiles/mise" ".config/mise"
45ensure_link "src/dotfiles/ripgreprc" ".ripgreprc"
46ensure_link "src/dotfiles/zellij" ".config/zellij"
47ensure_link "src/dotfiles/zsh/zshenv" ".zshenv"
48ensure_link "src/dotfiles/zsh/zshrc" ".zshrc"
49
50if uname -a | grep -q microsoft; then
51 for component in ssh ssh-add scp sftp ssh-keygen; do
52 [ ! -L ~/.local/bin/$component ] && ln -s /mnt/c/Windows/System32/OpenSSH/${component}.exe ~/.local/bin/$component
53 done
54 ensure_link "src/dotfiles/scripts/op" ".local/bin/op"
55fi