diff --git a/scripts/Common/Software/PowerShell/Module.ps1 b/scripts/Common/Software/PowerShell/Module.ps1 new file mode 100644 index 00000000..fe2a9e45 --- /dev/null +++ b/scripts/Common/Software/PowerShell/Module.ps1 @@ -0,0 +1,54 @@ +. "$PSScriptRoot/../../Types/InstallerAction.ps1"; + +$null = New-Module { + . "$PSScriptRoot/../../Software/PowerShell/Profile.ps1"; + + <# + .SYNOPSIS + Generates the components for creating a module installer. + + .PARAMETER Name + The name of the module to install. + #> + function Get-ModuleInstallerComponents { + param( + [string] $Name + ) + + @{ + arguments = @{ + name = $Name; + }; + installer = { + param( + [scriptblock] $Installer, + [hashtable] $Arguments + ) + + $env:PENDING_MODULE_NAME = $Arguments.Name; + $installAction = { Install-Module -Scope AllUsers -Force $env:PENDING_MODULE_NAME @args }; + & $installAction -AcceptLicense; + + if (Test-Command powershell) { + powershell -c ($installAction.ToString()); + } + + Remove-Item Env:\PENDING_MODULE_NAME; + & $Installer -Action ([InstallerAction]::Configure) @PSBoundParameters; + }; + + configurator = { + param( + [hashtable] $Arguments + ) + + $name = $Arguments.Name; + + Add-PowerShellProfileStatement ` + -DefaultUser ` + -Category $name ` + -Script "Import-Module `"$name`";"; + }; + } + } +}; diff --git a/scripts/Common/Software/Terminal-Icons/Manage.ps1 b/scripts/Common/Software/Terminal-Icons/Manage.ps1 new file mode 100644 index 00000000..7409ad8f --- /dev/null +++ b/scripts/Common/Software/Terminal-Icons/Manage.ps1 @@ -0,0 +1,15 @@ +param ( + $Action, + [hashtable] $Arguments +) + +. "$PSScriptRoot/../PowerShell/Module.ps1"; +. "$PSScriptRoot/../../Scripts/Software.ps1"; + +$parameters = Get-ModuleInstallerComponents "Terminal-Icons"; + +foreach ($key in $PSBoundParameters.Keys) { + $parameters.Add($key, $PSBoundParameters.TryGetValue($key)); +} + +Start-SoftwareInstaller @parameters; diff --git a/scripts/Common/Software/posh-git/Manage.ps1 b/scripts/Common/Software/posh-git/Manage.ps1 new file mode 100644 index 00000000..b7883074 --- /dev/null +++ b/scripts/Common/Software/posh-git/Manage.ps1 @@ -0,0 +1,15 @@ +param ( + $Action, + [hashtable] $Arguments +) + +. "$PSScriptRoot/../PowerShell/Module.ps1"; +. "$PSScriptRoot/../../Scripts/Software.ps1"; + +$parameters = Get-ModuleInstallerComponents "posh-git"; + +foreach ($key in $PSBoundParameters.Keys) { + $parameters.Add($key, $PSBoundParameters.TryGetValue($key)); +} + +Start-SoftwareInstaller @parameters; diff --git a/scripts/Windows/OS/Install.ps1 b/scripts/Windows/OS/Install.ps1 index 1e53cb17..93901c58 100644 --- a/scripts/Windows/OS/Install.ps1 +++ b/scripts/Windows/OS/Install.ps1 @@ -178,6 +178,7 @@ $null = New-Module { $null = New-Module { # Windows Config $softwarePath = "$PSScriptRoot/../Software"; + $commonSoftware = "$PSScriptRoot/../../Common/Software"; . "$softwarePath/Windows/Manage.ps1" @arguments; if (Test-Collection "essential") { @@ -185,6 +186,8 @@ $null = New-Module { . "$softwarePath/OpenSSH/Manage.ps1" @arguments; . "$softwarePath/PowerShell/Manage.ps1" @arguments; . "$softwarePath/chocolatey/Manage.ps1" @arguments; + . "$commonSoftware/posh-git/Manage.ps1" @arguments; + . "$commonSoftware/Terminal-Icons/Manage.ps1" @arguments; } if (Test-Collection "common") {