@fredlackey/devutils 0.0.18 → 0.0.19
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 +32 -150
- package/package.json +5 -82
- package/bin/dev.js +0 -16
- package/files/README.md +0 -0
- package/files/claude/.claude/commands/setup-context.md +0 -3
- package/files/monorepos/_archive/README.md +0 -36
- package/files/monorepos/_legacy/README.md +0 -36
- package/files/monorepos/ai-docs/README.md +0 -33
- package/files/monorepos/apps/README.md +0 -24
- package/files/monorepos/docs/README.md +0 -40
- package/files/monorepos/packages/README.md +0 -25
- package/files/monorepos/research/README.md +0 -29
- package/files/monorepos/scripts/README.md +0 -24
- package/src/cli.js +0 -72
- package/src/commands/README.md +0 -41
- package/src/commands/configure.js +0 -199
- package/src/commands/identity.js +0 -1630
- package/src/commands/ignore.js +0 -247
- package/src/commands/install.js +0 -526
- package/src/commands/setup.js +0 -246
- package/src/commands/status.js +0 -223
- package/src/commands/update.js +0 -142
- package/src/commands/version.js +0 -100
- package/src/completion.js +0 -284
- package/src/constants.js +0 -45
- package/src/ignore/claude-code.txt +0 -10
- package/src/ignore/docker.txt +0 -18
- package/src/ignore/linux.txt +0 -23
- package/src/ignore/macos.txt +0 -36
- package/src/ignore/node.txt +0 -55
- package/src/ignore/terraform.txt +0 -37
- package/src/ignore/vscode.txt +0 -18
- package/src/ignore/windows.txt +0 -35
- package/src/index.js +0 -0
- package/src/installs/README.md +0 -399
- package/src/installs/adobe-creative-cloud.js +0 -546
- package/src/installs/adobe-creative-cloud.md +0 -605
- package/src/installs/appcleaner.js +0 -321
- package/src/installs/appcleaner.md +0 -699
- package/src/installs/apt-transport-https.js +0 -390
- package/src/installs/apt-transport-https.md +0 -678
- package/src/installs/atomicparsley.js +0 -642
- package/src/installs/atomicparsley.md +0 -795
- package/src/installs/aws-cli.js +0 -797
- package/src/installs/aws-cli.md +0 -727
- package/src/installs/balena-etcher.js +0 -710
- package/src/installs/balena-etcher.md +0 -761
- package/src/installs/bambu-studio.js +0 -1143
- package/src/installs/bambu-studio.md +0 -780
- package/src/installs/bash-completion.js +0 -575
- package/src/installs/bash-completion.md +0 -833
- package/src/installs/bash.js +0 -417
- package/src/installs/bash.md +0 -993
- package/src/installs/beyond-compare.js +0 -603
- package/src/installs/beyond-compare.md +0 -813
- package/src/installs/brave-browser.js +0 -968
- package/src/installs/brave-browser.md +0 -650
- package/src/installs/build-essential.js +0 -529
- package/src/installs/build-essential.md +0 -977
- package/src/installs/ca-certificates.js +0 -618
- package/src/installs/ca-certificates.md +0 -937
- package/src/installs/caffeine.js +0 -508
- package/src/installs/caffeine.md +0 -839
- package/src/installs/camtasia.js +0 -596
- package/src/installs/camtasia.md +0 -762
- package/src/installs/chatgpt.js +0 -476
- package/src/installs/chatgpt.md +0 -814
- package/src/installs/chocolatey.js +0 -456
- package/src/installs/chocolatey.md +0 -661
- package/src/installs/chrome-canary.js +0 -419
- package/src/installs/chrome-canary.md +0 -641
- package/src/installs/chromium.js +0 -667
- package/src/installs/chromium.md +0 -838
- package/src/installs/claude-code.js +0 -576
- package/src/installs/claude-code.md +0 -1173
- package/src/installs/cloudflare-warp.js +0 -900
- package/src/installs/cloudflare-warp.md +0 -1047
- package/src/installs/comet-browser.js +0 -588
- package/src/installs/comet-browser.md +0 -731
- package/src/installs/curl.js +0 -379
- package/src/installs/curl.md +0 -714
- package/src/installs/cursor.js +0 -579
- package/src/installs/cursor.md +0 -970
- package/src/installs/dbeaver.js +0 -924
- package/src/installs/dbeaver.md +0 -939
- package/src/installs/dbschema.js +0 -692
- package/src/installs/dbschema.md +0 -925
- package/src/installs/dependencies.md +0 -453
- package/src/installs/development-tools.js +0 -600
- package/src/installs/development-tools.md +0 -977
- package/src/installs/docker.js +0 -1029
- package/src/installs/docker.md +0 -1109
- package/src/installs/drawio.js +0 -1019
- package/src/installs/drawio.md +0 -795
- package/src/installs/elmedia-player.js +0 -347
- package/src/installs/elmedia-player.md +0 -556
- package/src/installs/ffmpeg.js +0 -889
- package/src/installs/ffmpeg.md +0 -852
- package/src/installs/file.js +0 -464
- package/src/installs/file.md +0 -987
- package/src/installs/gemini-cli.js +0 -811
- package/src/installs/gemini-cli.md +0 -1153
- package/src/installs/git.js +0 -400
- package/src/installs/git.md +0 -907
- package/src/installs/gitego.js +0 -949
- package/src/installs/gitego.md +0 -1172
- package/src/installs/go.js +0 -931
- package/src/installs/go.md +0 -958
- package/src/installs/google-antigravity.js +0 -913
- package/src/installs/google-antigravity.md +0 -1075
- package/src/installs/google-chrome.js +0 -833
- package/src/installs/google-chrome.md +0 -862
- package/src/installs/gpg.js +0 -480
- package/src/installs/gpg.md +0 -1056
- package/src/installs/homebrew.js +0 -1028
- package/src/installs/homebrew.md +0 -988
- package/src/installs/imageoptim.js +0 -968
- package/src/installs/imageoptim.md +0 -1119
- package/src/installs/installers.json +0 -4032
- package/src/installs/installers.json.tmp +0 -3953
- package/src/installs/jq.js +0 -400
- package/src/installs/jq.md +0 -809
- package/src/installs/keyboard-maestro.js +0 -719
- package/src/installs/keyboard-maestro.md +0 -825
- package/src/installs/kiro.js +0 -864
- package/src/installs/kiro.md +0 -1015
- package/src/installs/latex.js +0 -789
- package/src/installs/latex.md +0 -1095
- package/src/installs/lftp.js +0 -356
- package/src/installs/lftp.md +0 -907
- package/src/installs/lsb-release.js +0 -346
- package/src/installs/lsb-release.md +0 -814
- package/src/installs/messenger.js +0 -847
- package/src/installs/messenger.md +0 -900
- package/src/installs/microsoft-office.js +0 -568
- package/src/installs/microsoft-office.md +0 -760
- package/src/installs/microsoft-teams.js +0 -801
- package/src/installs/microsoft-teams.md +0 -886
- package/src/installs/moom.js +0 -326
- package/src/installs/moom.md +0 -570
- package/src/installs/node.js +0 -904
- package/src/installs/node.md +0 -1153
- package/src/installs/nordpass.js +0 -716
- package/src/installs/nordpass.md +0 -921
- package/src/installs/nordvpn.js +0 -892
- package/src/installs/nordvpn.md +0 -1052
- package/src/installs/nvm.js +0 -995
- package/src/installs/nvm.md +0 -1057
- package/src/installs/ohmyzsh.js +0 -529
- package/src/installs/ohmyzsh.md +0 -1094
- package/src/installs/openssh.js +0 -804
- package/src/installs/openssh.md +0 -1056
- package/src/installs/pandoc.js +0 -662
- package/src/installs/pandoc.md +0 -1036
- package/src/installs/parallels-desktop.js +0 -431
- package/src/installs/parallels-desktop.md +0 -446
- package/src/installs/pinentry.js +0 -510
- package/src/installs/pinentry.md +0 -1142
- package/src/installs/pngyu.js +0 -869
- package/src/installs/pngyu.md +0 -896
- package/src/installs/postman.js +0 -799
- package/src/installs/postman.md +0 -940
- package/src/installs/procps.js +0 -425
- package/src/installs/procps.md +0 -851
- package/src/installs/safari-tech-preview.js +0 -374
- package/src/installs/safari-tech-preview.md +0 -533
- package/src/installs/sfnt2woff.js +0 -658
- package/src/installs/sfnt2woff.md +0 -795
- package/src/installs/shellcheck.js +0 -481
- package/src/installs/shellcheck.md +0 -1005
- package/src/installs/slack.js +0 -741
- package/src/installs/slack.md +0 -865
- package/src/installs/snagit.js +0 -585
- package/src/installs/snagit.md +0 -844
- package/src/installs/software-properties-common.js +0 -372
- package/src/installs/software-properties-common.md +0 -805
- package/src/installs/spotify.js +0 -877
- package/src/installs/spotify.md +0 -901
- package/src/installs/studio-3t.js +0 -823
- package/src/installs/studio-3t.md +0 -918
- package/src/installs/sublime-text.js +0 -804
- package/src/installs/sublime-text.md +0 -914
- package/src/installs/superwhisper.js +0 -706
- package/src/installs/superwhisper.md +0 -630
- package/src/installs/tailscale.js +0 -745
- package/src/installs/tailscale.md +0 -1100
- package/src/installs/tar.js +0 -389
- package/src/installs/tar.md +0 -946
- package/src/installs/termius.js +0 -798
- package/src/installs/termius.md +0 -844
- package/src/installs/terraform.js +0 -779
- package/src/installs/terraform.md +0 -899
- package/src/installs/tfenv.js +0 -778
- package/src/installs/tfenv.md +0 -1091
- package/src/installs/tidal.js +0 -771
- package/src/installs/tidal.md +0 -864
- package/src/installs/tmux.js +0 -346
- package/src/installs/tmux.md +0 -1030
- package/src/installs/tree.js +0 -411
- package/src/installs/tree.md +0 -833
- package/src/installs/unzip.js +0 -460
- package/src/installs/unzip.md +0 -879
- package/src/installs/vim.js +0 -421
- package/src/installs/vim.md +0 -1040
- package/src/installs/vlc.js +0 -821
- package/src/installs/vlc.md +0 -927
- package/src/installs/vscode.js +0 -843
- package/src/installs/vscode.md +0 -1002
- package/src/installs/wget.js +0 -420
- package/src/installs/wget.md +0 -791
- package/src/installs/whatsapp.js +0 -729
- package/src/installs/whatsapp.md +0 -854
- package/src/installs/winpty.js +0 -352
- package/src/installs/winpty.md +0 -620
- package/src/installs/woff2.js +0 -553
- package/src/installs/woff2.md +0 -977
- package/src/installs/wsl.js +0 -572
- package/src/installs/wsl.md +0 -699
- package/src/installs/xcode-clt.js +0 -520
- package/src/installs/xcode-clt.md +0 -351
- package/src/installs/xcode.js +0 -560
- package/src/installs/xcode.md +0 -573
- package/src/installs/yarn.js +0 -824
- package/src/installs/yarn.md +0 -1074
- package/src/installs/yq.js +0 -654
- package/src/installs/yq.md +0 -944
- package/src/installs/yt-dlp.js +0 -701
- package/src/installs/yt-dlp.md +0 -946
- package/src/installs/yum-utils.js +0 -297
- package/src/installs/yum-utils.md +0 -648
- package/src/installs/zoom.js +0 -759
- package/src/installs/zoom.md +0 -884
- package/src/installs/zsh.js +0 -455
- package/src/installs/zsh.md +0 -1008
- package/src/scripts/README.md +0 -617
- package/src/scripts/STATUS.md +0 -208
- package/src/scripts/afk.js +0 -411
- package/src/scripts/backup-all.js +0 -746
- package/src/scripts/backup-source.js +0 -727
- package/src/scripts/brewd.js +0 -389
- package/src/scripts/brewi.js +0 -520
- package/src/scripts/brewr.js +0 -527
- package/src/scripts/brews.js +0 -477
- package/src/scripts/brewu.js +0 -504
- package/src/scripts/c.js +0 -201
- package/src/scripts/ccurl.js +0 -341
- package/src/scripts/certbot-crontab-init.js +0 -504
- package/src/scripts/certbot-init.js +0 -657
- package/src/scripts/ch.js +0 -355
- package/src/scripts/claude-danger.js +0 -268
- package/src/scripts/clean-dev.js +0 -435
- package/src/scripts/clear-dns-cache.js +0 -541
- package/src/scripts/clone.js +0 -435
- package/src/scripts/code-all.js +0 -437
- package/src/scripts/count-files.js +0 -211
- package/src/scripts/count-folders.js +0 -211
- package/src/scripts/count.js +0 -264
- package/src/scripts/d.js +0 -219
- package/src/scripts/datauri.js +0 -389
- package/src/scripts/delete-files.js +0 -380
- package/src/scripts/docker-clean.js +0 -426
- package/src/scripts/dp.js +0 -442
- package/src/scripts/e.js +0 -390
- package/src/scripts/empty-trash.js +0 -513
- package/src/scripts/evm.js +0 -444
- package/src/scripts/fetch-github-repos.js +0 -456
- package/src/scripts/get-channel.js +0 -345
- package/src/scripts/get-course.js +0 -399
- package/src/scripts/get-dependencies.js +0 -306
- package/src/scripts/get-folder.js +0 -799
- package/src/scripts/get-tunes.js +0 -426
- package/src/scripts/get-video.js +0 -367
- package/src/scripts/git-backup.js +0 -577
- package/src/scripts/git-clone.js +0 -493
- package/src/scripts/git-pup.js +0 -319
- package/src/scripts/git-push.js +0 -396
- package/src/scripts/h.js +0 -622
- package/src/scripts/hide-desktop-icons.js +0 -499
- package/src/scripts/hide-hidden-files.js +0 -538
- package/src/scripts/install-dependencies-from.js +0 -456
- package/src/scripts/ips.js +0 -663
- package/src/scripts/iso.js +0 -370
- package/src/scripts/killni.js +0 -577
- package/src/scripts/ll.js +0 -467
- package/src/scripts/local-ip.js +0 -325
- package/src/scripts/m.js +0 -524
- package/src/scripts/map.js +0 -309
- package/src/scripts/mkd.js +0 -351
- package/src/scripts/ncu-update-all.js +0 -457
- package/src/scripts/nginx-init.js +0 -718
- package/src/scripts/npmi.js +0 -382
- package/src/scripts/o.js +0 -511
- package/src/scripts/org-by-date.js +0 -338
- package/src/scripts/p.js +0 -224
- package/src/scripts/packages.js +0 -330
- package/src/scripts/path.js +0 -225
- package/src/scripts/ports.js +0 -597
- package/src/scripts/q.js +0 -305
- package/src/scripts/refresh-files.js +0 -394
- package/src/scripts/remove-smaller-files.js +0 -516
- package/src/scripts/rename-files-with-date.js +0 -533
- package/src/scripts/resize-image.js +0 -539
- package/src/scripts/rm-safe.js +0 -669
- package/src/scripts/s.js +0 -540
- package/src/scripts/set-git-public.js +0 -365
- package/src/scripts/show-desktop-icons.js +0 -475
- package/src/scripts/show-hidden-files.js +0 -472
- package/src/scripts/tpa.js +0 -280
- package/src/scripts/tpo.js +0 -280
- package/src/scripts/u.js +0 -505
- package/src/scripts/vpush.js +0 -437
- package/src/scripts/y.js +0 -283
- package/src/utils/README.md +0 -95
- package/src/utils/common/apps.js +0 -143
- package/src/utils/common/display.js +0 -157
- package/src/utils/common/network.js +0 -185
- package/src/utils/common/os.js +0 -294
- package/src/utils/common/package-manager.js +0 -301
- package/src/utils/common/privileges.js +0 -138
- package/src/utils/common/shell.js +0 -261
- package/src/utils/macos/apps.js +0 -228
- package/src/utils/macos/brew.js +0 -315
- package/src/utils/ubuntu/apt.js +0 -307
- package/src/utils/ubuntu/desktop.js +0 -292
- package/src/utils/ubuntu/snap.js +0 -344
- package/src/utils/ubuntu/systemd.js +0 -286
- package/src/utils/windows/choco.js +0 -465
- package/src/utils/windows/env.js +0 -246
- package/src/utils/windows/registry.js +0 -269
- package/src/utils/windows/shell.js +0 -240
- package/src/utils/windows/winget.js +0 -489
package/src/scripts/y.js
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* y - Shortcut for yarn commands
|
|
5
|
-
*
|
|
6
|
-
* Migrated from legacy dotfiles alias.
|
|
7
|
-
* Original: alias y="yarn"
|
|
8
|
-
*
|
|
9
|
-
* This script provides a single-character shortcut for the Yarn package manager,
|
|
10
|
-
* passing all arguments through to the `yarn` command. Yarn is a popular
|
|
11
|
-
* JavaScript package manager that is an alternative to npm.
|
|
12
|
-
*
|
|
13
|
-
* Examples:
|
|
14
|
-
* y -> yarn (runs default yarn command, typically install)
|
|
15
|
-
* y add lodash -> yarn add lodash
|
|
16
|
-
* y remove lodash -> yarn remove lodash
|
|
17
|
-
* y dev -> yarn dev (runs the "dev" script)
|
|
18
|
-
* y build -> yarn build (runs the "build" script)
|
|
19
|
-
* y --version -> yarn --version
|
|
20
|
-
*
|
|
21
|
-
* @module scripts/y
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const os = require('../utils/common/os');
|
|
25
|
-
const { spawn } = require('child_process');
|
|
26
|
-
const { commandExists } = require('../utils/common/shell');
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Pure Node.js implementation that works on any platform.
|
|
30
|
-
*
|
|
31
|
-
* This function spawns the `yarn` command with all provided arguments.
|
|
32
|
-
* It uses spawn with stdio: 'inherit' to:
|
|
33
|
-
* 1. Pass through all arguments exactly as provided
|
|
34
|
-
* 2. Preserve colored output from yarn
|
|
35
|
-
* 3. Allow interactive prompts if yarn needs user input
|
|
36
|
-
* 4. Properly forward stdin, stdout, and stderr
|
|
37
|
-
*
|
|
38
|
-
* The exit code from yarn is preserved and passed to the parent process,
|
|
39
|
-
* ensuring that CI/CD pipelines and scripts can detect yarn failures.
|
|
40
|
-
*
|
|
41
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
42
|
-
* @returns {Promise<void>}
|
|
43
|
-
*/
|
|
44
|
-
async function do_y_nodejs(args) {
|
|
45
|
-
// First, check if yarn is installed
|
|
46
|
-
if (!commandExists('yarn')) {
|
|
47
|
-
console.error('Error: yarn is not installed or not in PATH.');
|
|
48
|
-
console.error('');
|
|
49
|
-
console.error('To install yarn, you can use one of the following methods:');
|
|
50
|
-
console.error('');
|
|
51
|
-
console.error(' Using npm (recommended if you have Node.js):');
|
|
52
|
-
console.error(' npm install -g yarn');
|
|
53
|
-
console.error('');
|
|
54
|
-
console.error(' Using Corepack (Node.js 16.10+):');
|
|
55
|
-
console.error(' corepack enable');
|
|
56
|
-
console.error('');
|
|
57
|
-
console.error(' Using Homebrew (macOS):');
|
|
58
|
-
console.error(' brew install yarn');
|
|
59
|
-
console.error('');
|
|
60
|
-
console.error(' Using apt (Ubuntu/Debian):');
|
|
61
|
-
console.error(' sudo apt install yarn');
|
|
62
|
-
console.error('');
|
|
63
|
-
console.error('For more information, visit: https://yarnpkg.com/getting-started/install');
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Spawn yarn with all arguments, inheriting stdio for full interactivity
|
|
68
|
-
// This preserves:
|
|
69
|
-
// - Colored output (yarn uses colors extensively)
|
|
70
|
-
// - Interactive prompts (e.g., yarn init questions)
|
|
71
|
-
// - Progress indicators and spinners
|
|
72
|
-
// - Proper terminal width detection
|
|
73
|
-
return new Promise((resolve, reject) => {
|
|
74
|
-
const child = spawn('yarn', args, {
|
|
75
|
-
stdio: 'inherit', // Pass through stdin, stdout, stderr
|
|
76
|
-
shell: false // Run yarn directly, not through a shell (more efficient)
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
child.on('close', (code) => {
|
|
80
|
-
// Preserve yarn's exit code so CI/CD can detect failures
|
|
81
|
-
// Exit code 0 = success, non-zero = failure
|
|
82
|
-
if (code !== 0) {
|
|
83
|
-
process.exit(code);
|
|
84
|
-
}
|
|
85
|
-
resolve();
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
child.on('error', (err) => {
|
|
89
|
-
// This typically happens if yarn is not found (though we check above)
|
|
90
|
-
// or if there's a permission issue
|
|
91
|
-
console.error(`Error executing yarn: ${err.message}`);
|
|
92
|
-
process.exit(1);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Execute yarn on macOS.
|
|
99
|
-
*
|
|
100
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
101
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
102
|
-
*
|
|
103
|
-
* On macOS, yarn is typically installed via:
|
|
104
|
-
* - npm install -g yarn
|
|
105
|
-
* - brew install yarn
|
|
106
|
-
* - Corepack (corepack enable)
|
|
107
|
-
*
|
|
108
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
109
|
-
* @returns {Promise<void>}
|
|
110
|
-
*/
|
|
111
|
-
async function do_y_macos(args) {
|
|
112
|
-
return do_y_nodejs(args);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Execute yarn on Ubuntu.
|
|
117
|
-
*
|
|
118
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
119
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
120
|
-
*
|
|
121
|
-
* On Ubuntu, yarn is typically installed via:
|
|
122
|
-
* - npm install -g yarn
|
|
123
|
-
* - sudo apt install yarn (from official yarn repository)
|
|
124
|
-
* - Corepack (corepack enable)
|
|
125
|
-
*
|
|
126
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
127
|
-
* @returns {Promise<void>}
|
|
128
|
-
*/
|
|
129
|
-
async function do_y_ubuntu(args) {
|
|
130
|
-
return do_y_nodejs(args);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Execute yarn on Raspberry Pi OS.
|
|
135
|
-
*
|
|
136
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
137
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
138
|
-
*
|
|
139
|
-
* On Raspberry Pi OS, yarn is typically installed via:
|
|
140
|
-
* - npm install -g yarn
|
|
141
|
-
* - Corepack (corepack enable)
|
|
142
|
-
*
|
|
143
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
144
|
-
* @returns {Promise<void>}
|
|
145
|
-
*/
|
|
146
|
-
async function do_y_raspbian(args) {
|
|
147
|
-
return do_y_nodejs(args);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Execute yarn on Amazon Linux.
|
|
152
|
-
*
|
|
153
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
154
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
155
|
-
*
|
|
156
|
-
* On Amazon Linux, yarn is typically installed via:
|
|
157
|
-
* - npm install -g yarn
|
|
158
|
-
* - Corepack (corepack enable)
|
|
159
|
-
*
|
|
160
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
161
|
-
* @returns {Promise<void>}
|
|
162
|
-
*/
|
|
163
|
-
async function do_y_amazon_linux(args) {
|
|
164
|
-
return do_y_nodejs(args);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Execute yarn in Windows Command Prompt.
|
|
169
|
-
*
|
|
170
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
171
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
172
|
-
*
|
|
173
|
-
* On Windows, yarn is typically installed via:
|
|
174
|
-
* - npm install -g yarn
|
|
175
|
-
* - choco install yarn (Chocolatey)
|
|
176
|
-
* - winget install Yarn.Yarn
|
|
177
|
-
* - Corepack (corepack enable)
|
|
178
|
-
*
|
|
179
|
-
* Note: On Windows, yarn is typically installed as yarn.cmd or yarn.ps1,
|
|
180
|
-
* but spawn will find it correctly through the PATH.
|
|
181
|
-
*
|
|
182
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
183
|
-
* @returns {Promise<void>}
|
|
184
|
-
*/
|
|
185
|
-
async function do_y_cmd(args) {
|
|
186
|
-
return do_y_nodejs(args);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Execute yarn in Windows PowerShell.
|
|
191
|
-
*
|
|
192
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
193
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
194
|
-
*
|
|
195
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
196
|
-
* @returns {Promise<void>}
|
|
197
|
-
*/
|
|
198
|
-
async function do_y_powershell(args) {
|
|
199
|
-
return do_y_nodejs(args);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Execute yarn in Git Bash on Windows.
|
|
204
|
-
*
|
|
205
|
-
* Uses the pure Node.js implementation since yarn behaves identically
|
|
206
|
-
* on all platforms - it's a cross-platform tool by design.
|
|
207
|
-
*
|
|
208
|
-
* Git Bash can access Windows-installed yarn through the PATH.
|
|
209
|
-
*
|
|
210
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
211
|
-
* @returns {Promise<void>}
|
|
212
|
-
*/
|
|
213
|
-
async function do_y_gitbash(args) {
|
|
214
|
-
return do_y_nodejs(args);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Main entry point - detects environment and executes appropriate implementation.
|
|
219
|
-
*
|
|
220
|
-
* The "y" command is a shortcut for yarn, the JavaScript package manager.
|
|
221
|
-
* All arguments are passed through to yarn unchanged.
|
|
222
|
-
*
|
|
223
|
-
* This script is idempotent by nature - running yarn commands multiple times
|
|
224
|
-
* will produce consistent results (yarn itself handles idempotency for
|
|
225
|
-
* operations like install).
|
|
226
|
-
*
|
|
227
|
-
* Common usage patterns:
|
|
228
|
-
* y - Install dependencies (equivalent to yarn install)
|
|
229
|
-
* y add <package> - Add a new dependency
|
|
230
|
-
* y remove <package> - Remove a dependency
|
|
231
|
-
* y <script> - Run a script from package.json
|
|
232
|
-
* y upgrade - Upgrade dependencies
|
|
233
|
-
* y --help - Show yarn help
|
|
234
|
-
*
|
|
235
|
-
* @param {string[]} args - Command line arguments to pass to yarn
|
|
236
|
-
* @returns {Promise<void>}
|
|
237
|
-
*/
|
|
238
|
-
async function do_y(args) {
|
|
239
|
-
const platform = os.detect();
|
|
240
|
-
|
|
241
|
-
const handlers = {
|
|
242
|
-
'macos': do_y_macos,
|
|
243
|
-
'ubuntu': do_y_ubuntu,
|
|
244
|
-
'debian': do_y_ubuntu,
|
|
245
|
-
'raspbian': do_y_raspbian,
|
|
246
|
-
'amazon_linux': do_y_amazon_linux,
|
|
247
|
-
'rhel': do_y_amazon_linux,
|
|
248
|
-
'fedora': do_y_ubuntu,
|
|
249
|
-
'linux': do_y_ubuntu,
|
|
250
|
-
'wsl': do_y_ubuntu,
|
|
251
|
-
'cmd': do_y_cmd,
|
|
252
|
-
'windows': do_y_cmd,
|
|
253
|
-
'powershell': do_y_powershell,
|
|
254
|
-
'gitbash': do_y_gitbash
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
const handler = handlers[platform.type];
|
|
258
|
-
if (!handler) {
|
|
259
|
-
// Yarn is cross-platform, so try the Node.js implementation anyway
|
|
260
|
-
console.error(`Note: Platform '${platform.type}' not explicitly supported, attempting to run yarn...`);
|
|
261
|
-
await do_y_nodejs(args);
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
await handler(args);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
module.exports = {
|
|
269
|
-
main: do_y,
|
|
270
|
-
do_y,
|
|
271
|
-
do_y_nodejs,
|
|
272
|
-
do_y_macos,
|
|
273
|
-
do_y_ubuntu,
|
|
274
|
-
do_y_raspbian,
|
|
275
|
-
do_y_amazon_linux,
|
|
276
|
-
do_y_cmd,
|
|
277
|
-
do_y_powershell,
|
|
278
|
-
do_y_gitbash
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
if (require.main === module) {
|
|
282
|
-
do_y(process.argv.slice(2));
|
|
283
|
-
}
|
package/src/utils/README.md
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Utils
|
|
2
|
-
|
|
3
|
-
This folder contains internal shared utilities used by Commands, Scripts, and Installs.
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
Utils provide common functionality that is reused across the package. These are **not** directly invokable by users — they are internal helpers.
|
|
8
|
-
|
|
9
|
-
## Planned Utilities
|
|
10
|
-
|
|
11
|
-
| File | Description |
|
|
12
|
-
|------|-------------|
|
|
13
|
-
| `os.js` | Operating system detection (macOS, Debian, RHEL, Windows, WSL) |
|
|
14
|
-
| `shell.js` | Shell command execution wrappers |
|
|
15
|
-
| `config.js` | Read/write `~/.devutils` configuration file |
|
|
16
|
-
| `prompts.js` | Interactive user prompts and wizards |
|
|
17
|
-
| `logger.js` | Consistent logging and output formatting |
|
|
18
|
-
| `paths.js` | Path resolution and home directory helpers |
|
|
19
|
-
| `git.js` | Git repository detection and operations |
|
|
20
|
-
| `npm.js` | npm/package.json utilities |
|
|
21
|
-
|
|
22
|
-
## Example: OS Detection
|
|
23
|
-
|
|
24
|
-
```javascript
|
|
25
|
-
// utils/os.js
|
|
26
|
-
|
|
27
|
-
function detect() {
|
|
28
|
-
const platform = process.platform;
|
|
29
|
-
|
|
30
|
-
if (platform === 'darwin') {
|
|
31
|
-
return { type: 'macos', packageManager: 'brew' };
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (platform === 'linux') {
|
|
35
|
-
// Check for WSL
|
|
36
|
-
if (process.env.WSL_DISTRO_NAME) {
|
|
37
|
-
return { type: 'windows-wsl', packageManager: 'apt' };
|
|
38
|
-
}
|
|
39
|
-
// Check for Debian-based (apt)
|
|
40
|
-
if (fs.existsSync('/etc/debian_version')) {
|
|
41
|
-
return { type: 'debian', packageManager: 'apt' };
|
|
42
|
-
}
|
|
43
|
-
// Check for RHEL-based (yum/dnf)
|
|
44
|
-
if (fs.existsSync('/etc/redhat-release')) {
|
|
45
|
-
return { type: 'rhel', packageManager: 'dnf' };
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (platform === 'win32') {
|
|
50
|
-
return { type: 'windows', packageManager: 'choco' };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return { type: 'unknown', packageManager: null };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
module.exports = { detect };
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Example: Config Helper
|
|
60
|
-
|
|
61
|
-
```javascript
|
|
62
|
-
// utils/config.js
|
|
63
|
-
const fs = require('fs');
|
|
64
|
-
const path = require('path');
|
|
65
|
-
const os = require('os');
|
|
66
|
-
|
|
67
|
-
const CONFIG_PATH = path.join(os.homedir(), '.devutils');
|
|
68
|
-
|
|
69
|
-
function read() {
|
|
70
|
-
if (!fs.existsSync(CONFIG_PATH)) {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
return JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function write(config) {
|
|
77
|
-
config.updated = new Date().toISOString();
|
|
78
|
-
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
module.exports = { read, write, CONFIG_PATH };
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Guidelines
|
|
85
|
-
|
|
86
|
-
1. **Single responsibility** — Each util should do one thing well
|
|
87
|
-
2. **No side effects** — Avoid global state; return values instead
|
|
88
|
-
3. **Error handling** — Throw descriptive errors; let callers handle them
|
|
89
|
-
4. **Platform-aware** — Consider cross-platform compatibility
|
|
90
|
-
|
|
91
|
-
## Related
|
|
92
|
-
|
|
93
|
-
- **Commands** (`../commands/`) — Use utils for common operations
|
|
94
|
-
- **Scripts** (`../scripts/`) — Use utils for OS detection, shell execution
|
|
95
|
-
- **Installs** (`../installs/`) — Use `os.js` for platform detection
|
package/src/utils/common/apps.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Generic Application Detection Utilities
|
|
5
|
-
*
|
|
6
|
-
* Cross-platform utilities for detecting installed applications.
|
|
7
|
-
* Delegates to OS-specific implementations for actual detection.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const osUtils = require('./os');
|
|
11
|
-
const shell = require('./shell');
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Cross-platform check if an application is installed
|
|
15
|
-
* Delegates to OS-specific implementations
|
|
16
|
-
* @param {string} appName - The application name to check
|
|
17
|
-
* @returns {Promise<boolean>}
|
|
18
|
-
*/
|
|
19
|
-
async function isInstalled(appName) {
|
|
20
|
-
const platform = osUtils.detect();
|
|
21
|
-
|
|
22
|
-
switch (platform.type) {
|
|
23
|
-
case 'macos': {
|
|
24
|
-
const macosApps = require('../macos/apps');
|
|
25
|
-
return macosApps.isAppInstalled(appName);
|
|
26
|
-
}
|
|
27
|
-
case 'ubuntu':
|
|
28
|
-
case 'debian':
|
|
29
|
-
case 'raspbian': {
|
|
30
|
-
const apt = require('../ubuntu/apt');
|
|
31
|
-
const snap = require('../ubuntu/snap');
|
|
32
|
-
// Check both apt and snap
|
|
33
|
-
const aptInstalled = await apt.isPackageInstalled(appName);
|
|
34
|
-
if (aptInstalled) return true;
|
|
35
|
-
const snapInstalled = await snap.isSnapInstalled(appName);
|
|
36
|
-
return snapInstalled;
|
|
37
|
-
}
|
|
38
|
-
case 'windows': {
|
|
39
|
-
const registry = require('../windows/registry');
|
|
40
|
-
return registry.isAppInstalled(appName);
|
|
41
|
-
}
|
|
42
|
-
default:
|
|
43
|
-
// Fallback: check if command exists in PATH
|
|
44
|
-
return shell.commandExists(appName);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Retrieves the installed version of an application
|
|
50
|
-
* @param {string} appName - The application name
|
|
51
|
-
* @returns {Promise<string|null>}
|
|
52
|
-
*/
|
|
53
|
-
async function getVersion(appName) {
|
|
54
|
-
const platform = osUtils.detect();
|
|
55
|
-
|
|
56
|
-
switch (platform.type) {
|
|
57
|
-
case 'macos': {
|
|
58
|
-
const macosApps = require('../macos/apps');
|
|
59
|
-
return macosApps.getAppVersion(appName);
|
|
60
|
-
}
|
|
61
|
-
case 'ubuntu':
|
|
62
|
-
case 'debian':
|
|
63
|
-
case 'raspbian': {
|
|
64
|
-
const apt = require('../ubuntu/apt');
|
|
65
|
-
const snap = require('../ubuntu/snap');
|
|
66
|
-
// Check apt first
|
|
67
|
-
const aptVersion = await apt.getPackageVersion(appName);
|
|
68
|
-
if (aptVersion) return aptVersion;
|
|
69
|
-
// Then snap
|
|
70
|
-
const snapVersion = await snap.getSnapVersion(appName);
|
|
71
|
-
return snapVersion;
|
|
72
|
-
}
|
|
73
|
-
case 'windows': {
|
|
74
|
-
const registry = require('../windows/registry');
|
|
75
|
-
return registry.getAppVersion(appName);
|
|
76
|
-
}
|
|
77
|
-
default:
|
|
78
|
-
// Fallback: try running appName --version
|
|
79
|
-
return getVersionFromCommand(appName);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Returns the installation path of an application
|
|
85
|
-
* @param {string} appName - The application name
|
|
86
|
-
* @returns {Promise<string|null>}
|
|
87
|
-
*/
|
|
88
|
-
async function getInstallPath(appName) {
|
|
89
|
-
const platform = osUtils.detect();
|
|
90
|
-
|
|
91
|
-
switch (platform.type) {
|
|
92
|
-
case 'macos': {
|
|
93
|
-
const macosApps = require('../macos/apps');
|
|
94
|
-
return macosApps.getAppBundlePath(appName);
|
|
95
|
-
}
|
|
96
|
-
case 'windows': {
|
|
97
|
-
const registry = require('../windows/registry');
|
|
98
|
-
return registry.getInstallPath(appName);
|
|
99
|
-
}
|
|
100
|
-
default:
|
|
101
|
-
// Fallback: try to find the executable
|
|
102
|
-
return shell.which(appName);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Tries to get version by running the command with --version flag
|
|
108
|
-
* @param {string} command - The command to check
|
|
109
|
-
* @returns {Promise<string|null>}
|
|
110
|
-
*/
|
|
111
|
-
async function getVersionFromCommand(command) {
|
|
112
|
-
const versionFlags = ['--version', '-v', '-V', 'version'];
|
|
113
|
-
|
|
114
|
-
for (const flag of versionFlags) {
|
|
115
|
-
const result = await shell.exec(`${command} ${flag}`);
|
|
116
|
-
if (result.code === 0 && result.stdout) {
|
|
117
|
-
// Try to extract version number from output
|
|
118
|
-
const versionMatch = result.stdout.match(/(\d+\.\d+\.?\d*)/);
|
|
119
|
-
if (versionMatch) {
|
|
120
|
-
return versionMatch[1];
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Checks if a command-line tool is available
|
|
130
|
-
* @param {string} command - The command to check
|
|
131
|
-
* @returns {boolean}
|
|
132
|
-
*/
|
|
133
|
-
function isCommandAvailable(command) {
|
|
134
|
-
return shell.commandExists(command);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
module.exports = {
|
|
138
|
-
isInstalled,
|
|
139
|
-
getVersion,
|
|
140
|
-
getInstallPath,
|
|
141
|
-
getVersionFromCommand,
|
|
142
|
-
isCommandAvailable
|
|
143
|
-
};
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Display and GUI Detection Utilities
|
|
5
|
-
*
|
|
6
|
-
* Platform-agnostic utilities for detecting display server availability.
|
|
7
|
-
* Used to determine if GUI applications can be installed/run.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const fs = require('fs');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Checks if a display server is available
|
|
14
|
-
* On macOS: Always true (Aqua/Quartz is always present)
|
|
15
|
-
* On Windows: Always true (Windows Desktop is always present)
|
|
16
|
-
* On Linux: Checks for X11 or Wayland display
|
|
17
|
-
* @returns {boolean}
|
|
18
|
-
*/
|
|
19
|
-
function hasDisplay() {
|
|
20
|
-
const platform = process.platform;
|
|
21
|
-
|
|
22
|
-
// macOS always has a display (Aqua/Quartz)
|
|
23
|
-
if (platform === 'darwin') {
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Windows always has a display (unless running as a service, which is rare)
|
|
28
|
-
if (platform === 'win32') {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Linux: check for X11 or Wayland
|
|
33
|
-
if (platform === 'linux') {
|
|
34
|
-
return hasX11Display() || hasWaylandDisplay();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Checks if running in a headless environment (no GUI)
|
|
42
|
-
* @returns {boolean}
|
|
43
|
-
*/
|
|
44
|
-
function isHeadless() {
|
|
45
|
-
return !hasDisplay();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Checks if X11 display is available
|
|
50
|
-
* @returns {boolean}
|
|
51
|
-
*/
|
|
52
|
-
function hasX11Display() {
|
|
53
|
-
// Check DISPLAY environment variable
|
|
54
|
-
if (process.env.DISPLAY) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Check if X server socket exists
|
|
59
|
-
const x11SocketPath = '/tmp/.X11-unix';
|
|
60
|
-
if (fs.existsSync(x11SocketPath)) {
|
|
61
|
-
try {
|
|
62
|
-
const sockets = fs.readdirSync(x11SocketPath);
|
|
63
|
-
return sockets.length > 0;
|
|
64
|
-
} catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Checks if Wayland display is available
|
|
74
|
-
* @returns {boolean}
|
|
75
|
-
*/
|
|
76
|
-
function hasWaylandDisplay() {
|
|
77
|
-
// Check WAYLAND_DISPLAY environment variable
|
|
78
|
-
if (process.env.WAYLAND_DISPLAY) {
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Check if Wayland socket exists in XDG_RUNTIME_DIR
|
|
83
|
-
const runtimeDir = process.env.XDG_RUNTIME_DIR;
|
|
84
|
-
if (runtimeDir) {
|
|
85
|
-
const waylandSocketPath = `${runtimeDir}/wayland-0`;
|
|
86
|
-
if (fs.existsSync(waylandSocketPath)) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Gets the type of display server in use
|
|
96
|
-
* @returns {'aqua'|'windows'|'x11'|'wayland'|null}
|
|
97
|
-
*/
|
|
98
|
-
function getDisplayType() {
|
|
99
|
-
const platform = process.platform;
|
|
100
|
-
|
|
101
|
-
if (platform === 'darwin') {
|
|
102
|
-
return 'aqua';
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (platform === 'win32') {
|
|
106
|
-
return 'windows';
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (platform === 'linux') {
|
|
110
|
-
if (hasWaylandDisplay()) {
|
|
111
|
-
return 'wayland';
|
|
112
|
-
}
|
|
113
|
-
if (hasX11Display()) {
|
|
114
|
-
return 'x11';
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Gets the display variable value (DISPLAY or WAYLAND_DISPLAY)
|
|
123
|
-
* @returns {string|null}
|
|
124
|
-
*/
|
|
125
|
-
function getDisplayVariable() {
|
|
126
|
-
if (process.env.WAYLAND_DISPLAY) {
|
|
127
|
-
return process.env.WAYLAND_DISPLAY;
|
|
128
|
-
}
|
|
129
|
-
if (process.env.DISPLAY) {
|
|
130
|
-
return process.env.DISPLAY;
|
|
131
|
-
}
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Checks if SSH session has X11 forwarding enabled
|
|
137
|
-
* @returns {boolean}
|
|
138
|
-
*/
|
|
139
|
-
function hasX11Forwarding() {
|
|
140
|
-
// Check if we're in an SSH session with DISPLAY set
|
|
141
|
-
if (process.env.SSH_CONNECTION && process.env.DISPLAY) {
|
|
142
|
-
// DISPLAY typically looks like "localhost:10.0" for X11 forwarding
|
|
143
|
-
const display = process.env.DISPLAY;
|
|
144
|
-
return display.includes(':');
|
|
145
|
-
}
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
module.exports = {
|
|
150
|
-
hasDisplay,
|
|
151
|
-
isHeadless,
|
|
152
|
-
hasX11Display,
|
|
153
|
-
hasWaylandDisplay,
|
|
154
|
-
getDisplayType,
|
|
155
|
-
getDisplayVariable,
|
|
156
|
-
hasX11Forwarding
|
|
157
|
-
};
|