#!/bin/sh # install.sh — symlink session-tools/bin/* into ~/bin (idempotent). # # Run this on every host that should have remote-run / tssh available. set -eu repo_dir=$(cd "$(dirname "$0")" && pwd) # Pick the first install target that's already on $PATH so the symlinks are # immediately usable. Override with TARGET= ./install.sh. pick_target() { if [ -n "${TARGET:-}" ]; then printf %s "$TARGET" return fi for candidate in "$HOME/bin" "$HOME/.local/bin"; do case ":$PATH:" in *":$candidate:"*) printf %s "$candidate"; return ;; esac done # Nothing on PATH — fall back to ~/bin and warn later. printf %s "$HOME/bin" } target=$(pick_target) mkdir -p "$target" for src in "$repo_dir"/bin/*; do name=$(basename "$src") link="$target/$name" if [ -L "$link" ] && [ "$(readlink "$link")" = "$src" ]; then echo "ok: $link -> $src" continue fi if [ -e "$link" ] && [ ! -L "$link" ]; then echo "skip: $link exists and is not a symlink — leaving alone" >&2 continue fi ln -sfn "$src" "$link" echo "link: $link -> $src" done # Dependency: `rclaude` drives the `claude` CLI, so claude is a hard dep — # install it via the official installer if it's missing. Idempotent: skipped # when claude is already on PATH. (Auth is provisioned separately — login or # a copied ~/.claude/.credentials.json.) if command -v claude >/dev/null 2>&1; then echo "ok: claude present ($(claude --version 2>/dev/null | head -1))" elif command -v curl >/dev/null 2>&1; then echo "dep: claude CLI missing — installing via official installer…" if curl -fsSL https://claude.ai/install.sh | bash; then echo "ok: claude installed ($("$HOME/.local/bin/claude" --version 2>/dev/null | head -1))" else echo "warn: claude auto-install failed — install it manually" >&2 fi else echo "warn: claude missing and curl unavailable — install claude manually" >&2 fi # Install tmux.conf if tmux is present and the user has no existing config. if command -v tmux >/dev/null 2>&1; then tmux_conf="$HOME/.tmux.conf" if [ ! -f "$tmux_conf" ]; then cp "$repo_dir/tmux.conf" "$tmux_conf" echo "link: $tmux_conf (installed from repo)" tmux source "$tmux_conf" 2>/dev/null && echo "ok: tmux config reloaded" || true else echo "ok: $tmux_conf already exists — not overwriting" fi fi case ":$PATH:" in *":$target:"*) ;; *) echo "note: add $target to PATH if it isn't already" ;; esac