@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,352 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Install winpty - Windows PTY interface for console programs.
|
|
5
|
+
* @module installs/winpty
|
|
6
|
+
*
|
|
7
|
+
* winpty is a Windows software package that provides an interface similar to a
|
|
8
|
+
* Unix pty-master for communicating with Windows console programs. It enables
|
|
9
|
+
* interactive console applications (like Python REPL, Node.js REPL, and Docker)
|
|
10
|
+
* to work correctly in terminal emulators that do not natively support Windows
|
|
11
|
+
* console programs, such as MinTTY (used by Git Bash), Cygwin terminals, and MSYS2.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT PLATFORM LIMITATION:
|
|
14
|
+
* winpty is a Windows-only utility. Unix-like systems (macOS, Linux) have native
|
|
15
|
+
* pseudoterminal (PTY) support built into the kernel and do not need winpty.
|
|
16
|
+
*
|
|
17
|
+
* INSTALLATION NOTE:
|
|
18
|
+
* winpty is bundled with Git for Windows. If Git for Windows is installed,
|
|
19
|
+
* winpty is already available in Git Bash. This installer installs Git for
|
|
20
|
+
* Windows via Chocolatey, which includes winpty automatically.
|
|
21
|
+
*
|
|
22
|
+
* For unsupported platforms, this installer will display a simple message
|
|
23
|
+
* and return gracefully without error.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const os = require('../utils/common/os');
|
|
27
|
+
const shell = require('../utils/common/shell');
|
|
28
|
+
const choco = require('../utils/windows/choco');
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The command name used to verify winpty is installed.
|
|
32
|
+
* In Git Bash, winpty is available at /usr/bin/winpty.
|
|
33
|
+
*/
|
|
34
|
+
const WINPTY_COMMAND = 'winpty';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The Chocolatey package name for Git for Windows, which includes winpty.
|
|
38
|
+
* winpty is bundled with Git for Windows and is not available as a separate
|
|
39
|
+
* Chocolatey package.
|
|
40
|
+
*/
|
|
41
|
+
const GIT_PACKAGE_NAME = 'git';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Install winpty on macOS.
|
|
45
|
+
*
|
|
46
|
+
* IMPORTANT: winpty is NOT applicable to macOS.
|
|
47
|
+
*
|
|
48
|
+
* macOS is a Unix-based operating system with native pseudoterminal (PTY)
|
|
49
|
+
* support built into the kernel. The PTY system in macOS allows terminal
|
|
50
|
+
* emulators (like Terminal.app, iTerm2) to communicate directly with console
|
|
51
|
+
* programs without requiring a translation layer.
|
|
52
|
+
*
|
|
53
|
+
* The functionality that winpty provides on Windows (bridging between terminal
|
|
54
|
+
* emulators and console programs) is handled natively by macOS through:
|
|
55
|
+
* - The /dev/pty* device files
|
|
56
|
+
* - The posix_openpt() and related POSIX functions
|
|
57
|
+
* - Native support in all macOS terminal emulators
|
|
58
|
+
*
|
|
59
|
+
* @returns {Promise<void>}
|
|
60
|
+
*/
|
|
61
|
+
async function install_macos() {
|
|
62
|
+
console.log('winpty is not available for macOS.');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Install winpty on Ubuntu/Debian.
|
|
67
|
+
*
|
|
68
|
+
* IMPORTANT: winpty is NOT applicable to Ubuntu/Debian Linux.
|
|
69
|
+
*
|
|
70
|
+
* Ubuntu and Debian are Linux distributions with native pseudoterminal (PTY)
|
|
71
|
+
* support built into the kernel. The PTY subsystem in Linux allows terminal
|
|
72
|
+
* emulators (like GNOME Terminal, Konsole, xterm) to communicate directly with
|
|
73
|
+
* console programs.
|
|
74
|
+
*
|
|
75
|
+
* Linux provides PTY functionality through:
|
|
76
|
+
* - The /dev/pts filesystem (devpts)
|
|
77
|
+
* - The posix_openpt(), grantpt(), unlockpt(), and ptsname() functions
|
|
78
|
+
* - Native kernel support via the CONFIG_UNIX98_PTYS option
|
|
79
|
+
*
|
|
80
|
+
* @returns {Promise<void>}
|
|
81
|
+
*/
|
|
82
|
+
async function install_ubuntu() {
|
|
83
|
+
console.log('winpty is not available for Ubuntu/Debian.');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Install winpty on Ubuntu running in WSL (Windows Subsystem for Linux).
|
|
88
|
+
*
|
|
89
|
+
* IMPORTANT: winpty is NOT needed within WSL.
|
|
90
|
+
*
|
|
91
|
+
* WSL (Windows Subsystem for Linux) runs a real Linux kernel (WSL 2) or a
|
|
92
|
+
* Linux-compatible layer (WSL 1). Within WSL, you have native Linux PTY support
|
|
93
|
+
* through the kernel, just like any other Linux distribution.
|
|
94
|
+
*
|
|
95
|
+
* The WSL terminal environment communicates with programs using standard Linux
|
|
96
|
+
* PTY mechanisms, so winpty is unnecessary.
|
|
97
|
+
*
|
|
98
|
+
* Important distinction:
|
|
99
|
+
* - Inside WSL: You are running Linux; use native PTY (no winpty needed)
|
|
100
|
+
* - In Windows outside WSL: Use winpty with Git Bash/MinTTY for interactive
|
|
101
|
+
* Windows console programs
|
|
102
|
+
*
|
|
103
|
+
* @returns {Promise<void>}
|
|
104
|
+
*/
|
|
105
|
+
async function install_ubuntu_wsl() {
|
|
106
|
+
console.log('winpty is not available for WSL.');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Install winpty on Raspberry Pi OS.
|
|
111
|
+
*
|
|
112
|
+
* IMPORTANT: winpty is NOT applicable to Raspberry Pi OS.
|
|
113
|
+
*
|
|
114
|
+
* Raspberry Pi OS is based on Debian Linux and has native pseudoterminal (PTY)
|
|
115
|
+
* support built into the kernel. This applies to both 32-bit (armhf) and 64-bit
|
|
116
|
+
* (arm64) versions of Raspberry Pi OS.
|
|
117
|
+
*
|
|
118
|
+
* The PTY system works identically to standard Linux:
|
|
119
|
+
* - PTY devices are available at /dev/pts/*
|
|
120
|
+
* - All terminal emulators communicate directly with console programs
|
|
121
|
+
* - No translation layer is required
|
|
122
|
+
*
|
|
123
|
+
* @returns {Promise<void>}
|
|
124
|
+
*/
|
|
125
|
+
async function install_raspbian() {
|
|
126
|
+
console.log('winpty is not available for Raspberry Pi OS.');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Install winpty on Amazon Linux/RHEL.
|
|
131
|
+
*
|
|
132
|
+
* IMPORTANT: winpty is NOT applicable to Amazon Linux or RHEL.
|
|
133
|
+
*
|
|
134
|
+
* Amazon Linux (both AL2 and AL2023) is a Linux distribution with native
|
|
135
|
+
* pseudoterminal (PTY) support built into the kernel. Whether running on EC2
|
|
136
|
+
* instances or other environments, PTY support is available out of the box.
|
|
137
|
+
*
|
|
138
|
+
* @returns {Promise<void>}
|
|
139
|
+
*/
|
|
140
|
+
async function install_amazon_linux() {
|
|
141
|
+
console.log('winpty is not available for Amazon Linux/RHEL.');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Install winpty on Windows using Chocolatey.
|
|
146
|
+
*
|
|
147
|
+
* winpty is bundled with Git for Windows. This function installs Git for Windows
|
|
148
|
+
* via Chocolatey, which automatically includes winpty. After installation,
|
|
149
|
+
* winpty will be available in Git Bash at /usr/bin/winpty.
|
|
150
|
+
*
|
|
151
|
+
* Prerequisites:
|
|
152
|
+
* - Windows 10 version 1903 or higher (64-bit), or Windows 11
|
|
153
|
+
* - Administrator PowerShell or Command Prompt
|
|
154
|
+
* - Chocolatey package manager installed
|
|
155
|
+
* - Internet connectivity
|
|
156
|
+
*
|
|
157
|
+
* The installation uses Chocolatey with the -y flag to automatically confirm
|
|
158
|
+
* all prompts, enabling fully non-interactive installation.
|
|
159
|
+
*
|
|
160
|
+
* @returns {Promise<void>}
|
|
161
|
+
*/
|
|
162
|
+
async function install_windows() {
|
|
163
|
+
// Check if Chocolatey is available - it is required for Windows installation
|
|
164
|
+
if (!choco.isInstalled()) {
|
|
165
|
+
console.log('Chocolatey is not installed. Please install Chocolatey first.');
|
|
166
|
+
console.log('Run: dev install chocolatey');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Check if Git for Windows is already installed via Chocolatey
|
|
171
|
+
// winpty is bundled with Git for Windows, so if Git is installed,
|
|
172
|
+
// winpty should be available
|
|
173
|
+
const isGitInstalled = await choco.isPackageInstalled(GIT_PACKAGE_NAME);
|
|
174
|
+
if (isGitInstalled) {
|
|
175
|
+
console.log('winpty is already installed (bundled with Git for Windows), skipping...');
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log('Note: winpty is available in Git Bash. Use it to run interactive programs:');
|
|
178
|
+
console.log(' winpty python');
|
|
179
|
+
console.log(' winpty node');
|
|
180
|
+
console.log(' winpty docker run -it ubuntu bash');
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Install Git for Windows, which includes winpty
|
|
185
|
+
console.log('Installing winpty via Git for Windows (Chocolatey)...');
|
|
186
|
+
console.log('winpty is bundled with Git for Windows and will be installed automatically.');
|
|
187
|
+
console.log('');
|
|
188
|
+
|
|
189
|
+
const result = await choco.install(GIT_PACKAGE_NAME);
|
|
190
|
+
|
|
191
|
+
if (!result.success) {
|
|
192
|
+
console.log('Failed to install Git for Windows via Chocolatey.');
|
|
193
|
+
console.log(result.output);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Verify the installation succeeded by checking if Git is now installed
|
|
198
|
+
const verified = await choco.isPackageInstalled(GIT_PACKAGE_NAME);
|
|
199
|
+
if (!verified) {
|
|
200
|
+
console.log('Installation may have failed: Git for Windows not found after install.');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
console.log('winpty installed successfully (bundled with Git for Windows).');
|
|
205
|
+
console.log('');
|
|
206
|
+
console.log('Note: Close and reopen your terminal for PATH changes to take effect.');
|
|
207
|
+
console.log('');
|
|
208
|
+
console.log('In Git Bash, use winpty to run interactive Windows console programs:');
|
|
209
|
+
console.log(' winpty python');
|
|
210
|
+
console.log(' winpty node');
|
|
211
|
+
console.log(' winpty docker run -it ubuntu bash');
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Install winpty on Git Bash (Windows).
|
|
216
|
+
*
|
|
217
|
+
* Git Bash is included with Git for Windows, which also bundles winpty. If the
|
|
218
|
+
* user is running this installer from within Git Bash, winpty should already be
|
|
219
|
+
* available. This function verifies that winpty is present and provides guidance
|
|
220
|
+
* if it is somehow missing.
|
|
221
|
+
*
|
|
222
|
+
* winpty is located at /usr/bin/winpty in Git Bash and is used to run
|
|
223
|
+
* interactive Windows console programs that would otherwise not work correctly
|
|
224
|
+
* in MinTTY (Git Bash's terminal emulator).
|
|
225
|
+
*
|
|
226
|
+
* @returns {Promise<void>}
|
|
227
|
+
*/
|
|
228
|
+
async function install_gitbash() {
|
|
229
|
+
// Check if winpty is already available (it should be, since Git Bash includes it)
|
|
230
|
+
const isInstalled = shell.commandExists(WINPTY_COMMAND);
|
|
231
|
+
if (isInstalled) {
|
|
232
|
+
console.log('winpty is already installed (bundled with Git for Windows), skipping...');
|
|
233
|
+
console.log('');
|
|
234
|
+
console.log('Use winpty to run interactive Windows console programs:');
|
|
235
|
+
console.log(' winpty python');
|
|
236
|
+
console.log(' winpty node');
|
|
237
|
+
console.log(' winpty docker run -it ubuntu bash');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// winpty should always be available in Git Bash, but if it is missing,
|
|
242
|
+
// the user likely has a corrupted or very old Git for Windows installation
|
|
243
|
+
console.log('winpty is not found. It should be bundled with Git for Windows.');
|
|
244
|
+
console.log('');
|
|
245
|
+
console.log('To install winpty, reinstall Git for Windows from an Administrator');
|
|
246
|
+
console.log('PowerShell or Command Prompt:');
|
|
247
|
+
console.log('');
|
|
248
|
+
console.log(' choco uninstall git -y');
|
|
249
|
+
console.log(' choco install git -y');
|
|
250
|
+
console.log('');
|
|
251
|
+
console.log('Then close and reopen Git Bash.');
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Check if winpty is installed on the current system.
|
|
256
|
+
* @returns {Promise<boolean>} True if winpty is installed
|
|
257
|
+
*/
|
|
258
|
+
async function isInstalled() {
|
|
259
|
+
const platform = os.detect();
|
|
260
|
+
if (platform.type === 'windows') {
|
|
261
|
+
// winpty is bundled with Git for Windows
|
|
262
|
+
return choco.isPackageInstalled('git');
|
|
263
|
+
}
|
|
264
|
+
if (platform.type === 'gitbash') {
|
|
265
|
+
return shell.commandExists(WINPTY_COMMAND);
|
|
266
|
+
}
|
|
267
|
+
// winpty is not applicable on non-Windows platforms
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Check if this installer is supported on the current platform.
|
|
273
|
+
* winpty is only applicable to Windows and Git Bash (Windows environments).
|
|
274
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
275
|
+
*/
|
|
276
|
+
function isEligible() {
|
|
277
|
+
const platform = os.detect();
|
|
278
|
+
return ['windows', 'gitbash'].includes(platform.type);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Main installation entry point - detects platform and runs appropriate installer.
|
|
283
|
+
*
|
|
284
|
+
* This function detects the current operating system and dispatches to the
|
|
285
|
+
* appropriate platform-specific installer function. winpty is Windows-only,
|
|
286
|
+
* so Unix-like platforms (macOS, Linux) will receive a message explaining
|
|
287
|
+
* that winpty is not needed because they have native PTY support.
|
|
288
|
+
*
|
|
289
|
+
* Supported platforms (winpty is applicable):
|
|
290
|
+
* - Windows: Installs Git for Windows via Chocolatey (includes winpty)
|
|
291
|
+
* - Git Bash: Verifies winpty is available (bundled with Git for Windows)
|
|
292
|
+
*
|
|
293
|
+
* Unsupported platforms (returns gracefully with message - winpty not applicable):
|
|
294
|
+
* - macOS: Native PTY support via kernel
|
|
295
|
+
* - Ubuntu/Debian: Native PTY support via kernel
|
|
296
|
+
* - WSL: Native Linux PTY support within WSL environment
|
|
297
|
+
* - Raspberry Pi OS: Native PTY support via Linux kernel
|
|
298
|
+
* - Amazon Linux/RHEL: Native PTY support via Linux kernel
|
|
299
|
+
*
|
|
300
|
+
* @returns {Promise<void>}
|
|
301
|
+
*/
|
|
302
|
+
async function install() {
|
|
303
|
+
const platform = os.detect();
|
|
304
|
+
|
|
305
|
+
// Map platform types to their corresponding installer functions
|
|
306
|
+
// Unix-like platforms will receive a message that winpty is not available
|
|
307
|
+
// because they have native PTY support
|
|
308
|
+
const installers = {
|
|
309
|
+
'macos': install_macos,
|
|
310
|
+
'ubuntu': install_ubuntu,
|
|
311
|
+
'debian': install_ubuntu,
|
|
312
|
+
'wsl': install_ubuntu_wsl,
|
|
313
|
+
'raspbian': install_raspbian,
|
|
314
|
+
'amazon_linux': install_amazon_linux,
|
|
315
|
+
'fedora': install_amazon_linux,
|
|
316
|
+
'rhel': install_amazon_linux,
|
|
317
|
+
'windows': install_windows,
|
|
318
|
+
'gitbash': install_gitbash,
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
// Look up the installer for the detected platform
|
|
322
|
+
const installer = installers[platform.type];
|
|
323
|
+
|
|
324
|
+
// If no installer exists for this platform, inform the user gracefully
|
|
325
|
+
if (!installer) {
|
|
326
|
+
console.log(`winpty is not available for ${platform.type}.`);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Run the platform-specific installer
|
|
331
|
+
await installer();
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
module.exports = {
|
|
335
|
+
install,
|
|
336
|
+
isInstalled,
|
|
337
|
+
isEligible,
|
|
338
|
+
install_macos,
|
|
339
|
+
install_ubuntu,
|
|
340
|
+
install_ubuntu_wsl,
|
|
341
|
+
install_raspbian,
|
|
342
|
+
install_amazon_linux,
|
|
343
|
+
install_windows,
|
|
344
|
+
install_gitbash,
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
if (require.main === module) {
|
|
348
|
+
install().catch(err => {
|
|
349
|
+
console.error(err.message);
|
|
350
|
+
process.exit(1);
|
|
351
|
+
});
|
|
352
|
+
}
|