Initial commit

This commit is contained in:
2026-06-05 13:31:10 +02:00
commit b2d9581c25
12 changed files with 1006 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/.vagrant

116
Vagrantfile vendored Normal file
View File

@@ -0,0 +1,116 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "gusztavvargadr/windows-11"
config.vm.box_version = "2511.0.0"
config.vm.provider :libvirt do |libvirt|
libvirt.cpus = 8
libvirt.memory = 8192
# Setup virtio+spice video with opengl acceleration
libvirt.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio'
libvirt.graphics_type = "spice"
libvirt.video_type = "virtio"
libvirt.video_accel3d = true
end
# use NFS for file syncing. requires nfs-utils
# config.vm.synced_folder ".", "/vagrant", type: "nfs"
config.vm.synced_folder ".", "/vagrant", disabled: true
# TODO: zed
# https://github.com/zed-industries/zed/releases/download/v0.216.0/Zed-x86_64.exe
# TODO: configure WFP to *always* allow RDP and SSH from the host
config.vm.provision "shell", path: "scripts/enable-rdp.ps1"
# TODO: this will hang provisioning because Set-WinUserLanguageList always asks for confirmation, ignoring `-Confirm` & `-Force`
# config.vm.provision "shell", path: "scripts/add-swedish-keyboard.ps1"
# config.vm.provision "shell", path: "scripts/win11-debloat.ps1" # TODO: this hangs
config.vm.provision "shell", path: "scripts/theme.ps1", args: "-Mode dark"
config.vm.provision "shell", path: "scripts/restart-explorer.ps1" # for the theme to take effect
config.vm.provision "shell", path: "scripts/install-chocolatey.ps1" # Run the external script to install Chocolatey
config.vm.provision "shell", path: "scripts/choco-install.ps1" # use choco to install all the things
config.vm.provision "shell", path: "scripts/get-mullvad-loader.ps1" # use choco to install all the things
# TODO: set "Terminal" as default over cmd
# TODO: set nu as default shell
config.vm.provision "shell", path: "scripts/setup-nu.ps1" # configue nu env
# config.vm.provision "shell", inline: "echo Hello There"
# ------ examples below -------
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Disable the default share of the current code directory. Doing this
# provides improved isolation between the vagrant box and your host
# by making sure your Vagrantfile isn't accessible to the vagrant box.
# If you use this you may want to enable additional shared subfolders as
# shown above.
# config.vm.synced_folder ".", "/vagrant", disabled: true
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end

21
rdp.nu Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env nu
# Connect with the VM over RDP.
#
# Requires XWayland or X11, and Remmina to be installed in flatpak.
# RDP over Remmina on XWayland is the only way i've been able to have fractional scaling on the host, and GPU acceleration on the guest.
def main []: nothing -> nothing {
print "> Extracting hostname from vagrant..."
let ip = (vagrant ssh-config | parse " {key} {val}" | transpose -r | get 0.HostName)
print $"> hostname: ($ip)"
let user = "vagrant"
let pass = "vagrant"
let uri = $"rdp://($user):($pass)@($ip)"
print $"> connecting to ($uri)"
flatpak run --socket=fallback-x11 org.remmina.Remmina --no-tray-icon -c $uri
}

View File

@@ -0,0 +1,3 @@
$LanguageList = Get-WinUserLanguageList
$LanguageList.Add("sv-SE")
Set-WinUserLanguageList -Confirm -Force $LanguageList

26
scripts/choco-install.ps1 Normal file
View File

@@ -0,0 +1,26 @@
echo "Installing stuff from choco..."
# TODO: zed
# TODO: visual studio
# TODO: c++ build tools? wdk? windows sdk?
choco install `
croc `
curl `
firefox `
git `
helix `
nushell `
procmon `
protoc `
rustup.install `
vcredist-all `
visualstudio2022-workload-vctools `
visualstudio2022-workload-universalbuildtools `
visualstudio2022buildtools `
volta `
windows-sdk-11-version-22h2-all `
zig `
zoxide `
--yes
git config --system core.longpaths true

2
scripts/enable-rdp.ps1 Normal file
View File

@@ -0,0 +1,2 @@
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1

View File

@@ -0,0 +1 @@
Invoke-WebRequest -Uri https://mullvad.net/en/download/installer/exe/latest -OutFile "Desktop/Mullvad Loader.exe"

View File

@@ -0,0 +1,781 @@
<#
.SYNOPSIS
Downloads and installs Chocolatey on the local machine.
.DESCRIPTION
Retrieves the Chocolatey nupkg for the latest or a specified version, and
downloads and installs the application to the local machine.
.NOTES
=====================================================================
Copyright 2017 - 2020 Chocolatey Software, Inc, and the
original authors/contributors from ChocolateyGallery
Copyright 2011 - 2017 RealDimensions Software, LLC, and the
original authors/contributors from ChocolateyGallery
at https://github.com/chocolatey/chocolatey.org
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
=====================================================================
Environment Variables, specified as $env:NAME in PowerShell.exe and %NAME% in cmd.exe.
For explicit proxy, please set $env:chocolateyProxyLocation and optionally $env:chocolateyProxyUser and $env:chocolateyProxyPassword
For an explicit version of Chocolatey, please set $env:chocolateyVersion = 'versionnumber'
To target a different url for chocolatey.nupkg, please set $env:chocolateyDownloadUrl = 'full url to nupkg file'
NOTE: $env:chocolateyDownloadUrl does not work with $env:chocolateyVersion.
To use built-in compression instead of 7zip (requires additional download), please set $env:chocolateyUseWindowsCompression = 'true'
To bypass the use of any proxy, please set $env:chocolateyIgnoreProxy = 'true'
.LINK
For organizational deployments of Chocolatey, please see https://docs.chocolatey.org/en-us/guides/organizations/organizational-deployment-guide
#>
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
# The URL to download Chocolatey from. This defaults to the value of
# $env:chocolateyDownloadUrl, if it is set, and otherwise falls back to the
# official Chocolatey community repository to download the Chocolatey package.
# Can be used for offline installation by providing a path to a Chocolatey.nupkg.
[Parameter(Mandatory = $false)]
[string]
$ChocolateyDownloadUrl = $env:chocolateyDownloadUrl,
# Specifies a target version of Chocolatey to install. By default, the latest
# stable version is installed. This will use the value in
# $env:chocolateyVersion by default, if that environment variable is present.
# This parameter is ignored if -ChocolateyDownloadUrl is set.
[Parameter(Mandatory = $false)]
[string]
$ChocolateyVersion = $env:chocolateyVersion,
# If set, uses built-in Windows decompression tools instead of 7zip when
# unpacking the downloaded nupkg. This will be set by default if
# $env:chocolateyUseWindowsCompression is set to a value other than 'false' or '0'.
#
# This parameter will be ignored in PS 5+ in favour of using the
# Expand-Archive built in PowerShell cmdlet directly.
[Parameter(Mandatory = $false)]
[switch]
$UseNativeUnzip = $(
$envVar = "$env:chocolateyUseWindowsCompression".Trim()
$value = $null
if ([bool]::TryParse($envVar, [ref] $value)) {
$value
} elseif ([int]::TryParse($envVar, [ref] $value)) {
[bool]$value
} else {
[bool]$envVar
}
),
# If set, ignores any configured proxy. This will override any proxy
# environment variables or parameters. This will be set by default if
# $env:chocolateyIgnoreProxy is set to a value other than 'false' or '0'.
[Parameter(Mandatory = $false)]
[switch]
$IgnoreProxy = $(
$envVar = "$env:chocolateyIgnoreProxy".Trim()
$value = $null
if ([bool]::TryParse($envVar, [ref] $value)) {
$value
}
elseif ([int]::TryParse($envVar, [ref] $value)) {
[bool]$value
}
else {
[bool]$envVar
}
),
# Specifies the proxy URL to use during the download. This will default to
# the value of $env:chocolateyProxyLocation, if any is set.
[Parameter(ParameterSetName = 'Proxy', Mandatory = $false)]
[string]
$ProxyUrl = $env:chocolateyProxyLocation,
# Specifies the credential to use for an authenticated proxy. By default, a
# proxy credential will be constructed from the $env:chocolateyProxyUser and
# $env:chocolateyProxyPassword environment variables, if both are set.
[Parameter(ParameterSetName = 'Proxy', Mandatory = $false)]
[System.Management.Automation.PSCredential]
$ProxyCredential
)
#region Functions
function Get-Downloader {
<#
.SYNOPSIS
Gets a System.Net.WebClient that respects relevant proxies to be used for
downloading data.
.DESCRIPTION
Retrieves a WebClient object that is pre-configured according to specified
environment variables for any proxy and authentication for the proxy.
Proxy information may be omitted if the target URL is considered to be
bypassed by the proxy (originates from the local network.)
.PARAMETER Url
Target URL that the WebClient will be querying. This URL is not queried by
the function, it is only a reference to determine if a proxy is needed.
.EXAMPLE
Get-Downloader -Url $fileUrl
Verifies whether any proxy configuration is needed, and/or whether $fileUrl
is a URL that would need to bypass the proxy, and then outputs the
already-configured WebClient object.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]
$Url,
[Parameter(Mandatory = $false)]
[string]
$ProxyUrl,
[Parameter(Mandatory = $false)]
[System.Management.Automation.PSCredential]
$ProxyCredential
)
$downloader = New-Object System.Net.WebClient
$defaultCreds = [System.Net.CredentialCache]::DefaultCredentials
if ($defaultCreds) {
$downloader.Credentials = $defaultCreds
}
if ($ProxyUrl) {
# Use explicitly set proxy.
Write-Host "Using explicit proxy server '$ProxyUrl'."
$proxy = New-Object System.Net.WebProxy -ArgumentList $ProxyUrl, <# bypassOnLocal: #> $true
$proxy.Credentials = if ($ProxyCredential) {
$ProxyCredential.GetNetworkCredential()
} elseif ($defaultCreds) {
$defaultCreds
} else {
Write-Warning "Default credentials were null, and no explicitly set proxy credentials were found. Attempting backup method."
(Get-Credential).GetNetworkCredential()
}
if (-not $proxy.IsBypassed($Url)) {
$downloader.Proxy = $proxy
}
} else {
Write-Host "Not using proxy."
}
$downloader
}
function Request-String {
<#
.SYNOPSIS
Downloads content from a remote server as a string.
.DESCRIPTION
Downloads target string content from a URL and outputs the resulting string.
Any existing proxy that may be in use will be utilised.
.PARAMETER Url
URL to download string data from.
.PARAMETER ProxyConfiguration
A hashtable containing proxy parameters (ProxyUrl and ProxyCredential)
.EXAMPLE
Request-String https://community.chocolatey.org/install.ps1
Retrieves the contents of the string data at the targeted URL and outputs
it to the pipeline.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]
$Url,
[Parameter(Mandatory = $false)]
[hashtable]
$ProxyConfiguration
)
(Get-Downloader $url @ProxyConfiguration).DownloadString($url)
}
function Request-File {
<#
.SYNOPSIS
Downloads a file from a given URL.
.DESCRIPTION
Downloads a target file from a URL to the specified local path.
Any existing proxy that may be in use will be utilised.
.PARAMETER Url
URL of the file to download from the remote host.
.PARAMETER File
Local path for the file to be downloaded to.
.PARAMETER ProxyConfiguration
A hashtable containing proxy parameters (ProxyUrl and ProxyCredential)
.EXAMPLE
Request-File -Url https://community.chocolatey.org/install.ps1 -File $targetFile
Downloads the install.ps1 script to the path specified in $targetFile.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]
$Url,
[Parameter(Mandatory = $false)]
[string]
$File,
[Parameter(Mandatory = $false)]
[hashtable]
$ProxyConfiguration
)
Write-Host "Downloading $url to $file"
(Get-Downloader $url @ProxyConfiguration).DownloadFile($url, $file)
}
function Set-PSConsoleWriter {
<#
.SYNOPSIS
Workaround for a bug in output stream handling PS v2 or v3.
.DESCRIPTION
PowerShell v2/3 caches the output stream. Then it throws errors due to the
FileStream not being what is expected. Fixes "The OS handle's position is
not what FileStream expected. Do not use a handle simultaneously in one
FileStream and in Win32 code or another FileStream." error.
.EXAMPLE
Set-PSConsoleWriter
.NOTES
General notes
#>
[CmdletBinding()]
param()
if ($PSVersionTable.PSVersion.Major -gt 3) {
return
}
try {
# http://www.leeholmes.com/blog/2008/07/30/workaround-the-os-handles-position-is-not-what-filestream-expected/ plus comments
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$objectRef = $host.GetType().GetField("externalHostRef", $bindingFlags).GetValue($host)
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty"
$consoleHost = $objectRef.GetType().GetProperty("Value", $bindingFlags).GetValue($objectRef, @())
[void] $consoleHost.GetType().GetProperty("IsStandardOutputRedirected", $bindingFlags).GetValue($consoleHost, @())
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$field = $consoleHost.GetType().GetField("standardOutputWriter", $bindingFlags)
$field.SetValue($consoleHost, [Console]::Out)
[void] $consoleHost.GetType().GetProperty("IsStandardErrorRedirected", $bindingFlags).GetValue($consoleHost, @())
$field2 = $consoleHost.GetType().GetField("standardErrorWriter", $bindingFlags)
$field2.SetValue($consoleHost, [Console]::Error)
} catch {
Write-Warning "Unable to apply redirection fix."
}
}
function Test-ChocolateyInstalled {
[CmdletBinding()]
param()
$checkPath = if ($env:ChocolateyInstall) { $env:ChocolateyInstall } else { "$env:PROGRAMDATA\chocolatey" }
if ($Command = Get-Command choco -CommandType Application -ErrorAction Ignore) {
# choco is on the PATH, assume it's installed
Write-Warning "'choco' was found at '$($Command.Path)'."
$true
}
elseif (-not (Test-Path $checkPath)) {
# Install folder doesn't exist
$false
}
else {
# Install folder exists
if (Get-ChildItem -Path $checkPath) {
Write-Warning "Files from a previous installation of Chocolatey were found at '$($CheckPath)'."
}
# Return true here to prevent overwriting an existing installation
$true
}
}
function Install-7zip {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]
$Path,
[Parameter(Mandatory = $false)]
[hashtable]
$ProxyConfiguration
)
if (-not (Test-Path ($Path))) {
Write-Host "Downloading 7-Zip commandline tool prior to extraction."
Request-File -Url 'https://community.chocolatey.org/7za.exe' -File $Path -ProxyConfiguration $ProxyConfiguration
}
else {
Write-Host "7zip already present, skipping installation."
}
}
#endregion Functions
#region Pre-check
# Ensure we have all our streams setup correctly, needed for older PSVersions.
Set-PSConsoleWriter
if (Test-ChocolateyInstalled) {
$message = @(
"An existing Chocolatey installation was detected. Installation will not continue. This script will not overwrite existing installations."
"If there is no Chocolatey installation at '$env:ChocolateyInstall', delete the folder and attempt the installation again."
""
"Please use `choco upgrade chocolatey` to handle upgrades of Chocolatey itself."
"If the existing installation is not functional or a prior installation did not complete, follow these steps:"
" - Backup the files at the path listed above so you can restore your previous installation if needed."
" - Remove the existing installation manually."
" - Rerun this installation script."
" - Reinstall any packages previously installed, if needed (refer to the `lib` folder in the backup)."
""
"Once installation is completed, the backup folder is no longer needed and can be deleted."
) -join [Environment]::NewLine
Write-Warning $message
return
}
#endregion Pre-check
#region Setup
$proxyConfig = if ($IgnoreProxy -or -not $ProxyUrl) {
@{}
} else {
$config = @{
ProxyUrl = $ProxyUrl
}
if ($ProxyCredential) {
$config['ProxyCredential'] = $ProxyCredential
} elseif ($env:chocolateyProxyUser -and $env:chocolateyProxyPassword) {
$securePass = ConvertTo-SecureString $env:chocolateyProxyPassword -AsPlainText -Force
$config['ProxyCredential'] = [System.Management.Automation.PSCredential]::new($env:chocolateyProxyUser, $securePass)
}
$config
}
# Attempt to set highest encryption available for SecurityProtocol.
# PowerShell will not set this by default (until maybe .NET 4.6.x). This
# will typically produce a message for PowerShell v2 (just an info
# message though)
try {
# Set TLS 1.2 (3072) as that is the minimum required by Chocolatey.org.
# Use integers because the enumeration value for TLS 1.2 won't exist
# in .NET 4.0, even though they are addressable if .NET 4.5+ is
# installed (.NET 4.5 is an in-place upgrade).
Write-Host "Forcing web requests to allow TLS v1.2 (Required for requests to Chocolatey.org)"
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
}
catch {
$errorMessage = @(
'Unable to set PowerShell to use TLS 1.2. This is required for contacting Chocolatey as of 03 FEB 2020.'
'https://blog.chocolatey.org/2020/01/remove-support-for-old-tls-versions/.'
'If you see underlying connection closed or trust errors, you may need to do one or more of the following:'
'(1) upgrade to .NET Framework 4.5+ and PowerShell v3+,'
'(2) Call [System.Net.ServicePointManager]::SecurityProtocol = 3072; in PowerShell prior to attempting installation,'
'(3) specify internal Chocolatey package location (set $env:chocolateyDownloadUrl prior to install or host the package internally),'
'(4) use the Download + PowerShell method of install.'
'See https://docs.chocolatey.org/en-us/choco/setup for all install options.'
) -join [Environment]::NewLine
Write-Warning $errorMessage
}
if ($ChocolateyDownloadUrl) {
if ($ChocolateyVersion) {
Write-Warning "Ignoring -ChocolateyVersion parameter ($ChocolateyVersion) because -ChocolateyDownloadUrl is set."
}
Write-Host "Downloading Chocolatey from: $ChocolateyDownloadUrl"
} elseif ($ChocolateyVersion) {
Write-Host "Downloading specific version of Chocolatey: $ChocolateyVersion"
$ChocolateyDownloadUrl = "https://community.chocolatey.org/api/v2/package/chocolatey/$ChocolateyVersion"
} else {
Write-Host "Getting latest version of the Chocolatey package for download."
$queryString = [uri]::EscapeUriString("((Id eq 'chocolatey') and (not IsPrerelease)) and IsLatestVersion")
$queryUrl = 'https://community.chocolatey.org/api/v2/Packages()?$filter={0}' -f $queryString
[xml]$result = Request-String -Url $queryUrl -ProxyConfiguration $proxyConfig
$ChocolateyDownloadUrl = $result.feed.entry.content.src
}
if (-not $env:TEMP) {
$env:TEMP = Join-Path $env:SystemDrive -ChildPath 'temp'
}
$chocoTempDir = Join-Path $env:TEMP -ChildPath "chocolatey"
$tempDir = Join-Path $chocoTempDir -ChildPath "chocoInstall"
if (-not (Test-Path $tempDir -PathType Container)) {
$null = New-Item -Path $tempDir -ItemType Directory
}
#endregion Setup
#region Download & Extract Chocolatey
$file = Join-Path $tempDir "chocolatey.zip"
# If we are passed a valid local path, we do not need to download it.
if (Test-Path $ChocolateyDownloadUrl) {
Write-Host "Using Chocolatey from $ChocolateyDownloadUrl."
Copy-Item -Path $ChocolateyDownloadUrl -Destination $file
} else {
Write-Host "Getting Chocolatey from $ChocolateyDownloadUrl."
Request-File -Url $ChocolateyDownloadUrl -File $file -ProxyConfiguration $proxyConfig
}
Write-Host "Extracting $file to $tempDir"
if ($PSVersionTable.PSVersion.Major -lt 5) {
# Determine unzipping method
# 7zip is the most compatible pre-PSv5.1 so use it unless asked to use builtin
if ($UseNativeUnzip) {
Write-Host 'Using built-in compression to unzip'
try {
$shellApplication = New-Object -ComObject Shell.Application
$zipPackage = $shellApplication.NameSpace($file)
$destinationFolder = $shellApplication.NameSpace($tempDir)
$destinationFolder.CopyHere($zipPackage.Items(), 0x10)
} catch {
Write-Warning "Unable to unzip package using built-in compression. Set `$env:chocolateyUseWindowsCompression = ''` or omit -UseNativeUnzip and retry to use 7zip to unzip."
throw $_
}
} else {
$7zaExe = Join-Path $tempDir -ChildPath '7za.exe'
Install-7zip -Path $7zaExe -ProxyConfiguration $proxyConfig
$params = 'x -o"{0}" -bd -y "{1}"' -f $tempDir, $file
# use more robust Process as compared to Start-Process -Wait (which doesn't
# wait for the process to finish in PowerShell v3)
$process = New-Object System.Diagnostics.Process
try {
$process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo -ArgumentList $7zaExe, $params
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
$null = $process.Start()
$process.BeginOutputReadLine()
$process.WaitForExit()
$exitCode = $process.ExitCode
}
finally {
$process.Dispose()
}
$errorMessage = "Unable to unzip package using 7zip. Perhaps try setting `$env:chocolateyUseWindowsCompression = 'true' and call install again. Error:"
if ($exitCode -ne 0) {
$errorDetails = switch ($exitCode) {
1 { "Some files could not be extracted" }
2 { "7-Zip encountered a fatal error while extracting the files" }
7 { "7-Zip command line error" }
8 { "7-Zip out of memory" }
255 { "Extraction cancelled by the user" }
default { "7-Zip signalled an unknown error (code $exitCode)" }
}
throw ($errorMessage, $errorDetails -join [Environment]::NewLine)
}
}
} else {
Microsoft.PowerShell.Archive\Expand-Archive -Path $file -DestinationPath $tempDir -Force
}
#endregion Download & Extract Chocolatey
#region Install Chocolatey
Write-Host "Installing Chocolatey on the local machine"
$toolsFolder = Join-Path $tempDir -ChildPath "tools"
$chocoInstallPS1 = Join-Path $toolsFolder -ChildPath "chocolateyInstall.ps1"
& $chocoInstallPS1
Write-Host 'Ensuring Chocolatey commands are on the path'
$chocoInstallVariableName = "ChocolateyInstall"
$chocoPath = [Environment]::GetEnvironmentVariable($chocoInstallVariableName)
if (-not $chocoPath) {
$chocoPath = "$env:ALLUSERSPROFILE\Chocolatey"
}
if (-not (Test-Path ($chocoPath))) {
$chocoPath = "$env:PROGRAMDATA\chocolatey"
}
$chocoExePath = Join-Path $chocoPath -ChildPath 'bin'
# Update current process PATH environment variable if it needs updating.
if ($env:Path -notlike "*$chocoExePath*") {
$env:Path = [Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::Machine);
}
Write-Host 'Ensuring chocolatey.nupkg is in the lib folder'
$chocoPkgDir = Join-Path $chocoPath -ChildPath 'lib\chocolatey'
$nupkg = Join-Path $chocoPkgDir -ChildPath 'chocolatey.nupkg'
if (-not (Test-Path $chocoPkgDir -PathType Container)) {
$null = New-Item -ItemType Directory -Path $chocoPkgDir
}
Copy-Item -Path $file -Destination $nupkg -Force -ErrorAction SilentlyContinue
#endregion Install Chocolatey
# SIG # Begin signature block
# MIInKwYJKoZIhvcNAQcCoIInHDCCJxgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDh6HLVOQJjm0Ac
# djggIgACeRd7TPrNslkAKPOlSM1vq6CCIK4wggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqG
# SIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMx
# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy
# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg
# Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXH
# JQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMf
# UBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w
# 1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRk
# tFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYb
# qMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUm
# cJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP6
# 5x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzK
# QtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo
# 80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjB
# Jgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXche
# MBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB
# /wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU
# 7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoG
# CCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29j
# c3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDig
# NqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZI
# hvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd
# 4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiC
# qBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl
# /Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeC
# RK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYT
# gAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/
# a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37
# xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmL
# NriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0
# YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJ
# RyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIG
# sDCCBJigAwIBAgIQCK1AsmDSnEyfXs2pvZOu2TANBgkqhkiG9w0BAQwFADBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# HhcNMjEwNDI5MDAwMDAwWhcNMzYwNDI4MjM1OTU5WjBpMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0
# ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMIICIjAN
# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bQvQtAorXi3XdU5WRuxiEL1M4zr
# PYGXcMW7xIUmMJ+kjmjYXPXrNCQH4UtP03hD9BfXHtr50tVnGlJPDqFX/IiZwZHM
# gQM+TXAkZLON4gh9NH1MgFcSa0OamfLFOx/y78tHWhOmTLMBICXzENOLsvsI8Irg
# nQnAZaf6mIBJNYc9URnokCF4RS6hnyzhGMIazMXuk0lwQjKP+8bqHPNlaJGiTUyC
# EUhSaN4QvRRXXegYE2XFf7JPhSxIpFaENdb5LpyqABXRN/4aBpTCfMjqGzLmysL0
# p6MDDnSlrzm2q2AS4+jWufcx4dyt5Big2MEjR0ezoQ9uo6ttmAaDG7dqZy3SvUQa
# khCBj7A7CdfHmzJawv9qYFSLScGT7eG0XOBv6yb5jNWy+TgQ5urOkfW+0/tvk2E0
# XLyTRSiDNipmKF+wc86LJiUGsoPUXPYVGUztYuBeM/Lo6OwKp7ADK5GyNnm+960I
# HnWmZcy740hQ83eRGv7bUKJGyGFYmPV8AhY8gyitOYbs1LcNU9D4R+Z1MI3sMJN2
# FKZbS110YU0/EpF23r9Yy3IQKUHw1cVtJnZoEUETWJrcJisB9IlNWdt4z4FKPkBH
# X8mBUHOFECMhWWCKZFTBzCEa6DgZfGYczXg4RTCZT/9jT0y7qg0IU0F8WD1Hs/q2
# 7IwyCQLMbDwMVhECAwEAAaOCAVkwggFVMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
# VR0OBBYEFGg34Ou2O/hfEYb7/mF7CIhl9E5CMB8GA1UdIwQYMBaAFOzX44LScV1k
# TN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD
# AzB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0
# cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmww
# HAYDVR0gBBUwEzAHBgVngQwBAzAIBgZngQwBBAEwDQYJKoZIhvcNAQEMBQADggIB
# ADojRD2NCHbuj7w6mdNW4AIapfhINPMstuZ0ZveUcrEAyq9sMCcTEp6QRJ9L/Z6j
# fCbVN7w6XUhtldU/SfQnuxaBRVD9nL22heB2fjdxyyL3WqqQz/WTauPrINHVUHmI
# moqKwba9oUgYftzYgBoRGRjNYZmBVvbJ43bnxOQbX0P4PpT/djk9ntSZz0rdKOtf
# JqGVWEjVGv7XJz/9kNF2ht0csGBc8w2o7uCJob054ThO2m67Np375SFTWsPK6Wrx
# oj7bQ7gzyE84FJKZ9d3OVG3ZXQIUH0AzfAPilbLCIXVzUstG2MQ0HKKlS43Nb3Y3
# LIU/Gs4m6Ri+kAewQ3+ViCCCcPDMyu/9KTVcH4k4Vfc3iosJocsL6TEa/y4ZXDlx
# 4b6cpwoG1iZnt5LmTl/eeqxJzy6kdJKt2zyknIYf48FWGysj/4+16oh7cGvmoLr9
# Oj9FpsToFpFSi0HASIRLlk2rREDjjfAVKM7t8RhWByovEMQMCGQ8M4+uKIw8y4+I
# Cw2/O/TOHnuO77Xry7fwdxPm5yg/rBKupS8ibEH5glwVZsxsDsrFhsP2JjMMB0ug
# 0wcCampAMEhLNKhRILutG4UI4lkNbcoFUCvqShyepf2gpx8GdOfy1lKQ/a+FSCH5
# Vzu0nAPthkX0tGFuv2jiJmCG6sivqf6UHedjGzqGVnhOMIIGwjCCBKqgAwIBAgIQ
# BUSv85SdCDmmv9s/X+VhFjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0
# ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTIzMDcxNDAw
# MDAwMFoXDTM0MTAxMzIzNTk1OVowSDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRp
# Z2lDZXJ0LCBJbmMuMSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMzCC
# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKNTRYcdg45brD5UsyPgz5/X
# 5dLnXaEOCdwvSKOXejsqnGfcYhVYwamTEafNqrJq3RApih5iY2nTWJw1cb86l+uU
# UI8cIOrHmjsvlmbjaedp/lvD1isgHMGXlLSlUIHyz8sHpjBoyoNC2vx/CSSUpIIa
# 2mq62DvKXd4ZGIX7ReoNYWyd/nFexAaaPPDFLnkPG2ZS48jWPl/aQ9OE9dDH9kgt
# XkV1lnX+3RChG4PBuOZSlbVH13gpOWvgeFmX40QrStWVzu8IF+qCZE3/I+PKhu60
# pCFkcOvV5aDaY7Mu6QXuqvYk9R28mxyyt1/f8O52fTGZZUdVnUokL6wrl76f5P17
# cz4y7lI0+9S769SgLDSb495uZBkHNwGRDxy1Uc2qTGaDiGhiu7xBG3gZbeTZD+BY
# QfvYsSzhUa+0rRUGFOpiCBPTaR58ZE2dD9/O0V6MqqtQFcmzyrzXxDtoRKOlO0L9
# c33u3Qr/eTQQfqZcClhMAD6FaXXHg2TWdc2PEnZWpST618RrIbroHzSYLzrqawGw
# 9/sqhux7UjipmAmhcbJsca8+uG+W1eEQE/5hRwqM/vC2x9XH3mwk8L9CgsqgcT2c
# kpMEtGlwJw1Pt7U20clfCKRwo+wK8REuZODLIivK8SgTIUlRfgZm0zu++uuRONhR
# B8qUt+JQofM604qDy0B7AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYD
# VR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgG
# BmeBDAEEAjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxq
# II+eyG8wHQYDVR0OBBYEFKW27xPn783QZKHVVqllMaPe1eNJMFoGA1UdHwRTMFEw
# T6BNoEuGSWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH
# NFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGD
# MIGAMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYB
# BQUHMAKGTGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
# ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQEL
# BQADggIBAIEa1t6gqbWYF7xwjU+KPGic2CX/yyzkzepdIpLsjCICqbjPgKjZ5+PF
# 7SaCinEvGN1Ott5s1+FgnCvt7T1IjrhrunxdvcJhN2hJd6PrkKoS1yeF844ektrC
# QDifXcigLiV4JZ0qBXqEKZi2V3mP2yZWK7Dzp703DNiYdk9WuVLCtp04qYHnbUFc
# jGnRuSvExnvPnPp44pMadqJpddNQ5EQSviANnqlE0PjlSXcIWiHFtM+YlRpUurm8
# wWkZus8W8oM3NG6wQSbd3lqXTzON1I13fXVFoaVYJmoDRd7ZULVQjK9WvUzF4UbF
# KNOt50MAcN7MmJ4ZiQPq1JE3701S88lgIcRWR+3aEUuMMsOI5ljitts++V+wQtaP
# 4xeR0arAVeOGv6wnLEHQmjNKqDbUuXKWfpd5OEhfysLcPTLfddY2Z1qJ+Panx+VP
# NTwAvb6cKmx5AdzaROY63jg7B145WPR8czFVoIARyxQMfq68/qTreWWqaNYiyjvr
# moI1VygWy2nyMpqy0tg6uLFGhmu6F/3Ed2wVbK6rr3M66ElGt9V/zLY4wNjsHPW2
# obhDLN9OTH0eaHDAdwrUAuBcYLso/zjlUlrWrBciI0707NMX+1Br/wd3H3GXREHJ
# uEbTbDJ8WC9nR2XlG3O2mflrLAZG70Ee8PBf4NvZrZCARK+AEEGKMIIG7TCCBNWg
# AwIBAgIQBNI793flHTneCMtwLiiYFTANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQG
# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0
# IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0Ex
# MB4XDTI0MDUwOTAwMDAwMFoXDTI3MDUxMTIzNTk1OVowdTELMAkGA1UEBhMCVVMx
# DzANBgNVBAgTBkthbnNhczEPMA0GA1UEBxMGVG9wZWthMSEwHwYDVQQKExhDaG9j
# b2xhdGV5IFNvZnR3YXJlLCBJbmMxITAfBgNVBAMTGENob2NvbGF0ZXkgU29mdHdh
# cmUsIEluYzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAPDJgdZWj0RV
# lBBBniCyGy19FB736U5AahB+dAw3nmafOEeG+syql0m9kzV0gu4bSd4Al587ioAG
# DUPAGhXf0R+y11cx7c1cgdyxvfBvfMEkgD7sOUeF9ggZJc0YZ4qc7Pa6qqMpHDru
# pjshvLmQMSLaGKF68m+w2mJiZkLMYBEotPiAC3+IzI1MQqidCfN6rfQUmtcKyrVz
# 2zCt8CvuR3pSyNCBcQgKZ/+NwBfDqPTt1wKq5JCIQiLnbDZwJ9F5433enzgUGQgh
# KRoIwfp/hap7t7lrNf859Xe1/zHT4qtNgzGqSdJ2Kbz1YAMFjZokYHv/sliyxJN9
# 7++0BApX2t45JsQaqyQ60TSKxqOH0JIIDeYgwxfJ8YFmuvt7T4zVM8u02Axp/1YV
# nKP2AOVca6FDe9EiccrexAWPGoP+WQi8WFQKrNVKr5XTLI0MNTjadOHfF0XUToyF
# H8FVnZZV1/F1kgd/bYbt/0M/QkS4FGmJoqT8dyRyMkTlTynKul4N3QIDAQABo4IC
# AzCCAf8wHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYE
# FFpfZUilS5A+fjYV80ib5qKkBoczMD4GA1UdIAQ3MDUwMwYGZ4EMAQQBMCkwJwYI
# KwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAOBgNVHQ8BAf8E
# BAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwgbUGA1UdHwSBrTCBqjBToFGgT4ZN
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNp
# Z25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwU6BRoE+GTWh0dHA6Ly9jcmw0
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5
# NlNIQTM4NDIwMjFDQTEuY3JsMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcw
# AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8v
# Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu
# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNydDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEB
# CwUAA4ICAQAW9ANNkR2cF6ulbM+/XUWeWqC7UTqtsRwj7WAo8XTr52JebRchTGDH
# BZP9sDRZsFt+lPcPvBrv41kWoaFBmebTaPMh6YDHaON+uc19CTWXsMh8eog0lzGU
# iA3mKdbVit0udrgNlBUqTIuvMlMFIARWSz90FMeQrCFokLmqoqjp7u0sVPM7ng6T
# 9D8ct/m5LSpIa5TJCjAfyfw75GK0wzTDdTi1MgiAIyX0EedMrEwXjOjSApQ+uhIW
# v/AHDf8ukJzDFTTeiUkYZ1w++z70QZkzLfQTi6eH9vqgyXWcnGCwOxKquqe8RSIe
# M3FdtLstn9nI8S4qeiKdmomG6FAZTzYiGULJdJGsLh6Uii56zZdq3bSre/yrfed4
# hf/0MqEtWSU7LpkWM8AApRkIKRBZIQ73/7WxwsF9kHoZxqoRMDGTzWt+S7/XrSOa
# QbKf0CxdxMPHKC2A1u3xGNDChtQEwpHxYXf/teD7GeFYFQJg/wn4dC72mZze97+c
# YcpmI4R13Q7owmRthK1hnuq4EOQIcoTPbQXiaRzULbYrcOnJi7EbXcqdeAAnZAyV
# b6zGqAaE9Sw4RYvkosL5IlBgrdIwSFJMbeirBoM2GukIHQ8UaEu3l1PoNQvVbqM1
# 8zHiN4WA4rp9G9wfcAlZWq9iKF34sA+Xu03qSVaKPKn6YJMl5PfUsDGCBdMwggXP
# AgEBMH0waTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEw
# PwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmluZyBSU0E0MDk2
# IFNIQTM4NCAyMDIxIENBMQIQBNI793flHTneCMtwLiiYFTANBglghkgBZQMEAgEF
# AKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgor
# BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
# DQEJBDEiBCBVpzA7GC5PEQSeEyh6E4PiLRHX8M57kjBOS3cO32zazDANBgkqhkiG
# 9w0BAQEFAASCAYDHIkMKs7NgnG6w7RkEy1HCA74YrZ/nF4twOoy+i3k/2Mm0LvKC
# BO3y+L5Wjg2WfsoAFQwC5AuXf616AT5K/Dn02vDcbZnfYPZARMt6/W0ajseLWlUi
# puxPe6s7LTy3x+QU47IutSa+DTpce6NnPG8YEjHsLpIfCSZMXjo7Ai5HGi+od82d
# +l0SVDoj8njBtr0FIBMTEJYEuBP1drw4quM7NBK2KBbve+O0iINcUacEVDAcMT8S
# iWaZVDRQU7xutqPt8FZ6a3tCPR6OYQsvh5Jyu6MyhKSXg14+W39Z33V0WnnHZhTE
# P9qTjz3/UxTkxVK9IhzZpZqdyu3JWhjUEEJGbDDkvga25s2mAAbydVphYnkBAIC2
# xZCD9c1zRyyAeeSfWQo8H5IyPlEOtRciLt9C+H2vfBECYyz0w/VDGDDY/AgEG/Hy
# 3P5JaPZJJv2OW6SnLrncw/MS+SVkOhORyYUjRLkJn9tz7y4DjD2bBsjSjObXUZ4S
# aZLTl8BGbFYAGnWhggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCCAwkCAQEwdzBjMQsw
# CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRp
# Z2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENB
# AhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkD
# MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwNTE0MDY1ODU4WjAvBgkq
# hkiG9w0BCQQxIgQg3Bf25u0skV7YV8kyqOny0RxKb+Lc+u9Qa/ohRGvxa+IwDQYJ
# KoZIhvcNAQEBBQAEggIAGIYJbugrkx3VpWoeAmOJ91tlVc6dnkw1Pi/T2vgqwnrG
# pjQ3j/4GawHnMJUNAQlbZF8MLLuybOHZO9Y76sg14B7sUiNHXjZKkbNYeYjPrabF
# dn/WjFvifkJIoSnrf2aSrk1bThjdY0ZZ3Qz8D9w5vgIKyaTkpfKFHg5w71vUEqFc
# 5Nlt9CRQHJCcjYq7JtDWrT+EJ6/U7eL4doPsCMER27m9t942L661yOUoTAYVqZEO
# oTN0KepwECODgjyUWSGATFpxteGOYkimh4dj5PiT1huAqSWRbd56N0GgiTj1cqvi
# FxM1JXZ4kpIxVtIbixGWyjYS3FR8slXd5knOqBQk9My8jAlyNO9ukXhmyzYpfYzj
# 1EIU37abmKqZ/Yx7PvX+RGwAgLKdayniab2PLy2yhrI7YrXQgTZC3Yun58CDb+Uz
# 2CdaG+opDhRg6/VrG6GjkyS1dUAI3O/qkjg9wDZ0U2UwQiEs132pllViqTY8DJz4
# FIaQ2jUZuYkCkHy9sgMR5izWGLSxD3SL3Dka3CcA2xyhO/j2axsn5wBl0lLRPL/I
# 9adzX5USDrS0qd+ES5B/KXaL938Zf2hG4igDCIyoXxo8Lc5mlq8JspKOgxXUam48
# atMzo5XpFacHe3Ewx+IvBa1QvjieO+WsiRWMVsDCaXwLjpJPE2jLJQloM9asv+A=
# SIG # End signature block

View File

@@ -0,0 +1,3 @@
Stop-Process -Name explorer -Force
Start-Sleep -Seconds 2
Start-Process explorer

13
scripts/setup-nu.ps1 Normal file
View File

@@ -0,0 +1,13 @@
# Invoke nu to ensure that the `env.nu` file exists
nu --login --commands "echo 'hello from nu'"
# TODO: consider adding these using regedit or something
Add-Content -Path "$HOME/AppData/Roaming/nushell/env.nu" -Value @'
$env.PATH ++= [
'C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\MSBuild\Current\Bin'
'C:\ProgramData\chocolatey\bin'
'C:\Program Files\Git\cmd'
'C:\Program Files\Volta'
]
'@

37
scripts/theme.ps1 Normal file
View File

@@ -0,0 +1,37 @@
# Modify Windows 10/11 or Server theme (Light or Dark mode). Makes registry changes which
# take effect upon reboot, or explorer.exe restart. Bypasses restriction to change theme on
# unactivated Windows installations.
#
# Usage:
# To switch to dark mode, run: .\theme.ps1 -Mode dark
# To switch to light mode, run: .\theme.ps1 -Mode light
#
# Optional: Restart the explorer.exe process:
# "Stop-Process -Name explorer -Force; Start-Sleep -Seconds 2; Start-Process explorer"
param (
[Parameter(Mandatory=$true)]
[ValidateSet("light", "dark")]
[string]$Mode
)
function Set-DarkTheme {
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "AppsUseLightTheme" -Value 0
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "SystemUsesLightTheme" -Value 0
Write-Host -f Yellow "Dark theme enabled.`n"
}
function Set-LightTheme {
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "AppsUseLightTheme" -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "SystemUsesLightTheme" -Value 1
Write-Host -f Yellow "Light theme enabled.`n"
}
switch ($Mode) {
"dark" {
Set-DarkTheme
}
"light" {
Set-LightTheme
}
}

View File

@@ -0,0 +1,2 @@
# https://github.com/Raphire/Win11Debloat
& ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) -RunDefaults