diff --git a/.gitea/screenshot.png b/.gitea/screenshot.png index a668a2d..c15a43b 100644 Binary files a/.gitea/screenshot.png and b/.gitea/screenshot.png differ diff --git a/README.md b/README.md index ff5f239..9c772c5 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,9 @@ These scripts automate the binding of graphics environment variables to the cont Execute the next script in powershell and follow the container initialization prompt. ```pwsh -& ([scriptblock]::Create((irm https://git.1159.cl/Mario1159/osic-stacks/raw/branch/main/run.ps1))) -remote +& ([scriptblock]::Create((irm https://git.1159.cl/Mario1159/osic-stacks/raw/branch/main/run.ps1))) -pull -download ``` - This script will run the container inside WSL and bind the enviroments variables for [WSLg](https://github.com/microsoft/wslg/blob/main/samples/container/Containers.md). + This script will run the container inside WSL and bind the enviroments variables for [WSLg](https://github.com/microsoft/wslg/blob/main/samples/container/Containers.md). Also, it will download itself so it will exists locally. ##### Linux Execute the next script in your terminal replacing `` by any name and `` by an stack from the previous [stack list](#stacks). diff --git a/include/media/defaultwallpaper.png b/include/media/defaultwallpaper.png index 9d38af6..ee91123 100644 Binary files a/include/media/defaultwallpaper.png and b/include/media/defaultwallpaper.png differ diff --git a/run.ps1 b/run.ps1 index cc32f34..56cf012 100644 --- a/run.ps1 +++ b/run.ps1 @@ -1,89 +1,232 @@ -param([switch] $remote = $false) - -Write-Host "OSIC-Stacks Container Creation" -ForegroundColor Green -Write-Host "Checking requirements and WSL updates" -ForegroundColor DarkGray - -Write-Host "" -wsl --install Ubuntu --no-launch -wsl --update -Write-Host "" - -Write-Host "Please select an image index:" - -$stacks_options = @( - 'analog-xk' - 'analog-xm' - 'analog-heavy' - 'digital-ator' - 'digital-icarus' - 'digital-heavy' - 'heavy' +param( + [switch] $pull = $false, + [switch] $interactive = $false, + [switch] $silent = $false, + [switch] $attach = $false, + [switch] $download = $false ) -for($i = 0; $i -lt $stacks_options.Length; $i++) { - $stack_option = $stacks_options[$i] - Write-Host "[$($i+1)] - $stack_option" -ForegroundColor Cyan +$global:STACK_OPTIONS = [ordered]@{ + 1 = 'analog-xk' + 2 = 'analog-xm' + 3 = 'analog-heavy' + 4 = 'digital-ator' + 5 = 'digital-icarus' + 6 = 'digital-heavy' + 7 = 'heavy' + 8 = "chipathon-tools" } -$stack_index = Read-Host -Prompt "Container image to initialize [1-$($stacks_options.Length)]" -$selected_stack = $stacks_options[$stack_index-1] -$container_name = Read-Host -Prompt "Container instance name [default=$selected_stack]" -if (!$container_name) { $container_name = $selected_stack } +$global:SELECTED_STACK='chipathon-tools' +$global:CONTAINER_NAME=$global:SELECTED_STACK +$global:EXECMODE='desktop' +$global:PDK="gf180mcuC" +$global:DIRECTORY=Get-Location | Foreach-Object { $_.Path } -$execmode = '' -while(!$execmode) { - Write-Host "Please select an execution mode index" - Write-Host '[1] - desktop' -ForegroundColor Cyan - Write-Host '[2] - web' -ForegroundColor Cyan - $response = Read-Host "Execution mode [1-2]" - if ($response -eq '1') { - $execmode = 'desktop' - } elseif ($response -eq '2') { - $execmode = 'web' - } else { - Write-Host "Unexpected respose, please try again" -ForegroundColor Red +$global:PARAMS = "" + +New-Alias Call Invoke-Expression + +function validate-environment() { + Write-Host "Checking requirements and WSL updates" -ForegroundColor DarkGray + + Write-Host "" + Call "wsl --install Ubuntu --no-launch" + Call "wsl --update" + Write-Host "" +} + +function select-stack() { + Write-Host "Please select an stack index:" + + $STACK_OPTIONS.GetEnumerator() | ForEach-Object { + Write-Host "[$($_.Key)] - $($_.Value)" -ForegroundColor Cyan + } + + $response = Read-Host -Prompt "Container stack to initialize [1-$($STACK_OPTIONS.Count)]" + if ($response) { + $global:SELECTED_STACK = $STACK_OPTIONS[$response-1] + } + + $response = Read-Host -Prompt "Container instance name [default=$global:CONTAINER_NAME]" + if ($response) { + $global:CONTAINER_NAME = $response } } -$additional_options = '' -if($remote) { - $image = "git.1159.cl/mario1159/$selected_stack-$execmode" - $additional_options = '--pull always ' -} else { - $image = "$selected_stack-$execmode" +function select-execmode() { + Write-Host "Please select an execution mode index" + Write-Host '[1] - desktop' -ForegroundColor Cyan + Write-Host '[2] - web' -ForegroundColor Cyan + $response = Read-Host "Execution mode [1-2] [default=$global:EXECMODE]" + + if ($response -eq '1') { + $global:EXECMODE = 'desktop' + } elseif ($response -eq '2') { + $global:EXECMODE = 'web' + } else { + Write-Host "Using default mode ($global:EXECMODE)" + } } -$response = Read-Host "Do you want to bind the container home directory into a windows directory? [N/y]" +function bind-to-directory() { + $response = Read-Host "Do you want to bind the container home directory into a windows directory? [N/y]" -if ($response -eq 'y') { - $directory = Read-Host "Write the windows directory destination relative to WSL, for example `"/mnt/c/Users/Username/Desktop/ExampleFolder`"`n" - $additionaloptions = -join($additionaloptions, "-v ${directory}:/home/designer/shared ") + if ($response -eq 'y') { + $global:DIRECTORY = Read-Host "Write the windows directory destination , for example `"C:\Users\Username\Desktop\ExampleFolder`"`n" + } } -$response = Read-Host -Prompt "Do you want to set additional arguments for the container instantiation? [N/y]" +function set-aditional-parameters() { + $response = Read-Host -Prompt "Do you want to set additional arguments for the container instantiation? [N/y]" -if ($response -eq 'y') { - $response = Read-Host -Prompt "Write the additional arguments, for example -v :." - $additionaloptions = -join($additionaloptions, $response) + if ($response -eq 'y') { + $response = Read-Host -Prompt "Write the additional arguments, for example -v :." + $global:PARAMS += " $response" + } } -Write-Host "" +function force-pull() { + $response = Read-Host -Prompt "Do you want to pull latest image? [N/y] [default=N]" -$dockercommand = ("docker run -d " + - "--name $container_name " + - "-v /tmp/.X11-unix:/tmp/.X11-unix " + - "-v /mnt/wslg:/mnt/wsl " + - "-e WAYLAND_DISPLAY=`$WAYLAND_DISPLAY " + - "-e DISPLAY=`$DISPLAY " + - "-e XDG_RUNTIME_DIR=/mnt/wslg " + - "$additional_options "+ - $image) + if ($response -eq 'y') { + $global:PARAMS += " --pull always" + } +} -wsl -d Ubuntu bash -ic $dockercommand +function select-pdk() { + Write-Host "Please select a pdk" + Write-Host '[1] - gf180mcuC' -ForegroundColor Cyan + Write-Host '[2] - sky130A' -ForegroundColor Cyan + $response = Read-Host "Execution mode [1-2] [default=$global:PDK]" -if ($?) { - Write-Host "Container created successfully!" -ForegroundColor Green - Write-Host "Enter the container with `"docker exec -it $container_name bash`"" -ForegroundColor DarkGray -} else { - Write-Host "Container creation failed, see logs above" -ForegroundColor Red -} \ No newline at end of file + if ($response -eq '1') { + $global:PDK = 'gf180mcuC' + } elseif ($response -eq '2') { + $global:PDK = 'sky130A' + } else { + Write-Host "Using default pdk ($global:PDK)" + } +} + +function attach-shell () { + Call "docker exec -it $global:CONTAINER_NAME bash" +} + +function path-conversion() { + $directory, $other = $args + $drive, $path = $directory.split(":") + + echo "/mnt/$($drive.tolower())$($path.replace("\","/"))" +} + +function get-value-from-wsl () { + $variable, $other = $args + return "$(wsl -d Ubuntu bash -c "echo `$$variable")" +} + +function set-common-parameters () { + $global:IMAGE = "git.1159.cl/mario1159/$SELECTED_STACK-$EXECMODE" + + if ($attach) { + $global:PARAMS += " -it --rm" + $global:COMMAND = "bash" + } else { + $global:PARAMS += " -d" + $global:COMMAND = "" + } + + if ($pull) { + $global:PARAMS += " --pull always" + } + + $global:PARAMS += " --name $global:CONTAINER_NAME" + $global:PARAMS += " --security-opt seccomp=unconfined" + + # $global:PARAMS += " -p '8888:8888'" + # $global:PARAMS += " -p '8082:8082'" + + $global:PARAMS += " -e PDK=$global:PDK" + + $global:PARAMS += " -e DISPLAY=$(get-value-from-wsl "DISPLAY")" + $global:PARAMS += " -e WAYLAND_DISPLAY=$(get-value-from-wsl "WAYLAND_DISPLAY")" + $global:PARAMS += " -e XDG_RUNTIME_DIR=$(get-value-from-wsl "XDG_RUNTIME_DIR")" +} + +function run-docker-wsl() { + $global:DIRECTORY = path-conversion $global:DIRECTORY + + $global:PARAMS += " -v /tmp/.X11-unix:/tmp/.X11-unix" + $global:PARAMS += " -v /mnt/wslg:/mnt/wsl" + $global:PARAMS += " -v ${global:DIRECTORY}:/home/designer/shared " + + Call "wsl -d Ubuntu bash --noprofile --norc -ic `"docker run $global:PARAMS $global:IMAGE $global:COMMAND`"" + + if ($?) { + Write-Host "Container created successfully!" -ForegroundColor Green + Write-Host "Enter the container with `"docker exec -it $global:CONTAINER_NAME bash`"" -ForegroundColor DarkGray + + attach-shell + } else { + Write-Host "Container creation failed, see logs above" -ForegroundColor Red + } +} + +function run-docker-win() { + $global:PARAMS += " -v '\\wsl.localhost\Ubuntu\mnt\wslg:/tmp'" + $global:PARAMS += " -v ${global:DIRECTORY}:/home/designer/shared" + #$global:PARAMS += " -v '\\wsl.localhost\Ubuntu\mnt\wslg\runtime-dir'%XDG_RUNTIME_DIR%" + + Call "docker run $global:PARAMS $global:IMAGE $global:COMMAND" + + if ($?) { + Write-Host "Container created successfully!" -ForegroundColor Green + Write-Host "Enter the container with `"docker exec -it $global:CONTAINER_NAME bash`"" -ForegroundColor DarkGray + + attach-shell + } else { + Write-Host "Container creation failed, see logs above" -ForegroundColor Red + } +} + +function download-run-bat () { + if (!$download) { return } + + try { + $response = Call "Invoke-WebRequest -URI https://git.1159.cl/Mario1159/osic-stacks/src/branch/main/run.ps1" + } catch { + $StatusCode = $_.Exception.Response.StatusCode.value__ + Write-Host "Error downloading file :( ($($StatusCode))" -ForegroundColor Red + return + } + + Write-Host "run.bat updated successfully" -ForegroundColor Green +} + +function run(){ + if ($silent) { + Write-Host "[Silent Mode]" -ForegroundColor Yellow + Remove-Alias Call + New-Alias Call Write-Host + } + + Write-Host "OSIC-Stacks Container Creation" -ForegroundColor Green + + download-run-bat + validate-environment + + if ($interactive) { + select-stack + select-execmode + bind-to-directory + set-aditional-parameters + force-pull + } + + set-common-parameters + + #run-docker-win + run-docker-wsl +} + +run