aboutsummaryrefslogtreecommitdiff
path: root/bootstrap-win/neovim.ps1
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2026-07-27 08:26:18 +0200
committerThomas Schmucker <ts@its1.de>2026-07-27 08:26:18 +0200
commit7d29d60f7ca96cd0d76008345ec788671cfb7573 (patch)
tree3d02e30cf1da103a9757878b9aafc0fbd95c40b6 /bootstrap-win/neovim.ps1
parent3fa23845d9bb80162922e74c57e2f97849670da0 (diff)
downloaddotfiles-7d29d60f7ca96cd0d76008345ec788671cfb7573.tar.gz
dotfiles-7d29d60f7ca96cd0d76008345ec788671cfb7573.tar.bz2
dotfiles-7d29d60f7ca96cd0d76008345ec788671cfb7573.zip
windows: Kommentare in PowerShell-Skripten auf das Mindestmass reduziert
Diffstat (limited to 'bootstrap-win/neovim.ps1')
-rw-r--r--bootstrap-win/neovim.ps175
1 files changed, 13 insertions, 62 deletions
diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1
index 77abf83..32e2db7 100644
--- a/bootstrap-win/neovim.ps1
+++ b/bootstrap-win/neovim.ps1
@@ -1,29 +1,14 @@
1#Requires -Version 5.1 1#Requires -Version 5.1
2<# 2<#
3 Windows-natives Pendant zu bootstrap/neovim.sh (macOS/FreeBSD). 3 Windows-natives Pendant zu bootstrap/neovim.sh - nutzt winget/npm statt
4 bootstrap/neovim.sh bleibt unveraendert - dieses Skript ist bewusst 4 brew/pkg, daher eigenstaendiges Skript ohne Git-Bash-/WSL-Abhaengigkeit.
5 eigenstaendig, da sich die Paketquellen (winget/npm statt brew/pkg) und
6 das Fehlerverhalten zu stark unterscheiden fuer ein gemeinsames Skript.
7 5
8 Nutzt ausschliesslich native Windows-Werkzeuge (winget, npm, pwsh/ 6 Aufruf (keine Admin-Rechte noetig):
9 powershell.exe) - keine Git-Bash- oder WSL-Abhaengigkeit.
10
11 Aufruf (PowerShell, keine Admin-Rechte noetig):
12 .\bootstrap-win\neovim.ps1 7 .\bootstrap-win\neovim.ps1
13 8
14 Hinweis: yamlfmt, gawk und xmllint/libxml2 sind bewusst NICHT enthalten - 9 yamlfmt, gawk und xmllint sind bewusst nicht enthalten (siehe
15 im Praxistest (24.07.2026) bestaetigt, dass es dafuer keine winget-Pakete 10 neovim-windows-setup.md). Fehlgeschlagene Installationen werden als
16 unter den urspruenglich vermuteten IDs gibt. Siehe Install-Formatters und 11 Warnung gemeldet, das Skript bricht nicht ab.
17 neovim-windows-setup.md fuer manuelle Alternativen. mvdan.shfmt und
18 astral-sh.ruff liefen im Test erfolgreich durch.
19
20 Schlaegt eine winget-Installation trotzdem fehl, meldet das Skript das
21 als Warnung (bricht nicht ab) und zeigt die letzten Zeilen der winget-
22 Ausgabe zur Fehlersuche an.
23
24 C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf
25 den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer
26 "Developer PowerShell for VS" gestartet werden (siehe Install-Tools).
27#> 12#>
28 13
29$ErrorActionPreference = "Stop" 14$ErrorActionPreference = "Stop"
@@ -51,10 +36,8 @@ function Test-CommandExists([string]$Name) {
51} 36}
52 37
53function Find-BinaryDirectory([string]$Binary) { 38function Find-BinaryDirectory([string]$Binary) {
54 # Sucht nach "<Binary>.exe" unter den ueblichen Installationswurzeln. 39 # Deckt den Fall ab, dass winget (v.a. --silent) korrekt installiert,
55 # Deckt den Fall ab, dass ein winget-Paket (v.a. im --silent-Modus) 40 # aber die PATH-Registrierung ausgelassen hat (beobachtet bei LLVM.LLVM).
56 # die PATH-Registrierung ausgelassen hat, obwohl es korrekt installiert
57 # wurde - beobachtet bei LLVM.LLVM/clangd.
58 $searchRoots = @( 41 $searchRoots = @(
59 $env:ProgramFiles, 42 $env:ProgramFiles,
60 ${env:ProgramFiles(x86)}, 43 ${env:ProgramFiles(x86)},
@@ -98,12 +81,7 @@ function Install-WingetPackage([string]$Binary, [string]$Id) {
98 $lastLine = ($output | Select-Object -Last 3) -join " / " 81 $lastLine = ($output | Select-Object -Last 3) -join " / "
99 82
100 if ($text -match "bereits ein vorhandenes Paket|already installed|No applicable update") { 83 if ($text -match "bereits ein vorhandenes Paket|already installed|No applicable update") {
101 # Paket ist laut winget installiert, aber die Binary steht trotzdem 84 # Installiert, aber nicht im PATH - Binary suchen und PATH ergaenzen.
102 # nicht im PATH - z.B. weil der Installer (im --silent-Modus) die
103 # PATH-Registrierung uebersprungen hat. winget search hilft hier
104 # nicht weiter, da das Paket ja gefunden wurde - stattdessen selbst
105 # danach suchen und den User-PATH ergaenzen (dauerhaft + fuer diese
106 # Sitzung).
107 $dir = Find-BinaryDirectory $Binary 85 $dir = Find-BinaryDirectory $Binary
108 86
109 if ($dir) { 87 if ($dir) {
@@ -155,11 +133,7 @@ function Test-Prerequisites {
155} 133}
156 134
157function Update-SessionPath { 135function Update-SessionPath {
158 # winget/npm-Installer tragen PATH-Aenderungen in die Registry (User- 136 # Registry-PATH-Aenderungen durch winget/npm wirken erst nach diesem Refresh.
159 # und/oder Machine-Scope) ein, aber der laufende PowerShell-Prozess
160 # bekommt das nicht automatisch mit. Ohne diesen Refresh wuerde z.B.
161 # "npm" gleich im Anschluss an die Node-Installation als "nicht
162 # gefunden" gemeldet, obwohl es gerade erst installiert wurde.
163 $machine = [Environment]::GetEnvironmentVariable("PATH", "Machine") 137 $machine = [Environment]::GetEnvironmentVariable("PATH", "Machine")
164 $user = [Environment]::GetEnvironmentVariable("PATH", "User") 138 $user = [Environment]::GetEnvironmentVariable("PATH", "User")
165 $env:PATH = "$machine;$user" 139 $env:PATH = "$machine;$user"
@@ -178,14 +152,7 @@ function Install-Formatters {
178 Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" 152 Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt"
179 Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" 153 Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua"
180 154
181 # yamlfmt, gawk, xmllint: im Praxistest bestaetigt, dass es unter diesen 155 # yamlfmt, gawk, xmllint: kein winget-Paket gefunden, siehe neovim-windows-setup.md.
182 # IDs kein winget-Paket gibt ("Es wurde kein Paket gefunden, das den
183 # Eingabekriterien entspricht"). Kein verifizierter Ersatz gefunden,
184 # deshalb bewusst nicht automatisiert - siehe neovim-windows-setup.md
185 # fuer manuelle Alternativen. conform.nvim faellt bei fehlendem
186 # Formatter fuer die jeweilige Dateiart einfach auf LSP-Formatierung
187 # zurueck (default_format_opts.lsp_format = "fallback"), betrifft also
188 # nur awk/xml/xsd/yaml-Dateien.
189} 156}
190 157
191function Install-Tools { 158function Install-Tools {
@@ -193,24 +160,8 @@ function Install-Tools {
193 Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" 160 Install-WingetPackage -Binary "fd" -Id "sharkdp.fd"
194 Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" 161 Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli"
195 162
196 # C-Compiler fuer nvim-treesitter: kein winget-Paket noetig, MSVC (cl.exe) 163 # MSVC (cl.exe) ist bereits vorhanden, kein winget-Paket noetig - Neovim
197 # ist auf diesen Systemen bereits vorhanden. nvim-treesitter findet cl.exe 164 # dafuer aber aus einer "Developer PowerShell for VS" starten.
198 # automatisch, ABER nur wenn INCLUDE/LIB gesetzt sind - das passiert nicht
199 # in einer normalen PowerShell, sondern nur in einer "Developer PowerShell
200 # for VS" bzw. "x64 Native Tools Command Prompt". Neovim also immer aus
201 # so einer Shell heraus starten, sonst schlaegt die Parser-Kompilierung
202 # mit "cannot find <header>.h" o.ae. fehl, obwohl cl.exe selbst gefunden wird.
203
204 # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in
205 # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin
206 # zum PATH hinzufuegen (PowerShell, User-Scope, nicht setx mit %PATH%
207 # verwenden - das wuerde den gesamten Prozess-PATH inkl. System-Anteil
208 # dauerhaft in den User-PATH kopieren):
209 # $userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
210 # [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User")
211 # GnuWin32.Make ist im Praxistest fehlgeschlagen (Paket 2006er-Stand,
212 # unklar ob im winget-Repo ueberhaupt noch gepflegt). ezwinports.make
213 # ist ein aktiver gepflegter GNU-Make-Port fuer Windows.
214 Install-WingetPackage -Binary "make" -Id "ezwinports.make" 165 Install-WingetPackage -Binary "make" -Id "ezwinports.make"
215} 166}
216 167