From c38fae6e1a7d8f5fccbf4ea21614907f3dec5560 Mon Sep 17 00:00:00 2001 From: Lukas Juhas Date: Mon, 22 Jun 2026 12:06:53 -0400 Subject: [PATCH] feat: add Obsidian cask + personal-repos clone bootstrap Brewfile gains a Notes & knowledge section with cask "obsidian". New installs/repos.sh clones personal repos (listed as name|owner/repo) into ~/projects, idempotent and non-fatal (a fresh machine may lack SSH/gh auth); prefers gh if authed, falls back to SSH. Wired into installs/main.sh after the OS installs so brew + git are ready and it stays OS-agnostic. --- Brewfile | 6 ++++ src/os/installs/main.sh | 3 ++ src/os/installs/repos.sh | 63 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100755 src/os/installs/repos.sh diff --git a/Brewfile b/Brewfile index 7cd9946..68b3414 100644 --- a/Brewfile +++ b/Brewfile @@ -140,6 +140,12 @@ cask "claude" cask "chatgpt" cask "block-goose" +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Notes & knowledge +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +cask "obsidian" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Productivity & menubar # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/os/installs/main.sh b/src/os/installs/main.sh index 0e51e1e..cf6090f 100755 --- a/src/os/installs/main.sh +++ b/src/os/installs/main.sh @@ -8,3 +8,6 @@ cd "$(dirname "${BASH_SOURCE[0]}")" \ print_in_purple "\n • Installs\n\n" "./$(get_os)/main.sh" + +# Clone personal repos (OS-agnostic; runs after brew + git are installed). +./repos.sh diff --git a/src/os/installs/repos.sh b/src/os/installs/repos.sh new file mode 100755 index 0000000..d0adb9d --- /dev/null +++ b/src/os/installs/repos.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +cd "$(dirname "${BASH_SOURCE[0]}")" \ + && . "../utils.sh" + +declare -r PROJECTS_DIR="$HOME/projects" + +# Repos to clone on a fresh machine, as "|". +# Existing directories are skipped; failures are non-fatal (a brand-new +# machine may not have SSH/gh auth yet — set it up and re-run). +declare -a REPOS=( + "llm-wiki|lukasjuhas/llm-wiki" + # "consumer-web|POSH-Group/consumer-web" + # add more here as needed +) + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +clone_repo() { + + local name="${1%%|*}" + local slug="${1#*|}" + local target="$PROJECTS_DIR/$name" + local rc + + if [ -d "$target" ]; then + print_success "$name (already present)" + return 0 + fi + + # Prefer gh (works over HTTPS token even without SSH keys); fall back to SSH. + if cmd_exists "gh" && gh auth status &> /dev/null; then + gh repo clone "$slug" "$target" -- --quiet &> /dev/null + rc=$? + else + git clone --quiet "git@github.com:$slug.git" "$target" &> /dev/null + rc=$? + fi + + if [ "$rc" -eq 0 ]; then + print_success "$name (cloned)" + else + print_warning "$name (skipped — clone failed; set up SSH/gh auth and re-run)" + fi + +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +main() { + + print_in_purple "\n • Clone repositories\n\n" + + mkdir -p "$PROJECTS_DIR" + + local repo + for repo in "${REPOS[@]}"; do + clone_repo "$repo" + done + +} + +main