@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
|
@@ -1,44 +1,568 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @fileoverview Install Microsoft Office 365.
|
|
4
|
+
* @fileoverview Install Microsoft Office 365 (Microsoft 365).
|
|
5
5
|
* @module installs/microsoft-office
|
|
6
|
+
*
|
|
7
|
+
* Microsoft Office 365 (now branded as Microsoft 365) is a subscription-based
|
|
8
|
+
* productivity suite that includes Word, Excel, PowerPoint, Outlook, OneNote,
|
|
9
|
+
* and OneDrive for document creation, collaboration, and communication.
|
|
10
|
+
*
|
|
11
|
+
* IMPORTANT PLATFORM LIMITATION:
|
|
12
|
+
* Microsoft Office 365 is officially supported ONLY on macOS and Windows.
|
|
13
|
+
* There is NO native Linux support from Microsoft, which affects Ubuntu, Debian,
|
|
14
|
+
* Raspberry Pi OS, Amazon Linux, and other Linux distributions.
|
|
15
|
+
*
|
|
16
|
+
* For unsupported platforms, this installer will display a simple message
|
|
17
|
+
* and return gracefully without error.
|
|
6
18
|
*/
|
|
7
19
|
|
|
8
20
|
const os = require('../utils/common/os');
|
|
21
|
+
const shell = require('../utils/common/shell');
|
|
22
|
+
const brew = require('../utils/macos/brew');
|
|
23
|
+
const macosApps = require('../utils/macos/apps');
|
|
24
|
+
const choco = require('../utils/windows/choco');
|
|
25
|
+
const windowsShell = require('../utils/windows/shell');
|
|
26
|
+
const fs = require('fs');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Whether this installer requires a desktop environment to function.
|
|
30
|
+
* Microsoft Office is a GUI productivity suite.
|
|
31
|
+
*/
|
|
32
|
+
const REQUIRES_DESKTOP = true;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Application names to check for on macOS after installation.
|
|
36
|
+
* Microsoft Office installs multiple applications to /Applications/.
|
|
37
|
+
*/
|
|
38
|
+
const MACOS_OFFICE_APPS = [
|
|
39
|
+
'Microsoft Word.app',
|
|
40
|
+
'Microsoft Excel.app',
|
|
41
|
+
'Microsoft PowerPoint.app',
|
|
42
|
+
'Microsoft Outlook.app',
|
|
43
|
+
'Microsoft OneNote.app'
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The Homebrew cask name for Microsoft Office suite.
|
|
48
|
+
*/
|
|
49
|
+
const HOMEBREW_CASK_NAME = 'microsoft-office';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The Chocolatey package name for Microsoft 365 Apps.
|
|
53
|
+
*/
|
|
54
|
+
const CHOCO_PACKAGE_NAME = 'office365proplus';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Windows installation path where Microsoft Office may be installed.
|
|
58
|
+
* This is the primary executable used to verify installation.
|
|
59
|
+
*/
|
|
60
|
+
const WINDOWS_OFFICE_PATH = 'C:\\Program Files\\Microsoft Office\\root\\Office16\\WINWORD.EXE';
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if Microsoft Office is installed on macOS.
|
|
64
|
+
*
|
|
65
|
+
* Microsoft Office installs multiple applications (Word, Excel, PowerPoint, etc.)
|
|
66
|
+
* to /Applications/. We check for the presence of Microsoft Word as the primary
|
|
67
|
+
* indicator since all Office apps are installed together via the cask.
|
|
68
|
+
*
|
|
69
|
+
* @returns {boolean} True if Microsoft Office is installed, false otherwise
|
|
70
|
+
*/
|
|
71
|
+
function isInstalledMacOS() {
|
|
72
|
+
// Check for Microsoft Word as the primary indicator
|
|
73
|
+
// The macosApps.isAppInstalled function checks /Applications/ and ~/Applications/
|
|
74
|
+
return macosApps.isAppInstalled('Microsoft Word');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Check if Microsoft Office is installed on Windows.
|
|
79
|
+
*
|
|
80
|
+
* Checks the standard installation path for Microsoft Office. This provides
|
|
81
|
+
* a reliable and fast way to verify installation without relying on slower
|
|
82
|
+
* package manager list commands.
|
|
83
|
+
*
|
|
84
|
+
* @returns {Promise<boolean>} True if Microsoft Office is installed, false otherwise
|
|
85
|
+
*/
|
|
86
|
+
async function isInstalledWindows() {
|
|
87
|
+
// Check if the Word executable exists in the standard location
|
|
88
|
+
const result = await windowsShell.execPowerShell(`Test-Path '${WINDOWS_OFFICE_PATH}'`);
|
|
89
|
+
if (result.success && result.stdout.trim().toLowerCase() === 'true') {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Fallback: check via Chocolatey if the path check fails
|
|
94
|
+
// (in case of non-standard installation location)
|
|
95
|
+
const isPackageInstalled = await choco.isPackageInstalled(CHOCO_PACKAGE_NAME);
|
|
96
|
+
return isPackageInstalled;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Install Microsoft Office 365 on macOS using Homebrew.
|
|
101
|
+
*
|
|
102
|
+
* Prerequisites:
|
|
103
|
+
* - macOS 13 (Ventura) or later (Microsoft 365 supports current and two previous releases)
|
|
104
|
+
* - Homebrew package manager installed
|
|
105
|
+
* - At least 10 GB free disk space
|
|
106
|
+
* - Administrator privileges (may prompt for password)
|
|
107
|
+
*
|
|
108
|
+
* The installation uses the Homebrew cask 'microsoft-office' which downloads
|
|
109
|
+
* and installs the complete Microsoft Office suite including Word, Excel,
|
|
110
|
+
* PowerPoint, Outlook, OneNote, and OneDrive.
|
|
111
|
+
*
|
|
112
|
+
* NOTE: After installation, the user must sign in with their Microsoft account
|
|
113
|
+
* to activate the license. This sign-in step requires user interaction and
|
|
114
|
+
* cannot be automated.
|
|
115
|
+
*
|
|
116
|
+
* @returns {Promise<void>}
|
|
117
|
+
* @throws {Error} If Homebrew is not installed or installation fails
|
|
118
|
+
*/
|
|
119
|
+
async function install_macos() {
|
|
120
|
+
console.log('Checking if Microsoft Office is already installed...');
|
|
121
|
+
|
|
122
|
+
// Check if already installed using direct app check
|
|
123
|
+
if (isInstalledMacOS()) {
|
|
124
|
+
console.log('Microsoft Office is already installed, skipping installation.');
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Verify Homebrew is available before attempting installation
|
|
129
|
+
if (!brew.isInstalled()) {
|
|
130
|
+
throw new Error(
|
|
131
|
+
'Homebrew is not installed. Please install Homebrew first using:\n' +
|
|
132
|
+
' dev install homebrew\n' +
|
|
133
|
+
'Then retry installing Microsoft Office.'
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.log('Installing Microsoft Office via Homebrew...');
|
|
138
|
+
console.log('This may take several minutes due to the large download size.');
|
|
139
|
+
|
|
140
|
+
// Install the cask - this installs the complete Office suite
|
|
141
|
+
// Note: This may prompt for administrator password for system components
|
|
142
|
+
const result = await brew.installCask(HOMEBREW_CASK_NAME);
|
|
143
|
+
|
|
144
|
+
if (!result.success) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
`Failed to install Microsoft Office via Homebrew.\n` +
|
|
147
|
+
`Output: ${result.output}\n\n` +
|
|
148
|
+
`Troubleshooting:\n` +
|
|
149
|
+
` 1. Run 'brew update && brew cleanup' and retry\n` +
|
|
150
|
+
` 2. If installation conflicts exist, remove individual Office apps first:\n` +
|
|
151
|
+
` brew uninstall --cask microsoft-word microsoft-excel microsoft-powerpoint microsoft-outlook microsoft-onenote 2>/dev/null || true\n` +
|
|
152
|
+
` 3. Ensure you have at least 10 GB free disk space\n` +
|
|
153
|
+
` 4. Check macOS version - Microsoft Office requires macOS 13 (Ventura) or later`
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Verify the installation succeeded by checking if Word exists
|
|
158
|
+
if (!isInstalledMacOS()) {
|
|
159
|
+
throw new Error(
|
|
160
|
+
'Installation appeared to complete but Microsoft Office was not found.\n' +
|
|
161
|
+
'Expected applications in /Applications/ (e.g., Microsoft Word.app)\n\n' +
|
|
162
|
+
'Please try reinstalling manually: brew reinstall --cask microsoft-office'
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
console.log('Microsoft Office installed successfully.');
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log('Installed applications:');
|
|
169
|
+
console.log(' - Microsoft Word');
|
|
170
|
+
console.log(' - Microsoft Excel');
|
|
171
|
+
console.log(' - Microsoft PowerPoint');
|
|
172
|
+
console.log(' - Microsoft Outlook');
|
|
173
|
+
console.log(' - Microsoft OneNote');
|
|
174
|
+
console.log(' - OneDrive');
|
|
175
|
+
console.log('');
|
|
176
|
+
console.log('IMPORTANT: Please launch any Office application and sign in with your');
|
|
177
|
+
console.log('Microsoft account to activate your Microsoft 365 subscription.');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Install Microsoft Office 365 on Ubuntu/Debian.
|
|
182
|
+
*
|
|
183
|
+
* IMPORTANT: Microsoft Office 365 is NOT officially supported on Ubuntu or Debian.
|
|
184
|
+
* Microsoft does not provide native Linux packages, and there is no APT or Snap package.
|
|
185
|
+
*
|
|
186
|
+
* @returns {Promise<void>}
|
|
187
|
+
*/
|
|
188
|
+
async function install_ubuntu() {
|
|
189
|
+
console.log('Microsoft Office 365 is not available for Ubuntu/Debian.');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Install Microsoft Office 365 on Raspberry Pi OS.
|
|
194
|
+
*
|
|
195
|
+
* IMPORTANT: Microsoft Office 365 is NOT supported on Raspberry Pi OS.
|
|
196
|
+
* Microsoft Office is designed for x86/x64 architectures (Intel/AMD processors),
|
|
197
|
+
* not ARM architecture. Even with Wine, Office would not function properly due
|
|
198
|
+
* to the ARM architecture.
|
|
199
|
+
*
|
|
200
|
+
* @returns {Promise<void>}
|
|
201
|
+
*/
|
|
202
|
+
async function install_raspbian() {
|
|
203
|
+
console.log('Microsoft Office 365 is not available for Raspberry Pi OS.');
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Install Microsoft Office 365 on Amazon Linux/RHEL.
|
|
208
|
+
*
|
|
209
|
+
* IMPORTANT: Microsoft Office 365 is NOT officially supported on Amazon Linux or RHEL.
|
|
210
|
+
* Microsoft does not provide packages for any Linux distribution.
|
|
211
|
+
*
|
|
212
|
+
* @returns {Promise<void>}
|
|
213
|
+
*/
|
|
214
|
+
async function install_amazon_linux() {
|
|
215
|
+
console.log('Microsoft Office 365 is not available for Amazon Linux/RHEL.');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Install Microsoft Office 365 on Windows using Chocolatey.
|
|
220
|
+
*
|
|
221
|
+
* Prerequisites:
|
|
222
|
+
* - Windows 10 version 1903 or later (64-bit), or Windows 11
|
|
223
|
+
* - Chocolatey package manager installed
|
|
224
|
+
* - At least 4 GB RAM and 10 GB free disk space
|
|
225
|
+
* - Administrator privileges
|
|
226
|
+
* - Valid Microsoft 365 subscription (required after installation for activation)
|
|
227
|
+
*
|
|
228
|
+
* The installation uses the Chocolatey package 'office365proplus' which downloads
|
|
229
|
+
* and installs Microsoft 365 Apps including Word, Excel, PowerPoint, Outlook,
|
|
230
|
+
* OneNote, Access, and Publisher.
|
|
231
|
+
*
|
|
232
|
+
* NOTE: After installation, the user must sign in with their Microsoft account.
|
|
233
|
+
* This sign-in step cannot be automated without enterprise deployment tools.
|
|
234
|
+
*
|
|
235
|
+
* @returns {Promise<void>}
|
|
236
|
+
* @throws {Error} If Chocolatey is not installed or installation fails
|
|
237
|
+
*/
|
|
238
|
+
async function install_windows() {
|
|
239
|
+
console.log('Checking if Microsoft Office is already installed...');
|
|
240
|
+
|
|
241
|
+
// Check if already installed
|
|
242
|
+
const alreadyInstalled = await isInstalledWindows();
|
|
243
|
+
if (alreadyInstalled) {
|
|
244
|
+
console.log('Microsoft Office is already installed, skipping installation.');
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Verify Chocolatey is available
|
|
249
|
+
if (!choco.isInstalled()) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
'Chocolatey is not installed.\n\n' +
|
|
252
|
+
'To install Chocolatey, open an Administrator PowerShell and run:\n' +
|
|
253
|
+
' Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))\n\n' +
|
|
254
|
+
'Then retry installing Microsoft Office.'
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
console.log('Installing Microsoft Office via Chocolatey...');
|
|
259
|
+
console.log('This may take several minutes due to the large download size.');
|
|
260
|
+
|
|
261
|
+
// Install using Chocolatey with auto-confirm flag
|
|
262
|
+
const result = await choco.install(CHOCO_PACKAGE_NAME);
|
|
263
|
+
|
|
264
|
+
if (!result.success) {
|
|
265
|
+
throw new Error(
|
|
266
|
+
`Failed to install Microsoft Office via Chocolatey.\n` +
|
|
267
|
+
`Output: ${result.output}\n\n` +
|
|
268
|
+
`Troubleshooting:\n` +
|
|
269
|
+
` 1. Ensure you are running as Administrator\n` +
|
|
270
|
+
` 2. If a previous installation exists, remove it first using:\n` +
|
|
271
|
+
` choco uninstall office365proplus -y\n` +
|
|
272
|
+
` 3. Ensure you have at least 10 GB free disk space\n` +
|
|
273
|
+
` 4. Check for conflicting Office installations in Control Panel`
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Verify installation succeeded
|
|
278
|
+
const verified = await isInstalledWindows();
|
|
279
|
+
if (!verified) {
|
|
280
|
+
throw new Error(
|
|
281
|
+
'Installation appeared to complete but Microsoft Office was not found.\n' +
|
|
282
|
+
`Expected: ${WINDOWS_OFFICE_PATH}\n\n` +
|
|
283
|
+
'A system restart may be required. Please restart your computer and check\n' +
|
|
284
|
+
'if Microsoft Office appears in the Start menu.'
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
console.log('Microsoft Office installed successfully.');
|
|
289
|
+
console.log('');
|
|
290
|
+
console.log('Installed applications:');
|
|
291
|
+
console.log(' - Microsoft Word');
|
|
292
|
+
console.log(' - Microsoft Excel');
|
|
293
|
+
console.log(' - Microsoft PowerPoint');
|
|
294
|
+
console.log(' - Microsoft Outlook');
|
|
295
|
+
console.log(' - Microsoft OneNote');
|
|
296
|
+
console.log(' - Microsoft Access');
|
|
297
|
+
console.log(' - Microsoft Publisher');
|
|
298
|
+
console.log('');
|
|
299
|
+
console.log('IMPORTANT: Please launch any Office application and sign in with your');
|
|
300
|
+
console.log('Microsoft account to activate your Microsoft 365 subscription.');
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Install Microsoft Office 365 from Ubuntu running in WSL (Windows Subsystem for Linux).
|
|
305
|
+
*
|
|
306
|
+
* IMPORTANT: Microsoft Office 365 cannot be installed or run inside WSL because WSL
|
|
307
|
+
* runs a Linux environment and Microsoft does not support Office on Linux.
|
|
308
|
+
*
|
|
309
|
+
* This function installs Microsoft Office on the Windows HOST instead, which is the
|
|
310
|
+
* recommended approach. After installation, Office applications can be launched from
|
|
311
|
+
* WSL using Windows interop, and files can be accessed via /mnt/c/.
|
|
312
|
+
*
|
|
313
|
+
* @returns {Promise<void>}
|
|
314
|
+
* @throws {Error} If Chocolatey is not available on Windows host or installation fails
|
|
315
|
+
*/
|
|
316
|
+
async function install_ubuntu_wsl() {
|
|
317
|
+
console.log('Detected Ubuntu running in WSL (Windows Subsystem for Linux).');
|
|
318
|
+
console.log('');
|
|
319
|
+
console.log('Microsoft Office 365 cannot run inside WSL because WSL runs a Linux');
|
|
320
|
+
console.log('environment and Microsoft does not support Office on Linux.');
|
|
321
|
+
console.log('');
|
|
322
|
+
console.log('Installing Microsoft Office on the Windows HOST instead...');
|
|
323
|
+
console.log('');
|
|
324
|
+
|
|
325
|
+
// Check if already installed on Windows host via PowerShell interop
|
|
326
|
+
console.log('Checking if Microsoft Office is already installed on Windows host...');
|
|
327
|
+
|
|
328
|
+
const checkResult = await shell.exec(
|
|
329
|
+
`powershell.exe -NoProfile -Command "Test-Path '${WINDOWS_OFFICE_PATH.replace(/\\/g, '\\\\')}'"`
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
if (checkResult.code === 0 && checkResult.stdout.trim().toLowerCase() === 'true') {
|
|
333
|
+
console.log('Microsoft Office is already installed on the Windows host, skipping installation.');
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log('You can launch Office applications from WSL using:');
|
|
336
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/WINWORD.EXE" &');
|
|
337
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/EXCEL.EXE" &');
|
|
338
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/POWERPNT.EXE" &');
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Install via PowerShell interop using Chocolatey on the Windows host
|
|
343
|
+
console.log('Installing Microsoft Office on Windows host via Chocolatey...');
|
|
344
|
+
console.log('This may take several minutes due to the large download size.');
|
|
345
|
+
|
|
346
|
+
const installResult = await shell.exec(
|
|
347
|
+
`powershell.exe -NoProfile -Command "choco install ${CHOCO_PACKAGE_NAME} -y"`
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
if (installResult.code !== 0) {
|
|
351
|
+
throw new Error(
|
|
352
|
+
`Failed to install Microsoft Office on the Windows host.\n` +
|
|
353
|
+
`Output: ${installResult.stdout || installResult.stderr}\n\n` +
|
|
354
|
+
`Troubleshooting:\n` +
|
|
355
|
+
` 1. Ensure Chocolatey is installed on Windows\n` +
|
|
356
|
+
` 2. Open a Windows PowerShell as Administrator and run:\n` +
|
|
357
|
+
` choco install office365proplus -y\n` +
|
|
358
|
+
` 3. Check if you have administrator privileges`
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Verify installation succeeded
|
|
363
|
+
const verifyResult = await shell.exec(
|
|
364
|
+
`powershell.exe -NoProfile -Command "Test-Path '${WINDOWS_OFFICE_PATH.replace(/\\/g, '\\\\')}'"`
|
|
365
|
+
);
|
|
366
|
+
|
|
367
|
+
if (verifyResult.code !== 0 || verifyResult.stdout.trim().toLowerCase() !== 'true') {
|
|
368
|
+
throw new Error(
|
|
369
|
+
'Installation appeared to complete but Microsoft Office was not found on the Windows host.\n\n' +
|
|
370
|
+
'A system restart may be required. Please restart Windows and check\n' +
|
|
371
|
+
'if Microsoft Office appears in the Start menu.\n\n' +
|
|
372
|
+
'To install manually from Windows PowerShell (as Administrator):\n' +
|
|
373
|
+
' choco install office365proplus -y'
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
console.log('Microsoft Office installed successfully on the Windows host.');
|
|
378
|
+
console.log('');
|
|
379
|
+
console.log('You can launch Office applications from WSL using:');
|
|
380
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/WINWORD.EXE" &');
|
|
381
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/EXCEL.EXE" &');
|
|
382
|
+
console.log(' "/mnt/c/Program Files/Microsoft Office/root/Office16/POWERPNT.EXE" &');
|
|
383
|
+
console.log('');
|
|
384
|
+
console.log('IMPORTANT: Please launch any Office application from Windows and sign in');
|
|
385
|
+
console.log('with your Microsoft account to activate your Microsoft 365 subscription.');
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Install Microsoft Office 365 from Git Bash on Windows.
|
|
390
|
+
*
|
|
391
|
+
* Git Bash runs within Windows, so this function installs Microsoft Office
|
|
392
|
+
* on the Windows host using Chocolatey via PowerShell interop.
|
|
393
|
+
*
|
|
394
|
+
* @returns {Promise<void>}
|
|
395
|
+
* @throws {Error} If Chocolatey is not available or installation fails
|
|
396
|
+
*/
|
|
397
|
+
async function install_gitbash() {
|
|
398
|
+
console.log('Detected Git Bash on Windows.');
|
|
399
|
+
console.log('Installing Microsoft Office on the Windows host...');
|
|
400
|
+
console.log('');
|
|
401
|
+
|
|
402
|
+
// Check if already installed on Windows host via PowerShell
|
|
403
|
+
console.log('Checking if Microsoft Office is already installed...');
|
|
404
|
+
|
|
405
|
+
const checkResult = await shell.exec(
|
|
406
|
+
`powershell.exe -NoProfile -Command "Test-Path '${WINDOWS_OFFICE_PATH.replace(/\\/g, '\\\\')}'"`
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
if (checkResult.code === 0 && checkResult.stdout.trim().toLowerCase() === 'true') {
|
|
410
|
+
console.log('Microsoft Office is already installed, skipping installation.');
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// Install via PowerShell using Chocolatey
|
|
415
|
+
console.log('Installing Microsoft Office via Chocolatey...');
|
|
416
|
+
console.log('This may take several minutes due to the large download size.');
|
|
417
|
+
|
|
418
|
+
const installResult = await shell.exec(
|
|
419
|
+
`powershell.exe -NoProfile -Command "choco install ${CHOCO_PACKAGE_NAME} -y"`
|
|
420
|
+
);
|
|
421
|
+
|
|
422
|
+
if (installResult.code !== 0) {
|
|
423
|
+
throw new Error(
|
|
424
|
+
`Failed to install Microsoft Office.\n` +
|
|
425
|
+
`Output: ${installResult.stdout || installResult.stderr}\n\n` +
|
|
426
|
+
`Troubleshooting:\n` +
|
|
427
|
+
` 1. Ensure Chocolatey is installed on Windows\n` +
|
|
428
|
+
` 2. Run Git Bash as Administrator and retry\n` +
|
|
429
|
+
` 3. Try installing from PowerShell directly:\n` +
|
|
430
|
+
` choco install office365proplus -y`
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Verify installation
|
|
435
|
+
const verifyResult = await shell.exec(
|
|
436
|
+
`powershell.exe -NoProfile -Command "Test-Path '${WINDOWS_OFFICE_PATH.replace(/\\/g, '\\\\')}'"`
|
|
437
|
+
);
|
|
438
|
+
|
|
439
|
+
if (verifyResult.code !== 0 || verifyResult.stdout.trim().toLowerCase() !== 'true') {
|
|
440
|
+
throw new Error(
|
|
441
|
+
'Installation appeared to complete but Microsoft Office was not found.\n\n' +
|
|
442
|
+
'A system restart may be required. Please restart Windows and check\n' +
|
|
443
|
+
'if Microsoft Office appears in the Start menu.\n\n' +
|
|
444
|
+
'To install manually from PowerShell (as Administrator):\n' +
|
|
445
|
+
' choco install office365proplus -y'
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
console.log('Microsoft Office installed successfully.');
|
|
450
|
+
console.log('');
|
|
451
|
+
console.log('IMPORTANT: Please launch any Office application and sign in with your');
|
|
452
|
+
console.log('Microsoft account to activate your Microsoft 365 subscription.');
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Check if Microsoft Office is installed on the current platform.
|
|
457
|
+
*
|
|
458
|
+
* On macOS, checks if Microsoft Word.app exists.
|
|
459
|
+
* On Windows/Git Bash, checks if Office is installed via Chocolatey or file path.
|
|
460
|
+
* On Linux, Microsoft Office is not available (returns false).
|
|
461
|
+
*
|
|
462
|
+
* @returns {Promise<boolean>} True if installed, false otherwise
|
|
463
|
+
*/
|
|
464
|
+
async function isInstalled() {
|
|
465
|
+
const platform = os.detect();
|
|
466
|
+
|
|
467
|
+
if (platform.type === 'macos') {
|
|
468
|
+
return isInstalledMacOS();
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
if (platform.type === 'windows' || platform.type === 'gitbash' || platform.type === 'wsl') {
|
|
472
|
+
return isInstalledWindows();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Linux: Microsoft Office is not available
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Check if this installer is supported on the current platform.
|
|
481
|
+
* Microsoft Office is only available on macOS, Windows, and WSL (via Windows host).
|
|
482
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
483
|
+
*/
|
|
484
|
+
function isEligible() {
|
|
485
|
+
const platform = os.detect();
|
|
486
|
+
// Microsoft Office is only available on macOS and Windows platforms
|
|
487
|
+
const supportedPlatforms = ['macos', 'wsl', 'windows', 'gitbash'];
|
|
488
|
+
if (!supportedPlatforms.includes(platform.type)) {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
if (REQUIRES_DESKTOP && !os.isDesktopAvailable()) {
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
9
496
|
|
|
10
497
|
/**
|
|
11
|
-
*
|
|
498
|
+
* Main installation entry point.
|
|
499
|
+
*
|
|
500
|
+
* Detects the current platform and runs the appropriate installer function.
|
|
501
|
+
* Handles platform-specific mappings to ensure all supported (and unsupported)
|
|
502
|
+
* platforms have appropriate installation logic.
|
|
503
|
+
*
|
|
504
|
+
* Supported platforms:
|
|
505
|
+
* - macOS: Full support via Homebrew cask
|
|
506
|
+
* - Windows: Full support via Chocolatey
|
|
507
|
+
* - Git Bash: Full support via PowerShell interop to Chocolatey
|
|
508
|
+
* - WSL (Ubuntu): Installs on Windows host via PowerShell interop
|
|
509
|
+
*
|
|
510
|
+
* Unsupported platforms (returns gracefully with message):
|
|
511
|
+
* - Ubuntu/Debian: Microsoft does not provide Linux packages
|
|
512
|
+
* - Raspberry Pi OS: ARM architecture + no Linux support
|
|
513
|
+
* - Amazon Linux/RHEL: No Linux support from Microsoft
|
|
12
514
|
*
|
|
13
515
|
* @returns {Promise<void>}
|
|
14
516
|
*/
|
|
15
517
|
async function install() {
|
|
16
518
|
const platform = os.detect();
|
|
17
519
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
520
|
+
// Map platform types to their installer functions
|
|
521
|
+
// This mapping handles aliases (e.g., debian maps to ubuntu installer)
|
|
522
|
+
const installers = {
|
|
523
|
+
'macos': install_macos,
|
|
524
|
+
'ubuntu': install_ubuntu,
|
|
525
|
+
'debian': install_ubuntu,
|
|
526
|
+
'ubuntu-wsl': install_ubuntu_wsl,
|
|
527
|
+
'wsl': install_ubuntu_wsl,
|
|
528
|
+
'raspbian': install_raspbian,
|
|
529
|
+
'amazon_linux': install_amazon_linux,
|
|
530
|
+
'amazon-linux': install_amazon_linux,
|
|
531
|
+
'rhel': install_amazon_linux,
|
|
532
|
+
'fedora': install_amazon_linux,
|
|
533
|
+
'windows': install_windows,
|
|
534
|
+
'gitbash': install_gitbash
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
const installer = installers[platform.type];
|
|
538
|
+
|
|
539
|
+
if (!installer) {
|
|
540
|
+
console.log(`Microsoft Office 365 is not available for ${platform.type}.`);
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
await installer();
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// Export all functions for use as a module and for testing
|
|
548
|
+
module.exports = {
|
|
549
|
+
REQUIRES_DESKTOP,
|
|
550
|
+
install,
|
|
551
|
+
isInstalled,
|
|
552
|
+
isEligible,
|
|
553
|
+
install_macos,
|
|
554
|
+
install_ubuntu,
|
|
555
|
+
install_ubuntu_wsl,
|
|
556
|
+
install_raspbian,
|
|
557
|
+
install_amazon_linux,
|
|
558
|
+
install_windows,
|
|
559
|
+
install_gitbash
|
|
560
|
+
};
|
|
41
561
|
|
|
562
|
+
// Allow direct execution: node microsoft-office.js
|
|
42
563
|
if (require.main === module) {
|
|
43
|
-
install()
|
|
564
|
+
install().catch(err => {
|
|
565
|
+
console.error(err.message);
|
|
566
|
+
process.exit(1);
|
|
567
|
+
});
|
|
44
568
|
}
|