agent-loadout 0.1.0 → 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 +84 -51
- package/dist/catalog-PTLCQEDW.js +17 -0
- package/dist/chunk-JYIPAISH.js +723 -0
- package/dist/index.js +877 -517
- package/package.json +7 -4
|
@@ -0,0 +1,723 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/catalog.ts
|
|
4
|
+
var PRESETS = [
|
|
5
|
+
{
|
|
6
|
+
id: "core",
|
|
7
|
+
name: "Core",
|
|
8
|
+
description: "Fundamentals every terminal should have",
|
|
9
|
+
defaultOn: true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: "agent",
|
|
13
|
+
name: "Agent",
|
|
14
|
+
description: "Tools that specifically improve LLM workflows",
|
|
15
|
+
defaultOn: true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "media",
|
|
19
|
+
name: "Media",
|
|
20
|
+
description: "Image, audio, and video pipeline tools",
|
|
21
|
+
defaultOn: false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "dx",
|
|
25
|
+
name: "DX",
|
|
26
|
+
description: "Developer experience and quality of life",
|
|
27
|
+
defaultOn: false
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "security",
|
|
31
|
+
name: "Security",
|
|
32
|
+
description: "Scanning and CI hygiene",
|
|
33
|
+
defaultOn: false
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
function universal(pkg) {
|
|
37
|
+
return {
|
|
38
|
+
darwin: [{ method: "brew", package: pkg }],
|
|
39
|
+
linux: [{ method: "apt", package: pkg }],
|
|
40
|
+
win32: [{ method: "scoop", package: pkg }]
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function brewScoopAptCargo(pkg, aptPkg, cargoPkg) {
|
|
44
|
+
return {
|
|
45
|
+
darwin: [{ method: "brew", package: pkg }],
|
|
46
|
+
linux: [
|
|
47
|
+
{ method: "apt", package: aptPkg },
|
|
48
|
+
{ method: "cargo", package: cargoPkg }
|
|
49
|
+
],
|
|
50
|
+
win32: [{ method: "scoop", package: pkg }]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function brewScoopCargo(pkg, cargoPkg) {
|
|
54
|
+
return {
|
|
55
|
+
darwin: [{ method: "brew", package: pkg }],
|
|
56
|
+
linux: [{ method: "cargo", package: cargoPkg }],
|
|
57
|
+
win32: [{ method: "scoop", package: pkg }]
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function npmAll(pkg) {
|
|
61
|
+
return {
|
|
62
|
+
darwin: [{ method: "npm", package: pkg }],
|
|
63
|
+
linux: [{ method: "npm", package: pkg }],
|
|
64
|
+
win32: [{ method: "npm", package: pkg }]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
var TOOLS = [
|
|
68
|
+
// ── Core ──────────────────────────────────────────────
|
|
69
|
+
{
|
|
70
|
+
id: "rg",
|
|
71
|
+
name: "ripgrep",
|
|
72
|
+
description: "Fast code search",
|
|
73
|
+
preset: "core",
|
|
74
|
+
verify: "rg --version",
|
|
75
|
+
install: brewScoopAptCargo("ripgrep", "ripgrep", "ripgrep"),
|
|
76
|
+
tags: ["search", "grep", "find text", "code search", "pattern match", "codebase search"],
|
|
77
|
+
seeAlso: ["fd", "bat", "ast-grep"]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "fd",
|
|
81
|
+
name: "fd",
|
|
82
|
+
description: "Fast file finder",
|
|
83
|
+
preset: "core",
|
|
84
|
+
verify: { darwin: "fd --version", linux: "fdfind --version", win32: "fd --version" },
|
|
85
|
+
install: {
|
|
86
|
+
darwin: [{ method: "brew", package: "fd" }],
|
|
87
|
+
linux: [{ method: "apt", package: "fd-find" }, { method: "cargo", package: "fd-find" }],
|
|
88
|
+
win32: [{ method: "scoop", package: "fd" }]
|
|
89
|
+
},
|
|
90
|
+
tags: ["find files", "file search", "locate files", "glob", "directory search"],
|
|
91
|
+
seeAlso: ["rg", "fzf", "eza"]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: "jq",
|
|
95
|
+
name: "jq",
|
|
96
|
+
description: "JSON processor",
|
|
97
|
+
preset: "core",
|
|
98
|
+
verify: "jq --version",
|
|
99
|
+
install: universal("jq"),
|
|
100
|
+
tags: ["json", "parse json", "filter json", "api response", "json transform"],
|
|
101
|
+
seeAlso: ["yq", "duckdb", "xh"]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: "yq",
|
|
105
|
+
name: "yq",
|
|
106
|
+
description: "YAML processor",
|
|
107
|
+
preset: "core",
|
|
108
|
+
verify: "yq --version",
|
|
109
|
+
install: {
|
|
110
|
+
darwin: [{ method: "brew", package: "yq" }],
|
|
111
|
+
// TODO: gh-release installer — no apt/cargo package; scoop has it
|
|
112
|
+
linux: null,
|
|
113
|
+
win32: [{ method: "scoop", package: "yq" }]
|
|
114
|
+
},
|
|
115
|
+
tags: ["yaml", "parse yaml", "yaml transform", "config files", "toml"],
|
|
116
|
+
seeAlso: ["jq", "taplo"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "bat",
|
|
120
|
+
name: "bat",
|
|
121
|
+
description: "Cat with syntax highlighting",
|
|
122
|
+
preset: "core",
|
|
123
|
+
verify: "bat --version",
|
|
124
|
+
install: {
|
|
125
|
+
darwin: [{ method: "brew", package: "bat" }],
|
|
126
|
+
linux: [
|
|
127
|
+
{ method: "apt", package: "bat" },
|
|
128
|
+
{ method: "cargo", package: "bat" }
|
|
129
|
+
],
|
|
130
|
+
win32: [{ method: "scoop", package: "bat" }]
|
|
131
|
+
},
|
|
132
|
+
tags: ["view file", "syntax highlighting", "cat", "preview code", "pager"],
|
|
133
|
+
seeAlso: ["rg", "delta", "glow"]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "tree",
|
|
137
|
+
name: "tree",
|
|
138
|
+
description: "Directory structure viewer",
|
|
139
|
+
preset: "core",
|
|
140
|
+
verify: "tree --version",
|
|
141
|
+
install: universal("tree"),
|
|
142
|
+
tags: ["directory tree", "folder structure", "list files", "project layout"],
|
|
143
|
+
seeAlso: ["eza", "fd", "dust"]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "gh",
|
|
147
|
+
name: "GitHub CLI",
|
|
148
|
+
description: "GitHub CLI for PRs, issues, releases",
|
|
149
|
+
preset: "core",
|
|
150
|
+
verify: "gh --version",
|
|
151
|
+
install: {
|
|
152
|
+
darwin: [{ method: "brew", package: "gh" }],
|
|
153
|
+
linux: [{ method: "apt", package: "gh" }],
|
|
154
|
+
win32: [{ method: "scoop", package: "gh" }]
|
|
155
|
+
},
|
|
156
|
+
tags: ["github", "pull request", "pr", "issues", "ci status", "releases", "repo management"],
|
|
157
|
+
seeAlso: ["lazygit", "act", "gitleaks"]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
id: "fzf",
|
|
161
|
+
name: "fzf",
|
|
162
|
+
description: "Fuzzy finder",
|
|
163
|
+
preset: "core",
|
|
164
|
+
verify: "fzf --version",
|
|
165
|
+
install: universal("fzf"),
|
|
166
|
+
tags: ["fuzzy find", "interactive search", "pick file", "filter list", "autocomplete"],
|
|
167
|
+
seeAlso: ["fd", "rg", "zoxide"]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: "xh",
|
|
171
|
+
name: "xh",
|
|
172
|
+
description: "Friendly HTTP client",
|
|
173
|
+
preset: "core",
|
|
174
|
+
verify: "xh --version",
|
|
175
|
+
install: brewScoopCargo("xh", "xh"),
|
|
176
|
+
tags: ["http request", "api call", "curl", "rest", "post request", "http testing"],
|
|
177
|
+
seeAlso: ["jq", "htmlq"]
|
|
178
|
+
},
|
|
179
|
+
// ── Agent ─────────────────────────────────────────────
|
|
180
|
+
{
|
|
181
|
+
id: "shellcheck",
|
|
182
|
+
name: "shellcheck",
|
|
183
|
+
description: "Static analysis for shell scripts",
|
|
184
|
+
preset: "agent",
|
|
185
|
+
verify: "shellcheck --version",
|
|
186
|
+
install: universal("shellcheck"),
|
|
187
|
+
tags: ["shell script", "bash lint", "script error", "sh validation", "bash debug"],
|
|
188
|
+
seeAlso: ["sd", "just"]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "ast-grep",
|
|
192
|
+
name: "ast-grep",
|
|
193
|
+
description: "Structural code search/replace",
|
|
194
|
+
preset: "agent",
|
|
195
|
+
verify: "sg --version",
|
|
196
|
+
install: {
|
|
197
|
+
darwin: [{ method: "brew", package: "ast-grep" }],
|
|
198
|
+
linux: [{ method: "cargo", package: "ast-grep" }],
|
|
199
|
+
win32: [{ method: "scoop", package: "ast-grep" }]
|
|
200
|
+
},
|
|
201
|
+
tags: ["structural search", "code pattern", "ast", "refactor", "codemod", "syntax-aware"],
|
|
202
|
+
seeAlso: ["rg", "sd", "biome"]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: "just",
|
|
206
|
+
name: "just",
|
|
207
|
+
description: "Command runner (agent-readable task menu)",
|
|
208
|
+
preset: "agent",
|
|
209
|
+
verify: "just --version",
|
|
210
|
+
install: brewScoopCargo("just", "just"),
|
|
211
|
+
tags: ["task runner", "commands menu", "build tasks", "makefile", "recipe", "run scripts"],
|
|
212
|
+
seeAlso: ["watchexec", "shellcheck"]
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "grex",
|
|
216
|
+
name: "grex",
|
|
217
|
+
description: "Generate regex from examples",
|
|
218
|
+
preset: "agent",
|
|
219
|
+
verify: "grex --version",
|
|
220
|
+
install: brewScoopCargo("grex", "grex"),
|
|
221
|
+
tags: ["regex", "generate regex", "pattern from examples", "regular expression", "infer pattern"],
|
|
222
|
+
seeAlso: ["sd", "rg"]
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: "knip",
|
|
226
|
+
name: "knip",
|
|
227
|
+
description: "Find unused code/deps in TS/JS",
|
|
228
|
+
preset: "agent",
|
|
229
|
+
verify: "knip --version",
|
|
230
|
+
install: npmAll("knip"),
|
|
231
|
+
tags: ["unused code", "dead code", "unused imports", "ts cleanup", "dependency audit"],
|
|
232
|
+
seeAlso: ["biome", "tokei"]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
id: "sd",
|
|
236
|
+
name: "sd",
|
|
237
|
+
description: "Simpler sed replacement",
|
|
238
|
+
preset: "agent",
|
|
239
|
+
verify: "sd --version",
|
|
240
|
+
install: brewScoopCargo("sd", "sd"),
|
|
241
|
+
tags: ["find replace", "text substitution", "sed", "regex replace", "bulk edit"],
|
|
242
|
+
seeAlso: ["rg", "ast-grep", "grex"]
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: "hyperfine",
|
|
246
|
+
name: "hyperfine",
|
|
247
|
+
description: "CLI benchmarking",
|
|
248
|
+
preset: "agent",
|
|
249
|
+
verify: "hyperfine --version",
|
|
250
|
+
install: brewScoopAptCargo("hyperfine", "hyperfine", "hyperfine"),
|
|
251
|
+
tags: ["benchmark", "performance test", "timing", "compare commands", "profiling"],
|
|
252
|
+
seeAlso: ["tokei", "btm"]
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: "tokei",
|
|
256
|
+
name: "tokei",
|
|
257
|
+
description: "Code statistics",
|
|
258
|
+
preset: "agent",
|
|
259
|
+
verify: "tokei --version",
|
|
260
|
+
install: brewScoopCargo("tokei", "tokei"),
|
|
261
|
+
tags: ["code stats", "line count", "language breakdown", "codebase size", "loc"],
|
|
262
|
+
seeAlso: ["hyperfine", "knip", "dust"]
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
id: "tldr",
|
|
266
|
+
name: "tldr",
|
|
267
|
+
description: "Quick man page summaries",
|
|
268
|
+
preset: "agent",
|
|
269
|
+
verify: "tldr --version",
|
|
270
|
+
install: universal("tldr"),
|
|
271
|
+
tags: ["man page", "command help", "usage examples", "quick reference", "cheatsheet"],
|
|
272
|
+
seeAlso: ["bat", "glow"]
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
id: "biome",
|
|
276
|
+
name: "biome",
|
|
277
|
+
description: "Lint + format JS/TS",
|
|
278
|
+
preset: "agent",
|
|
279
|
+
verify: "biome --version",
|
|
280
|
+
install: {
|
|
281
|
+
darwin: [{ method: "brew", package: "biome" }],
|
|
282
|
+
linux: [{ method: "npm", package: "@biomejs/biome" }],
|
|
283
|
+
win32: [{ method: "npm", package: "@biomejs/biome" }]
|
|
284
|
+
},
|
|
285
|
+
tags: ["lint", "format", "typescript", "javascript", "code style", "prettier alternative"],
|
|
286
|
+
seeAlso: ["knip", "ast-grep", "typos"]
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
id: "difftastic",
|
|
290
|
+
name: "difftastic",
|
|
291
|
+
description: "Structural/AST diff",
|
|
292
|
+
preset: "agent",
|
|
293
|
+
verify: "difft --version",
|
|
294
|
+
install: brewScoopCargo("difftastic", "difftastic"),
|
|
295
|
+
tags: ["diff", "compare files", "git diff", "structural diff", "ast diff"],
|
|
296
|
+
seeAlso: ["delta", "ast-grep"]
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
id: "pandoc",
|
|
300
|
+
name: "pandoc",
|
|
301
|
+
description: "Universal document converter",
|
|
302
|
+
preset: "agent",
|
|
303
|
+
verify: "pandoc --version",
|
|
304
|
+
install: universal("pandoc"),
|
|
305
|
+
tags: ["convert document", "markdown to pdf", "docx", "format conversion", "export"],
|
|
306
|
+
seeAlso: ["glow", "bat"]
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
id: "duckdb",
|
|
310
|
+
name: "duckdb",
|
|
311
|
+
description: "SQL analytics on CSV/JSON/Parquet files",
|
|
312
|
+
preset: "agent",
|
|
313
|
+
verify: "duckdb --version",
|
|
314
|
+
install: {
|
|
315
|
+
darwin: [{ method: "brew", package: "duckdb" }],
|
|
316
|
+
// TODO: gh-release installer — no reliable apt/cargo package
|
|
317
|
+
linux: null,
|
|
318
|
+
win32: [{ method: "scoop", package: "duckdb" }]
|
|
319
|
+
},
|
|
320
|
+
tags: ["sql", "csv", "parquet", "analytics", "query data", "data analysis"],
|
|
321
|
+
seeAlso: ["jq", "yq", "htmlq"]
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
id: "htmlq",
|
|
325
|
+
name: "htmlq",
|
|
326
|
+
description: "Extract content from HTML using CSS selectors",
|
|
327
|
+
preset: "agent",
|
|
328
|
+
verify: "htmlq --version",
|
|
329
|
+
install: brewScoopCargo("htmlq", "htmlq"),
|
|
330
|
+
tags: ["html", "css selector", "scrape", "extract html", "parse html", "web"],
|
|
331
|
+
seeAlso: ["xh", "jq", "duckdb"]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
id: "typos",
|
|
335
|
+
name: "typos",
|
|
336
|
+
description: "Source code spell checker",
|
|
337
|
+
preset: "agent",
|
|
338
|
+
verify: "typos --version",
|
|
339
|
+
install: {
|
|
340
|
+
darwin: [{ method: "brew", package: "typos-cli" }],
|
|
341
|
+
linux: [{ method: "cargo", package: "typos-cli" }],
|
|
342
|
+
win32: [{ method: "scoop", package: "typos" }]
|
|
343
|
+
},
|
|
344
|
+
tags: ["spell check", "typo", "source code spelling", "writing quality", "documentation"],
|
|
345
|
+
seeAlso: ["biome", "shellcheck"]
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
id: "gum",
|
|
349
|
+
name: "gum",
|
|
350
|
+
description: "Interactive UI components for shell scripts",
|
|
351
|
+
preset: "agent",
|
|
352
|
+
verify: "gum --version",
|
|
353
|
+
install: {
|
|
354
|
+
darwin: [{ method: "brew", package: "gum" }],
|
|
355
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
356
|
+
linux: null,
|
|
357
|
+
win32: [{ method: "scoop", package: "gum" }]
|
|
358
|
+
},
|
|
359
|
+
tags: ["interactive shell", "tui prompt", "user input", "shell script ui", "confirm dialog"],
|
|
360
|
+
seeAlso: ["fzf", "just"]
|
|
361
|
+
},
|
|
362
|
+
// ── Media ─────────────────────────────────────────────
|
|
363
|
+
{
|
|
364
|
+
id: "ffmpeg",
|
|
365
|
+
name: "ffmpeg",
|
|
366
|
+
description: "Audio/video Swiss army knife",
|
|
367
|
+
preset: "media",
|
|
368
|
+
verify: "ffmpeg -version",
|
|
369
|
+
install: universal("ffmpeg"),
|
|
370
|
+
tags: ["video convert", "audio convert", "transcode", "encode", "media processing", "extract audio"],
|
|
371
|
+
seeAlso: ["imagemagick", "exiftool"]
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
id: "exiftool",
|
|
375
|
+
name: "exiftool",
|
|
376
|
+
description: "Image/media metadata",
|
|
377
|
+
preset: "media",
|
|
378
|
+
verify: "exiftool -ver",
|
|
379
|
+
install: {
|
|
380
|
+
darwin: [{ method: "brew", package: "exiftool" }],
|
|
381
|
+
linux: [{ method: "apt", package: "libimage-exiftool-perl" }],
|
|
382
|
+
win32: [{ method: "scoop", package: "exiftool" }]
|
|
383
|
+
},
|
|
384
|
+
tags: ["image metadata", "exif", "photo info", "media tags", "strip metadata"],
|
|
385
|
+
seeAlso: ["imagemagick", "ffmpeg"]
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
id: "imagemagick",
|
|
389
|
+
name: "ImageMagick",
|
|
390
|
+
description: "Image transforms",
|
|
391
|
+
preset: "media",
|
|
392
|
+
verify: "magick -version",
|
|
393
|
+
install: universal("imagemagick"),
|
|
394
|
+
tags: ["image resize", "image convert", "image transform", "thumbnail", "crop image"],
|
|
395
|
+
seeAlso: ["exiftool", "svgo", "ffmpeg"]
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
id: "svgo",
|
|
399
|
+
name: "svgo",
|
|
400
|
+
description: "SVG optimiser",
|
|
401
|
+
preset: "media",
|
|
402
|
+
verify: "svgo --version",
|
|
403
|
+
install: npmAll("svgo"),
|
|
404
|
+
tags: ["svg optimize", "svg compress", "vector graphics", "svg minify", "icon optimize"],
|
|
405
|
+
seeAlso: ["imagemagick"]
|
|
406
|
+
},
|
|
407
|
+
// ── DX ────────────────────────────────────────────────
|
|
408
|
+
{
|
|
409
|
+
id: "eza",
|
|
410
|
+
name: "eza",
|
|
411
|
+
description: "Modern ls replacement",
|
|
412
|
+
preset: "dx",
|
|
413
|
+
verify: "eza --version",
|
|
414
|
+
install: brewScoopCargo("eza", "eza"),
|
|
415
|
+
tags: ["list files", "ls", "directory listing", "file icons", "tree view"],
|
|
416
|
+
seeAlso: ["tree", "fd", "dust"]
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
id: "zoxide",
|
|
420
|
+
name: "zoxide",
|
|
421
|
+
description: "Smarter cd",
|
|
422
|
+
preset: "dx",
|
|
423
|
+
verify: "zoxide --version",
|
|
424
|
+
install: brewScoopCargo("zoxide", "zoxide"),
|
|
425
|
+
tags: ["cd", "directory jump", "smart navigation", "recent dirs", "z command"],
|
|
426
|
+
seeAlso: ["fzf", "eza"]
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
id: "delta",
|
|
430
|
+
name: "delta",
|
|
431
|
+
description: "Better git diffs",
|
|
432
|
+
preset: "dx",
|
|
433
|
+
verify: "delta --version",
|
|
434
|
+
install: {
|
|
435
|
+
darwin: [{ method: "brew", package: "git-delta" }],
|
|
436
|
+
linux: [{ method: "cargo", package: "git-delta" }],
|
|
437
|
+
win32: [{ method: "scoop", package: "delta" }]
|
|
438
|
+
},
|
|
439
|
+
tags: ["git diff", "diff viewer", "side by side diff", "code review", "syntax diff"],
|
|
440
|
+
seeAlso: ["difftastic", "lazygit", "bat"]
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
id: "glow",
|
|
444
|
+
name: "glow",
|
|
445
|
+
description: "Terminal markdown renderer",
|
|
446
|
+
preset: "dx",
|
|
447
|
+
verify: "glow --version",
|
|
448
|
+
install: {
|
|
449
|
+
darwin: [{ method: "brew", package: "glow" }],
|
|
450
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
451
|
+
linux: null,
|
|
452
|
+
win32: [{ method: "scoop", package: "glow" }]
|
|
453
|
+
},
|
|
454
|
+
tags: ["render markdown", "markdown preview", "terminal markdown", "readme viewer"],
|
|
455
|
+
seeAlso: ["bat", "pandoc", "tldr"]
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
id: "mise",
|
|
459
|
+
name: "mise",
|
|
460
|
+
description: "Runtime version manager",
|
|
461
|
+
preset: "dx",
|
|
462
|
+
verify: "mise --version",
|
|
463
|
+
install: {
|
|
464
|
+
darwin: [{ method: "brew", package: "mise" }],
|
|
465
|
+
// TODO: gh-release installer — curl script install preferred on Linux
|
|
466
|
+
linux: null,
|
|
467
|
+
win32: [{ method: "scoop", package: "mise" }]
|
|
468
|
+
},
|
|
469
|
+
tags: ["runtime version", "node version", "python version", "version manager", "toolchain"],
|
|
470
|
+
seeAlso: ["uv", "direnv"]
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
id: "watchexec",
|
|
474
|
+
name: "watchexec",
|
|
475
|
+
description: "Run commands on file change",
|
|
476
|
+
preset: "dx",
|
|
477
|
+
verify: "watchexec --version",
|
|
478
|
+
install: brewScoopCargo("watchexec", "watchexec"),
|
|
479
|
+
tags: ["watch files", "run on change", "live reload", "file watcher", "auto restart"],
|
|
480
|
+
seeAlso: ["just", "mise"]
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
id: "mkcert",
|
|
484
|
+
name: "mkcert",
|
|
485
|
+
description: "Local HTTPS certs",
|
|
486
|
+
preset: "dx",
|
|
487
|
+
verify: "mkcert --version",
|
|
488
|
+
install: {
|
|
489
|
+
darwin: [{ method: "brew", package: "mkcert" }],
|
|
490
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
491
|
+
linux: null,
|
|
492
|
+
win32: [{ method: "scoop", package: "mkcert" }]
|
|
493
|
+
},
|
|
494
|
+
tags: ["https", "local ssl", "dev certificate", "tls", "self signed"],
|
|
495
|
+
seeAlso: ["age", "trivy"]
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
id: "lazygit",
|
|
499
|
+
name: "lazygit",
|
|
500
|
+
description: "TUI git client",
|
|
501
|
+
preset: "dx",
|
|
502
|
+
verify: "lazygit --version",
|
|
503
|
+
install: {
|
|
504
|
+
darwin: [{ method: "brew", package: "lazygit" }],
|
|
505
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
506
|
+
linux: null,
|
|
507
|
+
win32: [{ method: "scoop", package: "lazygit" }]
|
|
508
|
+
},
|
|
509
|
+
tags: ["git tui", "git interface", "stage commits", "git visual", "interactive git"],
|
|
510
|
+
seeAlso: ["gh", "delta", "difftastic"]
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
id: "dust",
|
|
514
|
+
name: "dust",
|
|
515
|
+
description: "Disk usage tree",
|
|
516
|
+
preset: "dx",
|
|
517
|
+
verify: "dust --version",
|
|
518
|
+
install: brewScoopCargo("dust", "du-dust"),
|
|
519
|
+
tags: ["disk usage", "disk space", "folder size", "storage", "du"],
|
|
520
|
+
seeAlso: ["eza", "tree", "btm"]
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
id: "btm",
|
|
524
|
+
name: "bottom",
|
|
525
|
+
description: "System monitor TUI",
|
|
526
|
+
preset: "dx",
|
|
527
|
+
verify: "btm --version",
|
|
528
|
+
install: {
|
|
529
|
+
darwin: [{ method: "brew", package: "bottom" }],
|
|
530
|
+
linux: [{ method: "cargo", package: "bottom" }],
|
|
531
|
+
win32: [{ method: "scoop", package: "bottom" }]
|
|
532
|
+
},
|
|
533
|
+
tags: ["system monitor", "cpu usage", "memory", "processes", "resource monitor"],
|
|
534
|
+
seeAlso: ["procs", "dust", "hyperfine"]
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
id: "direnv",
|
|
538
|
+
name: "direnv",
|
|
539
|
+
description: "Auto-load env vars per directory",
|
|
540
|
+
preset: "dx",
|
|
541
|
+
verify: "direnv version",
|
|
542
|
+
install: universal("direnv"),
|
|
543
|
+
tags: ["environment variables", "env vars", ".env", "per-project env", "dotenv"],
|
|
544
|
+
seeAlso: ["mise", "uv"]
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
id: "procs",
|
|
548
|
+
name: "procs",
|
|
549
|
+
description: "Modern ps replacement with search",
|
|
550
|
+
preset: "dx",
|
|
551
|
+
verify: "procs --version",
|
|
552
|
+
install: brewScoopCargo("procs", "procs"),
|
|
553
|
+
tags: ["process list", "ps", "running processes", "process search", "pid"],
|
|
554
|
+
seeAlso: ["btm", "dust"]
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
id: "uv",
|
|
558
|
+
name: "uv",
|
|
559
|
+
description: "Fast Python package and env manager",
|
|
560
|
+
preset: "dx",
|
|
561
|
+
verify: "uv --version",
|
|
562
|
+
install: {
|
|
563
|
+
darwin: [{ method: "brew", package: "uv" }],
|
|
564
|
+
linux: [{ method: "cargo", package: "uv" }],
|
|
565
|
+
win32: [{ method: "scoop", package: "uv" }]
|
|
566
|
+
},
|
|
567
|
+
tags: ["python", "pip", "python package", "virtualenv", "python environment"],
|
|
568
|
+
seeAlso: ["mise", "direnv"]
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
id: "hexyl",
|
|
572
|
+
name: "hexyl",
|
|
573
|
+
description: "Hex viewer with colour coding",
|
|
574
|
+
preset: "dx",
|
|
575
|
+
verify: "hexyl --version",
|
|
576
|
+
install: brewScoopCargo("hexyl", "hexyl"),
|
|
577
|
+
tags: ["hex dump", "binary file", "byte inspection", "hex view", "binary analysis"],
|
|
578
|
+
seeAlso: ["bat", "exiftool"]
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
id: "taplo",
|
|
582
|
+
name: "taplo",
|
|
583
|
+
description: "TOML toolkit (lint, format, query)",
|
|
584
|
+
preset: "dx",
|
|
585
|
+
verify: "taplo --version",
|
|
586
|
+
install: brewScoopCargo("taplo", "taplo-cli"),
|
|
587
|
+
tags: ["toml", "toml lint", "toml format", "config validation", "cargo toml"],
|
|
588
|
+
seeAlso: ["yq", "biome"]
|
|
589
|
+
},
|
|
590
|
+
// ── Security ──────────────────────────────────────────
|
|
591
|
+
{
|
|
592
|
+
id: "trivy",
|
|
593
|
+
name: "trivy",
|
|
594
|
+
description: "Vulnerability scanner",
|
|
595
|
+
preset: "security",
|
|
596
|
+
verify: "trivy --version",
|
|
597
|
+
install: {
|
|
598
|
+
darwin: [{ method: "brew", package: "trivy" }],
|
|
599
|
+
linux: [{ method: "apt", package: "trivy" }],
|
|
600
|
+
win32: [{ method: "scoop", package: "trivy" }]
|
|
601
|
+
},
|
|
602
|
+
tags: ["vulnerability scan", "cve", "docker scan", "dependency scan", "security audit"],
|
|
603
|
+
seeAlso: ["semgrep", "gitleaks", "act"]
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
id: "act",
|
|
607
|
+
name: "act",
|
|
608
|
+
description: "Run GitHub Actions locally",
|
|
609
|
+
preset: "security",
|
|
610
|
+
verify: "act --version",
|
|
611
|
+
install: {
|
|
612
|
+
darwin: [{ method: "brew", package: "act" }],
|
|
613
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
614
|
+
linux: null,
|
|
615
|
+
win32: [{ method: "scoop", package: "act" }]
|
|
616
|
+
},
|
|
617
|
+
tags: ["github actions", "local ci", "workflow test", "ci debug", "actions runner"],
|
|
618
|
+
seeAlso: ["gh", "trivy"]
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
id: "gitleaks",
|
|
622
|
+
name: "gitleaks",
|
|
623
|
+
description: "Secrets scanner",
|
|
624
|
+
preset: "security",
|
|
625
|
+
verify: "gitleaks version",
|
|
626
|
+
install: {
|
|
627
|
+
darwin: [{ method: "brew", package: "gitleaks" }],
|
|
628
|
+
// TODO: gh-release installer — no apt/cargo package
|
|
629
|
+
linux: null,
|
|
630
|
+
win32: [{ method: "scoop", package: "gitleaks" }]
|
|
631
|
+
},
|
|
632
|
+
tags: ["secret scan", "api key leak", "credentials", "git history scan", "sensitive data"],
|
|
633
|
+
seeAlso: ["trivy", "semgrep", "gh"]
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
id: "semgrep",
|
|
637
|
+
name: "semgrep",
|
|
638
|
+
description: "Multi-language static analysis",
|
|
639
|
+
preset: "security",
|
|
640
|
+
verify: "semgrep --version",
|
|
641
|
+
install: {
|
|
642
|
+
darwin: [{ method: "brew", package: "semgrep" }],
|
|
643
|
+
linux: [{ method: "apt", package: "semgrep" }],
|
|
644
|
+
win32: null
|
|
645
|
+
// not available on Windows
|
|
646
|
+
},
|
|
647
|
+
tags: ["static analysis", "security scan", "code pattern", "sast", "vulnerability detection"],
|
|
648
|
+
seeAlso: ["trivy", "gitleaks", "shellcheck"]
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
id: "age",
|
|
652
|
+
name: "age",
|
|
653
|
+
description: "Simple file encryption",
|
|
654
|
+
preset: "security",
|
|
655
|
+
verify: "age --version",
|
|
656
|
+
install: {
|
|
657
|
+
darwin: [{ method: "brew", package: "age" }],
|
|
658
|
+
linux: [{ method: "apt", package: "age" }, { method: "cargo", package: "rage" }],
|
|
659
|
+
win32: [{ method: "scoop", package: "age" }]
|
|
660
|
+
},
|
|
661
|
+
tags: ["encrypt", "decrypt", "file encryption", "secrets", "pgp alternative"],
|
|
662
|
+
seeAlso: ["gitleaks", "mkcert"]
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
id: "doggo",
|
|
666
|
+
name: "doggo",
|
|
667
|
+
description: "Modern DNS client with JSON output",
|
|
668
|
+
preset: "security",
|
|
669
|
+
verify: "doggo --version",
|
|
670
|
+
install: {
|
|
671
|
+
darwin: [{ method: "brew", package: "doggo" }],
|
|
672
|
+
// TODO: gh-release installer — no apt package; cargo crate not maintained
|
|
673
|
+
linux: null,
|
|
674
|
+
win32: [{ method: "scoop", package: "doggo" }]
|
|
675
|
+
},
|
|
676
|
+
tags: ["dns", "dns lookup", "dns query", "nameserver", "network debug"],
|
|
677
|
+
seeAlso: ["xh", "trivy"]
|
|
678
|
+
}
|
|
679
|
+
];
|
|
680
|
+
function getToolsByPreset(presetId) {
|
|
681
|
+
return TOOLS.filter((t) => t.preset === presetId);
|
|
682
|
+
}
|
|
683
|
+
function getToolsByIds(ids) {
|
|
684
|
+
return TOOLS.filter((t) => ids.includes(t.id));
|
|
685
|
+
}
|
|
686
|
+
function validateToolIds(ids) {
|
|
687
|
+
const knownIds = new Set(TOOLS.map((t) => t.id));
|
|
688
|
+
const valid = [];
|
|
689
|
+
const invalid = [];
|
|
690
|
+
for (const id of ids) {
|
|
691
|
+
(knownIds.has(id) ? valid : invalid).push(id);
|
|
692
|
+
}
|
|
693
|
+
return { valid, invalid };
|
|
694
|
+
}
|
|
695
|
+
function generateBrewfileFromCatalog() {
|
|
696
|
+
const lines = [
|
|
697
|
+
"# Auto-generated from catalog.ts \u2014 macOS only. Run: pnpm brewfile",
|
|
698
|
+
"# Do not edit manually.",
|
|
699
|
+
""
|
|
700
|
+
];
|
|
701
|
+
for (const preset of PRESETS) {
|
|
702
|
+
const tools = getToolsByPreset(preset.id);
|
|
703
|
+
const brewTools = tools.flatMap((t) => t.install.darwin ?? []).filter(
|
|
704
|
+
(pi) => pi.method === "brew"
|
|
705
|
+
);
|
|
706
|
+
if (brewTools.length === 0) continue;
|
|
707
|
+
lines.push(`# ${preset.name}`);
|
|
708
|
+
for (const pi of brewTools) {
|
|
709
|
+
lines.push(`brew "${pi.package}"`);
|
|
710
|
+
}
|
|
711
|
+
lines.push("");
|
|
712
|
+
}
|
|
713
|
+
return lines.join("\n");
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
export {
|
|
717
|
+
PRESETS,
|
|
718
|
+
TOOLS,
|
|
719
|
+
getToolsByPreset,
|
|
720
|
+
getToolsByIds,
|
|
721
|
+
validateToolIds,
|
|
722
|
+
generateBrewfileFromCatalog
|
|
723
|
+
};
|