aboutsummaryrefslogtreecommitdiff
path: root/bootstrap
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2026-07-23 09:51:55 +0200
committerThomas Schmucker <ts@its1.de>2026-07-23 09:51:55 +0200
commitfe4db25063224c51f9970f2f41d355f60d751b1b (patch)
tree04852c80566b91e70a7ece10f51030e763751672 /bootstrap
parent1b2066ee60e9fc629941db716d8a7ac6d81dbca6 (diff)
downloaddotfiles-fe4db25063224c51f9970f2f41d355f60d751b1b.tar.gz
dotfiles-fe4db25063224c51f9970f2f41d355f60d751b1b.tar.bz2
dotfiles-fe4db25063224c51f9970f2f41d355f60d751b1b.zip
bootstrap: neovim-win.ps1 hinzugefuegt (natives PowerShell-Pendant)
Reiner PowerShell-Weg statt Git-Bash/WSL, wie von Thomas gewuenscht. Installiert Formatter/Tools/LSP-Server per winget und npm; einzelne fehlschlagende Pakete werden als Warnung gemeldet statt das Skript abzubrechen (mehrere winget-IDs konnten in dieser Session nicht gegen eine Live-Quelle verifiziert werden, siehe Kopfkommentar im Skript). neovim-windows-setup.md: Abschnitt zu externen Abhaengigkeiten auf das neue Skript verweisen lassen statt einzelne Befehle aufzulisten.
Diffstat (limited to 'bootstrap')
-rw-r--r--bootstrap/neovim-win.ps1154
1 files changed, 154 insertions, 0 deletions
diff --git a/bootstrap/neovim-win.ps1 b/bootstrap/neovim-win.ps1
new file mode 100644
index 0000000..60ed0ea
--- /dev/null
+++ b/bootstrap/neovim-win.ps1
@@ -0,0 +1,154 @@
1#Requires -Version 5.1
2<#
3 Windows-natives Pendant zu bootstrap/neovim.sh (macOS/FreeBSD).
4 bootstrap/neovim.sh bleibt unveraendert - dieses Skript ist bewusst
5 eigenstaendig, da sich die Paketquellen (winget/npm statt brew/pkg) und
6 das Fehlerverhalten zu stark unterscheiden fuer ein gemeinsames Skript.
7
8 Nutzt ausschliesslich native Windows-Werkzeuge (winget, npm, pwsh/
9 powershell.exe) - keine Git-Bash- oder WSL-Abhaengigkeit.
10
11 Aufruf (PowerShell, keine Admin-Rechte noetig):
12 .\bootstrap\neovim-win.ps1
13
14 Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2,
15 google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig) konnten in dieser
16 Session nicht gegen eine aktuelle winget-Quelle verifiziert werden.
17 Schlaegt eine Installation fehl, meldet das Skript das als Warnung
18 (bricht nicht ab) und nennt den Befehl zum manuellen Nachschlagen
19 ("winget search <name>").
20#>
21
22$ErrorActionPreference = "Stop"
23$script:Failures = @()
24
25function Write-Ok($msg) {
26 Write-Host "OK $msg" -ForegroundColor Green
27}
28
29function Write-Step($msg) {
30 Write-Host "==> $msg" -ForegroundColor Cyan
31}
32
33function Write-Skip($msg) {
34 Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray
35}
36
37function Write-Warn($msg) {
38 Write-Host "! $msg" -ForegroundColor Yellow
39 $script:Failures += $msg
40}
41
42function Test-CommandExists([string]$Name) {
43 return [bool](Get-Command $Name -ErrorAction SilentlyContinue)
44}
45
46function Install-WingetPackage([string]$Binary, [string]$Id) {
47 if (Test-CommandExists $Binary) {
48 Write-Skip $Binary
49 return
50 }
51
52 Write-Step "winget install $Id"
53 winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent | Out-Null
54
55 if ($LASTEXITCODE -ne 0) {
56 Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden). Pruefen mit: winget search $Id"
57 return
58 }
59
60 Write-Ok $Id
61}
62
63function Install-NpmPackage([string]$Binary, [string]$Package) {
64 if (Test-CommandExists $Binary) {
65 Write-Skip $Binary
66 return
67 }
68
69 if (-not (Test-CommandExists "npm")) {
70 Write-Warn "npm wurde nicht gefunden - kann '$Package' nicht installieren."
71 return
72 }
73
74 Write-Step "npm install -g $Package"
75 npm install -g $Package | Out-Null
76
77 if ($LASTEXITCODE -ne 0) {
78 Write-Warn "npm install -g $Package fehlgeschlagen."
79 return
80 }
81
82 Write-Ok $Package
83}
84
85function Test-Prerequisites {
86 if (-not (Test-CommandExists "winget")) {
87 Write-Host "Fehler: winget wurde nicht gefunden. 'App Installer' aus dem Microsoft Store installieren." -ForegroundColor Red
88 exit 1
89 }
90}
91
92function Install-Prerequisites {
93 Install-WingetPackage -Binary "git" -Id "Git.Git"
94 Install-WingetPackage -Binary "node" -Id "OpenJS.NodeJS.LTS"
95}
96
97function Install-Formatters {
98 Install-WingetPackage -Binary "jq" -Id "jqlang.jq"
99 Install-NpmPackage -Binary "prettier" -Package "prettier"
100 Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff"
101 Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt"
102 Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua"
103 Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt"
104 Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk"
105 Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2"
106}
107
108function Install-Tools {
109 Install-WingetPackage -Binary "rg" -Id "BurntSushi.ripgrep.MSVC"
110 Install-WingetPackage -Binary "fd" -Id "sharkdp.fd"
111 Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli"
112
113 # C-Compiler, damit nvim-treesitter Parser kompilieren kann.
114 Install-WingetPackage -Binary "zig" -Id "zig.zig"
115
116 # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in
117 # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin
118 # zum PATH hinzufuegen, z.B.:
119 # setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin"
120 Install-WingetPackage -Binary "make" -Id "GnuWin32.Make"
121}
122
123function Install-Lsp {
124 Install-NpmPackage -Binary "basedpyright-langserver" -Package "basedpyright"
125 Install-NpmPackage -Binary "bash-language-server" -Package "bash-language-server"
126 Install-WingetPackage -Binary "clangd" -Id "LLVM.LLVM"
127 Install-WingetPackage -Binary "shellcheck" -Id "koalaman.shellcheck"
128 Install-NpmPackage -Binary "vscode-html-language-server" -Package "vscode-langservers-extracted"
129 Install-NpmPackage -Binary "vscode-json-language-server" -Package "vscode-langservers-extracted"
130 Install-WingetPackage -Binary "lua-language-server" -Id "LuaLS.lua-language-server"
131 Install-NpmPackage -Binary "prisma-language-server" -Package "@prisma/language-server"
132 Install-NpmPackage -Binary "vtsls" -Package "@vtsls/language-server"
133}
134
135function Main {
136 Test-Prerequisites
137
138 Install-Prerequisites
139 Install-Formatters
140 Install-Tools
141 Install-Lsp
142
143 Write-Host ""
144 if ($script:Failures.Count -eq 0) {
145 Write-Host "Bootstrap abgeschlossen." -ForegroundColor Green
146 } else {
147 Write-Host "Bootstrap abgeschlossen, mit $($script:Failures.Count) Warnung(en):" -ForegroundColor Yellow
148 foreach ($f in $script:Failures) {
149 Write-Host " - $f" -ForegroundColor Yellow
150 }
151 }
152}
153
154Main