@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,98 @@
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
+ -t, --token <token> Hugging Face access token (optional)
14
+ -h, --help Show this help
15
+
16
+ Environment variables:
17
+ HF_TOKEN Hugging Face access token
18
+
19
+ Examples:
20
+ ${0##*/}
21
+ ${0##*/} -t hf_...
22
+ HF_TOKEN=hf_... ${0##*/}
23
+ USAGE
24
+ exit 0
25
+ }
26
+
27
+ TOKEN="${HF_TOKEN:-}"
28
+
29
+ while [[ $# -gt 0 ]]; do
30
+ case "$1" in
31
+ -t|--token) TOKEN="$2"; shift 2 ;;
32
+ -h|--help) usage ;;
33
+ *) fail "Unknown option: $1"; exit 1 ;;
34
+ esac
35
+ done
36
+
37
+ step "Ensuring uv"
38
+ if command -v uv &> /dev/null; then
39
+ ok "uv ${D}$(uv --version)${R}"
40
+ else
41
+ warn "uv not found — installing"
42
+ curl -LsSf https://astral.sh/uv/install.sh | bash
43
+ export PATH="$HOME/.local/bin:$PATH"
44
+ ok "uv installed ${D}$(uv --version)${R}"
45
+ fi
46
+
47
+ step "Installing Hugging Face CLI"
48
+
49
+ if command -v hf &> /dev/null; then
50
+ ok "hf ${D}$(hf --version)${R}"
51
+ else
52
+ if [[ "$PLATFORM" == "linux" ]] && command -v apt-get &>/dev/null; then
53
+ step "Ensuring Python venv support"
54
+ sudo apt-get update -qq
55
+ sudo apt-get install -y -qq python3-venv python3.12-venv || sudo apt-get install -y -qq python3-venv
56
+ ok "python venv support present"
57
+ fi
58
+
59
+ warn "hf not found - installing via hf.co/install.sh"
60
+ curl -LsSf https://hf.co/cli/install.sh | bash
61
+
62
+ # Add to PATH if installed in a user-local directory
63
+ if [[ -d "$HOME/.local/bin" ]] && [[ -f "$HOME/.local/bin/hf" ]]; then
64
+ for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do
65
+ [[ -f "$rc" ]] || continue
66
+ if ! grep -q "\.local/bin" "$rc" 2>/dev/null; then
67
+ printf '\n# hf cli\nexport PATH="$HOME/.local/bin:$PATH"\n' >> "$rc"
68
+ ok "added ~/.local/bin to PATH in $(basename "$rc")"
69
+ else
70
+ ok "~/.local/bin already in PATH in $(basename "$rc")"
71
+ fi
72
+ done
73
+ fi
74
+ fi
75
+
76
+ # Ensure hf is on PATH for the rest of this script
77
+ export PATH="$HOME/.local/bin:$PATH"
78
+ ok "hf ${D}$(hf --version)${R}"
79
+
80
+ step "Configuring git credential helper"
81
+ if [[ "$(git config --global credential.helper)" != "store" ]]; then
82
+ git config --global credential.helper store
83
+ ok "git credential.helper set to store"
84
+ else
85
+ ok "git credential.helper already set to store"
86
+ fi
87
+
88
+ if [[ -n "$TOKEN" ]]; then
89
+ step "Authenticating with Hugging Face"
90
+ hf auth login --token "$TOKEN" --add-to-git-credential
91
+ ok "HF authentication saved"
92
+ else
93
+ warn "No HF_TOKEN provided - run hf auth login manually"
94
+ fi
95
+
96
+ echo ""
97
+ echo -e " ${GRN}Done!${R} Run ${CYN}hf whoami${R} to verify"
98
+ echo ""
@@ -0,0 +1,7 @@
1
+ name = "hf"
2
+ description = "Hugging Face CLI (hf) via hf.co/install.sh"
3
+ platforms = ["mac", "linux"]
4
+ kind = "cli"
5
+
6
+ [detect]
7
+ commands = ["hf"]
@@ -0,0 +1,146 @@
1
+ # Karabiner Config
2
+
3
+ Local Karabiner-Elements config for this repo. Karabiner-Elements is macOS only.
4
+
5
+ ## Install / Sync
6
+
7
+ ```bash
8
+ ./karabiner/install.sh
9
+ ```
10
+
11
+ This syncs `karabiner/` to `~/.config/karabiner/karabiner_scripts/` and installs `karabiner.json` to `~/.config/karabiner/karabiner.json` (the live config Karabiner reads), then relaunches Karabiner-Elements.
12
+
13
+ If you edit configs by hand instead, keep these in sync:
14
+
15
+ 1. The modular file in this directory (e.g. `app_launchers.json`)
16
+ 2. `karabiner.json` in this directory (merged copy)
17
+ 3. The live config at `~/.config/karabiner/karabiner.json`
18
+
19
+ Karabiner watches the live config and reloads automatically (see `~/.local/share/karabiner/log/console_user_server.log` for `core_configuration is updated`).
20
+
21
+ ## Keymap
22
+
23
+ ### Caps Lock
24
+
25
+ | From | To | Description |
26
+ |------|-----|-------------|
27
+ | `Caps Lock` | `Ctrl+Shift+Option+Cmd` (super) | Caps Lock becomes a hyper key |
28
+
29
+ ### Application shortcuts
30
+
31
+ | Shortcut | Action |
32
+ |----------|--------|
33
+ | `Caps + B` | Open/switch to **Brave Browser** |
34
+ | `Caps + C` | Open/switch to **Claude** |
35
+ | `Caps + D` | Open/switch to **Visual Studio Code** |
36
+ | `Caps + F` | Open/switch to **Finder** |
37
+ | `Caps + G` | Open/switch to **ChatGPT** |
38
+ | `Caps + L` | Clear terminal (sends `Ctrl + L`) |
39
+ | `Caps + M` | Open/switch to **WhatsApp** |
40
+ | `Caps + N` | Open/switch to **Granola** |
41
+ | `Caps + O` | Open/switch to **Obsidian** |
42
+ | `Caps + S` | Open/switch to **Slack** |
43
+ | `Caps + T` | Open/switch to **Ghostty** |
44
+ | `Caps + W` | Open/switch to **WhatsApp Web** |
45
+
46
+ ### Modifier behavior
47
+
48
+ | From | To | Description |
49
+ |------|-----|-------------|
50
+ | `Fn` (built-in keyboard) | `Left Control` | Fn key acts as Left Control |
51
+ | `Left Control` (tapped) | `Escape` | Control becomes Escape when tapped alone |
52
+ | `Left Control` (held) | `Control` | Normal Control when used with other keys |
53
+ | `Right Control` (tapped) | `Escape` | Same as above, right side |
54
+ | `Right Control` (held) | `Control` | Same as above, right side |
55
+ | `Right Shift` (tapped) | Right Mouse Click | Quick right-click |
56
+ | `Right Shift` (held) | `Shift` | Normal Shift when used with other keys |
57
+
58
+ ### Option/Command swap (Keychron K3 Pro only)
59
+
60
+ Device-scoped `simple_modifications` on the Keychron (`vendor_id: 13364`), applied in firmware order (emitted codes are pre-swap):
61
+
62
+ | From | To |
63
+ |------|-----|
64
+ | `Left Command` | `Left Option` |
65
+ | `Left Option` | `Left Command` |
66
+ | `Right Command` | `Right Option` |
67
+ | `Right Option` | `Right Command` |
68
+
69
+ Do **not** make this a global swap — it would break the MacBook built-in keyboard. See [troubleshooting.md](./troubleshooting.md) for why.
70
+
71
+ ### Vim-style navigation (HJKL)
72
+
73
+ #### Basic movement
74
+
75
+ | Shortcut | Action |
76
+ |----------|--------|
77
+ | `Ctrl + H` | Left Arrow |
78
+ | `Ctrl + J` | Down Arrow |
79
+ | `Ctrl + K` | Up Arrow |
80
+ | `Ctrl + L` | Right Arrow |
81
+
82
+ #### Word-level movement
83
+
84
+ | Shortcut | Action |
85
+ |----------|--------|
86
+ | `Option + H/J/K/L` | Move by word left/down/up/right |
87
+
88
+ #### Line/document movement
89
+
90
+ | Shortcut | Action |
91
+ |----------|--------|
92
+ | `Ctrl + Cmd + H` | Move to line start |
93
+ | `Ctrl + Cmd + J` | Move to document end |
94
+ | `Ctrl + Cmd + K` | Move to document start |
95
+ | `Ctrl + Cmd + L` | Move to line end |
96
+
97
+ #### Selection
98
+
99
+ | Shortcut | Action |
100
+ |----------|--------|
101
+ | `Ctrl + Shift + H/J/K/L` | Select left/down/up/right |
102
+ | `Option + Shift + H/J/K/L` | Select word left/down/up/right |
103
+ | `Ctrl + Cmd + Shift + H` | Select to line start |
104
+ | `Ctrl + Cmd + Shift + J` | Select to document end |
105
+ | `Ctrl + Cmd + Shift + K` | Select to document start |
106
+ | `Ctrl + Cmd + Shift + L` | Select to line end |
107
+
108
+ ### Delete / mouse
109
+
110
+ | Shortcut | Action |
111
+ |----------|--------|
112
+ | `Ctrl + D` | Forward delete (single character) |
113
+ | `Escape` | Left Mouse Click |
114
+
115
+ ## Key symbols
116
+
117
+ | Symbol | Key |
118
+ |--------|-----|
119
+ | `⌘` | Command |
120
+ | `⌃` | Control |
121
+ | `⌥` | Option/Alt |
122
+ | `⇧` | Shift |
123
+ | `⇪` | Caps Lock |
124
+ | `⎋` | Escape |
125
+ | `⌦` | Delete (Forward) |
126
+ | `⌫` | Delete (Backward) |
127
+ | `←` `→` `↑` `↓` | Arrow Keys |
128
+
129
+ ## Files
130
+
131
+ | File | Purpose |
132
+ |------|---------|
133
+ | `karabiner.json` | Merged config, installed to live config by `install.sh` |
134
+ | `app_launchers.json` | Modular: app shortcuts (Caps+letter) |
135
+ | `vim_arrow_keys.json` | Modular: HJKL navigation |
136
+ | `rename_caps_lock_to_super.json` | Modular: Caps Lock -> super |
137
+ | `remap_caps_lock_shift_super.json` | Modular: Caps+Shift escape variant |
138
+ | `remap_escape_to_control.json` | Modular: Esc -> Ctrl, tap for Escape |
139
+ | `fn_to_control.json` | Modular: Fn -> Left Control |
140
+ | `custom_delete_mapping.json` | Modular: Ctrl+D forward delete |
141
+ | `right_shift_mouse_click.json` | Modular: Right Shift tap -> right click |
142
+ | `swap_esc_delete.json` | Modular: swap Esc/Delete |
143
+ | `install.sh` | Syncs repo -> live config, relaunches Karabiner |
144
+ | `keychron-modifier-swap.sh` | Helper for Keychron device entries |
145
+ | `troubleshooting.md` | Keychron modifier/Caps incident log + debug playbook |
146
+ | `agents.md` | Context for AI agents editing this config |
@@ -0,0 +1,39 @@
1
+ # Agent Context: Karabiner Config
2
+
3
+ ## Layout
4
+
5
+ This directory (`./karabiner/` in the `all-configs` dotfiles repo) is the source of truth. It is synced to the live location by `install.sh`:
6
+
7
+ ```
8
+ <repo>/karabiner/ # source of truth (this directory, git)
9
+ └── installed/synced to:
10
+ ~/.config/karabiner/
11
+ ├── karabiner.json # LIVE config — Karabiner-Elements reads this
12
+ └── karabiner_scripts/ # rsync copy of this directory (install.sh)
13
+ ```
14
+
15
+ ## Key rules
16
+
17
+ 1. **Caps Lock = super** (`left_control + left_shift + left_option + left_command`). All `Caps + <key>` shortcuts use that modifier combo.
18
+
19
+ 2. **Keep all copies in sync** when changing shortcuts:
20
+ - The modular file here (e.g. `app_launchers.json`)
21
+ - The merged `karabiner.json` here
22
+ - `~/.config/karabiner/karabiner.json` (live)
23
+ - `~/.config/karabiner/karabiner_scripts/` (rsync copy — or rerun `install.sh` to regenerate)
24
+
25
+ Karabiner watches the live config and reloads automatically; check `~/.local/share/karabiner/log/console_user_server.log` for `core_configuration is updated`.
26
+
27
+ 3. **App names vs bundle IDs** — `open -a 'App Name'` sometimes fails (e.g. WhatsApp). Use `open -b 'bundle.id'` as fallback. Get bundle ID via:
28
+ ```bash
29
+ mdls -name kMDItemCFBundleIdentifier /Applications/AppName.app
30
+ ```
31
+
32
+ 4. **Validate JSON** after editing:
33
+ ```bash
34
+ jq empty <file>
35
+ ```
36
+
37
+ 5. **Git** — commit and push from the `all-configs` repo root (`git@github.com:quickcall-dev/all-configs.git`).
38
+
39
+ 6. **Never add global Command/Option swaps** — they break the MacBook built-in keyboard. Keychron corrections are device-scoped only. See `troubleshooting.md` before touching modifier rules.
@@ -0,0 +1,236 @@
1
+ {
2
+ "description": "Caps Lock + b/c/d/f/g/l/m/n/o/p/s/t/w to open or switch to applications",
3
+ "manipulators": [
4
+ {
5
+ "from": {
6
+ "key_code": "g",
7
+ "modifiers": {
8
+ "mandatory": [
9
+ "left_control",
10
+ "left_shift",
11
+ "left_option",
12
+ "left_command"
13
+ ]
14
+ }
15
+ },
16
+ "to": [
17
+ {
18
+ "shell_command": "open -a 'ChatGPT'"
19
+ }
20
+ ],
21
+ "type": "basic"
22
+ },
23
+ {
24
+ "from": {
25
+ "key_code": "b",
26
+ "modifiers": {
27
+ "mandatory": [
28
+ "left_control",
29
+ "left_shift",
30
+ "left_option",
31
+ "left_command"
32
+ ]
33
+ }
34
+ },
35
+ "to": [
36
+ {
37
+ "shell_command": "open -a 'Brave Browser'"
38
+ }
39
+ ],
40
+ "type": "basic"
41
+ },
42
+ {
43
+ "from": {
44
+ "key_code": "d",
45
+ "modifiers": {
46
+ "mandatory": [
47
+ "left_control",
48
+ "left_shift",
49
+ "left_option",
50
+ "left_command"
51
+ ]
52
+ }
53
+ },
54
+ "to": [
55
+ {
56
+ "shell_command": "open -a 'Visual Studio Code'"
57
+ }
58
+ ],
59
+ "type": "basic"
60
+ },
61
+ {
62
+ "from": {
63
+ "key_code": "s",
64
+ "modifiers": {
65
+ "mandatory": [
66
+ "left_control",
67
+ "left_shift",
68
+ "left_option",
69
+ "left_command"
70
+ ]
71
+ }
72
+ },
73
+ "to": [
74
+ {
75
+ "shell_command": "open -a 'Slack'"
76
+ }
77
+ ],
78
+ "type": "basic"
79
+ },
80
+ {
81
+ "from": {
82
+ "key_code": "l",
83
+ "modifiers": {
84
+ "mandatory": [
85
+ "left_control",
86
+ "left_shift",
87
+ "left_option",
88
+ "left_command"
89
+ ]
90
+ }
91
+ },
92
+ "to": [
93
+ {
94
+ "key_code": "l",
95
+ "modifiers": [
96
+ "left_control"
97
+ ]
98
+ }
99
+ ],
100
+ "type": "basic"
101
+ },
102
+ {
103
+ "from": {
104
+ "key_code": "t",
105
+ "modifiers": {
106
+ "mandatory": [
107
+ "left_control",
108
+ "left_shift",
109
+ "left_option",
110
+ "left_command"
111
+ ]
112
+ }
113
+ },
114
+ "to": [
115
+ {
116
+ "shell_command": "open -a 'Ghostty'"
117
+ }
118
+ ],
119
+ "type": "basic"
120
+ },
121
+ {
122
+ "from": {
123
+ "key_code": "c",
124
+ "modifiers": {
125
+ "mandatory": [
126
+ "left_control",
127
+ "left_shift",
128
+ "left_option",
129
+ "left_command"
130
+ ]
131
+ }
132
+ },
133
+ "to": [
134
+ {
135
+ "shell_command": "open -a 'Claude'"
136
+ }
137
+ ],
138
+ "type": "basic"
139
+ },
140
+ {
141
+ "from": {
142
+ "key_code": "w",
143
+ "modifiers": {
144
+ "mandatory": [
145
+ "left_control",
146
+ "left_shift",
147
+ "left_option",
148
+ "left_command"
149
+ ]
150
+ }
151
+ },
152
+ "to": [
153
+ {
154
+ "shell_command": "open -a 'WhatsApp Web'"
155
+ }
156
+ ],
157
+ "type": "basic"
158
+ },
159
+ {
160
+ "from": {
161
+ "key_code": "m",
162
+ "modifiers": {
163
+ "mandatory": [
164
+ "left_control",
165
+ "left_shift",
166
+ "left_option",
167
+ "left_command"
168
+ ]
169
+ }
170
+ },
171
+ "to": [
172
+ {
173
+ "shell_command": "open -b 'net.whatsapp.WhatsApp'"
174
+ }
175
+ ],
176
+ "type": "basic"
177
+ },
178
+ {
179
+ "from": {
180
+ "key_code": "o",
181
+ "modifiers": {
182
+ "mandatory": [
183
+ "left_control",
184
+ "left_shift",
185
+ "left_option",
186
+ "left_command"
187
+ ]
188
+ }
189
+ },
190
+ "to": [
191
+ {
192
+ "shell_command": "open -a 'Obsidian'"
193
+ }
194
+ ],
195
+ "type": "basic"
196
+ },
197
+ {
198
+ "from": {
199
+ "key_code": "f",
200
+ "modifiers": {
201
+ "mandatory": [
202
+ "left_control",
203
+ "left_shift",
204
+ "left_option",
205
+ "left_command"
206
+ ]
207
+ }
208
+ },
209
+ "to": [
210
+ {
211
+ "shell_command": "open -a 'Finder'"
212
+ }
213
+ ],
214
+ "type": "basic"
215
+ },
216
+ {
217
+ "from": {
218
+ "key_code": "n",
219
+ "modifiers": {
220
+ "mandatory": [
221
+ "left_control",
222
+ "left_shift",
223
+ "left_option",
224
+ "left_command"
225
+ ]
226
+ }
227
+ },
228
+ "to": [
229
+ {
230
+ "shell_command": "open -a 'Granola'"
231
+ }
232
+ ],
233
+ "type": "basic"
234
+ }
235
+ ]
236
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "description": "Custom delete mappings",
3
+ "manipulators": [
4
+ {
5
+ "from": {
6
+ "key_code": "d",
7
+ "modifiers": { "mandatory": ["control"] }
8
+ },
9
+ "to": [{ "key_code": "delete_forward" }],
10
+ "type": "basic"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "description": "Remap Fn key to Left Control (built-in keyboard)",
3
+ "simple_modifications": [
4
+ {
5
+ "from": { "apple_vendor_top_case_key_code": "keyboard_fn" },
6
+ "to": [{ "key_code": "left_control" }]
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1,60 @@
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 Karabiner-Elements"
9
+
10
+ if [[ "$PLATFORM" != "mac" ]]; then
11
+ warn "Karabiner-Elements is macOS only; skipping"
12
+ exit 0
13
+ fi
14
+
15
+ if command -v karabiner_cli &>/dev/null || [[ -d "/Applications/Karabiner-Elements.app" ]]; then
16
+ ok "Karabiner-Elements already installed"
17
+ else
18
+ warn "Karabiner-Elements not found; installing via brew cask"
19
+ brew_install_cask karabiner-elements
20
+ ok "Karabiner-Elements installed"
21
+ fi
22
+
23
+ step "Installing karabiner config"
24
+
25
+ CONFIG_DIR="$HOME/.config/karabiner"
26
+ REPO_DEST="$CONFIG_DIR/karabiner_scripts"
27
+ SRC_JSON="$SCRIPT_DIR/karabiner.json"
28
+ DEST_JSON="$CONFIG_DIR/karabiner.json"
29
+
30
+ mkdir -p "$CONFIG_DIR"
31
+
32
+ warn "Quitting Karabiner-Elements briefly while syncing config"
33
+ osascript -e 'tell application "Karabiner-Elements" to quit' 2>/dev/null || true
34
+ pkill -x "Karabiner-Elements" 2>/dev/null || true
35
+ pkill -f "karabiner_console_user_server" 2>/dev/null || true
36
+ sleep 2
37
+
38
+ backup_file "$DEST_JSON"
39
+
40
+ if [[ "$SCRIPT_DIR" != "$REPO_DEST" ]]; then
41
+ step "Syncing repo copy to $REPO_DEST"
42
+ mkdir -p "$REPO_DEST"
43
+ rsync -a --delete --exclude='.git' "$SCRIPT_DIR/" "$REPO_DEST/"
44
+ ok "Repo synced"
45
+ fi
46
+
47
+ if [[ "$SRC_JSON" -ef "$DEST_JSON" ]]; then
48
+ ok "karabiner.json already linked to repo (live sync)"
49
+ else
50
+ cp "$SRC_JSON" "$DEST_JSON"
51
+ ok "karabiner.json installed"
52
+ fi
53
+
54
+ open -a "Karabiner-Elements"
55
+ ok "Karabiner-Elements relaunched"
56
+
57
+ echo ""
58
+ echo -e " ${GRN}Done!${R} Karabiner-Elements is running with local repo config"
59
+ echo -e " ${D}Config: $SRC_JSON${R}"
60
+ echo ""