@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.
Files changed (200) hide show
  1. package/README.md +156 -0
  2. package/bin/dev.js +16 -0
  3. package/files/README.md +0 -0
  4. package/files/claude/.claude/commands/setup-context.md +3 -0
  5. package/files/monorepos/_archive/README.md +36 -0
  6. package/files/monorepos/_legacy/README.md +36 -0
  7. package/files/monorepos/ai-docs/README.md +33 -0
  8. package/files/monorepos/apps/README.md +24 -0
  9. package/files/monorepos/docs/README.md +40 -0
  10. package/files/monorepos/packages/README.md +25 -0
  11. package/files/monorepos/research/README.md +29 -0
  12. package/files/monorepos/scripts/README.md +24 -0
  13. package/package.json +39 -0
  14. package/src/cli.js +68 -0
  15. package/src/commands/README.md +41 -0
  16. package/src/commands/configure.js +199 -0
  17. package/src/commands/identity.js +1630 -0
  18. package/src/commands/ignore.js +247 -0
  19. package/src/commands/install.js +173 -0
  20. package/src/commands/setup.js +212 -0
  21. package/src/commands/status.js +223 -0
  22. package/src/completion.js +284 -0
  23. package/src/constants.js +45 -0
  24. package/src/ignore/claude-code.txt +10 -0
  25. package/src/ignore/docker.txt +18 -0
  26. package/src/ignore/linux.txt +23 -0
  27. package/src/ignore/macos.txt +36 -0
  28. package/src/ignore/node.txt +55 -0
  29. package/src/ignore/terraform.txt +37 -0
  30. package/src/ignore/vscode.txt +18 -0
  31. package/src/ignore/windows.txt +35 -0
  32. package/src/index.js +0 -0
  33. package/src/installs/README.md +399 -0
  34. package/src/installs/adobe-creative-cloud.js +44 -0
  35. package/src/installs/appcleaner.js +44 -0
  36. package/src/installs/atomicparsley.js +44 -0
  37. package/src/installs/aws-cli.js +44 -0
  38. package/src/installs/balena-etcher.js +44 -0
  39. package/src/installs/bambu-studio.js +44 -0
  40. package/src/installs/bash-completion.js +44 -0
  41. package/src/installs/bash.js +44 -0
  42. package/src/installs/beyond-compare.js +44 -0
  43. package/src/installs/build-essential.js +44 -0
  44. package/src/installs/caffeine.js +44 -0
  45. package/src/installs/camtasia.js +44 -0
  46. package/src/installs/chatgpt.js +44 -0
  47. package/src/installs/chrome-canary.js +44 -0
  48. package/src/installs/chromium.js +44 -0
  49. package/src/installs/claude-code.js +44 -0
  50. package/src/installs/curl.js +44 -0
  51. package/src/installs/cursor.js +44 -0
  52. package/src/installs/dbschema.js +44 -0
  53. package/src/installs/docker.js +44 -0
  54. package/src/installs/drawio.js +44 -0
  55. package/src/installs/elmedia-player.js +44 -0
  56. package/src/installs/ffmpeg.js +44 -0
  57. package/src/installs/gemini-cli.js +44 -0
  58. package/src/installs/git.js +44 -0
  59. package/src/installs/gitego.js +44 -0
  60. package/src/installs/go.js +44 -0
  61. package/src/installs/google-chrome.js +44 -0
  62. package/src/installs/gpg.js +141 -0
  63. package/src/installs/homebrew.js +44 -0
  64. package/src/installs/imageoptim.js +44 -0
  65. package/src/installs/jq.js +44 -0
  66. package/src/installs/keyboard-maestro.js +44 -0
  67. package/src/installs/latex.js +44 -0
  68. package/src/installs/lftp.js +44 -0
  69. package/src/installs/messenger.js +44 -0
  70. package/src/installs/microsoft-office.js +44 -0
  71. package/src/installs/microsoft-teams.js +44 -0
  72. package/src/installs/node.js +44 -0
  73. package/src/installs/nordpass.js +44 -0
  74. package/src/installs/nvm.js +44 -0
  75. package/src/installs/openssh.js +134 -0
  76. package/src/installs/pandoc.js +44 -0
  77. package/src/installs/pinentry.js +44 -0
  78. package/src/installs/pngyu.js +44 -0
  79. package/src/installs/postman.js +44 -0
  80. package/src/installs/safari-tech-preview.js +44 -0
  81. package/src/installs/sfnt2woff.js +44 -0
  82. package/src/installs/shellcheck.js +44 -0
  83. package/src/installs/slack.js +44 -0
  84. package/src/installs/snagit.js +44 -0
  85. package/src/installs/spotify.js +44 -0
  86. package/src/installs/studio-3t.js +44 -0
  87. package/src/installs/sublime-text.js +44 -0
  88. package/src/installs/superwhisper.js +44 -0
  89. package/src/installs/tailscale.js +44 -0
  90. package/src/installs/termius.js +44 -0
  91. package/src/installs/terraform.js +44 -0
  92. package/src/installs/tidal.js +44 -0
  93. package/src/installs/tmux.js +44 -0
  94. package/src/installs/tree.js +44 -0
  95. package/src/installs/vim.js +44 -0
  96. package/src/installs/vlc.js +44 -0
  97. package/src/installs/vscode.js +44 -0
  98. package/src/installs/whatsapp.js +44 -0
  99. package/src/installs/woff2.js +44 -0
  100. package/src/installs/xcode.js +44 -0
  101. package/src/installs/yarn.js +44 -0
  102. package/src/installs/yq.js +44 -0
  103. package/src/installs/yt-dlp.js +44 -0
  104. package/src/installs/zoom.js +44 -0
  105. package/src/scripts/README.md +95 -0
  106. package/src/scripts/afk.js +23 -0
  107. package/src/scripts/backup-all.js +24 -0
  108. package/src/scripts/backup-source.js +24 -0
  109. package/src/scripts/brewd.js +23 -0
  110. package/src/scripts/brewi.js +24 -0
  111. package/src/scripts/brewr.js +24 -0
  112. package/src/scripts/brews.js +24 -0
  113. package/src/scripts/brewu.js +23 -0
  114. package/src/scripts/c.js +23 -0
  115. package/src/scripts/ccurl.js +24 -0
  116. package/src/scripts/certbot-crontab-init.js +24 -0
  117. package/src/scripts/certbot-init.js +25 -0
  118. package/src/scripts/ch.js +23 -0
  119. package/src/scripts/claude-danger.js +23 -0
  120. package/src/scripts/clean-dev.js +24 -0
  121. package/src/scripts/clear-dns-cache.js +23 -0
  122. package/src/scripts/clone.js +25 -0
  123. package/src/scripts/code-all.js +24 -0
  124. package/src/scripts/count-files.js +24 -0
  125. package/src/scripts/count-folders.js +24 -0
  126. package/src/scripts/count.js +24 -0
  127. package/src/scripts/d.js +23 -0
  128. package/src/scripts/datauri.js +24 -0
  129. package/src/scripts/delete-files.js +24 -0
  130. package/src/scripts/docker-clean.js +24 -0
  131. package/src/scripts/dp.js +23 -0
  132. package/src/scripts/e.js +24 -0
  133. package/src/scripts/empty-trash.js +23 -0
  134. package/src/scripts/evm.js +25 -0
  135. package/src/scripts/fetch-github-repos.js +25 -0
  136. package/src/scripts/get-channel.js +24 -0
  137. package/src/scripts/get-course.js +26 -0
  138. package/src/scripts/get-dependencies.js +25 -0
  139. package/src/scripts/get-folder.js +26 -0
  140. package/src/scripts/get-tunes.js +25 -0
  141. package/src/scripts/get-video.js +24 -0
  142. package/src/scripts/git-backup.js +25 -0
  143. package/src/scripts/git-clone.js +25 -0
  144. package/src/scripts/git-pup.js +23 -0
  145. package/src/scripts/git-push.js +24 -0
  146. package/src/scripts/h.js +24 -0
  147. package/src/scripts/hide-desktop-icons.js +23 -0
  148. package/src/scripts/hide-hidden-files.js +23 -0
  149. package/src/scripts/install-dependencies-from.js +25 -0
  150. package/src/scripts/ips.js +26 -0
  151. package/src/scripts/iso.js +24 -0
  152. package/src/scripts/killni.js +23 -0
  153. package/src/scripts/ll.js +24 -0
  154. package/src/scripts/local-ip.js +23 -0
  155. package/src/scripts/m.js +24 -0
  156. package/src/scripts/map.js +24 -0
  157. package/src/scripts/mkd.js +24 -0
  158. package/src/scripts/ncu-update-all.js +24 -0
  159. package/src/scripts/nginx-init.js +28 -0
  160. package/src/scripts/npmi.js +23 -0
  161. package/src/scripts/o.js +24 -0
  162. package/src/scripts/org-by-date.js +24 -0
  163. package/src/scripts/p.js +23 -0
  164. package/src/scripts/packages.js +25 -0
  165. package/src/scripts/path.js +23 -0
  166. package/src/scripts/ports.js +23 -0
  167. package/src/scripts/q.js +23 -0
  168. package/src/scripts/refresh-files.js +26 -0
  169. package/src/scripts/remove-smaller-files.js +24 -0
  170. package/src/scripts/rename-files-with-date.js +25 -0
  171. package/src/scripts/resize-image.js +25 -0
  172. package/src/scripts/rm-safe.js +24 -0
  173. package/src/scripts/s.js +24 -0
  174. package/src/scripts/set-git-public.js +23 -0
  175. package/src/scripts/show-desktop-icons.js +23 -0
  176. package/src/scripts/show-hidden-files.js +23 -0
  177. package/src/scripts/tpa.js +23 -0
  178. package/src/scripts/tpo.js +23 -0
  179. package/src/scripts/u.js +23 -0
  180. package/src/scripts/vpush.js +23 -0
  181. package/src/scripts/y.js +23 -0
  182. package/src/utils/README.md +95 -0
  183. package/src/utils/common/apps.js +143 -0
  184. package/src/utils/common/display.js +157 -0
  185. package/src/utils/common/network.js +185 -0
  186. package/src/utils/common/os.js +202 -0
  187. package/src/utils/common/package-manager.js +301 -0
  188. package/src/utils/common/privileges.js +138 -0
  189. package/src/utils/common/shell.js +195 -0
  190. package/src/utils/macos/apps.js +228 -0
  191. package/src/utils/macos/brew.js +315 -0
  192. package/src/utils/ubuntu/apt.js +301 -0
  193. package/src/utils/ubuntu/desktop.js +292 -0
  194. package/src/utils/ubuntu/snap.js +302 -0
  195. package/src/utils/ubuntu/systemd.js +286 -0
  196. package/src/utils/windows/choco.js +327 -0
  197. package/src/utils/windows/env.js +246 -0
  198. package/src/utils/windows/registry.js +269 -0
  199. package/src/utils/windows/shell.js +240 -0
  200. 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;