#!/usr/bin/env bash # # Basic symlinks, safe to run on any system # # ============================================================================ # initialize script and dependencies # ============================================================================ if [[ -z "$DOTFILES" ]]; then cd -- "$(dirname "$0")/.." || exit 1 DOTFILES="$PWD" fi . "${DOTFILES}/lib/helpers.sh" . "${DOTFILES}/lib/pretty.bash" export PATH="${DOTFILES}/bin:${PATH}" # ============================================================================ # Create paths (slow) # ============================================================================ mkdir -p -- "${HOME}/.cache" mkdir -p -- "${HOME}/.config" # Mirror root in ~/.local mkdir -p -- "${HOME}/.local/bin" mkdir -p -- "${HOME}/.local/man/man1" mkdir -p -- "${HOME}/.local/lib/R/library" mkdir -p -- "${HOME}/.local/share/tig" # ============================================================================ # Main # ============================================================================ __symlink() { __dko_status "Symlinking dotfiles" # REQUIRED in ~/ -- ag looks for ~/.agignore LAST and includes it. # .ignore files are for project local only dko-symlink "shell/dot.profile" \ ".profile" # XDG-compatible, not linux specific dko-symlink "bat/config" \ ".config/bat/config" dko-symlink "ghostty/config.ghostty" \ ".config/ghostty/config.ghostty" dko-symlink "git/dot.gitconfig" \ ".config/git/config" dko-symlink "git/dot.gitignore" \ ".config/git/ignore" dko-symlink "markdownlint/dot.markdownlintrc" \ ".config/markdownlint/config" dko-symlink "mise/config.toml" \ ".config/mise/config.toml" dko-symlink "shell/dot.inputrc" \ ".config/readline/inputrc" # tmux as of 3.1 supports XDG https://github.com/tmux/tmux/commit/15d7e564ddab575dd3ac803989cc99ac13b57198 dko-symlink "tmux/tmux.conf" \ ".config/tmux/tmux.conf" # whole wezterm directory dko-symlink "wezterm" \ ".config/wezterm" dko-symlink "yamlfmt" \ ".config/yamlfmt" dko-symlink "zsh-patina" \ ".config/zsh-patina" # (n)vim / intellij ideavim dko-symlink "nvim" \ ".config/nvim" dko-symlink "ideavim/dot.ideavimrc" \ ".config/ideavim/ideavimrc" case "$OSTYPE" in *arwin*) dko-symlink "mac/hammerspoon" \ ".hammerspoon" dko-symlink "mac/dot.hushlogin" \ ".hushlogin" dko-symlink "mac/skhd/skhdrc" \ ".config/skhd/skhdrc" ;; esac # Shell dko-symlink "zsh/dot.zshenv" \ ".zshenv" } __symlink if [ -z "${GIT_AUTHOR_NAME}" ]; then __dko_warn "Don't forget to set up GIT_xxx ENV variables" fi if [ -f "${HOME}/.bashrc" ] || [ -f "${HOME}/.bash_profile" ]; then __dko_warn "Found .bashrc and .bash_profile" __dko_echo "Run symlink-bash if you need .bashrc and .bash_profile" else __dko_status "Skipping .bashrc and .bash_profile" fi __dko_status "Done! [${0}]"