https://github.com/sytone/system-bootstrap
scripts used to bootstrap and setup my systems
https://github.com/sytone/system-bootstrap
Last synced: 3 months ago
JSON representation
scripts used to bootstrap and setup my systems
- Host: GitHub
- URL: https://github.com/sytone/system-bootstrap
- Owner: sytone
- Created: 2024-07-03T19:08:16.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-12-12T17:16:02.000Z (4 months ago)
- Last Synced: 2024-12-12T18:26:35.537Z (4 months ago)
- Language: PowerShell
- Size: 118 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- jimsghstars - sytone/system-bootstrap - scripts used to bootstrap and setup my systems (PowerShell)
README
# system-bootstrap
The following environment variables need to be set to provide the path to the configuration used in bootstrap and your scripts root. Example commands are below.
```PowerShell
function senv($name, $value) {
[System.Environment]::SetEnvironmentVariable($name, $value, "User")
[System.Environment]::SetEnvironmentVariable($name, $value, "Process")
}# Consumer
senv 'SYSTEM_SCRIPTS_ROOT' "$env:OneDriveConsumer\scripts"
senv 'SIMPLESETTINGS_CONFIG_FILE' "$env:SYSTEM_SCRIPTS_ROOT\systemconfiguration.json"# Work or School
senv 'SYSTEM_SCRIPTS_ROOT' "$env:OneDriveCommercial\scripts"
senv 'SIMPLESETTINGS_CONFIG_FILE' "$env:SYSTEM_SCRIPTS_ROOT\systemconfiguration.json"# External GIT repo
senv 'SYSTEM_GIT_ENABLED' 'TRUE'
senv 'SYSTEM_GIT_REPO' "https://github.com/name/scripts"
senv 'SYSTEM_SCRIPTS_ROOT' "$env:USERPROFILE\scriptsrepo"
senv 'SIMPLESETTINGS_CONFIG_FILE' "$env:SYSTEM_SCRIPTS_ROOT\systemconfiguration.json"senv 'SYSTEM_SKIP_WINGET_DSC' "TRUE"
senv 'SYSTEM_AUTO_RUN_SETUP' "TRUE"iwr https://raw.githubusercontent.com/sytone/system-bootstrap/main/Get-BootstrapAndRun.ps1 | iex
```## Configuration
The configuration for this uses the PowerShell module SimpleSettings. Data is stored as a json file and there is an example in this repo to look at.
### Configuring Scoop Config
To specify any scoop configuration you can use the command below to set a value, this will be checked and updated prior to any scoop application installation or update. Update as needed for your environment.
```PowerShell
Set-SimpleSetting -Section 'SystemSetup' -Name 'ScoopConfiguration' -DefaultValue @{
"aria2-enabled" = "FALSE"
"use_lessmsi" = "TRUE"
"use_sqlite_cache" = "TRUE"
}
```## Bootstrap Options
### Auto Run Start-SystemSetup
To automatically run the setup without prompt set `$env:SYSTEM_AUTO_RUN_SETUP` to `'TRUE'` or `'Y'`
```PowerShell
[System.Environment]::SetEnvironmentVariable('SYSTEM_AUTO_RUN_SETUP', "TRUE", [System.EnvironmentVariableTarget]::User)
$env:SYSTEM_AUTO_RUN_SETUP = "TRUE"
```### Skip the WinGet DSC
To skip the WinGet DSC running on bootstrap `$env:SYSTEM_SKIP_WINGET_DSC` to `'TRUE'` or `'Y'`
```PowerShell
[System.Environment]::SetEnvironmentVariable('SYSTEM_SKIP_WINGET_DSC', "TRUE", [System.EnvironmentVariableTarget]::User)
$env:SYSTEM_SKIP_WINGET_DSC = "TRUE"
```### Desktop Shortcut
By default a desktop shortcut is created so you can run this process again to update your system. A shortcut is created on the desktop the pulls the latest version and runs the bootstrap process again. The process is idempotent so safe to run as many times as you want. To disable the creation of the shortcut set an environment variable called `SYSTEM_SKIP_DESKTOP_SHORTCUT_CREATION`
```PowerShell
[System.Environment]::SetEnvironmentVariable('SYSTEM_SKIP_DESKTOP_SHORTCUT_CREATION', "TRUE", [System.EnvironmentVariableTarget]::User)
$env:SYSTEM_SKIP_DESKTOP_SHORTCUT_CREATION = "TRUE"
```
## Local Powershell RepositoryTo make scripts a bit more portable, this uses a local PSRepository. The packages are all stored in `{onedrive work/personal}/localpsgallery` and published to that location or installed from that location. It is a simple way to manage your personal scripts and have history if you want.
To use this create a folder where you want to master your power shell scripts to be used across machines, this can be in a cloud based store like OneDrive, currently only OneDrive is supported but others could be added if there are ENV variables available. You could use a git repo but again that is not supported in the scripts currently.
In this folder create a management directory and copy the files from the management folder in this repo to that folder.
- Add-NewScrIpt - Creates a new script in the folder below management with the right headers to allow publishing.
- Install-AllLocalScripts.ps1 - Installs all scripts in the repo to the local machine.
- Publish-ScriptLocally.ps1 - Publishes all scripts in the local folder to the repo.
- Register-LocalPSRepository.ps1 - Registers the local repo so powershell can use it.## Script directory structure
There are some conventions with this script. Under the scripts root it is expected to have folders per area/language. So for powershell the expected folder is `powershell`. Under this folder for powershell there is expected to be three subfolders. There are
- CoreFunctions
- CoreModulesAuto
- CoreModulesManualIf they do not exist the script creates them. CoreFunctions contains all your script that you write. CoreModulesAuto/Manual is where you put any customer modules, anything in the Auto folder will be automatically imported as a module.
## Testing Locally
To run and test this locally you can just run the `Get-BootstrapAndRun.ps1` command in powershell from the root of the repo, all paths are relative to the script location.