This will help bootstrap your windows workstation to be a better badass development system.
Copy and past the bootstrap.ps1 lines into Powershell and let it rip.
| # install awesome packages | |
| chocolatey_package "git" do | |
| options '-params "/GitAndUnixToolsOnPath /NoAutoCrlf"' | |
| end | |
| packages = %w[ | |
| conemu | |
| habitat | |
| winmerge | |
| vagrant | |
| packer | |
| terraform | |
| jq | |
| ILMerge | |
| microsoft-build-tools | |
| vcredist2010 | |
| vcredist2013 | |
| pester | |
| atom | |
| vim | |
| wireshark | |
| screentogif | |
| ] | |
| packages.each do |package_name| | |
| chocolatey_package package_name | |
| end | |
| chocolatey_package 'visualstudio2017community' do | |
| options '--params "--passive"' | |
| end | |
| # install gems to enhance development experience | |
| gems = %w[ | |
| kitchen-hyperv | |
| kitchen-pester | |
| kitchen-dsc | |
| pry | |
| pry-byebug | |
| pry-stack_explorer | |
| appbundle-updater | |
| ] | |
| gems.each do |gem| | |
| chef_gem gem do | |
| compile_time false if respond_to?(:compile_time) | |
| end | |
| end | |
| # enhance visual studio with extensions | |
| extensions = %w[ | |
| ms-vcode.PowerShell | |
| Pendrica.Chef | |
| dracula-theme.theme-dracula | |
| ] | |
| extensions.each do |ext| | |
| execute "install vscode extension #{ext}" do | |
| command "code --install-extension #{ext}" | |
| end | |
| end | |
| # enhance powershell | |
| powershell_package 'PSReadline' | |
| powershell_package 'posh-git' | |
| # make secure - disable SMBv1 | |
| powershell_script 'disable SMBv1' do | |
| code 'Disable-WindowsOptionalFeature -NoRestart -Online -FeatureName SMB1Protocol' | |
| end |
| # Setup my execution policy for both the 64 bit and 32 bit shells | |
| Set-Executionpolicy remotesigned | |
| Start-Job -runas32 {set-executionpolicy remotesigned} | Receive-Job -wait | |
| # Install fixed version of ChefDK | |
| Invoke-Restmethod 'https://omnitruck.chef.io/install.ps1' | IEX | |
| Install-Project chefdk -verbose | |
| # Install Chocolatey | |
| IEX ((New-Object Net.Webclient).DownloadString('https://chocolatey.org/install.ps1')) | |
| choco feature enable -n allowGlobalConfirmation | |
| # Get a basic setup recipe | |
| $BasicSource = 'https://gist.githubusercontent.com/bdangit/54dfeac3a47fc3ce6a15ca174e487225/raw/c97349459070f71eaaac1a3967c9d4ee4e4a1532/basic.rb' | |
| Invoke-RestMethod -UseBasicParsing $BasicSource | out-file -encoding ascii -filepath c:/basic.rb | |
| # We dont need any Windows 10 Apps | |
| Get-AppxPackage | Remove-AppxPackage 2>&1>$null | |
| # We do want calculator :) | |
| Get-AppxPackage -allusers *windowscalculator* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”} | |
| # Use Chef Apply to setup | |
| chef-apply c:/basic.rb | |
| Write-Host "executed chef recipe c:/basic.rb" |
| Import-Module posh-git | |
| Import-Module PSReadline | |
| $env:EDITOR = "vim" | |
| # aliases | |
| Set-Alias open explorer.exe -option AllScope | |
| Set-Alias make mingw32-make.exe -option AllScope | |
| Set-Alias p packer.exe -option AllScope | |
| Set-Alias v vagrant.exe -option AllScope | |
| Set-Alias t terraform.exe -Option AllScope | |
| Set-Alias d docker.exe -Option Allscope | |
| Set-Alias dm docker-machine.exe -option AllScope | |
| # docker-machine stuff | |
| function dmdev { | |
| & dm env dev | Invoke-Expression | |
| } | |
| # vagrant stuff | |
| $env:VAGRANT_DEFAULT_PROVIDER="vmware_workstation" | |
| $env:VAGRANT_HOME="$HOME\.vagrant.d" | |
| # Add gobin to PATH | |
| $env:GOPATH = "$HOME\go" | |
| $env:GOROOT = "C:\tools\go" | |
| function Invoke-PesterJob | |
| { | |
| [CmdletBinding(DefaultParameterSetName='LegacyOutputXml')] | |
| param( | |
| [Parameter(Position=0)] | |
| [Alias('Path','relative_path')] | |
| [System.Object[]] | |
| ${Script}, | |
| [Parameter(Position=1)] | |
| [Alias('Name')] | |
| [string[]] | |
| ${TestName}, | |
| [Parameter(Position=2)] | |
| [switch] | |
| ${EnableExit}, | |
| [Parameter(ParameterSetName='LegacyOutputXml', Position=3)] | |
| [string] | |
| ${OutputXml}, | |
| [Parameter(Position=4)] | |
| [Alias('Tags')] | |
| [string[]] | |
| ${Tag}, | |
| [string[]] | |
| ${ExcludeTag}, | |
| [switch] | |
| ${PassThru}, | |
| [System.Object[]] | |
| ${CodeCoverage}, | |
| [switch] | |
| ${Strict}, | |
| [Parameter(ParameterSetName='NewOutputSet', Mandatory=$true)] | |
| [string] | |
| ${OutputFile}, | |
| [Parameter(ParameterSetName='NewOutputSet', Mandatory=$true)] | |
| [ValidateSet('LegacyNUnitXml','NUnitXml')] | |
| [string] | |
| ${OutputFormat}, | |
| [switch] | |
| ${Quiet} | |
| ) | |
| $params = $PSBoundParameters | |
| Start-Job -ScriptBlock { Set-Location $using:pwd; Invoke-Pester @using:params } | | |
| Receive-Job -Wait -AutoRemoveJob | |
| } | |
| Set-Alias ipj Invoke-PesterJob | |
| # Setup PATH | |
| # Add mybin to PATH | |
| # $env:Path += ";$HOME\bin" | |
| # $env:Path += ";C:\tools\mingw64\bin" | |
| # $env:Path += ";C:\habitat" | |
| # $env:Path += ";C:\Program Files (x86)\VMware\VMware Workstation" | |
| # $env:Path += ";C:\Program Files (x86)\VMware\VMware Workstation\OVFTool" | |
| # $env:Path += ";$env:GOROOT\bin;$env:GOPATH\bin" | |
| # PROMPT | |
| function Prompt { | |
| $realLASTEXITCODE = $LASTEXITCODE | |
| Write-Host "$ENV:USERNAME@" -NoNewline -ForegroundColor DarkYellow | |
| Write-Host "$ENV:COMPUTERNAME" -NoNewline -ForegroundColor DarkMagenta | |
| Write-Host " [" -NoNewline -ForegroundColor DarkGray | |
| Write-Host (Get-Date -UFormat "%Y%m%d-%H%M") -NoNewline -ForegroundColor Magenta | |
| Write-Host "][" -NoNewline -ForegroundColor DarkGray | |
| Write-Host $($(Get-Location) -replace ($env:USERPROFILE).Replace('\','\\'), "~") -NoNewline -ForegroundColor Blue | |
| Write-Host "]" -NoNewline -ForegroundColor DarkGray | |
| Write-VcsStatus | |
| $global:LASTEXITCODE = $realLASTEXITCODE | |
| # | |
| #Write-Host "" | |
| If ($PSDebugContext.InvocationInfo) { | |
| Write-Host " [DBG]" | |
| } | |
| return " > " | |
| } |
This will help bootstrap your windows workstation to be a better badass development system.
Copy and past the bootstrap.ps1 lines into Powershell and let it rip.
This is based on Steve Murawskis work. See his blog post on simplified-chef-workstation