-
Notifications
You must be signed in to change notification settings - Fork 0
/
StartEnvironment.ps1
116 lines (95 loc) · 3.96 KB
/
StartEnvironment.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
param(
[Parameter(Mandatory=$true)]
[string]
$ConfigFolderPath,
[Parameter(Mandatory=$true)]
[string]
$BaseTabPath,
[Parameter(Mandatory=$false)]
[string]
$WindowsTerminalProfileName = "PowerShell Core"
)
$ConfigFileName = "config.json"
$ConfigAdditionsFileName = "config-additions.json"
$PreScriptFileName = "PreScript.ps1"
$PreScriptAdditionsFileName = "PreScript-Additions.ps1"
$configFileFullPath = Join-Path $ConfigFolderPath $ConfigFileName
if (!(Test-Path $configFileFullPath)) {
Write-Error "Could not find file: $configFileFullPath"
}
else {
$config = Get-Content -Raw $configFileFullPath | ConvertFrom-Json
if ($config.tabs.Length -lt 1) {
Write-Warning "No tabs found in configuration"
}
else {
###################################################################################
###################################################################################
# Load configs and build execution scripts
###################################################################################
$tabs = $config.tabs
$prompt = $config.prompt
$configAdditionsFileFullPath = Join-Path $ConfigFolderPath $ConfigAdditionsFileName
if (Test-Path $configAdditionsFileFullPath) {
$configAdditions = Get-Content -Raw $configAdditionsFileFullPath | ConvertFrom-Json
if ($configAdditions.tabs.length -gt 0) {
$tabs = $tabs + $configAdditions.tabs
}
if ($null -ne $configAdditions.prompt) {
$prompt = $configAdditions.prompt
}
}
$configScriptFolder = Join-Path $BaseTabPath "TempTerminalTabsEnvironment"
if (!(Test-Path $configScriptFolder)) {
New-Item -ItemType Directory $configScriptFolder | Out-Null
}
$windowsTerminalParameters = ""
$tabNumber = 0
foreach ($tab in $tabs) {
$tabNumber++
$directory = $tab.directory
if ($tab.isRelative) {
$directory = Join-Path $BaseTabPath $directory
}
$scriptFileContents = "#script for tab $tabNumber
cd ""$directory""
$($tab.command)
# end script
"
$scriptFileName = "script$($tabNumber).ps1"
New-Item -Path $configScriptFolder -Name $scriptFileName -ItemType File -Value $scriptFileContents -Force | Out-Null
$windowsTerminalParameters += " -p ""$WindowsTerminalProfileName"" -d ""$configScriptFolder"" --title ""$($tab.title)"" pwsh.exe -NoExit ""$($scriptFileName)""``;"
}
$startScriptContent = "#start script
wt$($windowsTerminalParameters) focus-tab -t $($config.focusTab)"
$startScriptFileName = "start.ps1"
New-Item -Path $configScriptFolder -Name $startScriptFileName -ItemType File -Value $startScriptContent -Force | Out-Null
###################################################################################
###################################################################################
# Prompt if required
###################################################################################
if ($prompt) {
Write-Host -NoNewLine 'Press any key to start...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
Write-Host
}
###################################################################################
###################################################################################
# Execute Pre Scripts if required
###################################################################################
$preScriptFileFullPath = Join-Path $ConfigFolderPath $PreScriptFileName
if (Test-Path $preScriptFileFullPath) {
& $preScriptFileFullPath;
}
$preScriptAdditionsFileFullPath = Join-Path $ConfigFolderPath $PreScriptAdditionsFileName
if (Test-Path $preScriptAdditionsFileFullPath) {
& $preScriptAdditionsFileFullPath;
}
###################################################################################
###################################################################################
# Execute tabs startup
###################################################################################
$exec = Join-Path $configScriptFolder $startScriptFileName
pwsh.exe $exec
}
}