@fredlackey/devutils 0.0.1 → 0.0.3

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 (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
package/src/scripts/dp.js CHANGED
@@ -1,23 +1,442 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * @fileoverview Display running Docker containers in formatted table.
4
+ * dp - Display running Docker containers in formatted table
5
+ *
6
+ * Migrated from legacy dotfiles alias.
7
+ * Original:
8
+ * dp() {
9
+ * if ! command -v docker &> /dev/null; then
10
+ * echo "Docker is not currently installed."
11
+ * return 1
12
+ * fi
13
+ * docker ps --format '{{.ID}}\t{{.Names}}\t{{.Ports}}'
14
+ * }
15
+ *
16
+ * Also found as alias:
17
+ * alias dp="docker ps --format '{{.ID}}\t{{.Names}}\t{{.Ports}}'"
18
+ *
19
+ * This script displays running Docker containers in a clean, formatted table
20
+ * showing the container ID, name, and port mappings. It's a quick way to see
21
+ * what containers are currently running without the extra columns of `docker ps`.
22
+ *
5
23
  * @module scripts/dp
6
24
  */
7
25
 
26
+ const os = require('../utils/common/os');
27
+ const { execSync, spawnSync } = require('child_process');
28
+
29
+ /**
30
+ * Helper function to check if a command exists on the system.
31
+ * Used to detect if Docker is installed before attempting to use it.
32
+ *
33
+ * @param {string} cmd - The command name to check
34
+ * @returns {boolean} True if the command exists, false otherwise
35
+ */
36
+ function isCommandAvailable(cmd) {
37
+ try {
38
+ // Use 'which' on Unix-like systems, 'where' on Windows
39
+ const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`;
40
+ execSync(checkCmd, { stdio: 'ignore' });
41
+ return true;
42
+ } catch {
43
+ return false;
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Pure Node.js implementation - NOT APPLICABLE for this script.
49
+ *
50
+ * Docker commands require the Docker CLI, which is a system-level tool.
51
+ * There is no pure Node.js way to query Docker containers without shelling
52
+ * out to the Docker CLI or using a Docker SDK library.
53
+ *
54
+ * While Docker does have a REST API that could theoretically be called
55
+ * via Node.js fetch(), it requires knowing the Docker socket location
56
+ * and handling Unix socket connections, which varies by platform.
57
+ * Using the Docker CLI is the most reliable and consistent approach.
58
+ *
59
+ * @param {string[]} args - Command line arguments (unused)
60
+ * @returns {Promise<void>}
61
+ * @throws {Error} Always throws - this function should not be called directly
62
+ */
63
+ async function do_dp_nodejs(args) {
64
+ // Docker CLI interaction cannot be done in pure Node.js.
65
+ // The Docker CLI is the standard interface for container management.
66
+ throw new Error(
67
+ 'do_dp_nodejs should not be called directly. ' +
68
+ 'Docker CLI commands require system-level execution.'
69
+ );
70
+ }
71
+
72
+ /**
73
+ * Display running Docker containers on macOS.
74
+ *
75
+ * macOS uses Docker Desktop or Docker installed via Homebrew.
76
+ * The docker CLI command works the same as on Linux.
77
+ *
78
+ * @param {string[]} args - Command line arguments (unused)
79
+ * @returns {Promise<void>}
80
+ */
81
+ async function do_dp_macos(args) {
82
+ // Check if Docker is installed
83
+ if (!isCommandAvailable('docker')) {
84
+ console.error('Docker is not currently installed.');
85
+ console.error('');
86
+ console.error('Install Docker Desktop for macOS:');
87
+ console.error(' brew install --cask docker');
88
+ console.error('');
89
+ console.error('Or download from: https://www.docker.com/products/docker-desktop');
90
+ process.exit(1);
91
+ }
92
+
93
+ try {
94
+ // Execute docker ps with custom format showing ID, Name, and Ports
95
+ // Using spawnSync for better handling of the output format
96
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
97
+ stdio: 'inherit',
98
+ encoding: 'utf8'
99
+ });
100
+
101
+ if (result.status !== 0) {
102
+ // If Docker daemon is not running, provide helpful message
103
+ console.error('');
104
+ console.error('Error: Could not connect to Docker daemon.');
105
+ console.error('Make sure Docker Desktop is running.');
106
+ process.exit(1);
107
+ }
108
+ } catch (error) {
109
+ console.error('Error executing docker command:', error.message);
110
+ process.exit(1);
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Display running Docker containers on Ubuntu.
116
+ *
117
+ * Ubuntu can have Docker installed via apt, snap, or Docker's official repo.
118
+ * The docker CLI command works the same across all installation methods.
119
+ *
120
+ * @param {string[]} args - Command line arguments (unused)
121
+ * @returns {Promise<void>}
122
+ */
123
+ async function do_dp_ubuntu(args) {
124
+ // Check if Docker is installed
125
+ if (!isCommandAvailable('docker')) {
126
+ console.error('Docker is not currently installed.');
127
+ console.error('');
128
+ console.error('Install Docker on Ubuntu:');
129
+ console.error(' sudo apt update');
130
+ console.error(' sudo apt install docker.io');
131
+ console.error('');
132
+ console.error('Or use the official Docker repository:');
133
+ console.error(' https://docs.docker.com/engine/install/ubuntu/');
134
+ process.exit(1);
135
+ }
136
+
137
+ try {
138
+ // Execute docker ps with custom format showing ID, Name, and Ports
139
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
140
+ stdio: 'inherit',
141
+ encoding: 'utf8'
142
+ });
143
+
144
+ if (result.status !== 0) {
145
+ // If Docker daemon is not running or user lacks permissions
146
+ console.error('');
147
+ console.error('Error: Could not connect to Docker daemon.');
148
+ console.error('');
149
+ console.error('Make sure Docker is running:');
150
+ console.error(' sudo systemctl start docker');
151
+ console.error('');
152
+ console.error('To run docker without sudo, add your user to the docker group:');
153
+ console.error(' sudo usermod -aG docker $USER');
154
+ console.error(' (Log out and back in for this to take effect)');
155
+ process.exit(1);
156
+ }
157
+ } catch (error) {
158
+ console.error('Error executing docker command:', error.message);
159
+ process.exit(1);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Display running Docker containers on Raspberry Pi OS.
165
+ *
166
+ * Raspberry Pi OS is Debian-based, so Docker installation and usage
167
+ * is similar to Ubuntu/Debian.
168
+ *
169
+ * @param {string[]} args - Command line arguments (unused)
170
+ * @returns {Promise<void>}
171
+ */
172
+ async function do_dp_raspbian(args) {
173
+ // Check if Docker is installed
174
+ if (!isCommandAvailable('docker')) {
175
+ console.error('Docker is not currently installed.');
176
+ console.error('');
177
+ console.error('Install Docker on Raspberry Pi OS:');
178
+ console.error(' curl -fsSL https://get.docker.com -o get-docker.sh');
179
+ console.error(' sudo sh get-docker.sh');
180
+ console.error(' sudo usermod -aG docker $USER');
181
+ process.exit(1);
182
+ }
183
+
184
+ try {
185
+ // Execute docker ps with custom format showing ID, Name, and Ports
186
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
187
+ stdio: 'inherit',
188
+ encoding: 'utf8'
189
+ });
190
+
191
+ if (result.status !== 0) {
192
+ console.error('');
193
+ console.error('Error: Could not connect to Docker daemon.');
194
+ console.error('');
195
+ console.error('Make sure Docker is running:');
196
+ console.error(' sudo systemctl start docker');
197
+ console.error('');
198
+ console.error('To run docker without sudo, add your user to the docker group:');
199
+ console.error(' sudo usermod -aG docker $USER');
200
+ process.exit(1);
201
+ }
202
+ } catch (error) {
203
+ console.error('Error executing docker command:', error.message);
204
+ process.exit(1);
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Display running Docker containers on Amazon Linux.
210
+ *
211
+ * Amazon Linux typically has Docker available in its package repository.
212
+ * It uses dnf (Amazon Linux 2023) or yum (Amazon Linux 2) for installation.
213
+ *
214
+ * @param {string[]} args - Command line arguments (unused)
215
+ * @returns {Promise<void>}
216
+ */
217
+ async function do_dp_amazon_linux(args) {
218
+ // Check if Docker is installed
219
+ if (!isCommandAvailable('docker')) {
220
+ console.error('Docker is not currently installed.');
221
+ console.error('');
222
+ console.error('Install Docker on Amazon Linux:');
223
+ console.error(' sudo yum install docker -y');
224
+ console.error(' sudo systemctl start docker');
225
+ console.error(' sudo usermod -aG docker $USER');
226
+ process.exit(1);
227
+ }
228
+
229
+ try {
230
+ // Execute docker ps with custom format showing ID, Name, and Ports
231
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
232
+ stdio: 'inherit',
233
+ encoding: 'utf8'
234
+ });
235
+
236
+ if (result.status !== 0) {
237
+ console.error('');
238
+ console.error('Error: Could not connect to Docker daemon.');
239
+ console.error('');
240
+ console.error('Make sure Docker is running:');
241
+ console.error(' sudo systemctl start docker');
242
+ console.error('');
243
+ console.error('To run docker without sudo, add your user to the docker group:');
244
+ console.error(' sudo usermod -aG docker $USER');
245
+ process.exit(1);
246
+ }
247
+ } catch (error) {
248
+ console.error('Error executing docker command:', error.message);
249
+ process.exit(1);
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Display running Docker containers on Windows Command Prompt.
255
+ *
256
+ * Windows uses Docker Desktop, which provides the docker CLI.
257
+ * The command syntax is the same as Unix systems.
258
+ *
259
+ * @param {string[]} args - Command line arguments (unused)
260
+ * @returns {Promise<void>}
261
+ */
262
+ async function do_dp_cmd(args) {
263
+ // Check if Docker is installed
264
+ if (!isCommandAvailable('docker')) {
265
+ console.error('Docker is not currently installed.');
266
+ console.error('');
267
+ console.error('Install Docker Desktop for Windows:');
268
+ console.error(' winget install Docker.DockerDesktop');
269
+ console.error('');
270
+ console.error('Or download from: https://www.docker.com/products/docker-desktop');
271
+ process.exit(1);
272
+ }
273
+
274
+ try {
275
+ // Execute docker ps with custom format showing ID, Name, and Ports
276
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
277
+ stdio: 'inherit',
278
+ encoding: 'utf8',
279
+ shell: true // Use shell on Windows for proper command resolution
280
+ });
281
+
282
+ if (result.status !== 0) {
283
+ console.error('');
284
+ console.error('Error: Could not connect to Docker daemon.');
285
+ console.error('Make sure Docker Desktop is running.');
286
+ process.exit(1);
287
+ }
288
+ } catch (error) {
289
+ console.error('Error executing docker command:', error.message);
290
+ process.exit(1);
291
+ }
292
+ }
293
+
8
294
  /**
9
- * Displays a formatted table of running Docker containers
10
- * showing ID, name, and port mappings.
295
+ * Display running Docker containers on Windows PowerShell.
296
+ *
297
+ * PowerShell uses the same Docker CLI as Command Prompt.
298
+ * Docker Desktop must be running for commands to work.
11
299
  *
12
300
  * @param {string[]} args - Command line arguments (unused)
13
301
  * @returns {Promise<void>}
14
302
  */
15
- async function main(args) {
16
- // TODO: Implement Docker container listing
303
+ async function do_dp_powershell(args) {
304
+ // Check if Docker is installed
305
+ if (!isCommandAvailable('docker')) {
306
+ console.error('Docker is not currently installed.');
307
+ console.error('');
308
+ console.error('Install Docker Desktop for Windows:');
309
+ console.error(' winget install Docker.DockerDesktop');
310
+ console.error('');
311
+ console.error('Or download from: https://www.docker.com/products/docker-desktop');
312
+ process.exit(1);
313
+ }
314
+
315
+ try {
316
+ // Execute docker ps with custom format showing ID, Name, and Ports
317
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
318
+ stdio: 'inherit',
319
+ encoding: 'utf8',
320
+ shell: true // Use shell on Windows for proper command resolution
321
+ });
322
+
323
+ if (result.status !== 0) {
324
+ console.error('');
325
+ console.error('Error: Could not connect to Docker daemon.');
326
+ console.error('Make sure Docker Desktop is running.');
327
+ process.exit(1);
328
+ }
329
+ } catch (error) {
330
+ console.error('Error executing docker command:', error.message);
331
+ process.exit(1);
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Display running Docker containers on Git Bash.
337
+ *
338
+ * Git Bash runs on Windows and can access the Docker CLI
339
+ * provided by Docker Desktop.
340
+ *
341
+ * @param {string[]} args - Command line arguments (unused)
342
+ * @returns {Promise<void>}
343
+ */
344
+ async function do_dp_gitbash(args) {
345
+ // Check if Docker is installed
346
+ if (!isCommandAvailable('docker')) {
347
+ console.error('Docker is not currently installed.');
348
+ console.error('');
349
+ console.error('Install Docker Desktop for Windows:');
350
+ console.error(' https://www.docker.com/products/docker-desktop');
351
+ console.error('');
352
+ console.error('Make sure Docker is in your PATH after installation.');
353
+ process.exit(1);
354
+ }
355
+
356
+ try {
357
+ // Execute docker ps with custom format showing ID, Name, and Ports
358
+ const result = spawnSync('docker', ['ps', '--format', '{{.ID}}\t{{.Names}}\t{{.Ports}}'], {
359
+ stdio: 'inherit',
360
+ encoding: 'utf8'
361
+ });
362
+
363
+ if (result.status !== 0) {
364
+ console.error('');
365
+ console.error('Error: Could not connect to Docker daemon.');
366
+ console.error('Make sure Docker Desktop is running.');
367
+ process.exit(1);
368
+ }
369
+ } catch (error) {
370
+ console.error('Error executing docker command:', error.message);
371
+ process.exit(1);
372
+ }
373
+ }
374
+
375
+ /**
376
+ * Main entry point - detects environment and executes appropriate implementation.
377
+ *
378
+ * The "dp" (Docker Process) command displays running Docker containers in a
379
+ * formatted table showing container ID, name, and port mappings. This provides
380
+ * a quick, clean view of what's running without the extra columns from `docker ps`.
381
+ *
382
+ * The output format is:
383
+ * CONTAINER_ID CONTAINER_NAME PORT_MAPPINGS
384
+ *
385
+ * Example output:
386
+ * abc123def456 my-nginx 0.0.0.0:80->80/tcp
387
+ * 789ghi012jkl my-redis 0.0.0.0:6379->6379/tcp
388
+ *
389
+ * @param {string[]} args - Command line arguments (unused, but could be extended)
390
+ * @returns {Promise<void>}
391
+ */
392
+ async function do_dp(args) {
393
+ const platform = os.detect();
394
+
395
+ const handlers = {
396
+ 'macos': do_dp_macos,
397
+ 'ubuntu': do_dp_ubuntu,
398
+ 'debian': do_dp_ubuntu,
399
+ 'raspbian': do_dp_raspbian,
400
+ 'amazon_linux': do_dp_amazon_linux,
401
+ 'rhel': do_dp_amazon_linux,
402
+ 'fedora': do_dp_ubuntu,
403
+ 'linux': do_dp_ubuntu,
404
+ 'wsl': do_dp_ubuntu,
405
+ 'cmd': do_dp_cmd,
406
+ 'windows': do_dp_cmd,
407
+ 'powershell': do_dp_powershell,
408
+ 'gitbash': do_dp_gitbash
409
+ };
410
+
411
+ const handler = handlers[platform.type];
412
+ if (!handler) {
413
+ console.error(`Platform '${platform.type}' is not supported for this command.`);
414
+ console.error('');
415
+ console.error('Supported platforms:');
416
+ console.error(' - macOS');
417
+ console.error(' - Ubuntu, Debian, and other Linux distributions');
418
+ console.error(' - Raspberry Pi OS');
419
+ console.error(' - Amazon Linux');
420
+ console.error(' - Windows (CMD, PowerShell, Git Bash)');
421
+ process.exit(1);
422
+ }
423
+
424
+ await handler(args);
17
425
  }
18
426
 
19
- module.exports = { main };
427
+ module.exports = {
428
+ main: do_dp,
429
+ do_dp,
430
+ do_dp_nodejs,
431
+ do_dp_macos,
432
+ do_dp_ubuntu,
433
+ do_dp_raspbian,
434
+ do_dp_amazon_linux,
435
+ do_dp_cmd,
436
+ do_dp_powershell,
437
+ do_dp_gitbash
438
+ };
20
439
 
21
440
  if (require.main === module) {
22
- main(process.argv.slice(2));
441
+ do_dp(process.argv.slice(2));
23
442
  }