@quickcall/all-configs 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +15 -2
  2. package/bin/all-configs.js +44 -0
  3. package/package.json +20 -4
  4. package/runtime/allconfigs/__init__.py +1 -0
  5. package/runtime/allconfigs/__main__.py +42 -0
  6. package/runtime/allconfigs/__pycache__/__init__.cpython-312.pyc +0 -0
  7. package/runtime/allconfigs/__pycache__/__main__.cpython-312.pyc +0 -0
  8. package/runtime/allconfigs/__pycache__/modules.cpython-312.pyc +0 -0
  9. package/runtime/allconfigs/__pycache__/probe.cpython-312.pyc +0 -0
  10. package/runtime/allconfigs/__pycache__/runner.cpython-312.pyc +0 -0
  11. package/runtime/allconfigs/modules.py +221 -0
  12. package/runtime/allconfigs/probe.py +60 -0
  13. package/runtime/install.sh +74 -0
  14. package/runtime/lib/common.sh +147 -0
  15. package/runtime/lib/uninstall.sh +35 -0
  16. package/runtime/modules/aldente/install.sh +23 -0
  17. package/runtime/modules/aldente/module.toml +11 -0
  18. package/runtime/modules/aliases/aliases.sh +31 -0
  19. package/runtime/modules/aliases/install.sh +36 -0
  20. package/runtime/modules/aliases/module.toml +7 -0
  21. package/runtime/modules/aqua-voice/install.sh +23 -0
  22. package/runtime/modules/aqua-voice/module.toml +11 -0
  23. package/runtime/modules/betterdisplay/install.sh +23 -0
  24. package/runtime/modules/betterdisplay/module.toml +11 -0
  25. package/runtime/modules/bitwarden/install.sh +19 -0
  26. package/runtime/modules/bitwarden/module.toml +11 -0
  27. package/runtime/modules/browsers/install.sh +33 -0
  28. package/runtime/modules/browsers/module.toml +11 -0
  29. package/runtime/modules/bun/install.sh +72 -0
  30. package/runtime/modules/bun/module.toml +7 -0
  31. package/runtime/modules/caveman/install.sh +79 -0
  32. package/runtime/modules/caveman/module.toml +7 -0
  33. package/runtime/modules/claude/install.sh +22 -0
  34. package/runtime/modules/claude/module.toml +7 -0
  35. package/runtime/modules/codex/install.sh +20 -0
  36. package/runtime/modules/codex/module.toml +7 -0
  37. package/runtime/modules/docker/install.sh +19 -0
  38. package/runtime/modules/docker/module.toml +11 -0
  39. package/runtime/modules/external-skills/install.sh +30 -0
  40. package/runtime/modules/external-skills/module.toml +4 -0
  41. package/runtime/modules/ffmpeg/install.sh +13 -0
  42. package/runtime/modules/ffmpeg/module.toml +11 -0
  43. package/runtime/modules/fonts/install.sh +62 -0
  44. package/runtime/modules/fonts/module.toml +8 -0
  45. package/runtime/modules/ghostty/config +44 -0
  46. package/runtime/modules/ghostty/install.sh +64 -0
  47. package/runtime/modules/ghostty/module.toml +9 -0
  48. package/runtime/modules/ghostty/themes/ayu-dark +22 -0
  49. package/runtime/modules/ghostty/themes/catppuccin-frappe +23 -0
  50. package/runtime/modules/ghostty/themes/catppuccin-latte +23 -0
  51. package/runtime/modules/ghostty/themes/catppuccin-latte.conf +23 -0
  52. package/runtime/modules/ghostty/themes/catppuccin-macchiato +23 -0
  53. package/runtime/modules/ghostty/themes/catppuccin-mocha +23 -0
  54. package/runtime/modules/ghostty/themes/visual-studio-light +27 -0
  55. package/runtime/modules/ghostty/themes/vscode-light +24 -0
  56. package/runtime/modules/ghostty/themes/vscode-light-soft +24 -0
  57. package/runtime/modules/ghostty/xterm-ghostty.terminfo +81 -0
  58. package/runtime/modules/github/install.sh +101 -0
  59. package/runtime/modules/github/module.toml +8 -0
  60. package/runtime/modules/hf/install.sh +98 -0
  61. package/runtime/modules/hf/module.toml +7 -0
  62. package/runtime/modules/karabiner/README.md +146 -0
  63. package/runtime/modules/karabiner/agents.md +39 -0
  64. package/runtime/modules/karabiner/app_launchers.json +236 -0
  65. package/runtime/modules/karabiner/custom_delete_mapping.json +13 -0
  66. package/runtime/modules/karabiner/fn_to_control.json +9 -0
  67. package/runtime/modules/karabiner/install.sh +60 -0
  68. package/runtime/modules/karabiner/karabiner.json +866 -0
  69. package/runtime/modules/karabiner/keychron-modifier-swap.sh +80 -0
  70. package/runtime/modules/karabiner/module.toml +8 -0
  71. package/runtime/modules/karabiner/remap_caps_lock_shift_super.json +23 -0
  72. package/runtime/modules/karabiner/remap_escape_to_control.json +49 -0
  73. package/runtime/modules/karabiner/rename_caps_lock_to_super.json +23 -0
  74. package/runtime/modules/karabiner/right_shift_mouse_click.json +44 -0
  75. package/runtime/modules/karabiner/swap_esc_delete.json +10 -0
  76. package/runtime/modules/karabiner/troubleshooting.md +242 -0
  77. package/runtime/modules/karabiner/vim_arrow_keys.json +477 -0
  78. package/runtime/modules/keepingyouawake/install.sh +23 -0
  79. package/runtime/modules/keepingyouawake/module.toml +11 -0
  80. package/runtime/modules/keycastr/install.sh +23 -0
  81. package/runtime/modules/keycastr/module.toml +11 -0
  82. package/runtime/modules/multi-github/install.sh +179 -0
  83. package/runtime/modules/multi-github/module.toml +4 -0
  84. package/runtime/modules/ncdu/install.sh +13 -0
  85. package/runtime/modules/ncdu/module.toml +11 -0
  86. package/runtime/modules/node/install.sh +73 -0
  87. package/runtime/modules/node/module.toml +11 -0
  88. package/runtime/modules/nvim/.neoconf.json +15 -0
  89. package/runtime/modules/nvim/init.lua +2 -0
  90. package/runtime/modules/nvim/install.sh +142 -0
  91. package/runtime/modules/nvim/lazy-lock.json +35 -0
  92. package/runtime/modules/nvim/lazyvim.json +10 -0
  93. package/runtime/modules/nvim/lua/config/autocmds.lua +18 -0
  94. package/runtime/modules/nvim/lua/config/keymaps.lua +10 -0
  95. package/runtime/modules/nvim/lua/config/lazy.lua +53 -0
  96. package/runtime/modules/nvim/lua/config/options.lua +3 -0
  97. package/runtime/modules/nvim/lua/plugins/image.lua +9 -0
  98. package/runtime/modules/nvim/lua/plugins/markdown.lua +56 -0
  99. package/runtime/modules/nvim/lua/plugins/noice.lua +17 -0
  100. package/runtime/modules/nvim/lua/plugins/rose-pine.lua +16 -0
  101. package/runtime/modules/nvim/lua/plugins/snacks.lua +20 -0
  102. package/runtime/modules/nvim/module.toml +8 -0
  103. package/runtime/modules/nvim/stylua.toml +3 -0
  104. package/runtime/modules/p10k/install.sh +46 -0
  105. package/runtime/modules/p10k/module.toml +8 -0
  106. package/runtime/modules/p10k/p10k.zsh +1711 -0
  107. package/runtime/modules/pi/install.sh +77 -0
  108. package/runtime/modules/pi/module.toml +8 -0
  109. package/runtime/modules/pi/packages +5 -0
  110. package/runtime/modules/pi/settings.json +21 -0
  111. package/runtime/modules/presentify/install.sh +25 -0
  112. package/runtime/modules/presentify/module.toml +7 -0
  113. package/runtime/modules/rectangle/RectangleConfig.json +353 -0
  114. package/runtime/modules/rectangle/install.sh +64 -0
  115. package/runtime/modules/rectangle/module.toml +11 -0
  116. package/runtime/modules/shortcat/install.sh +19 -0
  117. package/runtime/modules/shortcat/module.toml +11 -0
  118. package/runtime/modules/skills/install.sh +25 -0
  119. package/runtime/modules/skills/module.toml +4 -0
  120. package/runtime/modules/skills/skills-lock.json +35 -0
  121. package/runtime/modules/slack/install.sh +23 -0
  122. package/runtime/modules/slack/module.toml +11 -0
  123. package/runtime/modules/spotify/install.sh +23 -0
  124. package/runtime/modules/spotify/module.toml +11 -0
  125. package/runtime/modules/ssh-keygen/install.sh +130 -0
  126. package/runtime/modules/ssh-keygen/module.toml +4 -0
  127. package/runtime/modules/statusline/install.sh +69 -0
  128. package/runtime/modules/statusline/module.toml +7 -0
  129. package/runtime/modules/statusline/statusline.sh +168 -0
  130. package/runtime/modules/statusline/turn-counter.sh +11 -0
  131. package/runtime/modules/superfile/cheatsheet.md +127 -0
  132. package/runtime/modules/superfile/config.toml +181 -0
  133. package/runtime/modules/superfile/hotkeys.toml +96 -0
  134. package/runtime/modules/superfile/install.sh +73 -0
  135. package/runtime/modules/superfile/module.toml +7 -0
  136. package/runtime/modules/tailscale/install.sh +29 -0
  137. package/runtime/modules/tailscale/module.toml +11 -0
  138. package/runtime/modules/tinycast/install.sh +68 -0
  139. package/runtime/modules/tinycast/module.toml +7 -0
  140. package/runtime/modules/tinycast/settings.json +226 -0
  141. package/runtime/modules/tmux/.tmux.conf.local +168 -0
  142. package/runtime/modules/tmux/README.md +50 -0
  143. package/runtime/modules/tmux/install.sh +57 -0
  144. package/runtime/modules/tmux/installer.mjs +191 -0
  145. package/runtime/modules/tmux/module.toml +8 -0
  146. package/runtime/modules/tmux/shell-helpers.sh +20 -0
  147. package/runtime/modules/tmux/uninstall.sh +134 -0
  148. package/runtime/modules/uv/install.sh +72 -0
  149. package/runtime/modules/uv/module.toml +7 -0
  150. package/runtime/modules/vlc/install.sh +23 -0
  151. package/runtime/modules/vlc/module.toml +11 -0
  152. package/runtime/modules/vscode/install.sh +33 -0
  153. package/runtime/modules/vscode/keybindings.json +74 -0
  154. package/runtime/modules/vscode/module.toml +8 -0
  155. package/runtime/modules/vscode/settings.json +426 -0
  156. package/runtime/modules/vscode/tasks.json +1 -0
  157. package/runtime/modules/yt-dlp/install.sh +13 -0
  158. package/runtime/modules/yt-dlp/module.toml +11 -0
  159. package/runtime/modules/zed/install.sh +43 -0
  160. package/runtime/modules/zed/module.toml +8 -0
  161. package/runtime/modules/zed/settings.json +208 -0
  162. package/runtime/modules/zoxide/install.sh +41 -0
  163. package/runtime/modules/zoxide/module.toml +11 -0
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # Remove packages through the platform package manager.
3
+ #
4
+ # lib/uninstall.sh <package>...
5
+ #
6
+ # Package names come from the [uninstall] table of a module.toml
7
+ # (`brew` on macOS, `packages` on Linux); the TUI resolves them.
8
+ # Config-only modules have no [uninstall] table and are never passed here,
9
+ # so this script cannot delete a tool that a config module merely configures.
10
+ set -e
11
+
12
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
13
+ source "$ROOT_DIR/lib/common.sh" || { echo "Error: lib/common.sh not found" >&2; exit 1; }
14
+
15
+ if [[ $# -eq 0 ]]; then
16
+ fail "Usage: ${0##*/} <package>..."
17
+ exit 1
18
+ fi
19
+
20
+ status=0
21
+ for pkg in "$@"; do
22
+ if [[ ! "$pkg" =~ ^[A-Za-z0-9@._+-]+$ ]]; then
23
+ fail "invalid package name: $pkg"
24
+ status=1
25
+ continue
26
+ fi
27
+ step "Uninstalling $pkg"
28
+ if pkg_uninstall "$pkg"; then
29
+ ok "$pkg uninstalled"
30
+ else
31
+ fail "$pkg not uninstalled"
32
+ status=1
33
+ fi
34
+ done
35
+ exit "$status"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing AlDente"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "AlDente module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ if command -v brew &>/dev/null; then
16
+ brew_install_cask aldente
17
+ else
18
+ warn "Homebrew not found; skipping AlDente app install"
19
+ fi
20
+
21
+ echo ""
22
+ echo -e " ${GRN}Done!${R}"
23
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "aldente"
2
+ description = "Installs AlDente via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["aldente"]
8
+ apps = ["AlDente"]
9
+
10
+ [uninstall]
11
+ brew = ["aldente"]
@@ -0,0 +1,31 @@
1
+ # sagarsrc — personal shell aliases & functions
2
+
3
+ # ll: detailed listing — eza (dirs first, colors, sizes, git status)
4
+ if command -v eza >/dev/null 2>&1; then
5
+ alias ll='eza -l --group-directories-first --git --icons=auto'
6
+ alias la='eza -la --group-directories-first --git --icons=auto'
7
+ else
8
+ alias ll='ls -lhG'
9
+ fi
10
+
11
+ # reload: re-source the running shell's rc file
12
+ if [[ -n "$ZSH_VERSION" ]]; then
13
+ alias reload='source ~/.zshrc'
14
+ elif [[ -n "$BASH_VERSION" ]]; then
15
+ alias reload='source ~/.bashrc'
16
+ fi
17
+
18
+ # vi/vim -> neovim
19
+ if command -v nvim >/dev/null 2>&1; then
20
+ alias vi='nvim'
21
+ alias vim='nvim'
22
+ fi
23
+
24
+ # ckdir: create a directory (with parents) and cd into it
25
+ ckdir() {
26
+ if [[ $# -eq 0 ]]; then
27
+ echo "usage: ckdir <directory>" >&2
28
+ return 1
29
+ fi
30
+ mkdir -p "$1" && cd "$1"
31
+ }
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing shell aliases"
9
+
10
+ SRC="$SCRIPT_DIR/aliases.sh"
11
+ DEST="$HOME/.aliases"
12
+
13
+ # Symlink ~/.aliases -> repo file
14
+ if [[ -L "$DEST" && "$(readlink "$DEST")" == "$SRC" ]]; then
15
+ ok "~/.aliases already linked"
16
+ else
17
+ if [[ -e "$DEST" && ! -L "$DEST" ]]; then
18
+ warn "Existing ~/.aliases found — backing up to ~/.aliases.bak"
19
+ mv "$DEST" "$DEST.bak"
20
+ fi
21
+ ln -sfn "$SRC" "$DEST"
22
+ ok "~/.aliases → $SRC"
23
+ fi
24
+
25
+ # Make sure the shell sources it
26
+ for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do
27
+ [[ -f "$rc" ]] || continue
28
+ if ! grep -Fq '.aliases' "$rc" 2>/dev/null; then
29
+ printf '\n# shell aliases & functions\n[[ -f ~/.aliases ]] && source ~/.aliases\n' >> "$rc"
30
+ ok "sourcing added to $(basename "$rc")"
31
+ else
32
+ ok "~/.aliases already sourced in $(basename "$rc")"
33
+ fi
34
+ done
35
+
36
+ ok "aliases installed — restart your shell or run: source ~/.aliases"
@@ -0,0 +1,7 @@
1
+ name = "aliases"
2
+ description = "Personal shell aliases (ll, la, ckdir) sourced from ~/.aliases"
3
+ platforms = ["mac", "linux"]
4
+ kind = "config"
5
+
6
+ [detect]
7
+ paths = ["~/.aliases"]
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing Aqua Voice"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "Aqua Voice module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ if command -v brew &>/dev/null; then
16
+ brew_install_cask aqua-voice
17
+ else
18
+ warn "Homebrew not found; skipping Aqua Voice app install"
19
+ fi
20
+
21
+ echo ""
22
+ echo -e " ${GRN}Done!${R}"
23
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "aqua-voice"
2
+ description = "Installs Aqua Voice via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["aqua-voice"]
8
+ apps = ["Aqua Voice"]
9
+
10
+ [uninstall]
11
+ brew = ["aqua-voice"]
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing BetterDisplay"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "BetterDisplay module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ if command -v brew &>/dev/null; then
16
+ brew_install_cask betterdisplay
17
+ else
18
+ warn "Homebrew not found; skipping BetterDisplay app install"
19
+ fi
20
+
21
+ echo ""
22
+ echo -e " ${GRN}Done!${R}"
23
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "betterdisplay"
2
+ description = "Installs BetterDisplay via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["betterdisplay"]
8
+ apps = ["BetterDisplay"]
9
+
10
+ [uninstall]
11
+ brew = ["betterdisplay"]
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing Bitwarden"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "Bitwarden module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ brew_install_cask bitwarden
16
+
17
+ echo ""
18
+ echo -e " ${GRN}Done!${R}"
19
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "bitwarden"
2
+ description = "Installs Bitwarden via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["bitwarden"]
8
+ apps = ["Bitwarden"]
9
+
10
+ [uninstall]
11
+ brew = ["bitwarden"]
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing browsers"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "Browsers module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ if ! command -v brew &>/dev/null; then
16
+ step "Homebrew not found — installing"
17
+ NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
18
+ ok "Homebrew installed"
19
+ else
20
+ ok "Homebrew ${D}$(command -v brew)${R}"
21
+ fi
22
+
23
+ step "Installing Brave"
24
+ brew_install_cask brave-browser
25
+ ok "Brave installed"
26
+
27
+ step "Installing Google Chrome"
28
+ brew_install_cask google-chrome
29
+ ok "Google Chrome installed"
30
+
31
+ echo ""
32
+ echo -e " ${GRN}Done!${R}"
33
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "browsers"
2
+ description = "Brave and Google Chrome via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["brave-browser", "google-chrome"]
8
+ apps = ["Brave Browser", "Google Chrome"]
9
+
10
+ [uninstall]
11
+ brew = ["brave-browser", "google-chrome"]
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ usage() {
9
+ cat << USAGE
10
+ Usage: ${0##*/} [options]
11
+
12
+ Options:
13
+ -h, --help Show this help
14
+ USAGE
15
+ exit 0
16
+ }
17
+
18
+ while [[ $# -gt 0 ]]; do
19
+ case "$1" in
20
+ -h|--help) usage ;;
21
+ *) fail "Unknown option: $1"; exit 1 ;;
22
+ esac
23
+ done
24
+
25
+ step "Installing Bun"
26
+
27
+ if command -v bun &>/dev/null; then
28
+ ok "bun ${D}$(bun --version)${R}"
29
+ else
30
+ warn "bun not found — installing via official installer"
31
+ curl -fsSL https://bun.sh/install | bash
32
+ export PATH="$HOME/.bun/bin:$HOME/.local/bin:$PATH"
33
+ fi
34
+
35
+ for rc in "$HOME/.profile" "$HOME/.zshrc" "$HOME/.bashrc"; do
36
+ [[ -f "$rc" ]] || touch "$rc"
37
+ python3 - "$rc" <<'PY'
38
+ from pathlib import Path
39
+ import sys
40
+ path = Path(sys.argv[1])
41
+ lines = path.read_text().splitlines() if path.exists() else []
42
+ out = []
43
+ i = 0
44
+ while i < len(lines):
45
+ line = lines[i]
46
+ if line.strip() == '# bun':
47
+ i += 1
48
+ while i < len(lines) and (
49
+ lines[i].startswith('export BUN_INSTALL=') or
50
+ lines[i].startswith('export PATH="$HOME/.bun/bin:$PATH"') or
51
+ lines[i].startswith('export PATH="$BUN_INSTALL/bin:$PATH"') or
52
+ lines[i].startswith('case ":$PATH:" in') or
53
+ lines[i].startswith(' *":$HOME/.bun/bin:"*) ;;') or
54
+ lines[i].startswith(' *) export PATH="$HOME/.bun/bin:$PATH" ;;') or
55
+ lines[i].startswith('esac') or
56
+ lines[i].strip() == ''
57
+ ):
58
+ i += 1
59
+ continue
60
+ out.append(line)
61
+ i += 1
62
+ text = '\n'.join(out).rstrip() + '\n\n# bun\ncase ":$PATH:" in\n *":$HOME/.bun/bin:"*) ;;\n *) export PATH="$HOME/.bun/bin:$PATH" ;;\nesac\n'
63
+ path.write_text(text)
64
+ PY
65
+ ok "ensured ~/.bun/bin PATH in $(basename "$rc")"
66
+ done
67
+
68
+ ok "bun ${D}$(bun --version)${R}"
69
+
70
+ echo ""
71
+ echo -e " ${GRN}Done!${R}"
72
+ echo ""
@@ -0,0 +1,7 @@
1
+ name = "bun"
2
+ description = "Bun runtime via official installer"
3
+ platforms = ["mac", "linux"]
4
+ kind = "cli"
5
+
6
+ [detect]
7
+ commands = ["bun"]
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing caveman (Claude Code plugin)"
9
+
10
+ # ─── Requires claude CLI ───
11
+
12
+ if ! command -v claude &>/dev/null; then
13
+ warn "claude CLI not found — installing Claude first"
14
+ bash "$ROOT_DIR/modules/claude/install.sh"
15
+ fi
16
+
17
+ if ! command -v claude &>/dev/null; then
18
+ fail "claude CLI still not found after install"
19
+ exit 1
20
+ fi
21
+
22
+ if yes | claude plugin marketplace add JuliusBrussee/caveman; then
23
+ ok "caveman marketplace added"
24
+ else
25
+ warn "caveman marketplace add failed or already exists"
26
+ fi
27
+
28
+ plugin_log="$(mktemp)"
29
+ if yes | claude plugin install caveman@caveman >"$plugin_log" 2>&1; then
30
+ ok "caveman installed"
31
+ else
32
+ if grep -q "Validation errors: agents: Invalid input" "$plugin_log"; then
33
+ warn "caveman plugin skipped — upstream manifest invalid"
34
+ else
35
+ warn "caveman plugin install failed; open Claude Code and run plugin install manually"
36
+ tail -20 "$plugin_log" || true
37
+ fi
38
+ fi
39
+ rm -f "$plugin_log"
40
+
41
+ step "Installing caveman skill (claude-code, codex, pi)"
42
+
43
+ if ! command -v npx &>/dev/null; then
44
+ warn "npx not found — installing node first"
45
+ bash "$ROOT_DIR/modules/node/install.sh"
46
+ fi
47
+
48
+ npx --yes skills add JuliusBrussee/caveman --skill caveman --agent claude-code --agent codex --agent pi -g -y
49
+
50
+ step "Setting caveman ultra defaults"
51
+
52
+ CAVEMAN_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/caveman"
53
+ CLAUDE_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
54
+ PI_AGENT_DIR="${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}"
55
+
56
+ mkdir -p "$CAVEMAN_CONFIG_DIR" "$CLAUDE_DIR" "$PI_AGENT_DIR"
57
+
58
+ cat > "$CAVEMAN_CONFIG_DIR/config.json" <<'JSON'
59
+ {
60
+ "defaultMode": "ultra"
61
+ }
62
+ JSON
63
+ ok "Claude caveman default ${D}→ ultra${R}"
64
+
65
+ printf 'ultra\n' > "$CLAUDE_DIR/.caveman-active"
66
+ ok "Claude caveman active flag ${D}→ ultra${R}"
67
+
68
+ cat > "$PI_AGENT_DIR/caveman.json" <<'JSON'
69
+ {
70
+ "defaultLevel": "ultra",
71
+ "showStatus": true
72
+ }
73
+ JSON
74
+ ok "Pi caveman default ${D}→ ultra${R}"
75
+
76
+ echo ""
77
+ echo -e " ${GRN}Done!${R} Caveman defaults to ${CYN}ultra${R} in Claude and Pi"
78
+ echo -e " ${D}Stop: /caveman off or 'normal mode'${R}"
79
+ echo ""
@@ -0,0 +1,7 @@
1
+ name = "caveman"
2
+ description = "caveman Claude Code plugin \u2014 ~75% fewer output tokens"
3
+ platforms = ["mac", "linux"]
4
+ kind = "config"
5
+
6
+ [detect]
7
+ paths = ["~/.config/caveman/config.json"]
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing Claude Code"
9
+
10
+ if command -v claude &>/dev/null; then
11
+ ok "claude ${D}$(claude --version 2>/dev/null) → $(command -v claude)${R}"
12
+ warn "already installed — run 'claude update' to upgrade"
13
+ else
14
+ warn "claude not found — installing"
15
+ curl -fsSL https://claude.ai/install.sh | bash
16
+ ok "Claude Code installed"
17
+ fi
18
+
19
+ echo ""
20
+ echo -e " ${GRN}Done!${R} Run ${CYN}claude${R} to start"
21
+ echo -e " ${D}Login: claude auth login${R}"
22
+ echo ""
@@ -0,0 +1,7 @@
1
+ name = "claude"
2
+ description = "Claude Code CLI via claude.ai/install.sh"
3
+ platforms = ["mac", "linux"]
4
+ kind = "cli"
5
+
6
+ [detect]
7
+ commands = ["claude"]
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing Codex"
9
+
10
+ if command -v curl &>/dev/null; then
11
+ curl -fsSL https://chatgpt.com/codex/install.sh | CODEX_NON_INTERACTIVE=1 sh
12
+ ok "Codex installed"
13
+ else
14
+ fail "curl is required to install Codex"
15
+ exit 1
16
+ fi
17
+
18
+ echo ""
19
+ echo -e " ${GRN}Done!${R}"
20
+ echo ""
@@ -0,0 +1,7 @@
1
+ name = "codex"
2
+ description = "Installs OpenAI Codex CLI via official installer"
3
+ platforms = ["mac", "linux"]
4
+ kind = "cli"
5
+
6
+ [detect]
7
+ commands = ["codex"]
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing Docker Desktop"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "Docker module currently supports macOS only"
12
+ exit 0
13
+ fi
14
+
15
+ brew_install_cask docker
16
+
17
+ echo ""
18
+ echo -e " ${GRN}Done!${R} Open Docker Desktop once to finish setup"
19
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "docker"
2
+ description = "Installs Docker Desktop via Homebrew"
3
+ platforms = ["mac"]
4
+ kind = "app"
5
+
6
+ [detect]
7
+ brew = ["docker", "docker-desktop"]
8
+ apps = ["Docker"]
9
+
10
+ [uninstall]
11
+ brew = ["docker"]
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing external UI skills (hallmark, taste, impeccable)"
9
+
10
+ if ! command -v npx &>/dev/null; then
11
+ warn "npx not found — installing node first"
12
+ bash "$ROOT_DIR/modules/node/install.sh"
13
+ fi
14
+
15
+ AGENTS="--agent claude-code --agent codex --agent pi"
16
+
17
+ # hallmark — anti-AI-slop design skill
18
+ npx --yes skills add nutlope/hallmark $AGENTS -g -y
19
+
20
+ # taste — design taste skill
21
+ npx --yes skills add leonxlnx/taste-skill --skill design-taste-frontend $AGENTS -g -y
22
+
23
+ # impeccable — has its own installer
24
+ npx impeccable install --scope=global --yes
25
+
26
+ ok "External UI skills installed"
27
+
28
+ echo ""
29
+ echo -e " ${GRN}Done!${R}"
30
+ echo ""
@@ -0,0 +1,4 @@
1
+ name = "external-skills"
2
+ description = "External UI/design skills: hallmark, taste (skills CLI), impeccable (own installer)"
3
+ platforms = ["mac", "linux"]
4
+ kind = "config"
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ source "$ROOT_DIR/lib/common.sh"
7
+
8
+ step "Installing ffmpeg"
9
+ ensure_cmd ffmpeg
10
+
11
+ echo ""
12
+ echo -e " ${GRN}Done!${R}"
13
+ echo ""
@@ -0,0 +1,11 @@
1
+ name = "ffmpeg"
2
+ description = "Cross-platform audio/video conversion and streaming toolkit"
3
+ platforms = ["mac", "linux"]
4
+ kind = "cli"
5
+
6
+ [detect]
7
+ commands = ["ffmpeg"]
8
+
9
+ [uninstall]
10
+ brew = ["ffmpeg"]
11
+ packages = ["ffmpeg"]