@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,226 @@
1
+ {
2
+ "general": {
3
+ "launcherShortcut": "cmd+space",
4
+ "showInMenuBar": false,
5
+ "automaticallyCheckForUpdates": true,
6
+ "popToRootSeconds": 90,
7
+ "escapeKeyBehavior": "navigateBackOrClose",
8
+ "autoSwitchInputSource": null,
9
+ "supportReminders": true,
10
+ "language": "en"
11
+ },
12
+ "appearance": {
13
+ "theme": "system",
14
+ "animations": true,
15
+ "interfaceSize": "standard",
16
+ "compactMode": false,
17
+ "compactBarCommands": [
18
+ "command:clipboard-history",
19
+ "command:search-emoji",
20
+ "command:search-files",
21
+ "command:search-quicklinks"
22
+ ],
23
+ "followCursorAcrossDisplays": true,
24
+ "dragToReposition": false
25
+ },
26
+ "hyperKey": {
27
+ "key": "none",
28
+ "includesShift": true,
29
+ "quickPress": "none",
30
+ "secureInputCompatibility": false
31
+ },
32
+ "calculator": {
33
+ "numberStyle": "system"
34
+ },
35
+ "search": {
36
+ "showsSuggestions": true,
37
+ "sensitivity": "medium"
38
+ },
39
+ "applications": {
40
+ "enabled": true,
41
+ "searchScopes": [
42
+ "/Applications",
43
+ "/Applications/Utilities",
44
+ "/System/Applications",
45
+ "/System/Applications/Utilities",
46
+ "/System/Library/CoreServices/Applications",
47
+ "/System/Volumes/Preboot/Cryptexes/App/System/Applications",
48
+ "/System/Library/CoreServices/Finder.app",
49
+ "~/Applications",
50
+ "~/work"
51
+ ],
52
+ "apps": {}
53
+ },
54
+ "systemSettings": {
55
+ "enabled": true,
56
+ "panes": {}
57
+ },
58
+ "systemActions": {
59
+ "enabled": true,
60
+ "actions": {}
61
+ },
62
+ "commands": {
63
+ "builtInEnabled": true,
64
+ "builtIn": {},
65
+ "enabled": false,
66
+ "showInLauncher": true
67
+ },
68
+ "quicklinks": {
69
+ "enabled": true,
70
+ "showInLauncher": true,
71
+ "opensNewWindow": false,
72
+ "passesSelectedText": false,
73
+ "confirmsBeforeDelete": true,
74
+ "commands": {}
75
+ },
76
+ "appleShortcuts": {
77
+ "enabled": false
78
+ },
79
+ "ai": {
80
+ "enabled": false,
81
+ "webSearch": false,
82
+ "choices": true,
83
+ "expandsReasoning": false,
84
+ "systemPrompt": "",
85
+ "systemPromptEnabled": true,
86
+ "retentionDays": "forever",
87
+ "opensTo": "recent",
88
+ "newChatAfterMinutes": 5,
89
+ "toolRounds": 25,
90
+ "commands": {}
91
+ },
92
+ "quickActions": {
93
+ "targetLanguage": "",
94
+ "commands": {}
95
+ },
96
+ "dictation": {
97
+ "mode": "toggle",
98
+ "shortcut": null,
99
+ "playsSounds": true,
100
+ "model": "redux",
101
+ "microphone": null,
102
+ "destination": "paste",
103
+ "adaptsCapitalization": true,
104
+ "liveInsertion": false,
105
+ "releaseAfterMinutes": 1,
106
+ "language": null
107
+ },
108
+ "fileSearch": {
109
+ "enabled": true,
110
+ "scopes": [
111
+ "~"
112
+ ],
113
+ "ignorePatterns": [],
114
+ "removedDefaultPatterns": [],
115
+ "showInLauncher": false,
116
+ "commands": {}
117
+ },
118
+ "notes": {
119
+ "enabled": false,
120
+ "rendersMarkdown": true,
121
+ "showsFormattingBar": true,
122
+ "showsInMenuBar": false,
123
+ "folder": null,
124
+ "commands": {}
125
+ },
126
+ "snippets": {
127
+ "showInLauncher": true,
128
+ "folder": null,
129
+ "commands": {}
130
+ },
131
+ "navigation": {
132
+ "enabled": false,
133
+ "menuSearchShowsAppleMenu": false,
134
+ "menuSearchDisabledApps": [],
135
+ "commands": {}
136
+ },
137
+ "windowManagement": {
138
+ "enabled": false,
139
+ "showInLauncher": true,
140
+ "gap": 0,
141
+ "cycle": "off",
142
+ "wrapDisplays": true,
143
+ "keepProportions": true,
144
+ "layoutsShowInLauncher": true,
145
+ "roomsShowInLauncher": true,
146
+ "shortcuts": {
147
+ "left-half": null,
148
+ "right-half": null,
149
+ "top-half": null,
150
+ "bottom-half": null,
151
+ "top-left-quarter": null,
152
+ "top-right-quarter": null,
153
+ "bottom-left-quarter": null,
154
+ "bottom-right-quarter": null,
155
+ "first-three-fourths": null,
156
+ "last-three-fourths": null,
157
+ "first-third": null,
158
+ "center-third": null,
159
+ "last-third": null,
160
+ "first-two-thirds": null,
161
+ "last-two-thirds": null,
162
+ "maximize": null,
163
+ "almost-maximize": null,
164
+ "reasonable-size": null,
165
+ "maximize-height": null,
166
+ "maximize-width": null,
167
+ "center": null,
168
+ "center-half": null,
169
+ "center-two-thirds": null,
170
+ "make-larger": null,
171
+ "make-smaller": null,
172
+ "restore": null,
173
+ "move-left": null,
174
+ "move-right": null,
175
+ "move-up": null,
176
+ "move-down": null,
177
+ "move-to-left-edge": null,
178
+ "move-to-right-edge": null,
179
+ "move-to-top-edge": null,
180
+ "move-to-bottom-edge": null,
181
+ "next-display": null,
182
+ "previous-display": null,
183
+ "toggle-fullscreen": null,
184
+ "previous-space": null,
185
+ "next-space": null
186
+ },
187
+ "aliases": {},
188
+ "customSizes": [],
189
+ "layouts": [],
190
+ "rooms": [],
191
+ "commands": {}
192
+ },
193
+ "clipboard": {
194
+ "enabled": true,
195
+ "retentionDays": 90,
196
+ "defaultAction": "paste",
197
+ "disabledApps": [
198
+ "com.apple.keychainaccess",
199
+ "com.apple.Passwords"
200
+ ],
201
+ "commands": {}
202
+ },
203
+ "emoji": {
204
+ "skinTone": "none",
205
+ "gridColumns": 8,
206
+ "commands": {}
207
+ },
208
+ "calendar": {
209
+ "showInLauncher": true,
210
+ "launcherLimit": 5,
211
+ "span": "todayAndTomorrow",
212
+ "joinWindowMinutes": 5,
213
+ "autoJoinConfirms": true,
214
+ "autoJoinNamedProvidersOnly": false,
215
+ "meetingBrowser": null,
216
+ "menuBar": "disabled",
217
+ "menuBarUpcomingEvents": "today",
218
+ "menuBarLinkedEventsOnly": true,
219
+ "menuBarHidesWhenEmpty": false,
220
+ "hideCurrentEventAfterMinutes": "never",
221
+ "commands": {}
222
+ },
223
+ "extensions": {
224
+ "showInLauncher": true
225
+ }
226
+ }
@@ -0,0 +1,168 @@
1
+ # Oh my tmux!
2
+ # https://github.com/gpakosz/.tmux
3
+
4
+ # -- general -------------------------------------------------------------------
5
+
6
+ tmux_conf_new_session_prompt=false
7
+ tmux_conf_new_session_retain_current_path=false
8
+ tmux_conf_new_window_retain_current_path=true
9
+ tmux_conf_new_window_reconnect_ssh=false
10
+ tmux_conf_new_pane_retain_current_path=true
11
+ tmux_conf_new_pane_reconnect_ssh=false
12
+
13
+ # -- display -------------------------------------------------------------------
14
+
15
+ tmux_conf_24b_colour=auto
16
+
17
+ # -- theming -------------------------------------------------------------------
18
+
19
+ tmux_conf_theme=enabled
20
+
21
+ # Pastel palette — soft, muted, no attention-grabbing colors
22
+ tmux_conf_theme_colour_1="#f4f2f0" # status bg (warm cream)
23
+ tmux_conf_theme_colour_2="#e0dcd8" # pane border (warm gray)
24
+ tmux_conf_theme_colour_3="#7a7888" # status text (muted)
25
+ tmux_conf_theme_colour_4="#8fb88a" # accent (sage)
26
+ tmux_conf_theme_colour_5="#f5d890" # message/mode bg (pastel yellow)
27
+ tmux_conf_theme_colour_6="#5c5a6a" # status left fg
28
+ tmux_conf_theme_colour_7="#7a7888"
29
+ tmux_conf_theme_colour_8="#5c5a6a"
30
+ tmux_conf_theme_colour_9="#8fb88a" # session block bg (sage)
31
+ tmux_conf_theme_colour_10="#8fb88a"
32
+ tmux_conf_theme_colour_11="#b5e3a8" # pastel green
33
+ tmux_conf_theme_colour_12="#7a7888" # status right fg
34
+ tmux_conf_theme_colour_13="#5c5a6a"
35
+ tmux_conf_theme_colour_14="#7a7888"
36
+ tmux_conf_theme_colour_15="#f4f2f0" # status right bg
37
+ tmux_conf_theme_colour_16="#8fb88a" # hostname block bg (sage)
38
+ tmux_conf_theme_colour_17="#e0dcd8"
39
+
40
+ # Message/mode — pastel yellow, dark text
41
+ tmux_conf_theme_message_fg="#5c5a6a"
42
+ tmux_conf_theme_message_bg="#f5d890"
43
+ tmux_conf_theme_mode_fg="#5c5a6a"
44
+ tmux_conf_theme_mode_bg="#f5d890"
45
+
46
+ # -- status line ---------------------------------------------------------------
47
+
48
+ tmux_conf_theme_left_separator_main=""
49
+ tmux_conf_theme_left_separator_sub="|"
50
+ tmux_conf_theme_right_separator_main=""
51
+ tmux_conf_theme_right_separator_sub="|"
52
+
53
+ tmux_conf_theme_status_left=" #S #{window_index}:#{pane_index} "
54
+ tmux_conf_theme_status_right=" #{prefix}#{synchronized} | #{hostname} "
55
+
56
+ # -- clipboard -----------------------------------------------------------------
57
+
58
+ tmux_conf_copy_to_os_clipboard=false
59
+
60
+ # -- user customizations -------------------------------------------------------
61
+
62
+ # Command palette for tmux. Trigger with Option+p (M-p).
63
+ set -g @plugin 'eduwass/tmux-palette'
64
+ set -g @palette-key 'M-p'
65
+
66
+ set -g history-limit 100000
67
+ set -g mouse on
68
+ set -sg escape-time 10
69
+
70
+ set -g visual-activity off
71
+ set -g visual-bell off
72
+ set -g visual-silence off
73
+ setw -g monitor-activity off
74
+ set -g bell-action none
75
+
76
+ set -g status-position top
77
+ set -g extended-keys on
78
+ set -g extended-keys-format csi-u
79
+
80
+ setw -g xterm-keys on
81
+ set -as terminal-overrides ',*:kbs=\177'
82
+
83
+ # Launch login shells inside tmux so PATH/bootstrap from ~/.profile works in
84
+ # sessions, panes, new windows. Prevents missing user-local tools like bun/fd.
85
+ run-shell 'tmux set-option -g default-shell "${SHELL:-/bin/bash}"'
86
+ run-shell 'tmux set-option -g default-command "exec ${SHELL:-/bin/bash} -l"'
87
+
88
+ # Editor for programs launched inside tmux, including pi Ctrl+G.
89
+ set-environment -g VISUAL nvim
90
+ set-environment -g EDITOR nvim
91
+
92
+ # ─── Environment sanitization ────────────────────────────────────────────────
93
+ # If the tmux server is started from a terminal where a venv was auto-activated
94
+ # (e.g. VS Code Python extension), tmux freezes that env globally and every new
95
+ # pane inherits VIRTUAL_ENV + a venv-poisoned PATH. Strip it at server start.
96
+ set-environment -gu VIRTUAL_ENV
97
+ set-environment -gu VIRTUAL_ENV_PROMPT
98
+ set-environment -gu CONDA_PREFIX
99
+ set-environment -gu CONDA_DEFAULT_ENV
100
+ set-environment -gu PYTHONSTARTUP
101
+ # PATH captured at server start may point into a project .venv — strip any
102
+ # .venv/bin component (rewrites deterministically, safe on reload; keeps a
103
+ # valid PATH so run-shell children can still find tmux/sed/etc).
104
+ run-shell 'P=$(tmux show-environment -g PATH 2>/dev/null | cut -d= -f2-); [ -n "$P" ] && tmux set-environment -g PATH "$(echo "$P" | tr ":" "\n" | grep -v "/\.venv/bin$" | paste -sd: -)"'
105
+ # Stale VS Code / debugpy vars from the spawning terminal are useless here.
106
+ set-environment -gu BUNDLED_DEBUGPY_PATH
107
+ set-environment -gu VSCODE_DEBUGPY_ADAPTER_ENDPOINTS
108
+ set-environment -gu VSCODE_PYTHON_AUTOACTIVATE_GUARD
109
+ set-environment -gu VSCODE_GIT_IPC_HANDLE
110
+ set-environment -gu VSCODE_GIT_ASKPASS_MAIN
111
+ set-environment -gu VSCODE_GIT_ASKPASS_NODE
112
+ set-environment -gu VSCODE_GIT_ASKPASS_EXTRA_ARGS
113
+
114
+ # Soft pastel copy-mode selection (not harsh)
115
+ set -g copy-mode-match-style "bg=#8fb88a,fg=#5c5a6a"
116
+ set -g copy-mode-mark-style "bg=#8fb88a,fg=#5c5a6a"
117
+
118
+ # ─── Split keys ───────────────────────────────────────────────────────
119
+ unbind -
120
+ unbind _
121
+ bind | split-window -h
122
+ bind _ split-window -v
123
+
124
+ # ─── Swap panes ───────────────────────────────────────────────────────
125
+ unbind >
126
+ unbind <
127
+ bind j swap-pane -D
128
+ bind k swap-pane -U
129
+
130
+ # ─── Kill pane / window ───────────────────────────────────────────────
131
+ unbind x
132
+ bind q confirm-before -p "kill pane? (y/n)" kill-pane
133
+ bind Q confirm-before -p "kill window? (y/n)" kill-window
134
+
135
+ # ─── Copy mode ────────────────────────────────────────────────────────
136
+ set -g mode-keys vi
137
+ unbind Enter
138
+ bind Escape copy-mode
139
+
140
+ # ─── Maximize pane ────────────────────────────────────────────────────
141
+ unbind +
142
+ bind M run "cut -c3- '#{TMUX_CONF}' | sh -s _maximize_pane '#{session_name}' '#D'"
143
+
144
+ # ─── vim-tmux-navigator ───────────────────────────────────────────────
145
+ is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'"
146
+ bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
147
+ bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
148
+ bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
149
+ bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
150
+
151
+ bind -T copy-mode-vi C-h select-pane -L
152
+ bind -T copy-mode-vi C-j select-pane -D
153
+ bind -T copy-mode-vi C-k select-pane -U
154
+ bind -T copy-mode-vi C-l select-pane -R
155
+
156
+ # ─── Mouse: click session block → tree views ────────────────────────────────
157
+ # Left-click status-left = prefix+s (session tree)
158
+ # Right-click status-left = prefix+w (window tree)
159
+ bind -T root MouseDown1StatusLeft choose-tree -Zs
160
+ bind -T root MouseDown3StatusLeft choose-tree -Zw
161
+
162
+ # ─── Second status line: pane path (keeps tabs line clean) ──────────────────
163
+ set -g status 2
164
+ set -g status-format[1] "#[bg=#f4f2f0,fg=#7a7888,align=centre] #{pane_current_path} "
165
+
166
+ # ─── Override reload for Linux compatibility ────────────────────────────────
167
+ unbind r
168
+ bind r source-file ~/.tmux.conf \; display "tmux.conf reloaded"
@@ -0,0 +1,50 @@
1
+ # Tmux Setup
2
+
3
+ Minimal, vim-style tmux config powered by [oh-my-tmux](https://github.com/gpakosz/.tmux).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ ./install.sh tmux
9
+ ```
10
+
11
+ ## What's included
12
+
13
+ ### Framework
14
+ - **oh-my-tmux** — self-contained tmux framework with Powerline status bar
15
+ - Pastel sage theme (warm cream, zero harsh colors)
16
+ - Status bar at top with session name, pane number, hostname
17
+
18
+ ### Key bindings
19
+
20
+ | Key | Action |
21
+ |-----|--------|
22
+ | `prefix \|` | Split horizontal (side-by-side) |
23
+ | `prefix _` | Split vertical (stacked) |
24
+ | `prefix h/j/k/l` | Navigate panes (repeatable) |
25
+ | `C-h/j/k/l` | Smart pane nav + vim passthrough |
26
+ | `prefix C-h` | Previous window |
27
+ | `prefix C-l` | Next window |
28
+ | `prefix Tab` | Last window |
29
+ | `prefix 1-9` | Jump to window |
30
+ | `prefix j` | Swap pane down |
31
+ | `prefix k` | Swap pane up |
32
+ | `prefix H/J/K/L` | Resize pane (2 cells) |
33
+ | `prefix Escape` | Enter copy mode |
34
+ | `v` / `V` | Visual select / line select |
35
+ | `y` | Copy to clipboard |
36
+ | `prefix q` | Kill pane (confirm) |
37
+ | `prefix Q` | Kill window (confirm) |
38
+ | `prefix M` | Maximize pane to new window |
39
+ | `prefix C-f` | Find session |
40
+ | `prefix C-c` | New session |
41
+ | `prefix r` | Reload config |
42
+ | `prefix U` | URL scanner |
43
+ | `prefix F` | PathPicker |
44
+
45
+ ### Misc
46
+ - History: 100,000 lines
47
+ - Mouse: always on (click tabs to switch windows)
48
+ - 1-based window/pane indexing
49
+ - Silent (no bell, no activity alerts)
50
+ - Ghostty-compatible extended keys
@@ -0,0 +1,57 @@
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 tmux config (oh-my-tmux)"
9
+
10
+ ensure_cmd tmux
11
+
12
+ ensure_cmd git
13
+
14
+ # ─── oh-my-tmux ───
15
+
16
+ OMT_DIR="$HOME/.oh-my-tmux"
17
+ if [[ -d "$OMT_DIR" ]]; then
18
+ ok "oh-my-tmux already cloned"
19
+ else
20
+ git clone --depth 1 --single-branch https://github.com/gpakosz/.tmux.git "$OMT_DIR"
21
+ ok "oh-my-tmux cloned"
22
+ fi
23
+
24
+ # ─── Config ───
25
+
26
+ CONF_DEST="$HOME/.tmux.conf"
27
+ LOCAL_DEST="$HOME/.tmux.conf.local"
28
+
29
+ backup_file "$CONF_DEST"
30
+ backup_file "$LOCAL_DEST"
31
+
32
+ [[ -L "$CONF_DEST" ]] && rm "$CONF_DEST"
33
+ ln -sf "$OMT_DIR/.tmux.conf" "$CONF_DEST"
34
+ ok "tmux.conf ${D}→ ~/.tmux.conf (symlinked to oh-my-tmux)${R}"
35
+
36
+ ln -sf "$SCRIPT_DIR/.tmux.conf.local" "$LOCAL_DEST"
37
+ ok ".tmux.conf.local ${D}→ ~/.tmux.conf.local (symlinked)${R}"
38
+
39
+ # ─── Shell helpers (auto-name tmux sessions from CWD) ───
40
+
41
+ HELPERS_SRC="$SCRIPT_DIR/shell-helpers.sh"
42
+ SNIPPET="[ -f \"$HELPERS_SRC\" ] && source \"$HELPERS_SRC\" # claude-config tmux helpers"
43
+
44
+ for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do
45
+ [[ -f "$rc" ]] || continue
46
+ if ! grep -Fq "claude-config tmux helpers" "$rc" 2>/dev/null; then
47
+ printf '\n%s\n' "$SNIPPET" >> "$rc"
48
+ ok "shell helpers ${D}→ $(basename "$rc")${R}"
49
+ else
50
+ ok "shell helpers already in $(basename "$rc")"
51
+ fi
52
+ done
53
+
54
+ echo ""
55
+ echo -e " ${GRN}Done!${R} Run ${CYN}tmux${R} to start"
56
+ echo -e " ${D}Prefix: Ctrl+b | Reload: prefix r${R}"
57
+ echo ""
@@ -0,0 +1,191 @@
1
+ import * as p from '@clack/prompts';
2
+ import { execSync } from 'child_process';
3
+ import { existsSync, copyFileSync, writeFileSync, readFileSync } from 'fs';
4
+ import { homedir } from 'os';
5
+ import { join } from 'path';
6
+
7
+ const HOME = homedir();
8
+ const DEST = join(HOME, '.tmux.conf');
9
+
10
+ // Detect clipboard
11
+ let COPY_CMD = 'pbcopy';
12
+ let PASTE_CMD = 'pbpaste';
13
+ if (process.platform === 'linux') {
14
+ try { execSync('which xclip', { stdio: 'ignore' }); COPY_CMD = 'xclip -selection clipboard'; PASTE_CMD = 'xclip -selection clipboard -o'; }
15
+ catch { try { execSync('which xsel', { stdio: 'ignore' }); COPY_CMD = 'xsel --clipboard --input'; PASTE_CMD = 'xsel --clipboard --output'; }
16
+ catch { COPY_CMD = ''; PASTE_CMD = ''; } }
17
+ }
18
+
19
+ // Check tmux
20
+ let tmuxVersion = '';
21
+ try { tmuxVersion = execSync('tmux -V', { encoding: 'utf8' }).trim().match(/[\d.]+/)?.[0] || ''; }
22
+ catch { /* not installed */ }
23
+
24
+ p.intro('tmux config builder');
25
+
26
+ if (!tmuxVersion) {
27
+ p.log.error('tmux not found — brew install tmux (mac) / apt install tmux (linux)');
28
+ p.outro('');
29
+ process.exit(1);
30
+ }
31
+
32
+ p.log.success(`tmux ${tmuxVersion}`);
33
+ if (COPY_CMD) p.log.success(`clipboard: ${COPY_CMD.split(' ')[0]}`);
34
+ else p.log.warn('no clipboard tool found — clipboard features will be skipped');
35
+
36
+ const features = await p.multiselect({
37
+ message: 'Select features',
38
+ options: [
39
+ { value: 'scrollback', label: 'Scrollback 100k', hint: 'default is 2,000 — Claude eats that fast' },
40
+ { value: 'colors', label: 'True color + unicode', hint: 'full 16M colors + symbols ▶ ✓ ⚡' },
41
+ { value: 'escape', label: 'No escape delay', hint: '0ms instead of 500ms — snappy vim' },
42
+ { value: 'mouse', label: 'Mouse support', hint: 'click panes, scroll, drag to resize' },
43
+ { value: 'splits', label: 'Intuitive splits', hint: '| and - instead of % and "' },
44
+ { value: 'vimnav', label: 'Vim navigation', hint: 'h/j/k/l to move, H/J/K/L to resize' },
45
+ { value: 'clipboard', label: 'System clipboard', hint: 'copy in tmux → Cmd+V works' },
46
+ { value: 'statusbar', label: 'Minimal status bar', hint: 'session name + folder-labeled windows' },
47
+ { value: 'autorename', label: 'Auto window names', hint: 'project, server, logs — not zsh, zsh, zsh' },
48
+ { value: 'qol', label: 'Quality of life', hint: 'Ctrl+b r reload, no bells, renumber' },
49
+ ],
50
+ initialValues: ['scrollback', 'colors', 'escape', 'mouse', 'splits', 'vimnav', 'clipboard', 'statusbar', 'autorename', 'qol'],
51
+ required: false,
52
+ });
53
+
54
+ if (p.isCancel(features)) { p.outro('cancelled'); process.exit(0); }
55
+
56
+ const has = (f) => features.includes(f);
57
+
58
+ // Sub-choice: mouse drag
59
+ let mouseHighlight = true;
60
+ if (has('mouse') && has('clipboard')) {
61
+ const drag = await p.select({
62
+ message: 'Mouse drag behavior',
63
+ options: [
64
+ { value: 'highlight', label: 'Highlight only', hint: 'press y to copy — prevents accidental overwrites' },
65
+ { value: 'auto', label: 'Auto-copy on drag', hint: 'faster but can overwrite clipboard by accident' },
66
+ ],
67
+ });
68
+ if (p.isCancel(drag)) { p.outro('cancelled'); process.exit(0); }
69
+ mouseHighlight = drag === 'highlight';
70
+ }
71
+
72
+ // Build config
73
+ const lines = ['# Generated by tmux config builder', '# https://github.com/quickcall-dev/claude-config/tree/main/tmux', ''];
74
+
75
+ if (has('scrollback')) lines.push('set -g history-limit 100000', '');
76
+ if (has('colors')) lines.push('set -g default-terminal "tmux-256color"', 'set -ga terminal-overrides ",xterm-256color:Tc"', '');
77
+ if (has('escape')) lines.push('set -sg escape-time 0', '');
78
+ if (has('mouse')) lines.push('set -g mouse on', '');
79
+ lines.push('# kitty graphics passthrough — inline images in nvim (snacks.image)', 'set -gq allow-passthrough on', '');
80
+
81
+ if (has('splits')) {
82
+ lines.push(
83
+ 'bind | split-window -h -c "#{pane_current_path}"',
84
+ 'bind - split-window -v -c "#{pane_current_path}"',
85
+ 'bind c new-window -c "#{pane_current_path}"',
86
+ ''
87
+ );
88
+ }
89
+
90
+ if (has('vimnav')) {
91
+ lines.push(
92
+ 'bind h select-pane -L', 'bind j select-pane -D',
93
+ 'bind k select-pane -U', 'bind l select-pane -R',
94
+ 'bind -r H resize-pane -L 5', 'bind -r J resize-pane -D 5',
95
+ 'bind -r K resize-pane -U 5', 'bind -r L resize-pane -R 5',
96
+ ''
97
+ );
98
+ }
99
+
100
+ if (has('clipboard') && COPY_CMD) {
101
+ lines.push(
102
+ 'setw -g mode-keys vi',
103
+ `set -s copy-command '${COPY_CMD}'`,
104
+ 'bind -T copy-mode-vi v send -X begin-selection',
105
+ 'bind -T copy-mode-vi y send -X copy-selection-and-cancel',
106
+ 'bind -T copy-mode-vi Enter send -X copy-selection-and-cancel',
107
+ );
108
+ if (has('mouse')) {
109
+ lines.push(mouseHighlight
110
+ ? 'bind -T copy-mode-vi MouseDragEnd1Pane send -X cancel'
111
+ : 'bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-selection-and-cancel'
112
+ );
113
+ }
114
+ lines.push(`bind p run "${PASTE_CMD} | tmux load-buffer - && tmux paste-buffer"`, '');
115
+ }
116
+
117
+ if (has('statusbar')) {
118
+ lines.push(
119
+ 'set -g status-interval 5', 'set -g status-position bottom',
120
+ 'set -g status-style bg=colour235,fg=colour248',
121
+ 'set -g status-left-length 30',
122
+ 'set -g status-left "#[fg=colour214,bold] #S #[fg=colour248]| "',
123
+ 'setw -g window-status-format " #I:#{b:pane_current_path} "',
124
+ 'setw -g window-status-current-format "#[fg=colour214,bold] #I:#{b:pane_current_path} "',
125
+ ''
126
+ );
127
+ }
128
+
129
+ if (has('autorename')) {
130
+ lines.push(
131
+ 'set -g allow-rename on', 'setw -g automatic-rename on',
132
+ "setw -g automatic-rename-format '#{b:pane_current_path}'",
133
+ ''
134
+ );
135
+ }
136
+
137
+ if (has('qol')) {
138
+ lines.push(
139
+ 'bind r source-file ~/.tmux.conf \\; display "Config reloaded!"',
140
+ 'bind S new-session', 'set -g renumber-windows on',
141
+ 'set -g visual-activity off', 'set -g visual-bell off',
142
+ 'set -g visual-silence off', 'setw -g monitor-activity off',
143
+ 'set -g bell-action none', 'set -g focus-events on',
144
+ ''
145
+ );
146
+ }
147
+
148
+ const conf = lines.join('\n');
149
+
150
+ p.log.step(`${features.length}/10 features selected`);
151
+
152
+ // Install
153
+ let dest = DEST;
154
+
155
+ if (existsSync(DEST)) {
156
+ const action = await p.select({
157
+ message: '~/.tmux.conf already exists',
158
+ options: [
159
+ { value: 'replace', label: 'Replace', hint: 'backs up current config' },
160
+ { value: 'side', label: 'Save as .tmux.conf.claude', hint: 'try before switching' },
161
+ { value: 'cancel', label: 'Cancel' },
162
+ ],
163
+ });
164
+
165
+ if (p.isCancel(action) || action === 'cancel') { p.outro('no changes'); process.exit(0); }
166
+
167
+ if (action === 'replace') {
168
+ const backup = `${DEST}.backup.${new Date().toISOString().replace(/[:.]/g, '').slice(0, 15)}`;
169
+ copyFileSync(DEST, backup);
170
+ writeFileSync(DEST, conf);
171
+ p.log.success(`backup → ${backup}`);
172
+ p.log.success(`installed → ${DEST}`);
173
+ } else {
174
+ dest = `${DEST}.claude`;
175
+ writeFileSync(dest, conf);
176
+ p.log.success(`saved → ${dest}`);
177
+ p.log.info('try: tmux source-file ~/.tmux.conf.claude');
178
+ p.log.info('keep: mv ~/.tmux.conf.claude ~/.tmux.conf');
179
+ }
180
+ } else {
181
+ writeFileSync(DEST, conf);
182
+ p.log.success(`installed → ${DEST}`);
183
+ }
184
+
185
+ // Reload if inside tmux
186
+ if (process.env.TMUX && dest === DEST) {
187
+ try { execSync('tmux source-file ~/.tmux.conf', { stdio: 'ignore' }); p.log.success('reloaded'); }
188
+ catch { /* ignore */ }
189
+ }
190
+
191
+ p.outro('Ctrl+b r to reload anytime');