Internal/Init.ps1
function Init($Dots, $Pull, $DotfilesPath, $ConfigPath) { Import-Module powershell-yaml $config = @{ } if(Test-Path $ConfigPath) { $rawConfig = "" foreach ($line in Get-Content $(Resolve-Path $ConfigPath)) { $rawConfig += "`n" + $line } $config = ConvertFrom-Yaml $rawConfig } else { $config = @{ "path" = "~/.dotfiles" }; New-Item -Path $($ConfigPath.replace("y*ml", "yaml")) -ItemType File -Value $(ConvertTo-Yaml -Data $config) -Force } if(!$DotfilesPath) { $DotfilesPath = $config["path"] } $os = $false if($PSVersionTable.OS) { if($PSVersionTable.OS.StartsWith("Microsoft Windows")) { $os = "windows"; } if($PSVersionTable.OS.StartsWith("Linux")) { $os = "linux"; } if($PSVersionTable.OS.StartsWith("Darwin")) { $os = "darwin"; } } else { $os = "windows"; } if($Pull -and ($Command -ne "Sync")) { Invoke-Expression "git -C $(Resolve-Path $DotfilesPath) pull" Write-Host "" } $dotsData = @{ } $dotsDefault = @{ } if($Dots) { $rawDot = "" $currentFile = $(Join-Path -Path $DotfilesPath -ChildPath "dots.y*ml") if(!(Test-Path $currentFile)) { Write-Error "Did Not find dots.yaml" Return } foreach ($line in Get-Content $currentFile) { $rawDot += "`n" + $line } $dotsDefault = ConvertFrom-Yaml $rawDot $dotsDefault = ResolveOs $dotsDefault $os $dotsDefault = Enlarge $dotsDefault Get-ChildItem $DotfilesPath -Directory | ForEach-Object { $currentDirectory = Join-Path -Path $DotfilesPath -ChildPath $_.Name $currentName = $_.Name $rawDot = "" $currentFile = $(Resolve-Path $(Join-Path -Path $currentDirectory -ChildPath "dot.y*ml")) if((!$currentFile) -or (!(Test-Path $currentFile))) { Return } foreach ($line in Get-Content $currentFile) { $rawDot += "`n" + $line } $dotsData[$currentName] = ConvertFrom-Yaml $rawDot if(!($dotsData[$currentName])) { $dotsData[$currentName] = @{ } } $dotsData[$currentName] = Enlarge $dotsData[$currentName] $dotsData[$currentName] = ResolveOs $dotsData[$currentName] $os if($null -eq $dotsData[$currentName]) { $dotsData[$currentName] = @{ } } if($dotsData[$currentName]) { $dotsData[$currentName] = Merge $dotsDefault $dotsData[$currentName].Clone() } if(!($dotsData[$currentName])) { $dotsData.Remove($currentName) return } if($dotsData[$currentName]["installs"]) { $dotsData[$currentName]["installs"]["cmd"] = $dotsData[$currentName]["installs"]["cmd"] | Merge-Tokens -Tokens @{ name = $currentName } } if($dotsData[$currentName]["updates"]) { $dotsData[$currentName]["updates"]["cmd"] = $dotsData[$currentName]["updates"]["cmd"] | Merge-Tokens -Tokens @{ name = $currentName } } } } return @{ "config" = $config; "dotsData" = $dotsData; "DotfilesPath" = $DotfilesPath } } |