@fredlackey/devutils 0.0.1
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 +156 -0
- package/bin/dev.js +16 -0
- package/files/README.md +0 -0
- package/files/claude/.claude/commands/setup-context.md +3 -0
- package/files/monorepos/_archive/README.md +36 -0
- package/files/monorepos/_legacy/README.md +36 -0
- package/files/monorepos/ai-docs/README.md +33 -0
- package/files/monorepos/apps/README.md +24 -0
- package/files/monorepos/docs/README.md +40 -0
- package/files/monorepos/packages/README.md +25 -0
- package/files/monorepos/research/README.md +29 -0
- package/files/monorepos/scripts/README.md +24 -0
- package/package.json +39 -0
- package/src/cli.js +68 -0
- package/src/commands/README.md +41 -0
- package/src/commands/configure.js +199 -0
- package/src/commands/identity.js +1630 -0
- package/src/commands/ignore.js +247 -0
- package/src/commands/install.js +173 -0
- package/src/commands/setup.js +212 -0
- package/src/commands/status.js +223 -0
- package/src/completion.js +284 -0
- package/src/constants.js +45 -0
- package/src/ignore/claude-code.txt +10 -0
- package/src/ignore/docker.txt +18 -0
- package/src/ignore/linux.txt +23 -0
- package/src/ignore/macos.txt +36 -0
- package/src/ignore/node.txt +55 -0
- package/src/ignore/terraform.txt +37 -0
- package/src/ignore/vscode.txt +18 -0
- package/src/ignore/windows.txt +35 -0
- package/src/index.js +0 -0
- package/src/installs/README.md +399 -0
- package/src/installs/adobe-creative-cloud.js +44 -0
- package/src/installs/appcleaner.js +44 -0
- package/src/installs/atomicparsley.js +44 -0
- package/src/installs/aws-cli.js +44 -0
- package/src/installs/balena-etcher.js +44 -0
- package/src/installs/bambu-studio.js +44 -0
- package/src/installs/bash-completion.js +44 -0
- package/src/installs/bash.js +44 -0
- package/src/installs/beyond-compare.js +44 -0
- package/src/installs/build-essential.js +44 -0
- package/src/installs/caffeine.js +44 -0
- package/src/installs/camtasia.js +44 -0
- package/src/installs/chatgpt.js +44 -0
- package/src/installs/chrome-canary.js +44 -0
- package/src/installs/chromium.js +44 -0
- package/src/installs/claude-code.js +44 -0
- package/src/installs/curl.js +44 -0
- package/src/installs/cursor.js +44 -0
- package/src/installs/dbschema.js +44 -0
- package/src/installs/docker.js +44 -0
- package/src/installs/drawio.js +44 -0
- package/src/installs/elmedia-player.js +44 -0
- package/src/installs/ffmpeg.js +44 -0
- package/src/installs/gemini-cli.js +44 -0
- package/src/installs/git.js +44 -0
- package/src/installs/gitego.js +44 -0
- package/src/installs/go.js +44 -0
- package/src/installs/google-chrome.js +44 -0
- package/src/installs/gpg.js +141 -0
- package/src/installs/homebrew.js +44 -0
- package/src/installs/imageoptim.js +44 -0
- package/src/installs/jq.js +44 -0
- package/src/installs/keyboard-maestro.js +44 -0
- package/src/installs/latex.js +44 -0
- package/src/installs/lftp.js +44 -0
- package/src/installs/messenger.js +44 -0
- package/src/installs/microsoft-office.js +44 -0
- package/src/installs/microsoft-teams.js +44 -0
- package/src/installs/node.js +44 -0
- package/src/installs/nordpass.js +44 -0
- package/src/installs/nvm.js +44 -0
- package/src/installs/openssh.js +134 -0
- package/src/installs/pandoc.js +44 -0
- package/src/installs/pinentry.js +44 -0
- package/src/installs/pngyu.js +44 -0
- package/src/installs/postman.js +44 -0
- package/src/installs/safari-tech-preview.js +44 -0
- package/src/installs/sfnt2woff.js +44 -0
- package/src/installs/shellcheck.js +44 -0
- package/src/installs/slack.js +44 -0
- package/src/installs/snagit.js +44 -0
- package/src/installs/spotify.js +44 -0
- package/src/installs/studio-3t.js +44 -0
- package/src/installs/sublime-text.js +44 -0
- package/src/installs/superwhisper.js +44 -0
- package/src/installs/tailscale.js +44 -0
- package/src/installs/termius.js +44 -0
- package/src/installs/terraform.js +44 -0
- package/src/installs/tidal.js +44 -0
- package/src/installs/tmux.js +44 -0
- package/src/installs/tree.js +44 -0
- package/src/installs/vim.js +44 -0
- package/src/installs/vlc.js +44 -0
- package/src/installs/vscode.js +44 -0
- package/src/installs/whatsapp.js +44 -0
- package/src/installs/woff2.js +44 -0
- package/src/installs/xcode.js +44 -0
- package/src/installs/yarn.js +44 -0
- package/src/installs/yq.js +44 -0
- package/src/installs/yt-dlp.js +44 -0
- package/src/installs/zoom.js +44 -0
- package/src/scripts/README.md +95 -0
- package/src/scripts/afk.js +23 -0
- package/src/scripts/backup-all.js +24 -0
- package/src/scripts/backup-source.js +24 -0
- package/src/scripts/brewd.js +23 -0
- package/src/scripts/brewi.js +24 -0
- package/src/scripts/brewr.js +24 -0
- package/src/scripts/brews.js +24 -0
- package/src/scripts/brewu.js +23 -0
- package/src/scripts/c.js +23 -0
- package/src/scripts/ccurl.js +24 -0
- package/src/scripts/certbot-crontab-init.js +24 -0
- package/src/scripts/certbot-init.js +25 -0
- package/src/scripts/ch.js +23 -0
- package/src/scripts/claude-danger.js +23 -0
- package/src/scripts/clean-dev.js +24 -0
- package/src/scripts/clear-dns-cache.js +23 -0
- package/src/scripts/clone.js +25 -0
- package/src/scripts/code-all.js +24 -0
- package/src/scripts/count-files.js +24 -0
- package/src/scripts/count-folders.js +24 -0
- package/src/scripts/count.js +24 -0
- package/src/scripts/d.js +23 -0
- package/src/scripts/datauri.js +24 -0
- package/src/scripts/delete-files.js +24 -0
- package/src/scripts/docker-clean.js +24 -0
- package/src/scripts/dp.js +23 -0
- package/src/scripts/e.js +24 -0
- package/src/scripts/empty-trash.js +23 -0
- package/src/scripts/evm.js +25 -0
- package/src/scripts/fetch-github-repos.js +25 -0
- package/src/scripts/get-channel.js +24 -0
- package/src/scripts/get-course.js +26 -0
- package/src/scripts/get-dependencies.js +25 -0
- package/src/scripts/get-folder.js +26 -0
- package/src/scripts/get-tunes.js +25 -0
- package/src/scripts/get-video.js +24 -0
- package/src/scripts/git-backup.js +25 -0
- package/src/scripts/git-clone.js +25 -0
- package/src/scripts/git-pup.js +23 -0
- package/src/scripts/git-push.js +24 -0
- package/src/scripts/h.js +24 -0
- package/src/scripts/hide-desktop-icons.js +23 -0
- package/src/scripts/hide-hidden-files.js +23 -0
- package/src/scripts/install-dependencies-from.js +25 -0
- package/src/scripts/ips.js +26 -0
- package/src/scripts/iso.js +24 -0
- package/src/scripts/killni.js +23 -0
- package/src/scripts/ll.js +24 -0
- package/src/scripts/local-ip.js +23 -0
- package/src/scripts/m.js +24 -0
- package/src/scripts/map.js +24 -0
- package/src/scripts/mkd.js +24 -0
- package/src/scripts/ncu-update-all.js +24 -0
- package/src/scripts/nginx-init.js +28 -0
- package/src/scripts/npmi.js +23 -0
- package/src/scripts/o.js +24 -0
- package/src/scripts/org-by-date.js +24 -0
- package/src/scripts/p.js +23 -0
- package/src/scripts/packages.js +25 -0
- package/src/scripts/path.js +23 -0
- package/src/scripts/ports.js +23 -0
- package/src/scripts/q.js +23 -0
- package/src/scripts/refresh-files.js +26 -0
- package/src/scripts/remove-smaller-files.js +24 -0
- package/src/scripts/rename-files-with-date.js +25 -0
- package/src/scripts/resize-image.js +25 -0
- package/src/scripts/rm-safe.js +24 -0
- package/src/scripts/s.js +24 -0
- package/src/scripts/set-git-public.js +23 -0
- package/src/scripts/show-desktop-icons.js +23 -0
- package/src/scripts/show-hidden-files.js +23 -0
- package/src/scripts/tpa.js +23 -0
- package/src/scripts/tpo.js +23 -0
- package/src/scripts/u.js +23 -0
- package/src/scripts/vpush.js +23 -0
- package/src/scripts/y.js +23 -0
- package/src/utils/README.md +95 -0
- package/src/utils/common/apps.js +143 -0
- package/src/utils/common/display.js +157 -0
- package/src/utils/common/network.js +185 -0
- package/src/utils/common/os.js +202 -0
- package/src/utils/common/package-manager.js +301 -0
- package/src/utils/common/privileges.js +138 -0
- package/src/utils/common/shell.js +195 -0
- package/src/utils/macos/apps.js +228 -0
- package/src/utils/macos/brew.js +315 -0
- package/src/utils/ubuntu/apt.js +301 -0
- package/src/utils/ubuntu/desktop.js +292 -0
- package/src/utils/ubuntu/snap.js +302 -0
- package/src/utils/ubuntu/systemd.js +286 -0
- package/src/utils/windows/choco.js +327 -0
- package/src/utils/windows/env.js +246 -0
- package/src/utils/windows/registry.js +269 -0
- package/src/utils/windows/shell.js +240 -0
- package/src/utils/windows/winget.js +378 -0
package/README.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# DevUtils CLI
|
|
2
|
+
|
|
3
|
+
> **Early Development (v0.0.1)** — This project is currently a proof of concept. Core functionality is being built and tested. You're welcome to:
|
|
4
|
+
> - Use it as-is and provide feedback
|
|
5
|
+
> - Participate in development
|
|
6
|
+
> - Watch for future releases (v0.1.0 for beta, v1.0.0 for stable)
|
|
7
|
+
> - [Reach out](#contact) with questions or suggestions
|
|
8
|
+
|
|
9
|
+
Stop wasting hours setting up new machines. One command, any platform, ready to code.
|
|
10
|
+
|
|
11
|
+
## The Problem
|
|
12
|
+
|
|
13
|
+
Every developer knows the pain:
|
|
14
|
+
- New laptop? Spend a day installing tools and configuring dotfiles
|
|
15
|
+
- Switch between work and personal projects? Juggle SSH keys and git configs
|
|
16
|
+
- Help a teammate set up their environment? Walk them through 50 different steps
|
|
17
|
+
- Work on macOS at home, Linux in prod? Remember two sets of commands
|
|
18
|
+
|
|
19
|
+
## The Solution
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g @fredlackey/devutils
|
|
23
|
+
dev setup
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
That's it. DevUtils CLI detects your operating system and installs everything you need. Your configuration travels with you.
|
|
27
|
+
|
|
28
|
+
## Installation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g @fredlackey/devutils
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Requirements:** Node.js 18+
|
|
35
|
+
|
|
36
|
+
## Quick Start
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Install essential tools (git, ssh, gpg, etc.)
|
|
40
|
+
dev setup
|
|
41
|
+
|
|
42
|
+
# Set up your developer profile
|
|
43
|
+
dev configure
|
|
44
|
+
|
|
45
|
+
# Install your favorite tools
|
|
46
|
+
dev install vscode
|
|
47
|
+
dev install docker
|
|
48
|
+
dev install node
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Key Features
|
|
52
|
+
|
|
53
|
+
### Cross-Platform Package Installation
|
|
54
|
+
|
|
55
|
+
Forget whether it's `brew install`, `apt-get install`, or `choco install`. Just run:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
dev install docker
|
|
59
|
+
dev install node
|
|
60
|
+
dev install vscode
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
DevUtils CLI figures out the right command for macOS, Ubuntu, Debian, Amazon Linux, Fedora, or Windows.
|
|
64
|
+
|
|
65
|
+
### Git Identity Management
|
|
66
|
+
|
|
67
|
+
Manage multiple git identities for work, personal, and client projects:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Create identities with SSH and GPG keys
|
|
71
|
+
dev identity add work --email you@company.com
|
|
72
|
+
dev identity add personal --email you@gmail.com
|
|
73
|
+
|
|
74
|
+
# Link identities to folders - commits automatically use the right credentials
|
|
75
|
+
dev identity link work ~/work
|
|
76
|
+
dev identity link personal ~/personal https://github.com/yourusername
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Clone with any URL format. DevUtils CLI routes it through the correct SSH key automatically.
|
|
80
|
+
|
|
81
|
+
### Smart .gitignore Management
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
dev ignore node # Add Node.js patterns
|
|
85
|
+
dev ignore macos # Add .DS_Store and friends
|
|
86
|
+
dev ignore vscode # Add .vscode/ patterns
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Patterns are managed in sections—run it twice and it won't duplicate.
|
|
90
|
+
|
|
91
|
+
### Portable Configuration
|
|
92
|
+
|
|
93
|
+
Your `~/.devutils` file stores your preferences:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"user": {
|
|
98
|
+
"name": "Jane Developer",
|
|
99
|
+
"email": "jane@example.com"
|
|
100
|
+
},
|
|
101
|
+
"identities": {
|
|
102
|
+
"work": { "email": "jane@company.com", "sshKey": "~/.ssh/id_ed25519_work" },
|
|
103
|
+
"personal": { "email": "jane@gmail.com", "sshKey": "~/.ssh/id_ed25519_personal" }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Copy this file to a new machine and run `dev identity sync` to regenerate all your SSH configs.
|
|
109
|
+
|
|
110
|
+
## Supported Platforms
|
|
111
|
+
|
|
112
|
+
| Platform | Package Manager |
|
|
113
|
+
|----------|-----------------|
|
|
114
|
+
| macOS | Homebrew |
|
|
115
|
+
| Ubuntu / Debian | APT |
|
|
116
|
+
| Raspberry Pi OS | APT |
|
|
117
|
+
| Amazon Linux / RHEL / Fedora | DNF / YUM |
|
|
118
|
+
| Windows | Chocolatey / winget |
|
|
119
|
+
| WSL | APT (with Windows integration) |
|
|
120
|
+
|
|
121
|
+
## Available Commands
|
|
122
|
+
|
|
123
|
+
| Command | Description |
|
|
124
|
+
|---------|-------------|
|
|
125
|
+
| `dev setup` | Install essential development tools |
|
|
126
|
+
| `dev configure` | Set up your developer profile |
|
|
127
|
+
| `dev install <tool>` | Install a tool (cross-platform) |
|
|
128
|
+
| `dev identity add` | Create a new git identity with keys |
|
|
129
|
+
| `dev identity link` | Link an identity to a folder or remote |
|
|
130
|
+
| `dev identity unlink` | Remove a folder link |
|
|
131
|
+
| `dev ignore <tech>` | Add .gitignore patterns |
|
|
132
|
+
| `dev status` | Show current configuration |
|
|
133
|
+
|
|
134
|
+
## Why DevUtils CLI?
|
|
135
|
+
|
|
136
|
+
- **Zero memorization** — Same commands on every platform
|
|
137
|
+
- **Identity isolation** — Never accidentally commit with the wrong email again
|
|
138
|
+
- **Reproducible setups** — New machine? `dev setup && dev identity sync`
|
|
139
|
+
- **No lock-in** — Standard tools, standard configs. Uninstall anytime
|
|
140
|
+
|
|
141
|
+
## Contributing
|
|
142
|
+
|
|
143
|
+
Contributions welcome! Feel free to open issues or submit pull requests.
|
|
144
|
+
|
|
145
|
+
## Contact
|
|
146
|
+
|
|
147
|
+
Questions, suggestions, or just want to chat about the project?
|
|
148
|
+
|
|
149
|
+
**Fred Lackey**
|
|
150
|
+
- Email: [fred.lackey@gmail.com](mailto:fred.lackey@gmail.com)
|
|
151
|
+
- Website: [fredlackey.com](https://fredlackey.com)
|
|
152
|
+
- GitHub: [@FredLackey](https://github.com/FredLackey)
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
Apache-2.0
|
package/bin/dev.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Main entry point for the `dev` CLI command.
|
|
5
|
+
* This file handles tab completion detection and delegates to the CLI module.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Handle tab completion before loading the full CLI
|
|
9
|
+
// This allows for fast completion responses
|
|
10
|
+
if (process.env.COMP_LINE) {
|
|
11
|
+
require('../src/completion').handleCompletion();
|
|
12
|
+
process.exit(0);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Normal CLI execution
|
|
16
|
+
require('../src/cli').run();
|
package/files/README.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Archive
|
|
2
|
+
|
|
3
|
+
**DO NOT READ OR MODIFY CONTENTS OF THIS FOLDER.**
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This folder is a **failsafe backup**—a last resort for code and resources that may need to be referenced in rare circumstances. Think of it as a "soft delete" before permanent removal.
|
|
8
|
+
|
|
9
|
+
## Critical Warnings
|
|
10
|
+
|
|
11
|
+
- **Nothing in this folder should be trusted as correct**
|
|
12
|
+
- Contents are outdated, deprecated, or potentially broken
|
|
13
|
+
- Code here has been replaced by better implementations elsewhere
|
|
14
|
+
- Documentation may be inaccurate or misleading
|
|
15
|
+
|
|
16
|
+
## AI Instructions
|
|
17
|
+
|
|
18
|
+
**This folder must be ignored by all AI processes:**
|
|
19
|
+
- Do NOT read files from this folder
|
|
20
|
+
- Do NOT reference code or patterns found here
|
|
21
|
+
- Do NOT modify or update any contents
|
|
22
|
+
- Do NOT use this folder as a source of truth for anything
|
|
23
|
+
|
|
24
|
+
## What Belongs Here
|
|
25
|
+
|
|
26
|
+
- Deprecated code kept only as an emergency reference
|
|
27
|
+
- Old implementations preserved before deletion
|
|
28
|
+
- Retired features that might need forensic review
|
|
29
|
+
- Anything we're not ready to permanently delete
|
|
30
|
+
|
|
31
|
+
## Guidelines
|
|
32
|
+
|
|
33
|
+
- Date items when archiving (use folder names like `YYYYMMDD/`)
|
|
34
|
+
- Include a brief note explaining why the item was archived
|
|
35
|
+
- Never actively maintain or improve archived code
|
|
36
|
+
- Periodically review and permanently delete obsolete items
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Legacy
|
|
2
|
+
|
|
3
|
+
**CONTENTS SHOULD NOT BE TRUSTED. USE WITH CAUTION.**
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This folder contains **previous attempts** at building the same concepts, packages, or even the entire project. Think of it as the "last version" or "last attempt" before the current rebuild.
|
|
8
|
+
|
|
9
|
+
We keep this code for reference, but if we're rebuilding, it's for a reason:
|
|
10
|
+
|
|
11
|
+
- **A)** We learned enough about the problem and now want to do it properly
|
|
12
|
+
- **B)** We failed completely and need to start over, but want to remember our mistakes
|
|
13
|
+
|
|
14
|
+
This folder is one step better than `/_archive`—we may occasionally refer to it—but it still should not be treated as a source of truth.
|
|
15
|
+
|
|
16
|
+
## AI Instructions
|
|
17
|
+
|
|
18
|
+
**Approach this folder with skepticism:**
|
|
19
|
+
- Do NOT trust patterns or implementations found here
|
|
20
|
+
- Do NOT copy code from this folder without explicit instruction
|
|
21
|
+
- Do NOT use this as a reference for "how things should work"
|
|
22
|
+
- Contents represent what we're moving *away from*, not toward
|
|
23
|
+
|
|
24
|
+
## What Belongs Here
|
|
25
|
+
|
|
26
|
+
- Previous iterations of the current project
|
|
27
|
+
- Failed attempts preserved for learning
|
|
28
|
+
- Old architectures we've outgrown
|
|
29
|
+
- Code that "worked" but wasn't good enough
|
|
30
|
+
|
|
31
|
+
## Guidelines
|
|
32
|
+
|
|
33
|
+
- Note why the previous attempt was abandoned
|
|
34
|
+
- Reference only when specifically trying to avoid past mistakes
|
|
35
|
+
- Never improve or maintain legacy code—build new instead
|
|
36
|
+
- Move to `/_archive` once the new implementation is stable and proven
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# AI Docs
|
|
2
|
+
|
|
3
|
+
This folder contains documentation **created by AI, for AI**.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
A persistent knowledge base that preserves AI research, discoveries, and insights so they don't have to be repeated. When AI investigates a concept, researches a technique, or works through a problem, the findings are documented here for future reference.
|
|
8
|
+
|
|
9
|
+
This eliminates redundant research and discovery processes across sessions.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
- AI writes documentation here after research or discovery work
|
|
14
|
+
- AI reads from this folder to recall prior findings
|
|
15
|
+
- Humans may reference content but it's optimized for AI consumption
|
|
16
|
+
- Treat as a "memory" that persists between AI sessions
|
|
17
|
+
|
|
18
|
+
## What Belongs Here
|
|
19
|
+
|
|
20
|
+
- Research findings and conclusions
|
|
21
|
+
- Technology evaluations and comparisons
|
|
22
|
+
- Best practices and implementation patterns
|
|
23
|
+
- Convention documentation and standards
|
|
24
|
+
- Schema definitions
|
|
25
|
+
- Brainstorming outcomes and design decisions
|
|
26
|
+
- Concept explanations and technical deep-dives
|
|
27
|
+
|
|
28
|
+
## Guidelines
|
|
29
|
+
|
|
30
|
+
- Write in clear, structured formats AI can easily parse
|
|
31
|
+
- Include context about why research was performed
|
|
32
|
+
- Update documents as understanding evolves
|
|
33
|
+
- Prefer comprehensive detail over brevity
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Apps
|
|
2
|
+
|
|
3
|
+
This folder contains the main applications for the project.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Each application in this folder represents a distinct, deployable unit—whether it's a frontend, backend API, admin tool, or other service. Applications are organized as separate subdirectories, each with their own dependencies and configuration.
|
|
8
|
+
|
|
9
|
+
## Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
apps/
|
|
13
|
+
├── [app-name]-ui-[framework]/ # Frontend applications
|
|
14
|
+
├── [app-name]-api-[framework]/ # Backend API services
|
|
15
|
+
├── [app-name]-admin-[framework]/ # Admin tools
|
|
16
|
+
└── ...
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Guidelines
|
|
20
|
+
|
|
21
|
+
- Each application should be independently runnable
|
|
22
|
+
- Applications may depend on shared code from `/packages`
|
|
23
|
+
- Keep application-specific code within its subdirectory
|
|
24
|
+
- Use consistent naming: `[project]-[type]-[framework]`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Docs
|
|
2
|
+
|
|
3
|
+
This folder contains documentation **created by humans, for humans**.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
The counterpart to `/ai-docs`—this folder holds documentation intended for human authors and human readers. Content here should be accessible, verbose enough for clarity, and written so that a junior developer or project manager can understand it.
|
|
8
|
+
|
|
9
|
+
AI may assist with editing, formatting, or refining language, but the content is fundamentally human-focused.
|
|
10
|
+
|
|
11
|
+
## Audience
|
|
12
|
+
|
|
13
|
+
- Junior developers onboarding to the project
|
|
14
|
+
- Project managers needing business context
|
|
15
|
+
- Team members referencing technical decisions
|
|
16
|
+
- External contributors or stakeholders
|
|
17
|
+
|
|
18
|
+
## What Belongs Here
|
|
19
|
+
|
|
20
|
+
- Architecture decision records (ADRs)
|
|
21
|
+
- Setup and installation guides
|
|
22
|
+
- API documentation and usage examples
|
|
23
|
+
- Business logic explanations
|
|
24
|
+
- Deployment and operations guides
|
|
25
|
+
- Contributing guidelines
|
|
26
|
+
- Project overviews and roadmaps
|
|
27
|
+
|
|
28
|
+
## Guidelines
|
|
29
|
+
|
|
30
|
+
- Write for clarity over brevity
|
|
31
|
+
- Assume the reader may not have full context
|
|
32
|
+
- Explain the "why" alongside the "what"
|
|
33
|
+
- Use plain language; avoid unnecessary jargon
|
|
34
|
+
- Include examples where helpful
|
|
35
|
+
|
|
36
|
+
## What Does NOT Belong Here
|
|
37
|
+
|
|
38
|
+
- AI-generated research or discovery docs (use `/ai-docs`)
|
|
39
|
+
- Exploratory research materials (use `/research`)
|
|
40
|
+
- Auto-generated API docs (keep with the relevant app)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Packages
|
|
2
|
+
|
|
3
|
+
This folder contains shared libraries and utilities used across applications.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Packages are reusable code modules that provide common functionality to multiple applications in the monorepo. This promotes code reuse, consistency, and maintainability across the project.
|
|
8
|
+
|
|
9
|
+
## Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
packages/
|
|
13
|
+
├── [project]-utils/ # Utility functions and helpers
|
|
14
|
+
├── [project]-types/ # Shared type definitions
|
|
15
|
+
├── [project]-config/ # Shared configuration
|
|
16
|
+
└── ...
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Guidelines
|
|
20
|
+
|
|
21
|
+
- Packages should be framework-agnostic when possible
|
|
22
|
+
- Each package should have a single, well-defined responsibility
|
|
23
|
+
- Packages are imported by applications in `/apps`
|
|
24
|
+
- Keep packages small and focused
|
|
25
|
+
- Document public APIs within each package
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Research
|
|
2
|
+
|
|
3
|
+
This folder is a **workspace for reference artifacts**—often excluded from version control.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
A staging area where developers can pull in external artifacts, code samples, documentation, or even entire repos from other sources. This keeps useful reference material close at hand without polluting the actual codebase.
|
|
8
|
+
|
|
9
|
+
The goal: work within a single IDE while having access to everything you need.
|
|
10
|
+
|
|
11
|
+
## Git Status
|
|
12
|
+
|
|
13
|
+
This folder is **typically excluded from the repository** (added to `.gitignore`). Contents are meant to be temporary and local to each developer's environment. Don't assume anything here will persist or be shared.
|
|
14
|
+
|
|
15
|
+
## What Belongs Here
|
|
16
|
+
|
|
17
|
+
- Cloned repos for reference
|
|
18
|
+
- Code samples from external sources
|
|
19
|
+
- API documentation downloads
|
|
20
|
+
- Third-party library source code
|
|
21
|
+
- Screenshots, PDFs, or other reference materials
|
|
22
|
+
- Anything useful for development that doesn't belong in the repo
|
|
23
|
+
|
|
24
|
+
## Guidelines
|
|
25
|
+
|
|
26
|
+
- Treat this folder as ephemeral and personal
|
|
27
|
+
- Don't rely on contents being available to others
|
|
28
|
+
- Clean up periodically—this isn't long-term storage
|
|
29
|
+
- If findings are valuable, document them in `/ai-docs` or `/docs`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Scripts
|
|
2
|
+
|
|
3
|
+
This folder contains development, build, and operational scripts.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Utility scripts that automate common tasks across the monorepo. These scripts help with development workflows, builds, deployments, and maintenance operations.
|
|
8
|
+
|
|
9
|
+
## What Belongs Here
|
|
10
|
+
|
|
11
|
+
- Build and compilation scripts
|
|
12
|
+
- Development environment setup
|
|
13
|
+
- Database migration helpers
|
|
14
|
+
- Deployment automation
|
|
15
|
+
- Code generation tools
|
|
16
|
+
- Maintenance and cleanup utilities
|
|
17
|
+
|
|
18
|
+
## Guidelines
|
|
19
|
+
|
|
20
|
+
- Make scripts executable (`chmod +x`)
|
|
21
|
+
- Include usage comments at the top of each script
|
|
22
|
+
- Use consistent naming conventions
|
|
23
|
+
- Document any required environment variables
|
|
24
|
+
- Keep scripts idempotent when possible
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fredlackey/devutils",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "A globally-installable Node.js CLI toolkit for bootstrapping and configuring development environments across any machine.",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"dev": "./bin/dev.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"files/"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"commander": "^12.0.0"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/FredLackey/devutils-cli.git"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [],
|
|
25
|
+
"author": {
|
|
26
|
+
"name": "Fred Lackey",
|
|
27
|
+
"email": "fred.lackey@gmail.com",
|
|
28
|
+
"url": "https://fredlackey.com"
|
|
29
|
+
},
|
|
30
|
+
"license": "Apache-2.0",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"type": "commonjs",
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/FredLackey/devutils-cli/issues"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/FredLackey/devutils-cli#readme"
|
|
39
|
+
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview CLI setup using Commander.js
|
|
5
|
+
* Registers all commands and handles program execution.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { program } = require('commander');
|
|
9
|
+
const pkg = require('../package.json');
|
|
10
|
+
|
|
11
|
+
const configureCommand = require('./commands/configure');
|
|
12
|
+
const statusCommand = require('./commands/status');
|
|
13
|
+
const identityCommand = require('./commands/identity');
|
|
14
|
+
const ignoreCommand = require('./commands/ignore');
|
|
15
|
+
const installCommand = require('./commands/install');
|
|
16
|
+
const { installCompletion, uninstallCompletion } = require('./completion');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Run the CLI program
|
|
20
|
+
*/
|
|
21
|
+
function run() {
|
|
22
|
+
program
|
|
23
|
+
.name('dev')
|
|
24
|
+
.description('CLI toolkit for bootstrapping development environments')
|
|
25
|
+
.version(pkg.version, '-v, --version', 'Display version number');
|
|
26
|
+
|
|
27
|
+
// Global options
|
|
28
|
+
program
|
|
29
|
+
.option('--verbose', 'Enable verbose output')
|
|
30
|
+
.option('-q, --quiet', 'Suppress non-essential output')
|
|
31
|
+
.option('--no-color', 'Disable colored output');
|
|
32
|
+
|
|
33
|
+
// Add commands
|
|
34
|
+
program.addCommand(configureCommand);
|
|
35
|
+
program.addCommand(statusCommand);
|
|
36
|
+
program.addCommand(identityCommand);
|
|
37
|
+
program.addCommand(ignoreCommand);
|
|
38
|
+
program.addCommand(installCommand);
|
|
39
|
+
|
|
40
|
+
// Setup command - install essential tools
|
|
41
|
+
const setupCommand = require('./commands/setup');
|
|
42
|
+
program.addCommand(setupCommand);
|
|
43
|
+
|
|
44
|
+
// Completion management
|
|
45
|
+
const completion = program
|
|
46
|
+
.command('completion')
|
|
47
|
+
.description('Manage shell tab completion');
|
|
48
|
+
|
|
49
|
+
completion
|
|
50
|
+
.command('install')
|
|
51
|
+
.description('Install tab completion for your shell')
|
|
52
|
+
.action(installCompletion);
|
|
53
|
+
|
|
54
|
+
completion
|
|
55
|
+
.command('uninstall')
|
|
56
|
+
.description('Remove tab completion')
|
|
57
|
+
.action(uninstallCompletion);
|
|
58
|
+
|
|
59
|
+
// Parse and execute
|
|
60
|
+
program.parse(process.argv);
|
|
61
|
+
|
|
62
|
+
// If no command specified, show help
|
|
63
|
+
if (process.argv.length === 2) {
|
|
64
|
+
program.help();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = { run };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Commands
|
|
2
|
+
|
|
3
|
+
This folder contains the implementation logic for **Commands** — multi-word CLI operations invoked with the `dev` prefix.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
dev <action> [subcommand] [arguments] [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Examples
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
dev configure # Configure developer profile
|
|
15
|
+
dev status # Show current configuration
|
|
16
|
+
dev install vscode # Install VS Code
|
|
17
|
+
dev ignore node # Add Node.js patterns to .gitignore
|
|
18
|
+
dev identity add # Add a new identity profile
|
|
19
|
+
dev identity remove # Remove an identity profile
|
|
20
|
+
dev identity link # Link identity to a source folder
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Files
|
|
24
|
+
|
|
25
|
+
| File | Command | Description |
|
|
26
|
+
|------|---------|-------------|
|
|
27
|
+
| `configure.js` | `dev configure` | Interactive configuration wizard |
|
|
28
|
+
| `status.js` | `dev status` | Display current configuration |
|
|
29
|
+
| `install.js` | `dev install <name>` | Install development tools |
|
|
30
|
+
| `ignore.js` | `dev ignore <technology>` | Append patterns to .gitignore |
|
|
31
|
+
| `identity.js` | `dev identity <action>` | Manage identity profiles (add, remove, link) |
|
|
32
|
+
|
|
33
|
+
## Related
|
|
34
|
+
|
|
35
|
+
- **Scripts** (`../scripts/`) — Standalone global utilities (e.g., `afk`, `clone`)
|
|
36
|
+
- **Installs** (`../installs/`) — Platform-specific installation logic
|
|
37
|
+
- **Utils** (`../utils/`) — Internal shared utilities
|
|
38
|
+
|
|
39
|
+
## Documentation
|
|
40
|
+
|
|
41
|
+
See [docs/COMMANDS.md](../../docs/COMMANDS.md) for the complete command specification.
|