dotfiles/link.sh

63 lines
2.1 KiB
Bash
Executable file

#!/bin/bash
set -e
DOTFILES="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
backup_and_link() {
local src="$1"
local dst="$2"
if [ -L "$dst" ]; then
echo "already a symlink, skipping: $dst"
return
fi
if [ -e "$dst" ]; then
echo "backing up: $dst -> $dst.bak"
mv "$dst" "$dst.bak"
fi
echo "linking: $dst -> $src"
ln -s "$src" "$dst"
}
backup_and_link "$DOTFILES/config/starship.toml" "$HOME/.config/starship.toml"
backup_and_link "$DOTFILES/config/profile" "$HOME/.profile"
backup_and_link "$DOTFILES/config/xinitrc" "$HOME/.xinitrc"
backup_and_link "$DOTFILES/vimrc" "$HOME/.vimrc"
backup_and_link "$DOTFILES/config/wezterm" "$HOME/.config/wezterm"
backup_and_link "$DOTFILES/config/fish" "$HOME/.config/fish"
backup_and_link "$DOTFILES/config/tmux" "$HOME/.config/tmux"
backup_and_link "$DOTFILES/config/senpai" "$HOME/.config/senpai"
backup_and_link "$DOTFILES/config/kanata" "$HOME/.config/kanata"
backup_and_link "$DOTFILES/config/nyxt" "$HOME/.var/app/engineer.atlas.Nyxt/config/nyxt"
# Zed: link individual files to preserve extra live data (themes, backups, etc.)
mkdir -p "$HOME/.config/zed"
for src in "$DOTFILES/config/zed/"*; do
dst="$HOME/.config/zed/$(basename "$src")"
backup_and_link "$src" "$dst"
done
# System-level links (requires root)
if [ "$EUID" -eq 0 ]; then
echo ""
echo "=== system links ==="
backup_and_link "$DOTFILES/config/kanata/rc.kanata" "/etc/rc.d/rc.kanata"
chmod +x /etc/rc.d/rc.kanata
if ! grep -q "rc.kanata" /etc/rc.d/rc.local; then
echo "" >> /etc/rc.d/rc.local
echo "# Start kanata key remapper" >> /etc/rc.d/rc.local
echo "if [ -x /etc/rc.d/rc.kanata ]; then" >> /etc/rc.d/rc.local
echo " /etc/rc.d/rc.kanata start" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo "added kanata to rc.local"
else
echo "rc.local already has kanata entry, skipping"
fi
else
echo ""
echo "skipping system links (run as root to install /etc/rc.d/rc.kanata and hook into rc.local)"
fi