@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.
- package/README.md +15 -2
- package/bin/all-configs.js +44 -0
- package/package.json +20 -4
- package/runtime/allconfigs/__init__.py +1 -0
- package/runtime/allconfigs/__main__.py +42 -0
- package/runtime/allconfigs/__pycache__/__init__.cpython-312.pyc +0 -0
- package/runtime/allconfigs/__pycache__/__main__.cpython-312.pyc +0 -0
- package/runtime/allconfigs/__pycache__/modules.cpython-312.pyc +0 -0
- package/runtime/allconfigs/__pycache__/probe.cpython-312.pyc +0 -0
- package/runtime/allconfigs/__pycache__/runner.cpython-312.pyc +0 -0
- package/runtime/allconfigs/modules.py +221 -0
- package/runtime/allconfigs/probe.py +60 -0
- package/runtime/install.sh +74 -0
- package/runtime/lib/common.sh +147 -0
- package/runtime/lib/uninstall.sh +35 -0
- package/runtime/modules/aldente/install.sh +23 -0
- package/runtime/modules/aldente/module.toml +11 -0
- package/runtime/modules/aliases/aliases.sh +31 -0
- package/runtime/modules/aliases/install.sh +36 -0
- package/runtime/modules/aliases/module.toml +7 -0
- package/runtime/modules/aqua-voice/install.sh +23 -0
- package/runtime/modules/aqua-voice/module.toml +11 -0
- package/runtime/modules/betterdisplay/install.sh +23 -0
- package/runtime/modules/betterdisplay/module.toml +11 -0
- package/runtime/modules/bitwarden/install.sh +19 -0
- package/runtime/modules/bitwarden/module.toml +11 -0
- package/runtime/modules/browsers/install.sh +33 -0
- package/runtime/modules/browsers/module.toml +11 -0
- package/runtime/modules/bun/install.sh +72 -0
- package/runtime/modules/bun/module.toml +7 -0
- package/runtime/modules/caveman/install.sh +79 -0
- package/runtime/modules/caveman/module.toml +7 -0
- package/runtime/modules/claude/install.sh +22 -0
- package/runtime/modules/claude/module.toml +7 -0
- package/runtime/modules/codex/install.sh +20 -0
- package/runtime/modules/codex/module.toml +7 -0
- package/runtime/modules/docker/install.sh +19 -0
- package/runtime/modules/docker/module.toml +11 -0
- package/runtime/modules/external-skills/install.sh +30 -0
- package/runtime/modules/external-skills/module.toml +4 -0
- package/runtime/modules/ffmpeg/install.sh +13 -0
- package/runtime/modules/ffmpeg/module.toml +11 -0
- package/runtime/modules/fonts/install.sh +62 -0
- package/runtime/modules/fonts/module.toml +8 -0
- package/runtime/modules/ghostty/config +44 -0
- package/runtime/modules/ghostty/install.sh +64 -0
- package/runtime/modules/ghostty/module.toml +9 -0
- package/runtime/modules/ghostty/themes/ayu-dark +22 -0
- package/runtime/modules/ghostty/themes/catppuccin-frappe +23 -0
- package/runtime/modules/ghostty/themes/catppuccin-latte +23 -0
- package/runtime/modules/ghostty/themes/catppuccin-latte.conf +23 -0
- package/runtime/modules/ghostty/themes/catppuccin-macchiato +23 -0
- package/runtime/modules/ghostty/themes/catppuccin-mocha +23 -0
- package/runtime/modules/ghostty/themes/visual-studio-light +27 -0
- package/runtime/modules/ghostty/themes/vscode-light +24 -0
- package/runtime/modules/ghostty/themes/vscode-light-soft +24 -0
- package/runtime/modules/ghostty/xterm-ghostty.terminfo +81 -0
- package/runtime/modules/github/install.sh +101 -0
- package/runtime/modules/github/module.toml +8 -0
- package/runtime/modules/hf/install.sh +98 -0
- package/runtime/modules/hf/module.toml +7 -0
- package/runtime/modules/karabiner/README.md +146 -0
- package/runtime/modules/karabiner/agents.md +39 -0
- package/runtime/modules/karabiner/app_launchers.json +236 -0
- package/runtime/modules/karabiner/custom_delete_mapping.json +13 -0
- package/runtime/modules/karabiner/fn_to_control.json +9 -0
- package/runtime/modules/karabiner/install.sh +60 -0
- package/runtime/modules/karabiner/karabiner.json +866 -0
- package/runtime/modules/karabiner/keychron-modifier-swap.sh +80 -0
- package/runtime/modules/karabiner/module.toml +8 -0
- package/runtime/modules/karabiner/remap_caps_lock_shift_super.json +23 -0
- package/runtime/modules/karabiner/remap_escape_to_control.json +49 -0
- package/runtime/modules/karabiner/rename_caps_lock_to_super.json +23 -0
- package/runtime/modules/karabiner/right_shift_mouse_click.json +44 -0
- package/runtime/modules/karabiner/swap_esc_delete.json +10 -0
- package/runtime/modules/karabiner/troubleshooting.md +242 -0
- package/runtime/modules/karabiner/vim_arrow_keys.json +477 -0
- package/runtime/modules/keepingyouawake/install.sh +23 -0
- package/runtime/modules/keepingyouawake/module.toml +11 -0
- package/runtime/modules/keycastr/install.sh +23 -0
- package/runtime/modules/keycastr/module.toml +11 -0
- package/runtime/modules/multi-github/install.sh +179 -0
- package/runtime/modules/multi-github/module.toml +4 -0
- package/runtime/modules/ncdu/install.sh +13 -0
- package/runtime/modules/ncdu/module.toml +11 -0
- package/runtime/modules/node/install.sh +73 -0
- package/runtime/modules/node/module.toml +11 -0
- package/runtime/modules/nvim/.neoconf.json +15 -0
- package/runtime/modules/nvim/init.lua +2 -0
- package/runtime/modules/nvim/install.sh +142 -0
- package/runtime/modules/nvim/lazy-lock.json +35 -0
- package/runtime/modules/nvim/lazyvim.json +10 -0
- package/runtime/modules/nvim/lua/config/autocmds.lua +18 -0
- package/runtime/modules/nvim/lua/config/keymaps.lua +10 -0
- package/runtime/modules/nvim/lua/config/lazy.lua +53 -0
- package/runtime/modules/nvim/lua/config/options.lua +3 -0
- package/runtime/modules/nvim/lua/plugins/image.lua +9 -0
- package/runtime/modules/nvim/lua/plugins/markdown.lua +56 -0
- package/runtime/modules/nvim/lua/plugins/noice.lua +17 -0
- package/runtime/modules/nvim/lua/plugins/rose-pine.lua +16 -0
- package/runtime/modules/nvim/lua/plugins/snacks.lua +20 -0
- package/runtime/modules/nvim/module.toml +8 -0
- package/runtime/modules/nvim/stylua.toml +3 -0
- package/runtime/modules/p10k/install.sh +46 -0
- package/runtime/modules/p10k/module.toml +8 -0
- package/runtime/modules/p10k/p10k.zsh +1711 -0
- package/runtime/modules/pi/install.sh +77 -0
- package/runtime/modules/pi/module.toml +8 -0
- package/runtime/modules/pi/packages +5 -0
- package/runtime/modules/pi/settings.json +21 -0
- package/runtime/modules/presentify/install.sh +25 -0
- package/runtime/modules/presentify/module.toml +7 -0
- package/runtime/modules/rectangle/RectangleConfig.json +353 -0
- package/runtime/modules/rectangle/install.sh +64 -0
- package/runtime/modules/rectangle/module.toml +11 -0
- package/runtime/modules/shortcat/install.sh +19 -0
- package/runtime/modules/shortcat/module.toml +11 -0
- package/runtime/modules/skills/install.sh +25 -0
- package/runtime/modules/skills/module.toml +4 -0
- package/runtime/modules/skills/skills-lock.json +35 -0
- package/runtime/modules/slack/install.sh +23 -0
- package/runtime/modules/slack/module.toml +11 -0
- package/runtime/modules/spotify/install.sh +23 -0
- package/runtime/modules/spotify/module.toml +11 -0
- package/runtime/modules/ssh-keygen/install.sh +130 -0
- package/runtime/modules/ssh-keygen/module.toml +4 -0
- package/runtime/modules/statusline/install.sh +69 -0
- package/runtime/modules/statusline/module.toml +7 -0
- package/runtime/modules/statusline/statusline.sh +168 -0
- package/runtime/modules/statusline/turn-counter.sh +11 -0
- package/runtime/modules/superfile/cheatsheet.md +127 -0
- package/runtime/modules/superfile/config.toml +181 -0
- package/runtime/modules/superfile/hotkeys.toml +96 -0
- package/runtime/modules/superfile/install.sh +73 -0
- package/runtime/modules/superfile/module.toml +7 -0
- package/runtime/modules/tailscale/install.sh +29 -0
- package/runtime/modules/tailscale/module.toml +11 -0
- package/runtime/modules/tinycast/install.sh +68 -0
- package/runtime/modules/tinycast/module.toml +7 -0
- package/runtime/modules/tinycast/settings.json +226 -0
- package/runtime/modules/tmux/.tmux.conf.local +168 -0
- package/runtime/modules/tmux/README.md +50 -0
- package/runtime/modules/tmux/install.sh +57 -0
- package/runtime/modules/tmux/installer.mjs +191 -0
- package/runtime/modules/tmux/module.toml +8 -0
- package/runtime/modules/tmux/shell-helpers.sh +20 -0
- package/runtime/modules/tmux/uninstall.sh +134 -0
- package/runtime/modules/uv/install.sh +72 -0
- package/runtime/modules/uv/module.toml +7 -0
- package/runtime/modules/vlc/install.sh +23 -0
- package/runtime/modules/vlc/module.toml +11 -0
- package/runtime/modules/vscode/install.sh +33 -0
- package/runtime/modules/vscode/keybindings.json +74 -0
- package/runtime/modules/vscode/module.toml +8 -0
- package/runtime/modules/vscode/settings.json +426 -0
- package/runtime/modules/vscode/tasks.json +1 -0
- package/runtime/modules/yt-dlp/install.sh +13 -0
- package/runtime/modules/yt-dlp/module.toml +11 -0
- package/runtime/modules/zed/install.sh +43 -0
- package/runtime/modules/zed/module.toml +8 -0
- package/runtime/modules/zed/settings.json +208 -0
- package/runtime/modules/zoxide/install.sh +41 -0
- 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,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,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 ""
|