Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 0 additions & 80 deletions bootstrap.mjs

This file was deleted.

109 changes: 95 additions & 14 deletions bootstrap.sh
Original file line number Diff line number Diff line change
@@ -1,32 +1,113 @@
# vim: set expandtab shiftwidth=4 foldmethod=marker foldlevel=0 :
#!/usr/bin/env bash
set -euo pipefail

# {{{ libs

function setup_ubuntu(){
local gui_mode="${1:-false}"
sudo apt update -y
sudo apt install -y \
nodejs \
zx
ensure_dir() {
local dir="$1"
mkdir -p "$dir"
}

# }}}
ensure_link() {
local src="$1"
local dst="$2"

if [ -f /etc/os-release ]; then
if [ -L "$dst" ]; then
return
fi

if [ -e "$dst" ]; then
echo "error: $dst exists and is not a symlink"
exit 1
fi

ln -s "$src" "$dst"
}

ensure_all_link() {
local src_dir="$1"
local dst_dir="$2"

ensure_dir "$dst_dir"

local f
for f in "$src_dir"/*; do
[ -e "$f" ] || continue
ensure_link "$f" "$dst_dir/$(basename "$f")"
done
}

ensure_source_line() {
local file_path="$1"
local source_line="$2"

if [ ! -f "$file_path" ]; then
printf '%s\n' "$source_line" > "$file_path"
return
fi

if grep -Fxq "$source_line" "$file_path"; then
return
fi

printf '%s\n' "$source_line" >> "$file_path"
}

# }} }

if [ "$(uname -s)" = "Darwin" ]; then
DISTRIBUTION="macos"
elif [ -f /etc/os-release ]; then
. /etc/os-release
DISTRIBUTION="$ID"
DISTRIBUTION_VERSION="$VERSION_ID"
else
echo "unknown distribution"
DISTRIBUTION="unknown"
fi

case "$DISTRIBUTION" in
case "$DISTRIBUTION" in
"ubuntu")
setup_ubuntu
# no runtime dependency needed now
;;
"macos")
if ! command -v brew >/dev/null 2>&1; then
echo "error: Homebrew is required on macOS. Install it from https://brew.sh/"
exit 1
fi
;;
*)
echo "unknonw func"
echo "info: running on $DISTRIBUTION"
;;
esac

zx bootstrap.mjs "$@"
DOTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONF="$HOME/.config"
LOCAL_BIN="$HOME/.local/bin"

ensure_dir "$CONF"

# ideavim
ensure_link "$DOTDIR/idea/.ideavimrc" "$HOME/.ideavimrc"

# zsh
ensure_link "$DOTDIR/shell/zsh" "$CONF/zsh"
ensure_source_line "$HOME/.zshrc" "source \"$CONF/zsh/core.zsh\""

# tmux
ensure_link "$DOTDIR/tmux/.tmux.conf" "$HOME/.tmux.conf"
ensure_link "$DOTDIR/tmux/.tmux.conf.local" "$HOME/.tmux.conf.local"

# vim
ensure_link "$DOTDIR/vim/.vimlite.vim" "$HOME/.vimlite.vim"
ensure_link "$DOTDIR/vim/my.nvim" "$CONF/nvim"

# vifm
ensure_link "$DOTDIR/vifm" "$CONF/vifm"

# navi
ensure_link "$DOTDIR/navi" "$CONF/navi"

# tiny scripts
ensure_all_link "$DOTDIR/bin" "$LOCAL_BIN"

echo "bootstrap completed"
Loading