@echo off setlocal if [%1]==[/?] goto :help echo %* | find "/?" > nul if errorlevel 1 goto :main :help echo usage: %0 [/?] echo echo Bootstrap a macOS instance with: echo echo * Windows SDK - from MSDN echo * Chocolatey - package manager echo * Cmder, including Git - from Chocolatey echo * Python - from Chocolatey echo * virtualenv - from pip echo * SSH key - from ssh-keygen echo * GitHub public key - with SSH key echo * GitLab public key - with SSH key echo * BitBucket Cloud public key - with SSH key echo * Gogs Cloud public key - with SSH key echo * conduit - configuration manager echo echo optional arguments: echo /? show this help message and exit goto end :main :: Check for admin permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if errorlevel 1 ( echo Administrator privilages required! exit /B 1 ) :: Install Windows SDK :windows_sdk set choice= set /p choice="Install Windows SDK [Y/n]? " if "%choice%"=="" goto windows_sdk_yes if "%choice%"=="Y" goto windows_sdk_yes if "%choice%"=="y" goto windows_sdk_yes if "%choice%"=="N" goto windows_sdk_no if "%choice%"=="n" goto windows_sdk_no echo invalid value: %choice% goto windows_sdk :windows_sdk_yes bitsadmin.exe /transfer "Download Windows SDK" https://go.microsoft.com/fwlink/p/?linkid=845298 %~dp0\winsdksetup.exe if errorlevel 1 exit /B 1 echo Installing Windows SDK... %~dp0\winsdksetup.exe /features + /q if errorlevel 1 exit /B 1 del %~dp0\winsdksetup.exe :windows_sdk_no :: Install Chocolatey :choco set choice= set /p choice="Install Chocolatey [Y/n]? " if "%choice%"=="" goto choco_yes if "%choice%"=="Y" goto choco_yes if "%choice%"=="y" goto choco_yes if "%choice%"=="N" goto choco_no if "%choice%"=="n" goto choco_no echo invalid value: %choice% goto choco :choco_yes @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" if errorlevel 1 exit /B 1 :choco_no :: Install Cmder, including Git :git set choice= set /p choice="Install Cmder, including Git [Y/n]? " if "%choice%"=="" goto git_yes if "%choice%"=="Y" goto git_yes if "%choice%"=="y" goto git_yes if "%choice%"=="N" goto git_no if "%choice%"=="n" goto git_no echo invalid value: %choice% goto git :git_yes choco install cmder --yes if errorlevel 1 exit /B 1 :git_no :: Install Python :python set choice= set /p choice="Install Python [Y/n]? " if "%choice%"=="" goto python_yes if "%choice%"=="Y" goto python_yes if "%choice%"=="y" goto python_yes if "%choice%"=="N" goto python_no if "%choice%"=="n" goto python_no echo invalid value: %choice% goto python :python_yes choco install python2 --yes if errorlevel 1 exit /B 1 :python_no :: Install virtualenv :virtualenv set choice= set /p choice="Install virtualenv [Y/n]? " if "%choice%"=="" goto virtualenv_yes if "%choice%"=="Y" goto virtualenv_yes if "%choice%"=="y" goto virtualenv_yes if "%choice%"=="N" goto virtualenv_no if "%choice%"=="n" goto virtualenv_no echo invalid value: %choice% goto virtualenv :virtualenv_yes "C:\Python27\Scripts\pip.exe" install virtualenv if errorlevel 1 exit /B 1 :virtualenv_no :: Generate SSH key :ssh_key set choice= set /p choice="Generate SSH key [Y/n]? " if "%choice%"=="" goto ssh_key_yes if "%choice%"=="Y" goto ssh_key_yes if "%choice%"=="y" goto ssh_key_yes if "%choice%"=="N" goto ssh_key_no if "%choice%"=="n" goto ssh_key_no echo invalid value: %choice% goto ssh_key :ssh_key_yes mkdir %USERPROFILE%\.ssh set /P email="SSH email: " "C:\tools\cmder\vendor\git-for-windows\usr\bin\ssh-keygen.exe" -t rsa -b 4096 -C "%email%" -N "" -f %USERPROFILE%\.ssh\id_rsa if errorlevel 1 exit /B 1 :ssh_key_no :: Set SSH keys on remote Git servers :remote_ssh_keys :: Add git to the PATH to pip can find it set PATH=C:\tools\cmder\vendor\git-for-windows\bin;%PATH% set choice= set /p choice="Set SSH keys on remote Git servers [Y/n]? " if "%choice%"=="" goto remote_ssh_keys_yes if "%choice%"=="Y" goto remote_ssh_keys_yes if "%choice%"=="y" goto remote_ssh_keys_yes if "%choice%"=="N" goto remote_ssh_keys_no if "%choice%"=="n" goto remote_ssh_keys_no echo invalid value: %choice% goto remote_ssh_keys :remote_ssh_keys_yes "C:\Python27\Scripts\virtualenv.exe" %~dp0\bootstrap_env if errorlevel 1 exit /B 1 "%~dp0\bootstrap_env\Scripts\pip.exe" install git+https://code.infektor.net/config/bootstrap.git if errorlevel 1 exit /B 1 "%~dp0\bootstrap_env\Scripts\python.exe" -c "import bootstrap; bootstrap.set_ssh_keys()" if errorlevel 1 exit /B 1 :remote_ssh_keys_no :: Install conduit :conduit set choice= set /p choice="Install conduit [Y/n]? " if "%choice%"=="" goto conduit_yes if "%choice%"=="Y" goto conduit_yes if "%choice%"=="y" goto conduit_yes if "%choice%"=="N" goto conduit_no if "%choice%"=="n" goto conduit_no echo invalid value: %choice% goto conduit :conduit_yes "C:\Python27\Scripts\pip.exe" install git+ssh://git@github.com/kbenzie/conduit.git :conduit_no :remove_bootstrap set choice= set /p choice="Remove bootstrap-Windows.cmd [y/N]? " if "%choice%"=="" goto remove_bootstrap_no if "%choice%"=="Y" goto remove_bootstrap_yes if "%choice%"=="y" goto remove_bootstrap_yes if "%choice%"=="N" goto remove_bootstrap_no if "%choice%"=="n" goto remove_bootstrap_no echo invalid value: %choice% goto remove_bootstrap :remove_bootstrap_yes rmdir /Q /S "%~dp0\bootstrap_env" echo "Completed: %0 will now be removed" start /b "" cmd /c del "%~f0"&exit /b :remove_bootstrap_no :end endlocal