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 ) 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 } 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 } 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 "neovim.neovim" "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 "rustlang.rustup" ) $ExtraPackages = @( "mRemoteNG.mRemoteNG", "Microsoft.VisualStudio.2022.Community", "JetBrains.Resharper", "Microsoft.powertoys", "spotify.spotify", "microsoft.azuredatastudio", "mozilla.thunderbird", "Postman.Postman", "docker.dockerdesktop" ) if ($Flags.WingetEnabled) { Write-Divider Write-Host "Installing Winget Packages" foreach ($package in $packages) { winget install $package } } 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 ~ Remove-Item ~\fonts | Out-Null 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 $UserFonts = "$env:LOCALAPPDATA\Microsoft\Windows\Fonts" New-Item -ItemType Directory -Path $UserFonts -Force | Out-Null Get-ChildItem -Filter *.ttf | ForEach-Object { Invoke-Item $_.FullName } Set-Location ~ } Write-Divider Write-Host "Done!"