@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
package/src/installs/vim.js
CHANGED
|
@@ -1,44 +1,421 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @fileoverview Install Vim.
|
|
4
|
+
* @fileoverview Install Vim - a highly configurable, open-source text editor.
|
|
5
|
+
*
|
|
6
|
+
* Vim (Vi IMproved) is a highly configurable, open-source text editor built
|
|
7
|
+
* to make creating and changing any kind of text very efficient. Originally
|
|
8
|
+
* released by Bram Moolenaar in 1991 as an improved version of the classic
|
|
9
|
+
* Unix Vi editor, Vim has become one of the most popular text editors among
|
|
10
|
+
* developers and system administrators.
|
|
11
|
+
*
|
|
12
|
+
* Vim provides:
|
|
13
|
+
* - Modal editing with distinct modes for inserting text and executing commands
|
|
14
|
+
* - Extensive customization through configuration files and plugins
|
|
15
|
+
* - Powerful search and replace with regular expression support
|
|
16
|
+
* - Multi-window and multi-buffer editing
|
|
17
|
+
* - Built-in scripting language (Vimscript) and support for external languages
|
|
18
|
+
* - Cross-platform availability on virtually every operating system
|
|
19
|
+
*
|
|
5
20
|
* @module installs/vim
|
|
6
21
|
*/
|
|
7
22
|
|
|
8
23
|
const os = require('../utils/common/os');
|
|
24
|
+
const shell = require('../utils/common/shell');
|
|
25
|
+
const brew = require('../utils/macos/brew');
|
|
26
|
+
const apt = require('../utils/ubuntu/apt');
|
|
27
|
+
const choco = require('../utils/windows/choco');
|
|
28
|
+
const windowsShell = require('../utils/windows/shell');
|
|
9
29
|
|
|
10
30
|
/**
|
|
11
|
-
* Install Vim
|
|
31
|
+
* Install Vim on macOS using Homebrew.
|
|
32
|
+
*
|
|
33
|
+
* macOS includes a pre-installed version of Vim (accessible as `vi` or `vim`),
|
|
34
|
+
* but it is typically an older version with limited features. The Homebrew
|
|
35
|
+
* version provides the latest release with full feature support including
|
|
36
|
+
* Python, Lua, and Ruby integration.
|
|
37
|
+
*
|
|
38
|
+
* After installation, the Homebrew version will be available at:
|
|
39
|
+
* - Apple Silicon Macs: /opt/homebrew/bin/vim
|
|
40
|
+
* - Intel Macs: /usr/local/bin/vim
|
|
41
|
+
*
|
|
42
|
+
* @returns {Promise<void>}
|
|
43
|
+
*/
|
|
44
|
+
async function install_macos() {
|
|
45
|
+
// Check if Homebrew is available - it is required for macOS installation
|
|
46
|
+
if (!brew.isInstalled()) {
|
|
47
|
+
console.log('Homebrew is not installed. Please install Homebrew first.');
|
|
48
|
+
console.log('Run: dev install homebrew');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check if Vim is already installed via Homebrew
|
|
53
|
+
// Note: We check the Homebrew formula because macOS has a system Vim
|
|
54
|
+
// that will always exist at /usr/bin/vim
|
|
55
|
+
const isBrewVimInstalled = await brew.isFormulaInstalled('vim');
|
|
56
|
+
if (isBrewVimInstalled) {
|
|
57
|
+
console.log('Vim is already installed via Homebrew, skipping...');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Install Vim using Homebrew
|
|
62
|
+
// The --quiet flag is added by brew.install() for cleaner output
|
|
63
|
+
console.log('Installing Vim via Homebrew...');
|
|
64
|
+
const result = await brew.install('vim');
|
|
65
|
+
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
console.log('Failed to install Vim via Homebrew.');
|
|
68
|
+
console.log(result.output);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Verify the installation succeeded by checking if the formula is now installed
|
|
73
|
+
const verified = await brew.isFormulaInstalled('vim');
|
|
74
|
+
if (!verified) {
|
|
75
|
+
console.log('Installation may have failed: Vim formula not found after install.');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
console.log('Vim installed successfully via Homebrew.');
|
|
80
|
+
console.log('');
|
|
81
|
+
console.log('Note: To use the Homebrew version instead of the system version,');
|
|
82
|
+
console.log('ensure /opt/homebrew/bin (Apple Silicon) or /usr/local/bin (Intel)');
|
|
83
|
+
console.log('appears before /usr/bin in your PATH.');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Install Vim on Ubuntu/Debian using APT.
|
|
88
|
+
*
|
|
89
|
+
* Ubuntu and Debian include Vim in their default repositories. This function
|
|
90
|
+
* installs the standard Vim package which provides the full feature set for
|
|
91
|
+
* most use cases. For additional features like Python support, users can
|
|
92
|
+
* manually install vim-nox after this installation.
|
|
93
|
+
*
|
|
94
|
+
* @returns {Promise<void>}
|
|
95
|
+
*/
|
|
96
|
+
async function install_ubuntu() {
|
|
97
|
+
// Check if Vim is already installed by looking for the command
|
|
98
|
+
// Note: Some minimal installations may have vim-tiny (accessible as vi)
|
|
99
|
+
// but we want the full vim package
|
|
100
|
+
const isInstalled = shell.commandExists('vim');
|
|
101
|
+
if (isInstalled) {
|
|
102
|
+
console.log('Vim is already installed, skipping...');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Update package lists before installing to ensure we get the latest version
|
|
107
|
+
// from the repositories
|
|
108
|
+
console.log('Updating package lists...');
|
|
109
|
+
const updateResult = await apt.update();
|
|
110
|
+
if (!updateResult.success) {
|
|
111
|
+
console.log('Warning: Failed to update package lists. Continuing with installation...');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Install Vim using APT
|
|
115
|
+
// The DEBIAN_FRONTEND=noninteractive is handled by the apt utility
|
|
116
|
+
console.log('Installing Vim via APT...');
|
|
117
|
+
const result = await apt.install('vim');
|
|
118
|
+
|
|
119
|
+
if (!result.success) {
|
|
120
|
+
console.log('Failed to install Vim via APT.');
|
|
121
|
+
console.log(result.output);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Verify the installation succeeded by checking if the command exists
|
|
126
|
+
const verified = shell.commandExists('vim');
|
|
127
|
+
if (!verified) {
|
|
128
|
+
console.log('Installation may have failed: vim command not found after install.');
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
console.log('Vim installed successfully.');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Install Vim on Ubuntu running in WSL (Windows Subsystem for Linux).
|
|
137
|
+
*
|
|
138
|
+
* WSL provides a full Ubuntu environment within Windows, so Vim installation
|
|
139
|
+
* follows the same APT-based process as native Ubuntu. The Vim installed within
|
|
140
|
+
* WSL is separate from any Vim installation on the Windows host.
|
|
141
|
+
*
|
|
142
|
+
* Note: It is common to have different Vim configurations in WSL and Windows,
|
|
143
|
+
* as they are independent installations for their respective environments.
|
|
144
|
+
* Use ~/.vimrc in WSL and ~/_vimrc in Windows.
|
|
145
|
+
*
|
|
146
|
+
* @returns {Promise<void>}
|
|
147
|
+
*/
|
|
148
|
+
async function install_ubuntu_wsl() {
|
|
149
|
+
// WSL Ubuntu uses the same APT-based installation as native Ubuntu
|
|
150
|
+
await install_ubuntu();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Install Vim on Raspberry Pi OS using APT.
|
|
155
|
+
*
|
|
156
|
+
* Raspberry Pi OS is based on Debian, so Vim installation follows the same
|
|
157
|
+
* APT-based process as Ubuntu/Debian. Vim is available in the default
|
|
158
|
+
* repositories and works on both 32-bit (armhf) and 64-bit (arm64) ARM
|
|
159
|
+
* architectures.
|
|
160
|
+
*
|
|
161
|
+
* Note: Vim is not installed by default on Raspberry Pi OS and must be
|
|
162
|
+
* installed manually. The installation requires approximately 30MB of
|
|
163
|
+
* storage space.
|
|
164
|
+
*
|
|
165
|
+
* @returns {Promise<void>}
|
|
166
|
+
*/
|
|
167
|
+
async function install_raspbian() {
|
|
168
|
+
// Raspberry Pi OS uses the same APT-based installation as Ubuntu/Debian
|
|
169
|
+
await install_ubuntu();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Install Vim on Amazon Linux using DNF or YUM.
|
|
174
|
+
*
|
|
175
|
+
* Amazon Linux 2023 uses DNF as the default package manager, while Amazon
|
|
176
|
+
* Linux 2 uses YUM. This function automatically detects which package manager
|
|
177
|
+
* is available and uses it accordingly.
|
|
178
|
+
*
|
|
179
|
+
* Important: The default vim-minimal package provides only basic functionality
|
|
180
|
+
* in /bin/vi. This function installs vim-enhanced for the complete Vim
|
|
181
|
+
* experience with Python, Perl, and other scripting language support.
|
|
182
|
+
*
|
|
183
|
+
* @returns {Promise<void>}
|
|
184
|
+
*/
|
|
185
|
+
async function install_amazon_linux() {
|
|
186
|
+
// Check if Vim (full version) is already installed by looking for the command
|
|
187
|
+
// Note: Amazon Linux often has vim-minimal pre-installed which only provides vi
|
|
188
|
+
const isInstalled = shell.commandExists('vim');
|
|
189
|
+
if (isInstalled) {
|
|
190
|
+
console.log('Vim is already installed, skipping...');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Detect the platform to determine which package manager to use
|
|
195
|
+
// Amazon Linux 2023 uses dnf, Amazon Linux 2 uses yum
|
|
196
|
+
const platform = os.detect();
|
|
197
|
+
const packageManager = platform.packageManager;
|
|
198
|
+
|
|
199
|
+
// Construct the install command based on available package manager
|
|
200
|
+
// We install vim-enhanced for the full-featured version (not vim-minimal)
|
|
201
|
+
const installCommand = packageManager === 'dnf'
|
|
202
|
+
? 'sudo dnf install -y vim-enhanced'
|
|
203
|
+
: 'sudo yum install -y vim-enhanced';
|
|
204
|
+
|
|
205
|
+
// Install Vim
|
|
206
|
+
console.log(`Installing Vim (vim-enhanced) via ${packageManager}...`);
|
|
207
|
+
const result = await shell.exec(installCommand);
|
|
208
|
+
|
|
209
|
+
if (result.code !== 0) {
|
|
210
|
+
console.log(`Failed to install Vim via ${packageManager}.`);
|
|
211
|
+
console.log(result.stderr || result.stdout);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Verify the installation succeeded by checking if the command exists
|
|
216
|
+
const verified = shell.commandExists('vim');
|
|
217
|
+
if (!verified) {
|
|
218
|
+
console.log('Installation may have failed: vim command not found after install.');
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
console.log('Vim installed successfully.');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Install Vim on Windows using Chocolatey.
|
|
227
|
+
*
|
|
228
|
+
* This installs Vim for Windows, which includes:
|
|
229
|
+
* - vim.exe - Terminal-based Vim editor
|
|
230
|
+
* - gvim.exe - Graphical Vim application (GVim)
|
|
231
|
+
* - Context menu integration - "Edit with Vim" option in Windows Explorer
|
|
232
|
+
* - Batch files - vim.bat, gvim.bat, view.bat, and related commands in PATH
|
|
233
|
+
*
|
|
234
|
+
* After installation, a new terminal window must be opened for the PATH
|
|
235
|
+
* changes to take effect. Vim will be available at:
|
|
236
|
+
* C:\tools\vim\vim91\vim.exe (version number may vary)
|
|
237
|
+
*
|
|
238
|
+
* @returns {Promise<void>}
|
|
239
|
+
*/
|
|
240
|
+
async function install_windows() {
|
|
241
|
+
// Check if Chocolatey is available - it is required for Windows installation
|
|
242
|
+
if (!choco.isInstalled()) {
|
|
243
|
+
console.log('Chocolatey is not installed. Please install Chocolatey first.');
|
|
244
|
+
console.log('Run: dev install chocolatey');
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Check if Vim is already installed via Chocolatey
|
|
249
|
+
const isChocoVimInstalled = await choco.isPackageInstalled('vim');
|
|
250
|
+
if (isChocoVimInstalled) {
|
|
251
|
+
console.log('Vim is already installed via Chocolatey, skipping...');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Install Vim using Chocolatey
|
|
256
|
+
// The -y flag automatically confirms all prompts for non-interactive installation
|
|
257
|
+
console.log('Installing Vim via Chocolatey...');
|
|
258
|
+
const result = await choco.install('vim');
|
|
259
|
+
|
|
260
|
+
if (!result.success) {
|
|
261
|
+
console.log('Failed to install Vim via Chocolatey.');
|
|
262
|
+
console.log(result.output);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Verify the installation succeeded by checking if the package is now installed
|
|
267
|
+
const verified = await choco.isPackageInstalled('vim');
|
|
268
|
+
if (!verified) {
|
|
269
|
+
console.log('Installation may have failed: Vim package not found after install.');
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
console.log('Vim installed successfully via Chocolatey.');
|
|
274
|
+
console.log('');
|
|
275
|
+
console.log('Note: Close and reopen your terminal for PATH changes to take effect.');
|
|
276
|
+
console.log('GVim (graphical version) is also available from the Start Menu.');
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Install Vim on Git Bash (Windows).
|
|
281
|
+
*
|
|
282
|
+
* Git Bash inherits the Windows PATH, so once Vim is installed on Windows
|
|
283
|
+
* via Chocolatey, the vim and gvim commands are available in Git Bash.
|
|
284
|
+
* This function installs Vim on Windows using PowerShell, which makes it
|
|
285
|
+
* available in Git Bash as well.
|
|
286
|
+
*
|
|
287
|
+
* Note: Git for Windows includes a minimal version of Vim, but for full
|
|
288
|
+
* functionality with all features enabled, we install Vim separately via
|
|
289
|
+
* Chocolatey.
|
|
290
|
+
*
|
|
291
|
+
* @returns {Promise<void>}
|
|
292
|
+
*/
|
|
293
|
+
async function install_gitbash() {
|
|
294
|
+
// Check if Vim (full version from Chocolatey) is already available
|
|
295
|
+
// Git Bash may have a minimal vim from Git for Windows, but we want
|
|
296
|
+
// the full Chocolatey version
|
|
297
|
+
const isInstalled = shell.commandExists('vim');
|
|
298
|
+
if (isInstalled) {
|
|
299
|
+
// Check if it's the Chocolatey version by looking for the typical path
|
|
300
|
+
const vimPath = shell.which('vim');
|
|
301
|
+
if (vimPath && vimPath.toLowerCase().includes('tools\\vim')) {
|
|
302
|
+
console.log('Vim is already installed via Chocolatey, skipping...');
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
// Otherwise, we have the minimal Git Bash vim - continue to install full version
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Install Vim on Windows via PowerShell which uses Chocolatey
|
|
309
|
+
// This makes Vim available in Git Bash through the Windows PATH
|
|
310
|
+
console.log('Installing Vim via Chocolatey (using PowerShell)...');
|
|
311
|
+
console.log('This will make Vim available in Git Bash.');
|
|
312
|
+
|
|
313
|
+
// Execute the Chocolatey install command via PowerShell
|
|
314
|
+
const result = await windowsShell.execPowerShell('choco install vim -y');
|
|
315
|
+
|
|
316
|
+
if (!result.success) {
|
|
317
|
+
console.log('Failed to install Vim via Chocolatey.');
|
|
318
|
+
console.log(result.stderr || result.stdout);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
console.log('Vim installed successfully via Chocolatey.');
|
|
323
|
+
console.log('');
|
|
324
|
+
console.log('Note: Close and reopen Git Bash for PATH changes to take effect.');
|
|
325
|
+
console.log('You may need to add Vim to your PATH in ~/.bashrc:');
|
|
326
|
+
console.log(' export PATH="$PATH:/c/tools/vim/vim91"');
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Check if Vim is installed on the current system.
|
|
331
|
+
* @returns {Promise<boolean>} True if Vim is installed
|
|
332
|
+
*/
|
|
333
|
+
async function isInstalled() {
|
|
334
|
+
const platform = os.detect();
|
|
335
|
+
if (platform.type === 'macos') {
|
|
336
|
+
return brew.isFormulaInstalled('vim');
|
|
337
|
+
}
|
|
338
|
+
if (platform.type === 'windows') {
|
|
339
|
+
return choco.isPackageInstalled('vim');
|
|
340
|
+
}
|
|
341
|
+
return shell.commandExists('vim');
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Check if this installer is supported on the current platform.
|
|
346
|
+
* Vim is supported on all major platforms.
|
|
347
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
348
|
+
*/
|
|
349
|
+
function isEligible() {
|
|
350
|
+
const platform = os.detect();
|
|
351
|
+
return ['macos', 'ubuntu', 'debian', 'wsl', 'raspbian', 'amazon_linux', 'fedora', 'rhel', 'windows', 'gitbash'].includes(platform.type);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Main installation entry point - detects platform and runs appropriate installer.
|
|
356
|
+
*
|
|
357
|
+
* This function detects the current operating system and dispatches to the
|
|
358
|
+
* appropriate platform-specific installer function. Vim is supported on all
|
|
359
|
+
* major platforms:
|
|
360
|
+
*
|
|
361
|
+
* - macOS (Homebrew)
|
|
362
|
+
* - Ubuntu/Debian (APT)
|
|
363
|
+
* - Ubuntu on WSL (APT)
|
|
364
|
+
* - Raspberry Pi OS (APT)
|
|
365
|
+
* - Amazon Linux/RHEL/Fedora (DNF/YUM)
|
|
366
|
+
* - Windows (Chocolatey)
|
|
367
|
+
* - Git Bash (via Windows Chocolatey installation)
|
|
12
368
|
*
|
|
13
369
|
* @returns {Promise<void>}
|
|
14
370
|
*/
|
|
15
371
|
async function install() {
|
|
16
372
|
const platform = os.detect();
|
|
17
373
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
374
|
+
// Map platform types to their corresponding installer functions
|
|
375
|
+
// Multiple platform types can map to the same installer (e.g., debian and ubuntu)
|
|
376
|
+
const installers = {
|
|
377
|
+
'macos': install_macos,
|
|
378
|
+
'ubuntu': install_ubuntu,
|
|
379
|
+
'debian': install_ubuntu,
|
|
380
|
+
'wsl': install_ubuntu_wsl,
|
|
381
|
+
'raspbian': install_raspbian,
|
|
382
|
+
'amazon_linux': install_amazon_linux,
|
|
383
|
+
'fedora': install_amazon_linux,
|
|
384
|
+
'rhel': install_amazon_linux,
|
|
385
|
+
'windows': install_windows,
|
|
386
|
+
'gitbash': install_gitbash,
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
// Look up the installer for the detected platform
|
|
390
|
+
const installer = installers[platform.type];
|
|
391
|
+
|
|
392
|
+
// If no installer exists for this platform, inform the user gracefully
|
|
393
|
+
// Note: Vim is available on virtually all platforms, so this is unlikely
|
|
394
|
+
if (!installer) {
|
|
395
|
+
console.log(`Vim is not available for ${platform.type}.`);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Run the platform-specific installer
|
|
400
|
+
await installer();
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
module.exports = {
|
|
404
|
+
install,
|
|
405
|
+
isInstalled,
|
|
406
|
+
isEligible,
|
|
407
|
+
install_macos,
|
|
408
|
+
install_ubuntu,
|
|
409
|
+
install_ubuntu_wsl,
|
|
410
|
+
install_raspbian,
|
|
411
|
+
install_amazon_linux,
|
|
412
|
+
install_windows,
|
|
413
|
+
install_gitbash,
|
|
414
|
+
};
|
|
41
415
|
|
|
42
416
|
if (require.main === module) {
|
|
43
|
-
install()
|
|
417
|
+
install().catch(err => {
|
|
418
|
+
console.error(err.message);
|
|
419
|
+
process.exit(1);
|
|
420
|
+
});
|
|
44
421
|
}
|