aboutsummaryrefslogtreecommitdiff
path: root/install-win.ps1
blob: e52c0cbca566465da8cd34fdb130a610f8401eb9 (plain)
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
#Requires -Version 5.1
<#
  Windows-natives Pendant zu install.sh (ersetzt install-win.cmd).
  install.sh bleibt unveraendert - kopiert (statt zu verlinken) die
  relevanten Konfigurationen an ihre nativen Windows-Zielorte. Keine
  Admin-Rechte noetig (keine Symlinks).

  Aufruf:
    .\install-win.ps1

  Falls die Ausfuehrung durch die Execution Policy blockiert wird:
    powershell -ExecutionPolicy Bypass -File .\install-win.ps1

  Hinweis: Es wird KOPIERT, nicht verlinkt. Nach Aenderungen im Repo
  dieses Skript erneut ausfuehren, um die Kopien zu aktualisieren.
#>

$ErrorActionPreference = "Stop"

function Write-Ok($msg) {
  Write-Host "OK   $msg" -ForegroundColor Green
}

function Write-Step($msg) {
  Write-Host "==> $msg" -ForegroundColor Cyan
}

function Write-SkipMsg($msg) {
  Write-Host "-    $msg" -ForegroundColor DarkGray
}

$RepoRoot = $PSScriptRoot

$NvimSrc = Join-Path $RepoRoot "nvim"
$NvimDst = Join-Path $env:LOCALAPPDATA "nvim"

$GitConfigSrc = Join-Path $RepoRoot "git\config"
$GitConfigDst = Join-Path $env:USERPROFILE ".gitconfig"

$GitUp2partsSrc = Join-Path $RepoRoot "git\config-up2parts"
$GitXdgDir = Join-Path $env:USERPROFILE ".config\git"
$GitUp2partsDst = Join-Path $GitXdgDir "config-up2parts"

$NpmrcSrc = Join-Path $RepoRoot "npm\npmrc-win"
$NpmrcDst = Join-Path $env:USERPROFILE ".npmrc"

function Copy-NvimConfig {
  Write-Step "nvim -> $NvimDst"

  if (Test-Path $NvimDst) {
    Remove-Item -Recurse -Force $NvimDst
  }

  Copy-Item -Recurse -Force $NvimSrc $NvimDst
  Write-Ok $NvimDst
}

function Copy-GitConfig {
  Write-Step "git\config -> $GitConfigDst"
  Copy-Item -Force $GitConfigSrc $GitConfigDst
  Write-Ok $GitConfigDst

  if (-not (Test-Path $GitXdgDir)) {
    New-Item -ItemType Directory -Path $GitXdgDir -Force | Out-Null
  }

  Write-Step "git\config-up2parts -> $GitUp2partsDst"
  Copy-Item -Force $GitUp2partsSrc $GitUp2partsDst
  Write-Ok "$GitUp2partsDst (wird per includeIf aus .gitconfig eingebunden)"
}

function Copy-Npmrc {
  if (Test-Path $NpmrcDst) {
    Write-SkipMsg "$NpmrcDst existiert bereits, uebersprungen"
    return
  }

  Write-Step "npm\npmrc-win -> $NpmrcDst"
  Copy-Item -Force $NpmrcSrc $NpmrcDst
  Write-Ok $NpmrcDst
}

function Add-BinToUserPath {
  $binDir = Join-Path $RepoRoot "windows\bin"
  $userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
  $entries = $userPath -split ";"

  if ($entries -contains $binDir) {
    Write-SkipMsg "$binDir bereits im User-PATH"
    return
  }

  Write-Step "$binDir zum User-PATH hinzufuegen (enthaelt gmake.cmd)"
  [Environment]::SetEnvironmentVariable("PATH", "$userPath;$binDir", "User")
  Write-Ok "$binDir (wirkt erst in neuen Terminal-Sitzungen)"
}

function Main {
  Copy-NvimConfig
  Copy-GitConfig
  Copy-Npmrc
  Add-BinToUserPath

  Write-Host ""
  Write-Host "Fertig. Dateien wurden KOPIERT, nicht verlinkt." -ForegroundColor Green
  Write-Host "Nach Aenderungen im Repo dieses Skript erneut ausfuehren."
  Write-Host "Neues Terminal oeffnen, damit PATH-Aenderungen wirksam werden." -ForegroundColor Yellow
}

Main