@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.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Install Chocolatey - a package manager for Windows.
|
|
5
|
+
*
|
|
6
|
+
* Chocolatey is a machine-level package manager for Windows that automates
|
|
7
|
+
* the software installation, configuration, upgrade, and uninstallation
|
|
8
|
+
* process. It uses NuGet infrastructure and PowerShell to wrap installers,
|
|
9
|
+
* executables, zips, and scripts into compiled packages.
|
|
10
|
+
*
|
|
11
|
+
* Key features of Chocolatey:
|
|
12
|
+
* - Simple installation with a single command (`choco install <package>`)
|
|
13
|
+
* - Silent installations with the `-y` flag for non-interactive operation
|
|
14
|
+
* - Automatic dependency management
|
|
15
|
+
* - Enterprise-ready with integration for SCCM, Puppet, Chef, Ansible
|
|
16
|
+
* - Access to thousands of community-maintained packages at chocolatey.org
|
|
17
|
+
*
|
|
18
|
+
* IMPORTANT: Chocolatey is a Windows-only tool. It does not run on macOS,
|
|
19
|
+
* Linux, or within WSL. For those platforms, use the native package manager
|
|
20
|
+
* (Homebrew for macOS, APT for Debian/Ubuntu, DNF/YUM for RHEL).
|
|
21
|
+
*
|
|
22
|
+
* @module installs/chocolatey
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const os = require('../utils/common/os');
|
|
26
|
+
const shell = require('../utils/common/shell');
|
|
27
|
+
const windowsShell = require('../utils/windows/shell');
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The official Chocolatey installation script URL.
|
|
31
|
+
* This URL hosts the PowerShell installation script from chocolatey.org.
|
|
32
|
+
*/
|
|
33
|
+
const CHOCOLATEY_INSTALL_URL = 'https://community.chocolatey.org/install.ps1';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The default Chocolatey installation directory on Windows.
|
|
37
|
+
* This is where Chocolatey installs itself and stores packages.
|
|
38
|
+
*/
|
|
39
|
+
const CHOCOLATEY_INSTALL_PATH = 'C:\\ProgramData\\chocolatey';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Check if Chocolatey is installed by looking for the 'choco' command.
|
|
43
|
+
*
|
|
44
|
+
* This is a quick synchronous check that works on both native Windows
|
|
45
|
+
* and Git Bash environments. Returns true if the 'choco' command is
|
|
46
|
+
* available in the system PATH.
|
|
47
|
+
*
|
|
48
|
+
* @returns {boolean} True if Chocolatey is installed, false otherwise
|
|
49
|
+
*/
|
|
50
|
+
function isChocolateyInstalled() {
|
|
51
|
+
return shell.commandExists('choco');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Get the installed Chocolatey version.
|
|
56
|
+
*
|
|
57
|
+
* Executes 'choco --version' to retrieve the installed version number.
|
|
58
|
+
* Returns null if Chocolatey is not installed or if the version cannot
|
|
59
|
+
* be determined.
|
|
60
|
+
*
|
|
61
|
+
* @returns {Promise<string|null>} The version string (e.g., "2.4.1"), or null
|
|
62
|
+
*/
|
|
63
|
+
async function getChocolateyVersion() {
|
|
64
|
+
if (!isChocolateyInstalled()) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const result = await shell.exec('choco --version');
|
|
69
|
+
if (result.code === 0 && result.stdout) {
|
|
70
|
+
// Output is simply the version number, e.g., "2.4.1"
|
|
71
|
+
return result.stdout.trim();
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Install Chocolatey on macOS.
|
|
78
|
+
*
|
|
79
|
+
* Chocolatey does not run on macOS because it is built on PowerShell
|
|
80
|
+
* and the Windows ecosystem. This function gracefully informs the user
|
|
81
|
+
* that Chocolatey is not available for this platform.
|
|
82
|
+
*
|
|
83
|
+
* @returns {Promise<void>}
|
|
84
|
+
*/
|
|
85
|
+
async function install_macos() {
|
|
86
|
+
console.log('Chocolatey is not available for macOS.');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Install Chocolatey on Ubuntu/Debian.
|
|
92
|
+
*
|
|
93
|
+
* Chocolatey does not run on Linux because it is built on PowerShell
|
|
94
|
+
* and the Windows ecosystem. This function gracefully informs the user
|
|
95
|
+
* that Chocolatey is not available for this platform.
|
|
96
|
+
*
|
|
97
|
+
* @returns {Promise<void>}
|
|
98
|
+
*/
|
|
99
|
+
async function install_ubuntu() {
|
|
100
|
+
console.log('Chocolatey is not available for Ubuntu/Debian.');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Install Chocolatey on Ubuntu running in WSL.
|
|
106
|
+
*
|
|
107
|
+
* Chocolatey does not run within WSL because WSL provides a Linux
|
|
108
|
+
* environment, not a Windows environment. This function gracefully
|
|
109
|
+
* informs the user that Chocolatey is not available within WSL.
|
|
110
|
+
*
|
|
111
|
+
* Note: If the user needs Chocolatey, they should install it on the
|
|
112
|
+
* Windows host (outside of WSL) using PowerShell.
|
|
113
|
+
*
|
|
114
|
+
* @returns {Promise<void>}
|
|
115
|
+
*/
|
|
116
|
+
async function install_ubuntu_wsl() {
|
|
117
|
+
console.log('Chocolatey is not available for WSL.');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Install Chocolatey on Raspberry Pi OS.
|
|
123
|
+
*
|
|
124
|
+
* Chocolatey does not run on Linux because it is built on PowerShell
|
|
125
|
+
* and the Windows ecosystem. This function gracefully informs the user
|
|
126
|
+
* that Chocolatey is not available for this platform.
|
|
127
|
+
*
|
|
128
|
+
* @returns {Promise<void>}
|
|
129
|
+
*/
|
|
130
|
+
async function install_raspbian() {
|
|
131
|
+
console.log('Chocolatey is not available for Raspberry Pi OS.');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Install Chocolatey on Amazon Linux/RHEL.
|
|
137
|
+
*
|
|
138
|
+
* Chocolatey does not run on Linux because it is built on PowerShell
|
|
139
|
+
* and the Windows ecosystem. This function gracefully informs the user
|
|
140
|
+
* that Chocolatey is not available for this platform.
|
|
141
|
+
*
|
|
142
|
+
* @returns {Promise<void>}
|
|
143
|
+
*/
|
|
144
|
+
async function install_amazon_linux() {
|
|
145
|
+
console.log('Chocolatey is not available for Amazon Linux.');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Install Chocolatey on Windows using PowerShell.
|
|
151
|
+
*
|
|
152
|
+
* This is the primary installation method for Chocolatey. The installation
|
|
153
|
+
* process uses PowerShell to download and execute the official installation
|
|
154
|
+
* script from chocolatey.org.
|
|
155
|
+
*
|
|
156
|
+
* Prerequisites:
|
|
157
|
+
* - Windows 7 SP1 or later (Windows 10/11 recommended)
|
|
158
|
+
* - PowerShell v3 or later (comes pre-installed on Windows 10/11)
|
|
159
|
+
* - .NET Framework 4.8 (installer handles this automatically if missing)
|
|
160
|
+
* - Administrator privileges
|
|
161
|
+
*
|
|
162
|
+
* The installation command performs the following operations:
|
|
163
|
+
* 1. Temporarily sets execution policy to Bypass for the current session
|
|
164
|
+
* 2. Enables TLS 1.2 for secure HTTPS downloads
|
|
165
|
+
* 3. Downloads and executes the official Chocolatey installation script
|
|
166
|
+
*
|
|
167
|
+
* After installation, Chocolatey creates:
|
|
168
|
+
* - The C:\ProgramData\chocolatey directory structure
|
|
169
|
+
* - The ChocolateyInstall environment variable
|
|
170
|
+
* - Adds Chocolatey to the system PATH
|
|
171
|
+
*
|
|
172
|
+
* @returns {Promise<void>}
|
|
173
|
+
*/
|
|
174
|
+
async function install_windows() {
|
|
175
|
+
// Check if Chocolatey is already installed - this makes the function idempotent
|
|
176
|
+
if (isChocolateyInstalled()) {
|
|
177
|
+
const version = await getChocolateyVersion();
|
|
178
|
+
if (version) {
|
|
179
|
+
console.log(`Chocolatey ${version} is already installed, skipping...`);
|
|
180
|
+
} else {
|
|
181
|
+
console.log('Chocolatey is already installed, skipping...');
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Verify that PowerShell is available (it should be on Windows 10/11)
|
|
187
|
+
const hasPowerShell = windowsShell.hasWindowsPowerShell() || windowsShell.hasPowerShellCore();
|
|
188
|
+
if (!hasPowerShell) {
|
|
189
|
+
console.log('PowerShell is required to install Chocolatey but was not found.');
|
|
190
|
+
console.log('PowerShell should be pre-installed on Windows 10 and later.');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
console.log('Installing Chocolatey via PowerShell...');
|
|
195
|
+
console.log('');
|
|
196
|
+
console.log('This requires Administrator privileges. If this script is not running');
|
|
197
|
+
console.log('as Administrator, the installation may fail.');
|
|
198
|
+
console.log('');
|
|
199
|
+
|
|
200
|
+
// Build the PowerShell installation command
|
|
201
|
+
// This is the official installation command from https://chocolatey.org/install
|
|
202
|
+
//
|
|
203
|
+
// Breaking down the command:
|
|
204
|
+
// - Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
205
|
+
// Temporarily allows script execution for the current session only
|
|
206
|
+
// Does not permanently change the system execution policy
|
|
207
|
+
//
|
|
208
|
+
// - [System.Net.ServicePointManager]::SecurityProtocol = ... -bor 3072
|
|
209
|
+
// Enables TLS 1.2 for secure HTTPS downloads
|
|
210
|
+
// The value 3072 represents Tls12 in the SecurityProtocolType enum
|
|
211
|
+
//
|
|
212
|
+
// - iex ((New-Object System.Net.WebClient).DownloadString(...))
|
|
213
|
+
// Downloads and immediately executes the installation script
|
|
214
|
+
const installCommand = [
|
|
215
|
+
'Set-ExecutionPolicy Bypass -Scope Process -Force;',
|
|
216
|
+
'[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;',
|
|
217
|
+
`iex ((New-Object System.Net.WebClient).DownloadString('${CHOCOLATEY_INSTALL_URL}'))`
|
|
218
|
+
].join(' ');
|
|
219
|
+
|
|
220
|
+
// Execute the installation command via PowerShell
|
|
221
|
+
// We use powershell.exe (Windows PowerShell 5.x) for maximum compatibility
|
|
222
|
+
const result = await shell.exec(`powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "${installCommand}"`);
|
|
223
|
+
|
|
224
|
+
if (result.code !== 0) {
|
|
225
|
+
console.log('Failed to install Chocolatey.');
|
|
226
|
+
console.log('');
|
|
227
|
+
console.log('Common causes:');
|
|
228
|
+
console.log(' 1. Not running as Administrator');
|
|
229
|
+
console.log(' 2. Network/firewall blocking the download');
|
|
230
|
+
console.log(' 3. PowerShell execution policy restrictions');
|
|
231
|
+
console.log('');
|
|
232
|
+
console.log('To install manually, open an Administrator PowerShell and run:');
|
|
233
|
+
console.log(' Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))');
|
|
234
|
+
console.log('');
|
|
235
|
+
if (result.stderr) {
|
|
236
|
+
console.log('Error details:');
|
|
237
|
+
console.log(result.stderr);
|
|
238
|
+
}
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Verify the installation succeeded
|
|
243
|
+
// Note: The PATH may not be updated in the current session, so we check
|
|
244
|
+
// for the choco executable directly in the expected installation path
|
|
245
|
+
const verifyResult = await shell.exec(`powershell.exe -NoProfile -Command "Test-Path '${CHOCOLATEY_INSTALL_PATH}\\bin\\choco.exe'"`);
|
|
246
|
+
const isVerified = verifyResult.code === 0 && verifyResult.stdout.trim().toLowerCase() === 'true';
|
|
247
|
+
|
|
248
|
+
if (!isVerified) {
|
|
249
|
+
console.log('Installation may have failed: Chocolatey was not found after install.');
|
|
250
|
+
console.log('');
|
|
251
|
+
console.log('Please try installing manually from an Administrator PowerShell.');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
console.log('Chocolatey installed successfully.');
|
|
256
|
+
console.log('');
|
|
257
|
+
console.log('IMPORTANT: Close and reopen your terminal for PATH changes to take effect.');
|
|
258
|
+
console.log('');
|
|
259
|
+
console.log('Verify the installation by running:');
|
|
260
|
+
console.log(' choco --version');
|
|
261
|
+
console.log('');
|
|
262
|
+
console.log('Install your first package with:');
|
|
263
|
+
console.log(' choco install notepadplusplus -y');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Install Chocolatey from Git Bash on Windows.
|
|
268
|
+
*
|
|
269
|
+
* Git Bash runs on Windows, so Chocolatey can be installed on the Windows
|
|
270
|
+
* host. However, the installation must be performed via PowerShell because
|
|
271
|
+
* Git Bash cannot directly execute the PowerShell installation script.
|
|
272
|
+
*
|
|
273
|
+
* This function invokes PowerShell from Git Bash to perform the installation.
|
|
274
|
+
* After installation, Chocolatey commands will be available in Git Bash.
|
|
275
|
+
*
|
|
276
|
+
* Prerequisites:
|
|
277
|
+
* - Windows operating system with Git Bash installed
|
|
278
|
+
* - PowerShell available on the Windows host
|
|
279
|
+
* - Administrator privileges (run Git Bash as Administrator)
|
|
280
|
+
*
|
|
281
|
+
* @returns {Promise<void>}
|
|
282
|
+
*/
|
|
283
|
+
async function install_gitbash() {
|
|
284
|
+
// Check if Chocolatey is already installed - this makes the function idempotent
|
|
285
|
+
if (isChocolateyInstalled()) {
|
|
286
|
+
const version = await getChocolateyVersion();
|
|
287
|
+
if (version) {
|
|
288
|
+
console.log(`Chocolatey ${version} is already installed, skipping...`);
|
|
289
|
+
} else {
|
|
290
|
+
console.log('Chocolatey is already installed, skipping...');
|
|
291
|
+
}
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
console.log('Installing Chocolatey on the Windows host via PowerShell...');
|
|
296
|
+
console.log('');
|
|
297
|
+
console.log('This requires Administrator privileges. If Git Bash is not running');
|
|
298
|
+
console.log('as Administrator, the installation may fail.');
|
|
299
|
+
console.log('');
|
|
300
|
+
|
|
301
|
+
// Build the PowerShell installation command (same as install_windows)
|
|
302
|
+
const installCommand = [
|
|
303
|
+
'Set-ExecutionPolicy Bypass -Scope Process -Force;',
|
|
304
|
+
'[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;',
|
|
305
|
+
`iex ((New-Object System.Net.WebClient).DownloadString('${CHOCOLATEY_INSTALL_URL}'))`
|
|
306
|
+
].join(' ');
|
|
307
|
+
|
|
308
|
+
// Execute the installation command via PowerShell from Git Bash
|
|
309
|
+
// Git Bash can invoke Windows executables directly
|
|
310
|
+
const result = await shell.exec(`powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "${installCommand}"`);
|
|
311
|
+
|
|
312
|
+
if (result.code !== 0) {
|
|
313
|
+
console.log('Failed to install Chocolatey.');
|
|
314
|
+
console.log('');
|
|
315
|
+
console.log('Common causes:');
|
|
316
|
+
console.log(' 1. Git Bash not running as Administrator');
|
|
317
|
+
console.log(' 2. Network/firewall blocking the download');
|
|
318
|
+
console.log(' 3. PowerShell execution policy restrictions');
|
|
319
|
+
console.log('');
|
|
320
|
+
console.log('To install manually:');
|
|
321
|
+
console.log(' 1. Close Git Bash');
|
|
322
|
+
console.log(' 2. Open an Administrator PowerShell window');
|
|
323
|
+
console.log(' 3. Run the Chocolatey installation command');
|
|
324
|
+
console.log(' 4. Close and reopen Git Bash');
|
|
325
|
+
console.log('');
|
|
326
|
+
if (result.stderr) {
|
|
327
|
+
console.log('Error details:');
|
|
328
|
+
console.log(result.stderr);
|
|
329
|
+
}
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Verify the installation succeeded
|
|
334
|
+
const verifyResult = await shell.exec(`powershell.exe -NoProfile -Command "Test-Path '${CHOCOLATEY_INSTALL_PATH}\\bin\\choco.exe'"`);
|
|
335
|
+
const isVerified = verifyResult.code === 0 && verifyResult.stdout.trim().toLowerCase() === 'true';
|
|
336
|
+
|
|
337
|
+
if (!isVerified) {
|
|
338
|
+
console.log('Installation may have failed: Chocolatey was not found after install.');
|
|
339
|
+
console.log('');
|
|
340
|
+
console.log('Please try installing manually from an Administrator PowerShell.');
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
console.log('Chocolatey installed successfully.');
|
|
345
|
+
console.log('');
|
|
346
|
+
console.log('IMPORTANT: Close and reopen Git Bash for PATH changes to take effect.');
|
|
347
|
+
console.log('');
|
|
348
|
+
console.log('If choco is not found after reopening, add Chocolatey to your PATH:');
|
|
349
|
+
console.log(' echo \'export PATH="$PATH:/c/ProgramData/chocolatey/bin"\' >> ~/.bashrc');
|
|
350
|
+
console.log(' source ~/.bashrc');
|
|
351
|
+
console.log('');
|
|
352
|
+
console.log('Verify the installation by running:');
|
|
353
|
+
console.log(' choco --version');
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Check if Chocolatey is installed on the current platform.
|
|
358
|
+
*
|
|
359
|
+
* This function uses the internal isChocolateyInstalled helper to check if
|
|
360
|
+
* the 'choco' command exists in PATH.
|
|
361
|
+
*
|
|
362
|
+
* @returns {Promise<boolean>} True if Chocolatey is installed
|
|
363
|
+
*/
|
|
364
|
+
async function isInstalled() {
|
|
365
|
+
return isChocolateyInstalled();
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Check if this installer is supported on the current platform.
|
|
370
|
+
*
|
|
371
|
+
* Chocolatey can only be installed on:
|
|
372
|
+
* - Windows (native PowerShell)
|
|
373
|
+
* - Git Bash (Windows environment)
|
|
374
|
+
*
|
|
375
|
+
* Note: Chocolatey is a Windows-only tool and cannot run on macOS,
|
|
376
|
+
* Linux, or within WSL.
|
|
377
|
+
*
|
|
378
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
379
|
+
*/
|
|
380
|
+
function isEligible() {
|
|
381
|
+
const platform = os.detect();
|
|
382
|
+
return ['windows', 'gitbash'].includes(platform.type);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Main installation entry point - detects platform and runs appropriate installer.
|
|
387
|
+
*
|
|
388
|
+
* This function detects the current operating system and dispatches to the
|
|
389
|
+
* appropriate platform-specific installer function. Chocolatey is only
|
|
390
|
+
* supported on Windows and Git Bash (which runs on Windows).
|
|
391
|
+
*
|
|
392
|
+
* For all other platforms (macOS, Linux, WSL), the function gracefully
|
|
393
|
+
* returns with a message indicating that Chocolatey is not available.
|
|
394
|
+
*
|
|
395
|
+
* @returns {Promise<void>}
|
|
396
|
+
*/
|
|
397
|
+
async function install() {
|
|
398
|
+
const platform = os.detect();
|
|
399
|
+
|
|
400
|
+
// Map platform types to their corresponding installer functions
|
|
401
|
+
// Only Windows and Git Bash have actual installation logic
|
|
402
|
+
// All other platforms gracefully return with a message
|
|
403
|
+
const installers = {
|
|
404
|
+
'macos': install_macos,
|
|
405
|
+
'ubuntu': install_ubuntu,
|
|
406
|
+
'debian': install_ubuntu,
|
|
407
|
+
'wsl': install_ubuntu_wsl,
|
|
408
|
+
'raspbian': install_raspbian,
|
|
409
|
+
'amazon_linux': install_amazon_linux,
|
|
410
|
+
'fedora': install_amazon_linux,
|
|
411
|
+
'rhel': install_amazon_linux,
|
|
412
|
+
'windows': install_windows,
|
|
413
|
+
'gitbash': install_gitbash,
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
// Look up the installer for the detected platform
|
|
417
|
+
const installer = installers[platform.type];
|
|
418
|
+
|
|
419
|
+
// If no installer exists for this platform, inform the user gracefully
|
|
420
|
+
if (!installer) {
|
|
421
|
+
console.log(`Chocolatey is not available for ${platform.type}.`);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Run the platform-specific installer
|
|
426
|
+
await installer();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
module.exports = {
|
|
430
|
+
install,
|
|
431
|
+
isInstalled,
|
|
432
|
+
isEligible,
|
|
433
|
+
install_macos,
|
|
434
|
+
install_ubuntu,
|
|
435
|
+
install_ubuntu_wsl,
|
|
436
|
+
install_raspbian,
|
|
437
|
+
install_amazon_linux,
|
|
438
|
+
install_windows,
|
|
439
|
+
install_gitbash,
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
if (require.main === module) {
|
|
443
|
+
install().catch(err => {
|
|
444
|
+
console.error(err.message);
|
|
445
|
+
process.exit(1);
|
|
446
|
+
});
|
|
447
|
+
}
|