Files
consultant-windows/requirements.ps1
2026-03-16 08:36:04 +01:00

298 lines
6.4 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

param (
[Alias('h', '?')]
[switch]$Help,
[Alias('no-winget')]
[switch]$NoWinget,
[Alias('only-winget')]
[switch]$OnlyWinget,
[Alias('install-extras')]
[switch]$Extras,
[Alias('only-extras')]
[switch]$OnlyExtras,
[Alias('no-choco')]
[switch]$NoChoco,
[Alias('only-choco')]
[switch]$OnlyChoco,
[Alias('no-powershell')]
[switch]$NoPowershell,
[Alias('only-powershell')]
[switch]$OnlyPowershell,
[Alias('no-pip')]
[switch]$NoPip,
[Alias('only-pip')]
[switch]$OnlyPip,
[Alias('no-npm')]
[switch]$NoNpm,
[Alias('only-npm')]
[switch]$OnlyNpm,
[Alias('no-fonts')]
[switch]$NoFonts,
[Alias('only-fonts')]
[switch]$OnlyFonts,
[Alias('no-wallpaper')]
[switch]$NoWallpaper,
[Alias('only-wallpaper')]
[switch]$OnlyWallpaper
)
if ($Help)
{
@"
requirements.ps1 Install system requirements
USAGE:
requirements.ps1 [options]
OPTIONS:
-no-winget Disable installation via winget
-no-choco Disable installation via Chocolatey
-no-powershell Disable PowerShell module installation
-no-pip Disable Python pip package installation
-install-extras Install optional / extra components
-help, -h, -? Show this help message and exit
NOTES:
Use single-dash options for best compatibility:
-no-winget -no-choco
Double-dash options (--no-winget) only work in PowerShell 7+ (pwsh)
EXAMPLES:
requirements.ps1 -no-winget -no-choco
requirements.ps1 -install-extras
pwsh requirements.ps1 --no-winget --no-pip
"@
exit 0
}
function Write-Divider
{
Write-Host "################################################################################"
}
$Flags = [ordered]@{
WingetEnabled = -not $NoWinget
ExtrasEnabled = $Extras
ChocoEnabled = -not $NoChoco
PowershellEnabled = -not $NoPowershell
PipEnabled = -not $NoPip
NpmEnabled = -not $NoNpm
FontsEnabled = -not $NoFonts
WallpaperEnabled = -not $NoWallpaper
}
function Reset-Flags
{
foreach ($key in @($Flags.Keys))
{
$Flags[$key] = $false
}
}
if ($OnlyWinget)
{
Reset-Flags
$Flags.WingetEnabled = $true
}
if ($OnlyExtras)
{
Reset-Flags
$Flags.ExtrasEnabled = $true
}
if ($OnlyChoco)
{
Reset-Flags
$Flags.ChocoEnabled = $true
}
if ($OnlyPowershell)
{
Reset-Flags
$Flags.PowershellEnabled = $true
}
if ($OnlyPip)
{
Reset-Flags
$Flags.PipEnabled = $true
}
if ($OnlyNpm)
{
Reset-Flags
$Flags.NpmEnabled = $true
}
if ($OnlyFonts)
{
Reset-Flags
$Flags.FontsEnabled = $true
}
if ($OnlyWallpaper)
{
Reset-Flags
$Flags.WallpaperEnabled = $true
}
Write-Host "These providers are enabled:"
foreach ($key in $Flags.Keys)
{
if ($Flags[$key])
{
Write-Host $key
}
}
# Install requirements via winget
# Important stuff
$packages = @(
"wez.wezterm", # Teminal emulator
"Schniz.fnm", # Fast node version manager
"microsoft.teams",
"putty.putty",
"microsoft.windowsterminal",
"microsoft.git",
"jandedobbeleer.ohmyposh",
"microsoft.powershell",
"chocolatey.chocolatey", # nvim
"Python.Python.3.13", # nvim
"Python.Python.3.9", # project dependencies
"Python.Python.3.10", # isort
"JernejSimoncic.Wget", # nvim
"7zip.7zip", # nvim
"GnuWin32.gzip",
"rustlang.rustup",
"Mozilla.Firefox",
"SlackTechnologies.Slack"
)
$ExtraPackages = @(
"mRemoteNG.mRemoteNG",
"Microsoft.VisualStudio.Community",
#"Microsoft.VisualStudio.2022.Community", In favor of 2026
"JetBrains.Resharper",
"Microsoft.powertoys",
"spotify.spotify",
"microsoft.azuredatastudio",
"mozilla.thunderbird",
"Postman.Postman",
"docker.dockerdesktop",
"hrkfdn.ncspot"
)
if ($Flags.WingetEnabled)
{
Write-Divider
Write-Host "Installing Winget Packages"
foreach ($package in $packages)
{
winget install $package
}
powershell -c "irm https://raw.githubusercontent.com/MordechaiHadad/bob/master/scripts/install.ps1 | iex"
$toolPaths = @(
"C:\ProgramData\chocolatey\tools",
"C:\Program Files (x86)\GnuWin32\bin",
"$env:LOCALAPPDATA\bob_bin"
)
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
foreach ($toolPath in $toolPaths) {
if ($currentPath -notlike "*$toolPath*") {
$currentPath = "$currentPath;$toolPath"
Write-Host "Added $toolPath to user PATH." -ForegroundColor Green
} else {
Write-Host "$toolPath is already in the user PATH." -ForegroundColor Yellow
}
}
[Environment]::SetEnvironmentVariable("Path", $currentPath, "User")
bob install nightly
bob use nightly
}
if ($Flags.ExtrasEnabled)
{
Write-Divider
Write-Host "Installing Extra Winget Packages"
foreach ($package in $ExtraPackages)
{
winget install $package
}
}
if ($Flags.NpmEnabled)
{
Write-Divider
Write-Host "Installing Npm Packages"
fnm install 22
fnm use 22
Set-Location ~
npm install
}
if ($Flags.ChocoEnabled)
{
Write-Divider
Write-Host "Installing Chocolatey Packages"
## Nvim requirements from choco, needs to be run as admin
Start-Process pwsh -Verb RunAs -ArgumentList "-Command", "choco install make unzip ripgrep zig"
}
if ($Flags.PipEnabled)
{
Write-Divider
Write-Host "Installing pip Packages"
## Nvim requirements from pip
python -m pip install debugpy neovim pillow
}
if ($Flags.PowershellEnabled)
{
Write-Divider
Write-Host "Installing Powershell Packages"
## Git posh
Install-Module posh-git -Scope CurrentUser -Force
}
if ($Flags.FontsEnabled)
{
Write-Divider
Write-Host "Installing Fonts"
Set-Location ~
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/JetBrainsMono.zip
mkdir ~\fonts
Copy-Item ~\JetBrainsMono.zip ~\fonts\JetBrainsMono.zip
Set-Location ~\fonts | Out-Null
unzip JetBrainsMono.zip
Remove-Item JetBrainsMono.zip
$FontsPath = "$HOME\fonts"
$shell = New-Object -ComObject Shell.Application
$fonts = $shell.Namespace(0x14)
Get-ChildItem $FontsPath -Include *.ttf,*.otf -File | ForEach-Object {
$fonts.CopyHere($_.FullName)
}
Set-Location ~
Remove-Item ~\fonts -Force -Recurse| Out-Null
}
if ($Flags.WallpaperEnabled)
{
Write-Divider
Write-Host "Setting Wallpaper"
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Wallpaper {
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SystemParametersInfo(
int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@ -ErrorAction SilentlyContinue
[Wallpaper]::SystemParametersInfo(20, 0, "$HOME\wallpaper.png", 0x03) | Out-Null
}
Write-Divider
Write-Host "Done!"