@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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Configure command - Create the initial .devutils configuration
|
|
5
|
+
* file with user information.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { Command } = require('commander');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const readline = require('readline');
|
|
12
|
+
|
|
13
|
+
const CONFIG_FILE = path.join(process.env.HOME || process.env.USERPROFILE, '.devutils');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create readline interface for prompts
|
|
17
|
+
* @returns {readline.Interface}
|
|
18
|
+
*/
|
|
19
|
+
function createPrompt() {
|
|
20
|
+
return readline.createInterface({
|
|
21
|
+
input: process.stdin,
|
|
22
|
+
output: process.stdout
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Prompt user for input
|
|
28
|
+
* @param {readline.Interface} rl - Readline interface
|
|
29
|
+
* @param {string} question - Question to ask
|
|
30
|
+
* @param {string} [defaultValue] - Default value if empty
|
|
31
|
+
* @returns {Promise<string>}
|
|
32
|
+
*/
|
|
33
|
+
function ask(rl, question, defaultValue) {
|
|
34
|
+
return new Promise(resolve => {
|
|
35
|
+
const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
|
|
36
|
+
rl.question(prompt, answer => {
|
|
37
|
+
resolve(answer.trim() || defaultValue || '');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Prompt user for confirmation
|
|
44
|
+
* @param {readline.Interface} rl - Readline interface
|
|
45
|
+
* @param {string} question - Question to ask
|
|
46
|
+
* @returns {Promise<boolean>}
|
|
47
|
+
*/
|
|
48
|
+
function confirm(rl, question) {
|
|
49
|
+
return new Promise(resolve => {
|
|
50
|
+
rl.question(`${question} (y/n): `, answer => {
|
|
51
|
+
resolve(answer.toLowerCase().startsWith('y'));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Load existing configuration
|
|
58
|
+
* @returns {object|null}
|
|
59
|
+
*/
|
|
60
|
+
function loadConfig() {
|
|
61
|
+
try {
|
|
62
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
63
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf8');
|
|
64
|
+
return JSON.parse(content);
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
// Invalid JSON or read error
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Save configuration to file
|
|
74
|
+
* @param {object} config - Configuration object
|
|
75
|
+
*/
|
|
76
|
+
function saveConfig(config) {
|
|
77
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Display current configuration
|
|
82
|
+
* @param {object} config - Configuration object
|
|
83
|
+
*/
|
|
84
|
+
function displayConfig(config) {
|
|
85
|
+
console.log('\nCurrent Configuration:');
|
|
86
|
+
console.log('─'.repeat(40));
|
|
87
|
+
|
|
88
|
+
if (config.user) {
|
|
89
|
+
console.log('User:');
|
|
90
|
+
console.log(` Name: ${config.user.name || '(not set)'}`);
|
|
91
|
+
console.log(` Email: ${config.user.email || '(not set)'}`);
|
|
92
|
+
console.log(` URL: ${config.user.url || '(not set)'}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log('\nConfig file:', CONFIG_FILE);
|
|
96
|
+
if (config.created) {
|
|
97
|
+
console.log(`Created: ${new Date(config.created).toLocaleString()}`);
|
|
98
|
+
}
|
|
99
|
+
if (config.updated) {
|
|
100
|
+
console.log(`Updated: ${new Date(config.updated).toLocaleString()}`);
|
|
101
|
+
}
|
|
102
|
+
console.log('');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Run the configure command
|
|
107
|
+
* @param {object} options - Command options
|
|
108
|
+
*/
|
|
109
|
+
async function runConfigure(options) {
|
|
110
|
+
const existingConfig = loadConfig();
|
|
111
|
+
|
|
112
|
+
// Show existing config if requested
|
|
113
|
+
if (options.show) {
|
|
114
|
+
if (existingConfig) {
|
|
115
|
+
displayConfig(existingConfig);
|
|
116
|
+
} else {
|
|
117
|
+
console.log('\nNo configuration found.');
|
|
118
|
+
console.log(`Run 'dev configure' to create ${CONFIG_FILE}\n`);
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let name = options.name;
|
|
124
|
+
let email = options.email;
|
|
125
|
+
let url = options.url;
|
|
126
|
+
|
|
127
|
+
// If all required params provided via CLI, skip interactive mode
|
|
128
|
+
const hasAllRequired = name && email;
|
|
129
|
+
|
|
130
|
+
if (!hasAllRequired) {
|
|
131
|
+
// Check for existing config
|
|
132
|
+
if (existingConfig && !options.force) {
|
|
133
|
+
console.log('\nExisting configuration found:');
|
|
134
|
+
displayConfig(existingConfig);
|
|
135
|
+
|
|
136
|
+
const rl = createPrompt();
|
|
137
|
+
const shouldUpdate = await confirm(rl, 'Do you want to update this configuration?');
|
|
138
|
+
rl.close();
|
|
139
|
+
|
|
140
|
+
if (!shouldUpdate) {
|
|
141
|
+
console.log('Configuration unchanged.');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const rl = createPrompt();
|
|
147
|
+
|
|
148
|
+
console.log('\n--- Developer Profile Setup ---\n');
|
|
149
|
+
|
|
150
|
+
// Get user information (use CLI args as defaults if provided)
|
|
151
|
+
name = await ask(rl, 'Name (required)', name || existingConfig?.user?.name);
|
|
152
|
+
if (!name) {
|
|
153
|
+
console.error('\nError: Name is required.');
|
|
154
|
+
rl.close();
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
email = await ask(rl, 'Email (required)', email || existingConfig?.user?.email);
|
|
159
|
+
if (!email) {
|
|
160
|
+
console.error('\nError: Email is required.');
|
|
161
|
+
rl.close();
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
url = await ask(rl, 'URL (optional)', url || existingConfig?.user?.url);
|
|
166
|
+
|
|
167
|
+
rl.close();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Build config object
|
|
171
|
+
const now = new Date().toISOString();
|
|
172
|
+
const config = {
|
|
173
|
+
user: {
|
|
174
|
+
name,
|
|
175
|
+
email,
|
|
176
|
+
...(url && { url })
|
|
177
|
+
},
|
|
178
|
+
created: existingConfig?.created || now,
|
|
179
|
+
updated: now
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// Save configuration
|
|
183
|
+
saveConfig(config);
|
|
184
|
+
|
|
185
|
+
console.log(`\nConfiguration saved to ${CONFIG_FILE}`);
|
|
186
|
+
displayConfig(config);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Create and configure the command
|
|
190
|
+
const configure = new Command('configure')
|
|
191
|
+
.description('Configure developer profile and create ~/.devutils')
|
|
192
|
+
.option('--name <name>', 'Developer name')
|
|
193
|
+
.option('--email <email>', 'Developer email')
|
|
194
|
+
.option('--url <url>', 'Developer URL (optional)')
|
|
195
|
+
.option('--force', 'Overwrite existing config without prompting')
|
|
196
|
+
.option('-s, --show', 'Display current configuration')
|
|
197
|
+
.action(runConfigure);
|
|
198
|
+
|
|
199
|
+
module.exports = configure;
|