From 660a005fa15e99c4aa1cef3d844a488cfde65010 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 07:30:36 +0200 Subject: windows: install-win.cmd, gmake.cmd und Windows-Setup-Anleitung hinzugefuegt Eigenstaendiger, Windows-nativer Installationsweg fuer nvim/git/npm-Config (Kopieren statt Symlinks, keine Admin-Rechte noetig). install.sh und die bestehenden bootstrap-Skripte bleiben unveraendert. --- neovim-windows-setup.md | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 neovim-windows-setup.md (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md new file mode 100644 index 0000000..7c8e7f3 --- /dev/null +++ b/neovim-windows-setup.md @@ -0,0 +1,92 @@ +# Neovim-Setup unter Windows (nativ) + +Checkliste für die Übernahme der bestehenden `nvim/`-Config aus dem Dotfiles-Repo auf ein natives Windows-System (kein WSL). Repo selbst bleibt unverändert. + +## 1. Grundwerkzeuge installieren + +```powershell +winget install Neovim.Neovim +winget install Git.Git +winget install OpenJS.NodeJS.LTS +winget install Python.Python.3.12 +``` + +Git for Windows bringt Git Bash mit – eine POSIX-Shell, mit der `install.sh` und die `bootstrap/*.sh`-Skripte direkt lauffähig sind (kein Portieren nach PowerShell nötig). + +## 2. Konfiguration einrichten (Windows-nativer Weg) + +Statt `install.sh` samt XDG-Umgebungsvariablen zu verbiegen: `install-win.cmd` im Repo-Root ausführen. Es kopiert (keine Symlinks, keine Admin-Rechte nötig): + +- `nvim/` → `%LOCALAPPDATA%\nvim` +- `git/config` → `%USERPROFILE%\.gitconfig` +- `git/config-up2parts` → `%USERPROFILE%\.config\git\config-up2parts` (Pfad ist im `includeIf` von `git/config` hartkodiert) +- `npm/npmrc` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) + +Nach Änderungen im Repo `install-win.cmd` erneut ausführen, um die Kopien zu aktualisieren. + +## 3. Externe Abhängigkeiten + +`bootstrap/neovim.sh` bricht unter Windows sofort ab (`Nicht unterstütztes Betriebssystem`) – die Pakete müssen manuell installiert werden: + +**Tools** +```powershell +winget install BurntSushi.ripgrep.MSVC +winget install sharkdp.fd +winget install tree-sitter.tree-sitter +``` + +**C-Compiler** (nötig, damit `nvim-treesitter` Parser kompilieren kann): +```powershell +winget install zig.zig +``` +(zig funktioniert als `cc`-Ersatz für Treesitter; alternativ MSVC Build Tools oder MinGW-w64) + +**Make** (für `opt.makeprg = "gmake"`): +```powershell +winget install GnuWin32.Make +``` +Anschließend `windows\bin` (enthält `gmake.cmd`, einen Wrapper der an `make` durchreicht) einmalig zum PATH hinzufügen: +```powershell +setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" +``` + +**Formatter** (conform.nvim): +```powershell +winget install jqlang.jq +npm install -g prettier +pip install ruff +winget install mvdan.shfmt +winget install JohnnyMorganz.StyLua +winget install google.yamlfmt +winget install GnuWin32.Gawk +``` +`xmllint` (für XML/XSD) ist in libxml2 enthalten – z. B. über `winget install GnuWin32.Libxml2` oder in Git for Windows bereits vorhanden. + +**LSP-Server**: +```powershell +npm install -g basedpyright +npm install -g bash-language-server +npm install -g vscode-langservers-extracted +npm install -g @prisma/language-server +npm install -g @vtsls/language-server +winget install LLVM.LLVM # clangd +winget install koalaman.shellcheck +winget install LuaLS.lua-language-server +``` + +## 4. Bekannte Stolpersteine + +- **`g.python3_host_prog`** in `nvim/lua/config/options.lua` ist hart auf einen Unix-Pfad (`$HOME/.local/venv/nvim/bin/python`) gesetzt. Unter Windows existiert weder dieses `HOME`-Layout noch `bin/python` (dort `Scripts\python.exe`). Aktuell nutzt kein installiertes Plugin die Python-Provider-API – daher unkritisch, kann ignoriert werden, solange `:python3`-Funktionen nicht gebraucht werden. (Erwägenswert: `g.loaded_python3_provider = 0` setzen, dann verschwindet das Problem ganz – separat besprochen, noch nicht umgesetzt.) +- **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen). +- **`bootstrap/neovim-dict.sh`** (deutsche Rechtschreibprüfung): unter Git Bash direkt ausführbar. Lädt die Dateien nach `~/.local/share/nvim/site/spell`; unter nativem Windows-Neovim stattdessen manuell nach `%LOCALAPPDATA%\nvim-data\site\spell` legen. +- **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. +- **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. + +## 5. Verifizieren + +``` +nvim +:checkhealth +``` + +`:checkhealth` zeigt fehlende Provider/Tools direkt an – guter letzter Schritt nach der Installation. -- cgit v1.3 From fe4db25063224c51f9970f2f41d355f60d751b1b Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 09:51:55 +0200 Subject: 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. --- bootstrap/neovim-win.ps1 | 154 +++++++++++++++++++++++++++++++++++++++++++++++ neovim-windows-setup.md | 43 ++----------- 2 files changed, 158 insertions(+), 39 deletions(-) create mode 100644 bootstrap/neovim-win.ps1 (limited to 'neovim-windows-setup.md') 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 @@ +#Requires -Version 5.1 +<# + Windows-natives Pendant zu bootstrap/neovim.sh (macOS/FreeBSD). + bootstrap/neovim.sh bleibt unveraendert - dieses Skript ist bewusst + eigenstaendig, da sich die Paketquellen (winget/npm statt brew/pkg) und + das Fehlerverhalten zu stark unterscheiden fuer ein gemeinsames Skript. + + Nutzt ausschliesslich native Windows-Werkzeuge (winget, npm, pwsh/ + powershell.exe) - keine Git-Bash- oder WSL-Abhaengigkeit. + + Aufruf (PowerShell, keine Admin-Rechte noetig): + .\bootstrap\neovim-win.ps1 + + Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, + google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig) konnten in dieser + Session nicht gegen eine aktuelle winget-Quelle verifiziert werden. + Schlaegt eine Installation fehl, meldet das Skript das als Warnung + (bricht nicht ab) und nennt den Befehl zum manuellen Nachschlagen + ("winget search "). +#> + +$ErrorActionPreference = "Stop" +$script:Failures = @() + +function Write-Ok($msg) { + Write-Host "OK $msg" -ForegroundColor Green +} + +function Write-Step($msg) { + Write-Host "==> $msg" -ForegroundColor Cyan +} + +function Write-Skip($msg) { + Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray +} + +function Write-Warn($msg) { + Write-Host "! $msg" -ForegroundColor Yellow + $script:Failures += $msg +} + +function Test-CommandExists([string]$Name) { + return [bool](Get-Command $Name -ErrorAction SilentlyContinue) +} + +function Install-WingetPackage([string]$Binary, [string]$Id) { + if (Test-CommandExists $Binary) { + Write-Skip $Binary + return + } + + Write-Step "winget install $Id" + winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent | Out-Null + + if ($LASTEXITCODE -ne 0) { + Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden). Pruefen mit: winget search $Id" + return + } + + Write-Ok $Id +} + +function Install-NpmPackage([string]$Binary, [string]$Package) { + if (Test-CommandExists $Binary) { + Write-Skip $Binary + return + } + + if (-not (Test-CommandExists "npm")) { + Write-Warn "npm wurde nicht gefunden - kann '$Package' nicht installieren." + return + } + + Write-Step "npm install -g $Package" + npm install -g $Package | Out-Null + + if ($LASTEXITCODE -ne 0) { + Write-Warn "npm install -g $Package fehlgeschlagen." + return + } + + Write-Ok $Package +} + +function Test-Prerequisites { + if (-not (Test-CommandExists "winget")) { + Write-Host "Fehler: winget wurde nicht gefunden. 'App Installer' aus dem Microsoft Store installieren." -ForegroundColor Red + exit 1 + } +} + +function Install-Prerequisites { + Install-WingetPackage -Binary "git" -Id "Git.Git" + Install-WingetPackage -Binary "node" -Id "OpenJS.NodeJS.LTS" +} + +function Install-Formatters { + Install-WingetPackage -Binary "jq" -Id "jqlang.jq" + Install-NpmPackage -Binary "prettier" -Package "prettier" + Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" + Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" + Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" + Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt" + Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk" + Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2" +} + +function Install-Tools { + Install-WingetPackage -Binary "rg" -Id "BurntSushi.ripgrep.MSVC" + Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" + Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" + + # C-Compiler, damit nvim-treesitter Parser kompilieren kann. + Install-WingetPackage -Binary "zig" -Id "zig.zig" + + # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in + # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin + # zum PATH hinzufuegen, z.B.: + # setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" + Install-WingetPackage -Binary "make" -Id "GnuWin32.Make" +} + +function Install-Lsp { + Install-NpmPackage -Binary "basedpyright-langserver" -Package "basedpyright" + Install-NpmPackage -Binary "bash-language-server" -Package "bash-language-server" + Install-WingetPackage -Binary "clangd" -Id "LLVM.LLVM" + Install-WingetPackage -Binary "shellcheck" -Id "koalaman.shellcheck" + Install-NpmPackage -Binary "vscode-html-language-server" -Package "vscode-langservers-extracted" + Install-NpmPackage -Binary "vscode-json-language-server" -Package "vscode-langservers-extracted" + Install-WingetPackage -Binary "lua-language-server" -Id "LuaLS.lua-language-server" + Install-NpmPackage -Binary "prisma-language-server" -Package "@prisma/language-server" + Install-NpmPackage -Binary "vtsls" -Package "@vtsls/language-server" +} + +function Main { + Test-Prerequisites + + Install-Prerequisites + Install-Formatters + Install-Tools + Install-Lsp + + Write-Host "" + if ($script:Failures.Count -eq 0) { + Write-Host "Bootstrap abgeschlossen." -ForegroundColor Green + } else { + Write-Host "Bootstrap abgeschlossen, mit $($script:Failures.Count) Warnung(en):" -ForegroundColor Yellow + foreach ($f in $script:Failures) { + Write-Host " - $f" -ForegroundColor Yellow + } + } +} + +Main diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 7c8e7f3..555c273 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -26,54 +26,19 @@ Nach Änderungen im Repo `install-win.cmd` erneut ausführen, um die Kopien zu a ## 3. Externe Abhängigkeiten -`bootstrap/neovim.sh` bricht unter Windows sofort ab (`Nicht unterstütztes Betriebssystem`) – die Pakete müssen manuell installiert werden: +`bootstrap/neovim.sh` bricht unter Windows sofort ab (`Nicht unterstütztes Betriebssystem`). Stattdessen `bootstrap/neovim-win.ps1` ausführen (reines PowerShell, kein Git Bash/WSL nötig): -**Tools** ```powershell -winget install BurntSushi.ripgrep.MSVC -winget install sharkdp.fd -winget install tree-sitter.tree-sitter +.\bootstrap\neovim-win.ps1 ``` -**C-Compiler** (nötig, damit `nvim-treesitter` Parser kompilieren kann): -```powershell -winget install zig.zig -``` -(zig funktioniert als `cc`-Ersatz für Treesitter; alternativ MSVC Build Tools oder MinGW-w64) +Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, zig als C-Compiler für Treesitter, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig, sind ungeprüft). -**Make** (für `opt.makeprg = "gmake"`): -```powershell -winget install GnuWin32.Make -``` -Anschließend `windows\bin` (enthält `gmake.cmd`, einen Wrapper der an `make` durchreicht) einmalig zum PATH hinzufügen: +`windows\bin` (enthält `gmake.cmd`, Wrapper für `opt.makeprg = "gmake"`) danach einmalig zum PATH hinzufügen: ```powershell setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" ``` -**Formatter** (conform.nvim): -```powershell -winget install jqlang.jq -npm install -g prettier -pip install ruff -winget install mvdan.shfmt -winget install JohnnyMorganz.StyLua -winget install google.yamlfmt -winget install GnuWin32.Gawk -``` -`xmllint` (für XML/XSD) ist in libxml2 enthalten – z. B. über `winget install GnuWin32.Libxml2` oder in Git for Windows bereits vorhanden. - -**LSP-Server**: -```powershell -npm install -g basedpyright -npm install -g bash-language-server -npm install -g vscode-langservers-extracted -npm install -g @prisma/language-server -npm install -g @vtsls/language-server -winget install LLVM.LLVM # clangd -winget install koalaman.shellcheck -winget install LuaLS.lua-language-server -``` - ## 4. Bekannte Stolpersteine - **`g.python3_host_prog`** in `nvim/lua/config/options.lua` ist hart auf einen Unix-Pfad (`$HOME/.local/venv/nvim/bin/python`) gesetzt. Unter Windows existiert weder dieses `HOME`-Layout noch `bin/python` (dort `Scripts\python.exe`). Aktuell nutzt kein installiertes Plugin die Python-Provider-API – daher unkritisch, kann ignoriert werden, solange `:python3`-Funktionen nicht gebraucht werden. (Erwägenswert: `g.loaded_python3_provider = 0` setzen, dann verschwindet das Problem ganz – separat besprochen, noch nicht umgesetzt.) -- cgit v1.3 From b504e16f941470d46c0f8495f7ea4368e5d14871 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 10:00:34 +0200 Subject: windows: install-win.cmd durch install-win.ps1 ersetzt, neovim-dict-win.ps1 ergaenzt install-win.cmd entfernt, install-win.ps1 (reines PowerShell) uebernimmt dieselbe Aufgabe (Config-Kopie nach %LOCALAPPDATA%\nvim, .gitconfig, config-up2parts, npmrc). Ausserdem bootstrap/neovim-dict-win.ps1 als PowerShell-Pendant zu bootstrap/neovim-dict.sh: laedt die deutschen Rechtschreib-Woerterbuecher nach %LOCALAPPDATA%\nvim-data\site\spell. neovim-windows-setup.md aktualisiert: verweist jetzt durchgehend auf die .ps1-Skripte statt .cmd/Git-Bash, Python-Installationsschritt entfernt (Provider ist deaktiviert), Stolperstein-Liste bereinigt. --- bootstrap/neovim-dict-win.ps1 | 64 +++++++++++++++++++++++++++++ install-win.cmd | 64 ----------------------------- install-win.ps1 | 93 +++++++++++++++++++++++++++++++++++++++++++ neovim-windows-setup.md | 20 ++++++---- 4 files changed, 170 insertions(+), 71 deletions(-) create mode 100644 bootstrap/neovim-dict-win.ps1 delete mode 100644 install-win.cmd create mode 100644 install-win.ps1 (limited to 'neovim-windows-setup.md') diff --git a/bootstrap/neovim-dict-win.ps1 b/bootstrap/neovim-dict-win.ps1 new file mode 100644 index 0000000..6c0c710 --- /dev/null +++ b/bootstrap/neovim-dict-win.ps1 @@ -0,0 +1,64 @@ +#Requires -Version 5.1 +<# + Windows-natives Pendant zu bootstrap/neovim-dict.sh. + Laedt die deutschen Rechtschreib-Woerterbuecher fuer Neovim herunter. + bootstrap/neovim-dict.sh bleibt unveraendert. + + Aufruf: + .\bootstrap\neovim-dict-win.ps1 + + Falls die Ausfuehrung durch die Execution Policy blockiert wird: + powershell -ExecutionPolicy Bypass -File .\bootstrap\neovim-dict-win.ps1 +#> + +$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 bereits vorhanden" -ForegroundColor DarkGray +} + +# Nativer Windows-Datenpfad von Neovim (kein XDG_DATA_HOME gesetzt): +# $env:LOCALAPPDATA\nvim-data\site\spell +$SpellDir = Join-Path $env:LOCALAPPDATA "nvim-data\site\spell" + +$Urls = @( + "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.spl", + "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.sug" +) + +function Get-SpellFile([string]$Url) { + $fileName = Split-Path -Leaf $Url + $dest = Join-Path $SpellDir $fileName + + if (Test-Path $dest) { + Write-SkipMsg $fileName + return + } + + Write-Step "Lade $fileName herunter" + Invoke-WebRequest -Uri $Url -OutFile $dest + Write-Ok $fileName +} + +function Main { + if (-not (Test-Path $SpellDir)) { + New-Item -ItemType Directory -Path $SpellDir -Force | Out-Null + } + + foreach ($url in $Urls) { + Get-SpellFile $url + } + + Write-Host "" + Write-Host "Woerterbuecher fuer Neovim installiert!" -ForegroundColor Green +} + +Main diff --git a/install-win.cmd b/install-win.cmd deleted file mode 100644 index 007516d..0000000 --- a/install-win.cmd +++ /dev/null @@ -1,64 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -rem Windows-natives Pendant zu install.sh. -rem Kopiert (statt zu verlinken) die relevanten Konfigurationen an ihre -rem nativen Windows-Zielorte. install.sh bleibt unveraendert; dieses -rem Skript ist bewusst eigenstaendig, da FreeBSD/macOS und Windows zu -rem unterschiedlich sind fuer eine gemeinsame Installationsroutine. -rem -rem Hinweis: Nach Aenderungen an nvim/ oder git/ dieses Skript erneut -rem ausfuehren, um die Kopien zu aktualisieren (keine Symlinks). - -set "SCRIPT_DIR=%~dp0" - -set "NVIM_SRC=%SCRIPT_DIR%nvim" -set "NVIM_DST=%LOCALAPPDATA%\nvim" - -set "GIT_CONFIG_SRC=%SCRIPT_DIR%git\config" -set "GIT_CONFIG_DST=%USERPROFILE%\.gitconfig" - -set "GIT_UP2PARTS_SRC=%SCRIPT_DIR%git\config-up2parts" -set "GIT_XDG_DIR=%USERPROFILE%\.config\git" -set "GIT_UP2PARTS_DST=%GIT_XDG_DIR%\config-up2parts" - -set "NPMRC_SRC=%SCRIPT_DIR%npm\npmrc" -set "NPMRC_DST=%USERPROFILE%\.npmrc" - -echo === nvim === -robocopy "%NVIM_SRC%" "%NVIM_DST%" /MIR /NFL /NDL /NJH /NJS >nul -if %ERRORLEVEL% GEQ 8 ( - echo Fehler: nvim-Konfiguration konnte nicht nach "%NVIM_DST%" kopiert werden. - exit /b 1 -) -echo OK: %NVIM_DST% - -echo === git === -copy /Y "%GIT_CONFIG_SRC%" "%GIT_CONFIG_DST%" >nul -if errorlevel 1 ( - echo Fehler: git-Konfiguration konnte nicht nach "%GIT_CONFIG_DST%" kopiert werden. - exit /b 1 -) -echo OK: %GIT_CONFIG_DST% - -if not exist "%GIT_XDG_DIR%" mkdir "%GIT_XDG_DIR%" -copy /Y "%GIT_UP2PARTS_SRC%" "%GIT_UP2PARTS_DST%" >nul -if errorlevel 1 ( - echo Fehler: config-up2parts konnte nicht nach "%GIT_UP2PARTS_DST%" kopiert werden. - exit /b 1 -) -echo OK: %GIT_UP2PARTS_DST% ^(wird per includeIf aus .gitconfig eingebunden^) - -echo === npm === -if exist "%NPMRC_DST%" ( - echo Uebersprungen: %NPMRC_DST% existiert bereits. -) else ( - copy /Y "%NPMRC_SRC%" "%NPMRC_DST%" >nul - echo OK: %NPMRC_DST% -) - -echo. -echo Fertig. Dateien wurden KOPIERT, nicht verlinkt. -echo Nach Aenderungen im Repo dieses Skript erneut ausfuehren. - -endlocal diff --git a/install-win.ps1 b/install-win.ps1 new file mode 100644 index 0000000..41b3b51 --- /dev/null +++ b/install-win.ps1 @@ -0,0 +1,93 @@ +#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" +$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 -> $NpmrcDst" + Copy-Item -Force $NpmrcSrc $NpmrcDst + Write-Ok $NpmrcDst +} + +function Main { + Copy-NvimConfig + Copy-GitConfig + Copy-Npmrc + + Write-Host "" + Write-Host "Fertig. Dateien wurden KOPIERT, nicht verlinkt." -ForegroundColor Green + Write-Host "Nach Aenderungen im Repo dieses Skript erneut ausfuehren." +} + +Main diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 555c273..bc27f4a 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -2,27 +2,34 @@ Checkliste für die Übernahme der bestehenden `nvim/`-Config aus dem Dotfiles-Repo auf ein natives Windows-System (kein WSL). Repo selbst bleibt unverändert. +Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL). Falls die Ausführung durch die Execution Policy blockiert wird, entweder pro Aufruf `powershell -ExecutionPolicy Bypass -File .\skript.ps1` verwenden, oder einmalig `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. + ## 1. Grundwerkzeuge installieren ```powershell winget install Neovim.Neovim winget install Git.Git winget install OpenJS.NodeJS.LTS -winget install Python.Python.3.12 ``` -Git for Windows bringt Git Bash mit – eine POSIX-Shell, mit der `install.sh` und die `bootstrap/*.sh`-Skripte direkt lauffähig sind (kein Portieren nach PowerShell nötig). +(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert, siehe Abschnitt 4.) ## 2. Konfiguration einrichten (Windows-nativer Weg) -Statt `install.sh` samt XDG-Umgebungsvariablen zu verbiegen: `install-win.cmd` im Repo-Root ausführen. Es kopiert (keine Symlinks, keine Admin-Rechte nötig): +`install-win.ps1` im Repo-Root ausführen: + +```powershell +.\install-win.ps1 +``` + +Es kopiert (keine Symlinks, keine Admin-Rechte nötig): - `nvim/` → `%LOCALAPPDATA%\nvim` - `git/config` → `%USERPROFILE%\.gitconfig` - `git/config-up2parts` → `%USERPROFILE%\.config\git\config-up2parts` (Pfad ist im `includeIf` von `git/config` hartkodiert) - `npm/npmrc` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) -Nach Änderungen im Repo `install-win.cmd` erneut ausführen, um die Kopien zu aktualisieren. +Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu aktualisieren. ## 3. Externe Abhängigkeiten @@ -41,9 +48,8 @@ setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" ## 4. Bekannte Stolpersteine -- **`g.python3_host_prog`** in `nvim/lua/config/options.lua` ist hart auf einen Unix-Pfad (`$HOME/.local/venv/nvim/bin/python`) gesetzt. Unter Windows existiert weder dieses `HOME`-Layout noch `bin/python` (dort `Scripts\python.exe`). Aktuell nutzt kein installiertes Plugin die Python-Provider-API – daher unkritisch, kann ignoriert werden, solange `:python3`-Funktionen nicht gebraucht werden. (Erwägenswert: `g.loaded_python3_provider = 0` setzen, dann verschwindet das Problem ganz – separat besprochen, noch nicht umgesetzt.) -- **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen). -- **`bootstrap/neovim-dict.sh`** (deutsche Rechtschreibprüfung): unter Git Bash direkt ausführbar. Lädt die Dateien nach `~/.local/share/nvim/site/spell`; unter nativem Windows-Neovim stattdessen manuell nach `%LOCALAPPDATA%\nvim-data\site\spell` legen. +- **Rechtschreibprüfung (Deutsch)**: `bootstrap/neovim-dict-win.ps1` ausführen – lädt `de.utf-8.spl`/`.sug` nach `%LOCALAPPDATA%\nvim-data\site\spell` (nativer Windows-Datenpfad von Neovim). +- **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. - **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. -- cgit v1.3 From bb70769ffdc3b93329f364f47c49148658a03d44 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 10:16:22 +0200 Subject: windows: cmd-Style %VAR%-Syntax in PowerShell-Kontexten korrigiert setx PATH "%PATH%;..." funktioniert in PowerShell nicht wie in cmd.exe (kein automatisches Expandieren von %VAR%) und haette zusaetzlich den kompletten Prozess-PATH inkl. System-Anteil dauerhaft in den User-PATH kopiert. Ersetzt durch [Environment]::GetEnvironmentVariable/SetEnviron- mentVariable("PATH", ..., "User") in bootstrap/neovim-win.ps1 und neovim-windows-setup.md. Ausserdem klargestellt, dass windows/bin/gmake.cmd bewusst die einzige Nicht-PowerShell-Datei im Windows-Zweig bleibt. --- bootstrap/neovim-win.ps1 | 7 +++++-- neovim-windows-setup.md | 7 ++++--- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/bootstrap/neovim-win.ps1 b/bootstrap/neovim-win.ps1 index 60ed0ea..a2e755b 100644 --- a/bootstrap/neovim-win.ps1 +++ b/bootstrap/neovim-win.ps1 @@ -115,8 +115,11 @@ function Install-Tools { # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin - # zum PATH hinzufuegen, z.B.: - # setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" + # zum PATH hinzufuegen (PowerShell, User-Scope, nicht setx mit %PATH% + # verwenden - das wuerde den gesamten Prozess-PATH inkl. System-Anteil + # dauerhaft in den User-PATH kopieren): + # $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") + # [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User") Install-WingetPackage -Binary "make" -Id "GnuWin32.Make" } diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index bc27f4a..61c4b08 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -2,7 +2,7 @@ Checkliste für die Übernahme der bestehenden `nvim/`-Config aus dem Dotfiles-Repo auf ein natives Windows-System (kein WSL). Repo selbst bleibt unverändert. -Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL). Falls die Ausführung durch die Execution Policy blockiert wird, entweder pro Aufruf `powershell -ExecutionPolicy Bypass -File .\skript.ps1` verwenden, oder einmalig `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. +Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL) – mit einer Ausnahme: `windows\bin\gmake.cmd` ist ein trivialer Ein-Zeiler-Wrapper, für den sich eine `.ps1`-Datei nicht lohnt. Falls die Ausführung der `.ps1`-Skripte durch die Execution Policy blockiert wird, entweder pro Aufruf `powershell -ExecutionPolicy Bypass -File .\skript.ps1` verwenden, oder einmalig `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. ## 1. Grundwerkzeuge installieren @@ -41,9 +41,10 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, zig als C-Compiler für Treesitter, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig, sind ungeprüft). -`windows\bin` (enthält `gmake.cmd`, Wrapper für `opt.makeprg = "gmake"`) danach einmalig zum PATH hinzufügen: +`windows\bin` (enthält `gmake.cmd`, Wrapper für `opt.makeprg = "gmake"`) danach einmalig zum PATH hinzufügen (PowerShell, User-Scope – nicht `setx PATH "%PATH%;..."` verwenden, das würde den kompletten Prozess-PATH inkl. System-Anteil dauerhaft in den User-PATH kopieren): ```powershell -setx PATH "%PATH%;%USERPROFILE%\dotfiles\windows\bin" +$userPath = [Environment]::GetEnvironmentVariable("PATH", "User") +[Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User") ``` ## 4. Bekannte Stolpersteine -- cgit v1.3 From f21cb20d527cb7065d3f343c87aee3dff78c6d98 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 10:20:42 +0200 Subject: windows-setup.md: Abschnitt fuer manuelle Voraussetzungen ergaenzt Fasst zusammen, was keines der Skripte automatisiert: Execution Policy, winget/App-Installer selbst, Neovim-Installation, delta (git pager, war auch unter macOS/FreeBSD nie Teil von bootstrap/neovim.sh), neues Terminal nach PATH-Aenderungen, Stichprobenpruefung der GnuWin32-Pakete, empfohlene Reihenfolge der Skripte. --- neovim-windows-setup.md | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 61c4b08..935bb68 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -4,6 +4,16 @@ Checkliste für die Übernahme der bestehenden `nvim/`-Config aus dem Dotfiles-R Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL) – mit einer Ausnahme: `windows\bin\gmake.cmd` ist ein trivialer Ein-Zeiler-Wrapper, für den sich eine `.ps1`-Datei nicht lohnt. Falls die Ausführung der `.ps1`-Skripte durch die Execution Policy blockiert wird, entweder pro Aufruf `powershell -ExecutionPolicy Bypass -File .\skript.ps1` verwenden, oder einmalig `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. +## 0. Von Hand zu erledigen (nicht durch Skripte abgedeckt) + +- **Execution Policy** setzen (siehe oben), sonst starten die `.ps1`-Skripte gar nicht. +- **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap/neovim-win.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. +- **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. +- **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). +- **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. +- **PATH-Registrierung stichprobenartig prüfen**, vor allem bei den GnuWin32-Paketen (`jq`, `gawk`, `make`, `libxml2`/`xmllint`) – ältere/portable winget-Pakete tragen sich nicht immer automatisch in den PATH ein. Nach einem neuen Terminal kurz `Get-Command jq, gawk, make, xmllint` aufrufen; fehlt eins, dessen Installationsordner manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). +- **Reihenfolge**: `install-win.ps1` und `bootstrap/neovim-win.ps1` sind unabhängig voneinander, `bootstrap/neovim-dict-win.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). + ## 1. Grundwerkzeuge installieren ```powershell -- cgit v1.3 From 41ebdaff90a0b23262bf89c08444de20469c2232 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 10:55:57 +0200 Subject: windows: zig durch vorhandenes MSVC ersetzt Auf den Ziel-Windows-Systemen ist bereits ein aktuelles MSVC installiert, daher entfaellt die zig.zig-Installation in bootstrap/neovim-win.ps1 komplett (auch aus dem Kopfkommentar/der Liste ungeprueft er IDs entfernt). Stattdessen dokumentiert (Skript-Kommentar + neovim-windows-setup.md, Abschnitte 1/3/4): cl.exe braucht INCLUDE/LIB aus vcvarsall.bat, die nur in einer 'Developer PowerShell for VS' gesetzt sind - Neovim muss dort gestartet werden, sonst schlaegt die Treesitter-Parser-Kompilierung fehl. --- bootstrap/neovim-win.ps1 | 22 +++++++++++++++------- neovim-windows-setup.md | 8 ++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/bootstrap/neovim-win.ps1 b/bootstrap/neovim-win.ps1 index 1ea3b3c..8af6140 100644 --- a/bootstrap/neovim-win.ps1 +++ b/bootstrap/neovim-win.ps1 @@ -12,11 +12,14 @@ .\bootstrap\neovim-win.ps1 Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, - google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig) konnten in dieser - Session nicht gegen eine aktuelle winget-Quelle verifiziert werden. - Schlaegt eine Installation fehl, meldet das Skript das als Warnung - (bricht nicht ab) und nennt den Befehl zum manuellen Nachschlagen - ("winget search "). + google.yamlfmt, mvdan.shfmt, astral-sh.ruff) konnten in dieser Session + nicht gegen eine aktuelle winget-Quelle verifiziert werden. Schlaegt eine + Installation fehl, meldet das Skript das als Warnung (bricht nicht ab) + und nennt den Befehl zum manuellen Nachschlagen ("winget search "). + + C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf + den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer + "Developer PowerShell for VS" gestartet werden (siehe Install-Tools). #> $ErrorActionPreference = "Stop" @@ -122,8 +125,13 @@ function Install-Tools { Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" - # C-Compiler, damit nvim-treesitter Parser kompilieren kann. - Install-WingetPackage -Binary "zig" -Id "zig.zig" + # C-Compiler fuer nvim-treesitter: kein winget-Paket noetig, MSVC (cl.exe) + # ist auf diesen Systemen bereits vorhanden. nvim-treesitter findet cl.exe + # automatisch, ABER nur wenn INCLUDE/LIB gesetzt sind - das passiert nicht + # in einer normalen PowerShell, sondern nur in einer "Developer PowerShell + # for VS" bzw. "x64 Native Tools Command Prompt". Neovim also immer aus + # so einer Shell heraus starten, sonst schlaegt die Parser-Kompilierung + # mit "cannot find
.h" o.ae. fehl, obwohl cl.exe selbst gefunden wird. # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 935bb68..4faecd8 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -13,6 +13,7 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. - **PATH-Registrierung stichprobenartig prüfen**, vor allem bei den GnuWin32-Paketen (`jq`, `gawk`, `make`, `libxml2`/`xmllint`) – ältere/portable winget-Pakete tragen sich nicht immer automatisch in den PATH ein. Nach einem neuen Terminal kurz `Get-Command jq, gawk, make, xmllint` aufrufen; fehlt eins, dessen Installationsordner manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). - **Reihenfolge**: `install-win.ps1` und `bootstrap/neovim-win.ps1` sind unabhängig voneinander, `bootstrap/neovim-dict-win.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). +- **Neovim immer aus einer "Developer PowerShell for VS" starten** (Startmenü-Eintrag, den Visual Studio/die Build Tools mitbringen), nicht aus normalem Windows Terminal/PowerShell. `cl.exe` (MSVC) braucht die `INCLUDE`/`LIB`-Umgebungsvariablen aus `vcvarsall.bat`, die nur in dieser Developer-Shell gesetzt sind – siehe Abschnitt 4. ## 1. Grundwerkzeuge installieren @@ -22,7 +23,7 @@ winget install Git.Git winget install OpenJS.NodeJS.LTS ``` -(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert, siehe Abschnitt 4.) +(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3/4.) ## 2. Konfiguration einrichten (Windows-nativer Weg) @@ -49,7 +50,9 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a .\bootstrap\neovim-win.ps1 ``` -Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, zig als C-Compiler für Treesitter, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, zig.zig, sind ungeprüft). +Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, sind ungeprüft). + +Kein C-Compiler-Paket enthalten: MSVC ist auf den Zielsystemen bereits vorhanden, `nvim-treesitter` nutzt `cl.exe`. Dafür muss Neovim aber aus einer "Developer PowerShell for VS" gestartet werden (siehe Abschnitt 4). `windows\bin` (enthält `gmake.cmd`, Wrapper für `opt.makeprg = "gmake"`) danach einmalig zum PATH hinzufügen (PowerShell, User-Scope – nicht `setx PATH "%PATH%;..."` verwenden, das würde den kompletten Prozess-PATH inkl. System-Anteil dauerhaft in den User-PATH kopieren): ```powershell @@ -59,6 +62,7 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") ## 4. Bekannte Stolpersteine +- **C-Compiler für `nvim-treesitter` (MSVC)**: `cl.exe` findet `nvim-treesitter` automatisch, aber nur wenn `INCLUDE`/`LIB` gesetzt sind – das passiert ausschließlich in einer "Developer PowerShell for VS" bzw. "x64 Native Tools Command Prompt", nicht in einer normalen PowerShell/Windows Terminal-Sitzung. Ohne das schlägt die Parser-Kompilierung mit einer Meldung wie "cannot find `
`.h" fehl, obwohl `cl.exe` selbst gefunden wird. Neovim also immer aus dieser Developer-Shell heraus starten. - **Rechtschreibprüfung (Deutsch)**: `bootstrap/neovim-dict-win.ps1` ausführen – lädt `de.utf-8.spl`/`.sug` nach `%LOCALAPPDATA%\nvim-data\site\spell` (nativer Windows-Datenpfad von Neovim). - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. -- cgit v1.3 From b04598d71f18227af87cb04890b4dee5d38bd753 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 11:20:49 +0200 Subject: windows: Bootstrap-Skripte nach bootstrap-win/ verschoben, -win-Suffix entfernt bootstrap/neovim-win.ps1 -> bootstrap-win/neovim.ps1 bootstrap/neovim-dict-win.ps1 -> bootstrap-win/neovim-dict.ps1 Eigenes Verzeichnis statt Suffix pro Datei, analog zu windows/ fuer gmake.cmd. bootstrap/ (POSIX, macOS/FreeBSD) bleibt unveraendert. Referenzen in neovim-windows-setup.md aktualisiert. Nebenbei: eine unerklaerte, nicht selbst vorgenommene Aenderung an nvim/lua/config/treesitter.lua (fuegte 'powershell' zur Sprachliste hinzu) verworfen statt versehentlich mit einzuchecken. --- bootstrap-win/neovim-dict.ps1 | 64 +++++++++++++++ bootstrap-win/neovim.ps1 | 177 ++++++++++++++++++++++++++++++++++++++++++ bootstrap/neovim-dict-win.ps1 | 64 --------------- bootstrap/neovim-win.ps1 | 177 ------------------------------------------ neovim-windows-setup.md | 10 +-- 5 files changed, 246 insertions(+), 246 deletions(-) create mode 100644 bootstrap-win/neovim-dict.ps1 create mode 100644 bootstrap-win/neovim.ps1 delete mode 100644 bootstrap/neovim-dict-win.ps1 delete mode 100644 bootstrap/neovim-win.ps1 (limited to 'neovim-windows-setup.md') diff --git a/bootstrap-win/neovim-dict.ps1 b/bootstrap-win/neovim-dict.ps1 new file mode 100644 index 0000000..7909ffa --- /dev/null +++ b/bootstrap-win/neovim-dict.ps1 @@ -0,0 +1,64 @@ +#Requires -Version 5.1 +<# + Windows-natives Pendant zu bootstrap/neovim-dict.sh. + Laedt die deutschen Rechtschreib-Woerterbuecher fuer Neovim herunter. + bootstrap/neovim-dict.sh bleibt unveraendert. + + Aufruf: + .\bootstrap-win\neovim-dict.ps1 + + Falls die Ausfuehrung durch die Execution Policy blockiert wird: + powershell -ExecutionPolicy Bypass -File .\bootstrap-win\neovim-dict.ps1 +#> + +$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 bereits vorhanden" -ForegroundColor DarkGray +} + +# Nativer Windows-Datenpfad von Neovim (kein XDG_DATA_HOME gesetzt): +# $env:LOCALAPPDATA\nvim-data\site\spell +$SpellDir = Join-Path $env:LOCALAPPDATA "nvim-data\site\spell" + +$Urls = @( + "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.spl", + "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.sug" +) + +function Get-SpellFile([string]$Url) { + $fileName = Split-Path -Leaf $Url + $dest = Join-Path $SpellDir $fileName + + if (Test-Path $dest) { + Write-SkipMsg $fileName + return + } + + Write-Step "Lade $fileName herunter" + Invoke-WebRequest -Uri $Url -OutFile $dest + Write-Ok $fileName +} + +function Main { + if (-not (Test-Path $SpellDir)) { + New-Item -ItemType Directory -Path $SpellDir -Force | Out-Null + } + + foreach ($url in $Urls) { + Get-SpellFile $url + } + + Write-Host "" + Write-Host "Woerterbuecher fuer Neovim installiert!" -ForegroundColor Green +} + +Main diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 new file mode 100644 index 0000000..548583e --- /dev/null +++ b/bootstrap-win/neovim.ps1 @@ -0,0 +1,177 @@ +#Requires -Version 5.1 +<# + Windows-natives Pendant zu bootstrap/neovim.sh (macOS/FreeBSD). + bootstrap/neovim.sh bleibt unveraendert - dieses Skript ist bewusst + eigenstaendig, da sich die Paketquellen (winget/npm statt brew/pkg) und + das Fehlerverhalten zu stark unterscheiden fuer ein gemeinsames Skript. + + Nutzt ausschliesslich native Windows-Werkzeuge (winget, npm, pwsh/ + powershell.exe) - keine Git-Bash- oder WSL-Abhaengigkeit. + + Aufruf (PowerShell, keine Admin-Rechte noetig): + .\bootstrap-win\neovim.ps1 + + Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, + google.yamlfmt, mvdan.shfmt, astral-sh.ruff) konnten in dieser Session + nicht gegen eine aktuelle winget-Quelle verifiziert werden. Schlaegt eine + Installation fehl, meldet das Skript das als Warnung (bricht nicht ab) + und nennt den Befehl zum manuellen Nachschlagen ("winget search "). + + C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf + den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer + "Developer PowerShell for VS" gestartet werden (siehe Install-Tools). +#> + +$ErrorActionPreference = "Stop" +$script:Failures = @() + +function Write-Ok($msg) { + Write-Host "OK $msg" -ForegroundColor Green +} + +function Write-Step($msg) { + Write-Host "==> $msg" -ForegroundColor Cyan +} + +function Write-Skip($msg) { + Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray +} + +function Write-Warn($msg) { + Write-Host "! $msg" -ForegroundColor Yellow + $script:Failures += $msg +} + +function Test-CommandExists([string]$Name) { + return [bool](Get-Command $Name -ErrorAction SilentlyContinue) +} + +function Install-WingetPackage([string]$Binary, [string]$Id) { + if (Test-CommandExists $Binary) { + Write-Skip $Binary + return + } + + Write-Step "winget install $Id" + winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent | Out-Null + + if ($LASTEXITCODE -ne 0) { + Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden). Pruefen mit: winget search $Id" + return + } + + Write-Ok $Id +} + +function Install-NpmPackage([string]$Binary, [string]$Package) { + if (Test-CommandExists $Binary) { + Write-Skip $Binary + return + } + + if (-not (Test-CommandExists "npm")) { + Write-Warn "npm wurde nicht gefunden - kann '$Package' nicht installieren." + return + } + + Write-Step "npm install -g $Package" + npm install -g $Package | Out-Null + + if ($LASTEXITCODE -ne 0) { + Write-Warn "npm install -g $Package fehlgeschlagen." + return + } + + Write-Ok $Package +} + +function Test-Prerequisites { + if (-not (Test-CommandExists "winget")) { + Write-Host "Fehler: winget wurde nicht gefunden. 'App Installer' aus dem Microsoft Store installieren." -ForegroundColor Red + exit 1 + } +} + +function Update-SessionPath { + # winget/npm-Installer tragen PATH-Aenderungen in die Registry (User- + # und/oder Machine-Scope) ein, aber der laufende PowerShell-Prozess + # bekommt das nicht automatisch mit. Ohne diesen Refresh wuerde z.B. + # "npm" gleich im Anschluss an die Node-Installation als "nicht + # gefunden" gemeldet, obwohl es gerade erst installiert wurde. + $machine = [Environment]::GetEnvironmentVariable("PATH", "Machine") + $user = [Environment]::GetEnvironmentVariable("PATH", "User") + $env:PATH = "$machine;$user" +} + +function Install-Prerequisites { + Install-WingetPackage -Binary "git" -Id "Git.Git" + Install-WingetPackage -Binary "node" -Id "OpenJS.NodeJS.LTS" + Update-SessionPath +} + +function Install-Formatters { + Install-WingetPackage -Binary "jq" -Id "jqlang.jq" + Install-NpmPackage -Binary "prettier" -Package "prettier" + Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" + Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" + Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" + Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt" + Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk" + Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2" +} + +function Install-Tools { + Install-WingetPackage -Binary "rg" -Id "BurntSushi.ripgrep.MSVC" + Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" + Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" + + # C-Compiler fuer nvim-treesitter: kein winget-Paket noetig, MSVC (cl.exe) + # ist auf diesen Systemen bereits vorhanden. nvim-treesitter findet cl.exe + # automatisch, ABER nur wenn INCLUDE/LIB gesetzt sind - das passiert nicht + # in einer normalen PowerShell, sondern nur in einer "Developer PowerShell + # for VS" bzw. "x64 Native Tools Command Prompt". Neovim also immer aus + # so einer Shell heraus starten, sonst schlaegt die Parser-Kompilierung + # mit "cannot find
.h" o.ae. fehl, obwohl cl.exe selbst gefunden wird. + + # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in + # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin + # zum PATH hinzufuegen (PowerShell, User-Scope, nicht setx mit %PATH% + # verwenden - das wuerde den gesamten Prozess-PATH inkl. System-Anteil + # dauerhaft in den User-PATH kopieren): + # $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") + # [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User") + Install-WingetPackage -Binary "make" -Id "GnuWin32.Make" +} + +function Install-Lsp { + Install-NpmPackage -Binary "basedpyright-langserver" -Package "basedpyright" + Install-NpmPackage -Binary "bash-language-server" -Package "bash-language-server" + Install-WingetPackage -Binary "clangd" -Id "LLVM.LLVM" + Install-WingetPackage -Binary "shellcheck" -Id "koalaman.shellcheck" + Install-NpmPackage -Binary "vscode-html-language-server" -Package "vscode-langservers-extracted" + Install-NpmPackage -Binary "vscode-json-language-server" -Package "vscode-langservers-extracted" + Install-WingetPackage -Binary "lua-language-server" -Id "LuaLS.lua-language-server" + Install-NpmPackage -Binary "prisma-language-server" -Package "@prisma/language-server" + Install-NpmPackage -Binary "vtsls" -Package "@vtsls/language-server" +} + +function Main { + Test-Prerequisites + + Install-Prerequisites + Install-Formatters + Install-Tools + Install-Lsp + + Write-Host "" + if ($script:Failures.Count -eq 0) { + Write-Host "Bootstrap abgeschlossen." -ForegroundColor Green + } else { + Write-Host "Bootstrap abgeschlossen, mit $($script:Failures.Count) Warnung(en):" -ForegroundColor Yellow + foreach ($f in $script:Failures) { + Write-Host " - $f" -ForegroundColor Yellow + } + } +} + +Main diff --git a/bootstrap/neovim-dict-win.ps1 b/bootstrap/neovim-dict-win.ps1 deleted file mode 100644 index 6c0c710..0000000 --- a/bootstrap/neovim-dict-win.ps1 +++ /dev/null @@ -1,64 +0,0 @@ -#Requires -Version 5.1 -<# - Windows-natives Pendant zu bootstrap/neovim-dict.sh. - Laedt die deutschen Rechtschreib-Woerterbuecher fuer Neovim herunter. - bootstrap/neovim-dict.sh bleibt unveraendert. - - Aufruf: - .\bootstrap\neovim-dict-win.ps1 - - Falls die Ausfuehrung durch die Execution Policy blockiert wird: - powershell -ExecutionPolicy Bypass -File .\bootstrap\neovim-dict-win.ps1 -#> - -$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 bereits vorhanden" -ForegroundColor DarkGray -} - -# Nativer Windows-Datenpfad von Neovim (kein XDG_DATA_HOME gesetzt): -# $env:LOCALAPPDATA\nvim-data\site\spell -$SpellDir = Join-Path $env:LOCALAPPDATA "nvim-data\site\spell" - -$Urls = @( - "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.spl", - "https://ftp.nluug.nl/pub/vim/runtime/spell/de.utf-8.sug" -) - -function Get-SpellFile([string]$Url) { - $fileName = Split-Path -Leaf $Url - $dest = Join-Path $SpellDir $fileName - - if (Test-Path $dest) { - Write-SkipMsg $fileName - return - } - - Write-Step "Lade $fileName herunter" - Invoke-WebRequest -Uri $Url -OutFile $dest - Write-Ok $fileName -} - -function Main { - if (-not (Test-Path $SpellDir)) { - New-Item -ItemType Directory -Path $SpellDir -Force | Out-Null - } - - foreach ($url in $Urls) { - Get-SpellFile $url - } - - Write-Host "" - Write-Host "Woerterbuecher fuer Neovim installiert!" -ForegroundColor Green -} - -Main diff --git a/bootstrap/neovim-win.ps1 b/bootstrap/neovim-win.ps1 deleted file mode 100644 index 8af6140..0000000 --- a/bootstrap/neovim-win.ps1 +++ /dev/null @@ -1,177 +0,0 @@ -#Requires -Version 5.1 -<# - Windows-natives Pendant zu bootstrap/neovim.sh (macOS/FreeBSD). - bootstrap/neovim.sh bleibt unveraendert - dieses Skript ist bewusst - eigenstaendig, da sich die Paketquellen (winget/npm statt brew/pkg) und - das Fehlerverhalten zu stark unterscheiden fuer ein gemeinsames Skript. - - Nutzt ausschliesslich native Windows-Werkzeuge (winget, npm, pwsh/ - powershell.exe) - keine Git-Bash- oder WSL-Abhaengigkeit. - - Aufruf (PowerShell, keine Admin-Rechte noetig): - .\bootstrap\neovim-win.ps1 - - Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, - google.yamlfmt, mvdan.shfmt, astral-sh.ruff) konnten in dieser Session - nicht gegen eine aktuelle winget-Quelle verifiziert werden. Schlaegt eine - Installation fehl, meldet das Skript das als Warnung (bricht nicht ab) - und nennt den Befehl zum manuellen Nachschlagen ("winget search "). - - C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf - den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer - "Developer PowerShell for VS" gestartet werden (siehe Install-Tools). -#> - -$ErrorActionPreference = "Stop" -$script:Failures = @() - -function Write-Ok($msg) { - Write-Host "OK $msg" -ForegroundColor Green -} - -function Write-Step($msg) { - Write-Host "==> $msg" -ForegroundColor Cyan -} - -function Write-Skip($msg) { - Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray -} - -function Write-Warn($msg) { - Write-Host "! $msg" -ForegroundColor Yellow - $script:Failures += $msg -} - -function Test-CommandExists([string]$Name) { - return [bool](Get-Command $Name -ErrorAction SilentlyContinue) -} - -function Install-WingetPackage([string]$Binary, [string]$Id) { - if (Test-CommandExists $Binary) { - Write-Skip $Binary - return - } - - Write-Step "winget install $Id" - winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent | Out-Null - - if ($LASTEXITCODE -ne 0) { - Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden). Pruefen mit: winget search $Id" - return - } - - Write-Ok $Id -} - -function Install-NpmPackage([string]$Binary, [string]$Package) { - if (Test-CommandExists $Binary) { - Write-Skip $Binary - return - } - - if (-not (Test-CommandExists "npm")) { - Write-Warn "npm wurde nicht gefunden - kann '$Package' nicht installieren." - return - } - - Write-Step "npm install -g $Package" - npm install -g $Package | Out-Null - - if ($LASTEXITCODE -ne 0) { - Write-Warn "npm install -g $Package fehlgeschlagen." - return - } - - Write-Ok $Package -} - -function Test-Prerequisites { - if (-not (Test-CommandExists "winget")) { - Write-Host "Fehler: winget wurde nicht gefunden. 'App Installer' aus dem Microsoft Store installieren." -ForegroundColor Red - exit 1 - } -} - -function Update-SessionPath { - # winget/npm-Installer tragen PATH-Aenderungen in die Registry (User- - # und/oder Machine-Scope) ein, aber der laufende PowerShell-Prozess - # bekommt das nicht automatisch mit. Ohne diesen Refresh wuerde z.B. - # "npm" gleich im Anschluss an die Node-Installation als "nicht - # gefunden" gemeldet, obwohl es gerade erst installiert wurde. - $machine = [Environment]::GetEnvironmentVariable("PATH", "Machine") - $user = [Environment]::GetEnvironmentVariable("PATH", "User") - $env:PATH = "$machine;$user" -} - -function Install-Prerequisites { - Install-WingetPackage -Binary "git" -Id "Git.Git" - Install-WingetPackage -Binary "node" -Id "OpenJS.NodeJS.LTS" - Update-SessionPath -} - -function Install-Formatters { - Install-WingetPackage -Binary "jq" -Id "jqlang.jq" - Install-NpmPackage -Binary "prettier" -Package "prettier" - Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" - Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" - Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" - Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt" - Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk" - Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2" -} - -function Install-Tools { - Install-WingetPackage -Binary "rg" -Id "BurntSushi.ripgrep.MSVC" - Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" - Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" - - # C-Compiler fuer nvim-treesitter: kein winget-Paket noetig, MSVC (cl.exe) - # ist auf diesen Systemen bereits vorhanden. nvim-treesitter findet cl.exe - # automatisch, ABER nur wenn INCLUDE/LIB gesetzt sind - das passiert nicht - # in einer normalen PowerShell, sondern nur in einer "Developer PowerShell - # for VS" bzw. "x64 Native Tools Command Prompt". Neovim also immer aus - # so einer Shell heraus starten, sonst schlaegt die Parser-Kompilierung - # mit "cannot find
.h" o.ae. fehl, obwohl cl.exe selbst gefunden wird. - - # opt.makeprg = "gmake" (nvim/lua/config/options.lua) - Alias liegt in - # windows/bin/gmake.cmd, reicht an "make" durch. Einmalig windows\bin - # zum PATH hinzufuegen (PowerShell, User-Scope, nicht setx mit %PATH% - # verwenden - das wuerde den gesamten Prozess-PATH inkl. System-Anteil - # dauerhaft in den User-PATH kopieren): - # $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") - # [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User") - Install-WingetPackage -Binary "make" -Id "GnuWin32.Make" -} - -function Install-Lsp { - Install-NpmPackage -Binary "basedpyright-langserver" -Package "basedpyright" - Install-NpmPackage -Binary "bash-language-server" -Package "bash-language-server" - Install-WingetPackage -Binary "clangd" -Id "LLVM.LLVM" - Install-WingetPackage -Binary "shellcheck" -Id "koalaman.shellcheck" - Install-NpmPackage -Binary "vscode-html-language-server" -Package "vscode-langservers-extracted" - Install-NpmPackage -Binary "vscode-json-language-server" -Package "vscode-langservers-extracted" - Install-WingetPackage -Binary "lua-language-server" -Id "LuaLS.lua-language-server" - Install-NpmPackage -Binary "prisma-language-server" -Package "@prisma/language-server" - Install-NpmPackage -Binary "vtsls" -Package "@vtsls/language-server" -} - -function Main { - Test-Prerequisites - - Install-Prerequisites - Install-Formatters - Install-Tools - Install-Lsp - - Write-Host "" - if ($script:Failures.Count -eq 0) { - Write-Host "Bootstrap abgeschlossen." -ForegroundColor Green - } else { - Write-Host "Bootstrap abgeschlossen, mit $($script:Failures.Count) Warnung(en):" -ForegroundColor Yellow - foreach ($f in $script:Failures) { - Write-Host " - $f" -ForegroundColor Yellow - } - } -} - -Main diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 4faecd8..00d41e1 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -7,12 +7,12 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein ## 0. Von Hand zu erledigen (nicht durch Skripte abgedeckt) - **Execution Policy** setzen (siehe oben), sonst starten die `.ps1`-Skripte gar nicht. -- **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap/neovim-win.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. +- **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap-win/neovim.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. - **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. - **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. - **PATH-Registrierung stichprobenartig prüfen**, vor allem bei den GnuWin32-Paketen (`jq`, `gawk`, `make`, `libxml2`/`xmllint`) – ältere/portable winget-Pakete tragen sich nicht immer automatisch in den PATH ein. Nach einem neuen Terminal kurz `Get-Command jq, gawk, make, xmllint` aufrufen; fehlt eins, dessen Installationsordner manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). -- **Reihenfolge**: `install-win.ps1` und `bootstrap/neovim-win.ps1` sind unabhängig voneinander, `bootstrap/neovim-dict-win.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). +- **Reihenfolge**: `install-win.ps1` und `bootstrap-win/neovim.ps1` sind unabhängig voneinander, `bootstrap-win/neovim-dict.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). - **Neovim immer aus einer "Developer PowerShell for VS" starten** (Startmenü-Eintrag, den Visual Studio/die Build Tools mitbringen), nicht aus normalem Windows Terminal/PowerShell. `cl.exe` (MSVC) braucht die `INCLUDE`/`LIB`-Umgebungsvariablen aus `vcvarsall.bat`, die nur in dieser Developer-Shell gesetzt sind – siehe Abschnitt 4. ## 1. Grundwerkzeuge installieren @@ -44,10 +44,10 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a ## 3. Externe Abhängigkeiten -`bootstrap/neovim.sh` bricht unter Windows sofort ab (`Nicht unterstütztes Betriebssystem`). Stattdessen `bootstrap/neovim-win.ps1` ausführen (reines PowerShell, kein Git Bash/WSL nötig): +`bootstrap/neovim.sh` bricht unter Windows sofort ab (`Nicht unterstütztes Betriebssystem`). Stattdessen `bootstrap-win/neovim.ps1` ausführen (reines PowerShell, kein Git Bash/WSL nötig): ```powershell -.\bootstrap\neovim-win.ps1 +.\bootstrap-win\neovim.ps1 ``` Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, sind ungeprüft). @@ -63,7 +63,7 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") ## 4. Bekannte Stolpersteine - **C-Compiler für `nvim-treesitter` (MSVC)**: `cl.exe` findet `nvim-treesitter` automatisch, aber nur wenn `INCLUDE`/`LIB` gesetzt sind – das passiert ausschließlich in einer "Developer PowerShell for VS" bzw. "x64 Native Tools Command Prompt", nicht in einer normalen PowerShell/Windows Terminal-Sitzung. Ohne das schlägt die Parser-Kompilierung mit einer Meldung wie "cannot find `
`.h" fehl, obwohl `cl.exe` selbst gefunden wird. Neovim also immer aus dieser Developer-Shell heraus starten. -- **Rechtschreibprüfung (Deutsch)**: `bootstrap/neovim-dict-win.ps1` ausführen – lädt `de.utf-8.spl`/`.sug` nach `%LOCALAPPDATA%\nvim-data\site\spell` (nativer Windows-Datenpfad von Neovim). +- **Rechtschreibprüfung (Deutsch)**: `bootstrap-win/neovim-dict.ps1` ausführen – lädt `de.utf-8.spl`/`.sug` nach `%LOCALAPPDATA%\nvim-data\site\spell` (nativer Windows-Datenpfad von Neovim). - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. - **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. -- cgit v1.3 From eb7f91dc5f94b2e8d0c49364fc3c32c864a09ba0 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 23 Jul 2026 11:27:22 +0200 Subject: windows-setup.md: Abschnitt zum Aktualisieren ergaenzt Pendant zu 'brew update && brew upgrade' / 'pkg update && pkg upgrade': winget source update + winget upgrade --all, Vorschau per winget list --upgrade-available, einzelne Pakete/Pins, npm update -g fuer die npm-basierten LSP-Server/Formatter. Klargestellt, dass ein erneuter Lauf von bootstrap-win/neovim.ps1 keine Updates durchfuehrt (Install-* Funktionen ueberspringen bereits vorhandene Binaries). --- neovim-windows-setup.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 00d41e1..24e5bc0 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -76,3 +76,37 @@ nvim ``` `:checkhealth` zeigt fehlende Provider/Tools direkt an – guter letzter Schritt nach der Installation. + +## 6. Aktualisieren + +Pendant zu `brew update && brew upgrade` (macOS) bzw. `pkg update && pkg upgrade` (FreeBSD): + +```powershell +winget source update # Paketquellen aktualisieren +winget upgrade --all # alle winget-Pakete aktualisieren +``` + +Vorschau, was aktualisiert würde, ohne etwas zu ändern: + +```powershell +winget list --upgrade-available +``` + +Einzelnes Paket gezielt aktualisieren (IDs siehe `bootstrap-win/neovim.ps1`): + +```powershell +winget upgrade LLVM.LLVM +``` + +Zwei Besonderheiten gegenüber brew/pkg: + +- Ältere/portable Pakete (v. a. die GnuWin32-Reihe: `jq`, `gawk`, `make`, `libxml2`) melden nicht immer zuverlässig eine neue Version. `winget upgrade --all --include-unknown` bezieht auch diese mit ein, installiert dabei aber unter Umständen unnötig neu. +- Ein Paket dauerhaft von `--all` ausnehmen: `winget pin add ` (Pendant zu `brew pin`). + +Die npm-Pakete (`prettier`, `basedpyright`, `bash-language-server`, `vtsls`, `@prisma/language-server`, `vscode-langservers-extracted`) laufen außerhalb von winget und werden separat aktualisiert: + +```powershell +npm update -g +``` + +`bootstrap-win/neovim.ps1` erneut auszuführen aktualisiert nichts – `Install-WingetPackage`/`Install-NpmPackage` überspringen ein Paket, sobald das Binary gefunden wird (siehe `Write-Skip`). Für Updates immer die Befehle oben verwenden. -- cgit v1.3 From eb5a02ceb2008b7987e597e7d697fa81d0c5338b Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 09:53:58 +0200 Subject: bootstrap-win: yamlfmt/gawk/xmllint entfernt, clangd/LLVM-Fall erkannt Praxistest (24.07.2026) bestaetigt: google.yamlfmt, GnuWin32.Gawk und GnuWin32.Libxml2 existieren nicht in der winget-Registry ('kein Paket gefunden, das den Eingabekriterien entspricht'). Kein verifizierter Ersatz gefunden, deshalb aus Install-Formatters entfernt statt weiter zu raten - Formatierung faellt fuer awk/xml/yaml auf LSP zurueck. LLVM.LLVM schlug ebenfalls fehl, aber aus anderem Grund: Paket bereits installiert, clangd nur nicht im PATH (winget meldet 'kein Upgrade verfuegbar', keine Neuinstallation noetig). Install-WingetPackage erkennt diesen Fall jetzt per Textmuster und gibt einen gezielten Hinweis statt der irrefuehrenden 'Paket nicht gefunden'-Meldung. neovim-windows-setup.md entsprechend aktualisiert (Abschnitte 0, 3, 4, 6). --- bootstrap-win/neovim.ps1 | 38 +++++++++++++++++++++++++++++--------- neovim-windows-setup.md | 8 +++++--- 2 files changed, 34 insertions(+), 12 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index 64de8a1..467463b 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 @@ -11,11 +11,15 @@ Aufruf (PowerShell, keine Admin-Rechte noetig): .\bootstrap-win\neovim.ps1 - Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, - google.yamlfmt, mvdan.shfmt, astral-sh.ruff) konnten in dieser Session - nicht gegen eine aktuelle winget-Quelle verifiziert werden. Schlaegt eine - Installation fehl, meldet das Skript das als Warnung (bricht nicht ab) - und nennt den Befehl zum manuellen Nachschlagen ("winget search "). + Hinweis: yamlfmt, gawk und xmllint/libxml2 sind bewusst NICHT enthalten - + im Praxistest (24.07.2026) bestaetigt, dass es dafuer keine winget-Pakete + unter den urspruenglich vermuteten IDs gibt. Siehe Install-Formatters und + neovim-windows-setup.md fuer manuelle Alternativen. mvdan.shfmt und + astral-sh.ruff liefen im Test erfolgreich durch. + + Schlaegt eine winget-Installation trotzdem fehl, meldet das Skript das + als Warnung (bricht nicht ab) und zeigt die letzten Zeilen der winget- + Ausgabe zur Fehlersuche an. C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer @@ -56,8 +60,18 @@ function Install-WingetPackage([string]$Binary, [string]$Id) { $output = winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent 2>&1 if ($LASTEXITCODE -ne 0) { + $text = $output -join " " $lastLine = ($output | Select-Object -Last 3) -join " / " - Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" + + if ($text -match "bereits ein vorhandenes Paket|already installed|No applicable update") { + # Paket ist laut winget installiert, aber die Binary steht trotzdem + # nicht im PATH - z.B. weil der Installer (im --silent-Modus) die + # PATH-Registrierung uebersprungen hat. winget search hilft hier + # nicht weiter, da das Paket ja gefunden wurde. + Write-Warn "$Id ist laut winget bereits installiert, aber '$Binary' wurde nicht gefunden. Vermutlich fehlt das Installationsverzeichnis im PATH - Installationsordner suchen (z.B. unter Program Files) und manuell zum PATH hinzufuegen." + } else { + Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" + } return } @@ -116,9 +130,15 @@ function Install-Formatters { Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" - Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt" - Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk" - Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2" + + # yamlfmt, gawk, xmllint: im Praxistest bestaetigt, dass es unter diesen + # IDs kein winget-Paket gibt ("Es wurde kein Paket gefunden, das den + # Eingabekriterien entspricht"). Kein verifizierter Ersatz gefunden, + # deshalb bewusst nicht automatisiert - siehe neovim-windows-setup.md + # fuer manuelle Alternativen. conform.nvim faellt bei fehlendem + # Formatter fuer die jeweilige Dateiart einfach auf LSP-Formatierung + # zurueck (default_format_opts.lsp_format = "fallback"), betrifft also + # nur awk/xml/xsd/yaml-Dateien. } function Install-Tools { diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 24e5bc0..f237892 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -11,7 +11,8 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein - **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. - **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. -- **PATH-Registrierung stichprobenartig prüfen**, vor allem bei den GnuWin32-Paketen (`jq`, `gawk`, `make`, `libxml2`/`xmllint`) – ältere/portable winget-Pakete tragen sich nicht immer automatisch in den PATH ein. Nach einem neuen Terminal kurz `Get-Command jq, gawk, make, xmllint` aufrufen; fehlt eins, dessen Installationsordner manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). +- **PATH-Registrierung stichprobenartig prüfen** – manche winget-Pakete tragen sich nicht automatisch in den PATH ein (im Praxistest z. B. `LLVM.LLVM`: bereits installiert, aber `clangd` nicht im PATH, vermutlich weil der `--silent`-Installer die PATH-Registrierung überspringt). Nach einem neuen Terminal kurz `Get-Command clangd, jq, make` aufrufen; fehlt eins, dessen Installationsordner (bei LLVM z. B. `C:\Program Files\LLVM\bin`) manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). +- **yamlfmt, gawk, xmllint (libxml2) manuell installieren, falls benötigt** – im Praxistest bestätigt, dass es dafür keine winget-Pakete gibt ("Es wurde kein Paket gefunden, das den Eingabekriterien entspricht"), deshalb absichtlich nicht in `bootstrap-win/neovim.ps1` enthalten. Betrifft nur die Formatierung von awk-, xml/xsd- und yaml-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; für gawk/xmllint keine verifizierte Windows-native Quelle gefunden, ggf. `winget search gawk` / `winget search libxml2` selbst prüfen. - **Reihenfolge**: `install-win.ps1` und `bootstrap-win/neovim.ps1` sind unabhängig voneinander, `bootstrap-win/neovim-dict.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). - **Neovim immer aus einer "Developer PowerShell for VS" starten** (Startmenü-Eintrag, den Visual Studio/die Build Tools mitbringen), nicht aus normalem Windows Terminal/PowerShell. `cl.exe` (MSVC) braucht die `INCLUDE`/`LIB`-Umgebungsvariablen aus `vcvarsall.bat`, die nur in dieser Developer-Shell gesetzt sind – siehe Abschnitt 4. @@ -50,7 +51,7 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a .\bootstrap-win\neovim.ps1 ``` -Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, sind ungeprüft). +Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua), Tools (ripgrep, fd, tree-sitter-cli, make über `ezwinports.make`) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Im Praxistest (24.07.2026) erfolgreich; yamlfmt/gawk/xmllint bewusst nicht enthalten (siehe Abschnitt 0). Einzelne Pakete, die trotzdem fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen, inklusive der letzten Zeilen der winget-Fehlermeldung. Kein C-Compiler-Paket enthalten: MSVC ist auf den Zielsystemen bereits vorhanden, `nvim-treesitter` nutzt `cl.exe`. Dafür muss Neovim aber aus einer "Developer PowerShell for VS" gestartet werden (siehe Abschnitt 4). @@ -67,6 +68,7 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. - **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. +- **`clangd` trotz installiertem `LLVM.LLVM` nicht gefunden**: im Praxistest beobachtet – winget meldet das Paket als bereits installiert, `clangd.exe` liegt aber nicht im PATH. `bootstrap-win/neovim.ps1` erkennt diesen Fall inzwischen und gibt einen gezielten Hinweis statt der generischen "Paket nicht gefunden"-Meldung. Abhilfe: Installationsordner suchen (typischerweise `C:\Program Files\LLVM\bin`) und manuell zum PATH hinzufügen. ## 5. Verifizieren @@ -100,7 +102,7 @@ winget upgrade LLVM.LLVM Zwei Besonderheiten gegenüber brew/pkg: -- Ältere/portable Pakete (v. a. die GnuWin32-Reihe: `jq`, `gawk`, `make`, `libxml2`) melden nicht immer zuverlässig eine neue Version. `winget upgrade --all --include-unknown` bezieht auch diese mit ein, installiert dabei aber unter Umständen unnötig neu. +- Manche Pakete melden nicht immer zuverlässig eine neue Version (z. B. ältere/portable Pakete). `winget upgrade --all --include-unknown` bezieht auch diese mit ein, installiert dabei aber unter Umständen unnötig neu. - Ein Paket dauerhaft von `--all` ausnehmen: `winget pin add ` (Pendant zu `brew pin`). Die npm-Pakete (`prettier`, `basedpyright`, `bash-language-server`, `vtsls`, `@prisma/language-server`, `vscode-langservers-extracted`) laufen außerhalb von winget und werden separat aktualisiert: -- cgit v1.3 From 3c5212f19dbbacb831a73e2f3b5efa8e8f70fc8e Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 10:17:43 +0200 Subject: windows-setup.md: dandavison.delta als bestaetigt markiert Im Praxistest erfolgreich installiert, keine ID-Unsicherheit mehr. --- neovim-windows-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index f237892..f7dd1c8 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -9,7 +9,7 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein - **Execution Policy** setzen (siehe oben), sonst starten die `.ps1`-Skripte gar nicht. - **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap-win/neovim.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. - **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. -- **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). +- **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows: `winget install dandavison.delta` (im Praxistest bestätigt). - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. - **PATH-Registrierung stichprobenartig prüfen** – manche winget-Pakete tragen sich nicht automatisch in den PATH ein (im Praxistest z. B. `LLVM.LLVM`: bereits installiert, aber `clangd` nicht im PATH, vermutlich weil der `--silent`-Installer die PATH-Registrierung überspringt). Nach einem neuen Terminal kurz `Get-Command clangd, jq, make` aufrufen; fehlt eins, dessen Installationsordner (bei LLVM z. B. `C:\Program Files\LLVM\bin`) manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). - **yamlfmt, gawk, xmllint (libxml2) manuell installieren, falls benötigt** – im Praxistest bestätigt, dass es dafür keine winget-Pakete gibt ("Es wurde kein Paket gefunden, das den Eingabekriterien entspricht"), deshalb absichtlich nicht in `bootstrap-win/neovim.ps1` enthalten. Betrifft nur die Formatierung von awk-, xml/xsd- und yaml-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; für gawk/xmllint keine verifizierte Windows-native Quelle gefunden, ggf. `winget search gawk` / `winget search libxml2` selbst prüfen. -- cgit v1.3 From b91319846c364030074726fba73e76f19713e69d Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 10:32:42 +0200 Subject: windows: eigene npmrc-Variante ohne ${HOME} (npm/npmrc-win) npm/npmrc setzt prefix=${HOME}/.local, damit globale npm-Installationen ohne sudo/root ins Home-Verzeichnis gehen. HOME ist unter Windows i.d.R. nicht gesetzt, ${HOME} wuerde also nicht expandieren. npm/npmrc-win laesst prefix komplett weg - npm nutzt unter Windows ohnehin schon %APPDATA%\npm als Praefix, von Node's eigenem Installer automatisch zum PATH hinzugefuegt, kein Workaround noetig. install-win.ps1 und neovim-windows-setup.md entsprechend angepasst. npm/npmrc (POSIX) bleibt unveraendert. --- install-win.ps1 | 4 ++-- neovim-windows-setup.md | 2 +- npm/npmrc-win | 26 ++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 npm/npmrc-win (limited to 'neovim-windows-setup.md') diff --git a/install-win.ps1 b/install-win.ps1 index 632c25e..e52c0cb 100644 --- a/install-win.ps1 +++ b/install-win.ps1 @@ -41,7 +41,7 @@ $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" +$NpmrcSrc = Join-Path $RepoRoot "npm\npmrc-win" $NpmrcDst = Join-Path $env:USERPROFILE ".npmrc" function Copy-NvimConfig { @@ -75,7 +75,7 @@ function Copy-Npmrc { return } - Write-Step "npm\npmrc -> $NpmrcDst" + Write-Step "npm\npmrc-win -> $NpmrcDst" Copy-Item -Force $NpmrcSrc $NpmrcDst Write-Ok $NpmrcDst } diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index f7dd1c8..c5fc3fc 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -39,7 +39,7 @@ Es kopiert (keine Symlinks, keine Admin-Rechte nötig): - `nvim/` → `%LOCALAPPDATA%\nvim` - `git/config` → `%USERPROFILE%\.gitconfig` - `git/config-up2parts` → `%USERPROFILE%\.config\git\config-up2parts` (Pfad ist im `includeIf` von `git/config` hartkodiert) -- `npm/npmrc` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) +- `npm/npmrc-win` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) – eigene Windows-Variante ohne `prefix=${HOME}/.local`: `HOME` ist unter Windows i. d. R. nicht gesetzt, npm nutzt dort ohnehin schon von Haus aus `%APPDATA%\npm` als Praefix Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu aktualisieren. diff --git a/npm/npmrc-win b/npm/npmrc-win new file mode 100644 index 0000000..3803390 --- /dev/null +++ b/npm/npmrc-win @@ -0,0 +1,26 @@ +; %USERPROFILE%\.npmrc (Windows) +; +; Kein "prefix" gesetzt, anders als in npm/npmrc (POSIX): dort dient +; prefix=${HOME}/.local dazu, globale Installationen ohne sudo/root ins +; Home-Verzeichnis zu legen. Unter Windows loest npm dieses Problem +; bereits selbst - der Standard-Praefix liegt ohnehin im Benutzerprofil +; (%APPDATA%\npm), von Node's eigenem Installer automatisch zum PATH +; hinzugefuegt. ${HOME} ist unter Windows i.d.R. nicht gesetzt und wuerde +; hier nicht expandieren. + +; default registry +registry=https://registry.npmjs.org/ + +; disable fund-spam +fund=false + +; suppresses notifications about new npm versions +update-notifier=false + +; reduce the attack surface for supply chain attacks +min-release-age=3 + +; disable pre- und post-scripts +ignore-scripts=true + +; vim: ft=dosini -- cgit v1.3 From 7dc291df70e115bf021240d0ea2616dffe28d9c8 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 10:36:44 +0200 Subject: windows: npmrc-win wieder entfernt, prefix beim Kopieren auskommentieren statt zweite Datei zu pflegen Copy-Npmrc liest npm/npmrc jetzt zeilenweise und kommentiert die prefix=${HOME}/.local-Zeile beim Schreiben nach %USERPROFILE%\.npmrc aus, statt eine separate npm/npmrc-win zu unterhalten. Nur eine npmrc-Datei zu pflegen war der ausdrueckliche Wunsch. --- install-win.ps1 | 20 +++++++++++++++++--- neovim-windows-setup.md | 2 +- npm/npmrc-win | 26 -------------------------- 3 files changed, 18 insertions(+), 30 deletions(-) delete mode 100644 npm/npmrc-win (limited to 'neovim-windows-setup.md') diff --git a/install-win.ps1 b/install-win.ps1 index e52c0cb..15f39e4 100644 --- a/install-win.ps1 +++ b/install-win.ps1 @@ -41,7 +41,7 @@ $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" +$NpmrcSrc = Join-Path $RepoRoot "npm\npmrc" $NpmrcDst = Join-Path $env:USERPROFILE ".npmrc" function Copy-NvimConfig { @@ -75,8 +75,22 @@ function Copy-Npmrc { return } - Write-Step "npm\npmrc-win -> $NpmrcDst" - Copy-Item -Force $NpmrcSrc $NpmrcDst + # npm/npmrc setzt "prefix=${HOME}/.local", damit globale npm-Installationen + # unter POSIX ohne sudo/root ins Home-Verzeichnis gehen. HOME ist unter + # Windows i.d.R. nicht gesetzt, ${HOME} wuerde also nicht expandieren. + # Der Grund fuer die Einstellung entfaellt unter Windows ohnehin (npm + # nutzt dort schon von Haus aus %APPDATA%\npm, automatisch im PATH) - + # die Zeile wird beim Kopieren einfach auskommentiert, statt eine zweite + # npmrc-Datei zu pflegen. + Write-Step "npm\npmrc -> $NpmrcDst (prefix-Zeile auskommentiert)" + $lines = Get-Content -Path $NpmrcSrc | ForEach-Object { + if ($_ -match "^\s*prefix\s*=") { + "; $_ (unter Windows auskommentiert, siehe install-win.ps1: Copy-Npmrc)" + } else { + $_ + } + } + Set-Content -Path $NpmrcDst -Value $lines Write-Ok $NpmrcDst } diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index c5fc3fc..568638c 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -39,7 +39,7 @@ Es kopiert (keine Symlinks, keine Admin-Rechte nötig): - `nvim/` → `%LOCALAPPDATA%\nvim` - `git/config` → `%USERPROFILE%\.gitconfig` - `git/config-up2parts` → `%USERPROFILE%\.config\git\config-up2parts` (Pfad ist im `includeIf` von `git/config` hartkodiert) -- `npm/npmrc-win` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) – eigene Windows-Variante ohne `prefix=${HOME}/.local`: `HOME` ist unter Windows i. d. R. nicht gesetzt, npm nutzt dort ohnehin schon von Haus aus `%APPDATA%\npm` als Praefix +- `npm/npmrc` → `%USERPROFILE%\.npmrc` (nur falls dort noch keine Datei existiert) – die Zeile `prefix=${HOME}/.local` wird dabei auskommentiert: `HOME` ist unter Windows i. d. R. nicht gesetzt, npm nutzt dort ohnehin schon von Haus aus `%APPDATA%\npm` als Präfix Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu aktualisieren. diff --git a/npm/npmrc-win b/npm/npmrc-win deleted file mode 100644 index 3803390..0000000 --- a/npm/npmrc-win +++ /dev/null @@ -1,26 +0,0 @@ -; %USERPROFILE%\.npmrc (Windows) -; -; Kein "prefix" gesetzt, anders als in npm/npmrc (POSIX): dort dient -; prefix=${HOME}/.local dazu, globale Installationen ohne sudo/root ins -; Home-Verzeichnis zu legen. Unter Windows loest npm dieses Problem -; bereits selbst - der Standard-Praefix liegt ohnehin im Benutzerprofil -; (%APPDATA%\npm), von Node's eigenem Installer automatisch zum PATH -; hinzugefuegt. ${HOME} ist unter Windows i.d.R. nicht gesetzt und wuerde -; hier nicht expandieren. - -; default registry -registry=https://registry.npmjs.org/ - -; disable fund-spam -fund=false - -; suppresses notifications about new npm versions -update-notifier=false - -; reduce the attack surface for supply chain attacks -min-release-age=3 - -; disable pre- und post-scripts -ignore-scripts=true - -; vim: ft=dosini -- cgit v1.3 From 38f60a80eaafe470dfcb7ede4ba74ddf60f056d2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 10:58:51 +0200 Subject: windows-setup.md: Renderfehler bei discount/cgit behoben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei Ursachen identifiziert ueber die vom User verlinkte cgit-Vorschau: 1. 'Abschnitt 3/4' wurde typografisch zu 'Abschnitt ¾' umgewandelt - zu '3 bzw. 4' umformuliert. 2. Der Codeblock mit [Environment]::...-Aufrufen hatte keine Leerzeile vor dem oeffnenden ```powershell-Fence. discount erkennt den Block dadurch nicht als Code, verarbeitet den Inhalt als Fließtext, und [Environment] wird als (kaputter) Markdown-Link interpretiert. Leerzeile ergaenzt; restliche Datei auf dasselbe Muster geprueft, keine weiteren Treffer. --- neovim-windows-setup.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 568638c..9da053b 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -24,7 +24,7 @@ winget install Git.Git winget install OpenJS.NodeJS.LTS ``` -(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3/4.) +(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3 bzw. 4.) ## 2. Konfiguration einrichten (Windows-nativer Weg) @@ -56,6 +56,7 @@ Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, Kein C-Compiler-Paket enthalten: MSVC ist auf den Zielsystemen bereits vorhanden, `nvim-treesitter` nutzt `cl.exe`. Dafür muss Neovim aber aus einer "Developer PowerShell for VS" gestartet werden (siehe Abschnitt 4). `windows\bin` (enthält `gmake.cmd`, Wrapper für `opt.makeprg = "gmake"`) danach einmalig zum PATH hinzufügen (PowerShell, User-Scope – nicht `setx PATH "%PATH%;..."` verwenden, das würde den kompletten Prozess-PATH inkl. System-Anteil dauerhaft in den User-PATH kopieren): + ```powershell $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\dotfiles\windows\bin", "User") -- cgit v1.3 From 93005dcad88624cb76931fcb2da5ea55ef980902 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 11:10:51 +0200 Subject: windows-setup.md: Neovim/delta von Abschnitt 0 nach Abschnitt 1 verschoben Die 'von Hand'-Hinweise fuer Neovim und delta waren redundant zu Abschnitt 1 (Neovim) bzw. gehoeren inhaltlich dorthin (delta). delta jetzt Teil des winget-Blocks in 'Grundwerkzeuge installieren', mit kurzer Begruendung darunter statt als eigener Punkt in Abschnitt 0. --- neovim-windows-setup.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 9da053b..8847b5a 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -8,8 +8,6 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein - **Execution Policy** setzen (siehe oben), sonst starten die `.ps1`-Skripte gar nicht. - **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap-win/neovim.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. -- **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. -- **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows: `winget install dandavison.delta` (im Praxistest bestätigt). - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. - **PATH-Registrierung stichprobenartig prüfen** – manche winget-Pakete tragen sich nicht automatisch in den PATH ein (im Praxistest z. B. `LLVM.LLVM`: bereits installiert, aber `clangd` nicht im PATH, vermutlich weil der `--silent`-Installer die PATH-Registrierung überspringt). Nach einem neuen Terminal kurz `Get-Command clangd, jq, make` aufrufen; fehlt eins, dessen Installationsordner (bei LLVM z. B. `C:\Program Files\LLVM\bin`) manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). - **yamlfmt, gawk, xmllint (libxml2) manuell installieren, falls benötigt** – im Praxistest bestätigt, dass es dafür keine winget-Pakete gibt ("Es wurde kein Paket gefunden, das den Eingabekriterien entspricht"), deshalb absichtlich nicht in `bootstrap-win/neovim.ps1` enthalten. Betrifft nur die Formatierung von awk-, xml/xsd- und yaml-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; für gawk/xmllint keine verifizierte Windows-native Quelle gefunden, ggf. `winget search gawk` / `winget search libxml2` selbst prüfen. @@ -22,8 +20,11 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein winget install Neovim.Neovim winget install Git.Git winget install OpenJS.NodeJS.LTS +winget install dandavison.delta ``` +`delta` wird von `git/config` als Pager vorausgesetzt (`pager = delta`, `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell installiert. + (Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3 bzw. 4.) ## 2. Konfiguration einrichten (Windows-nativer Weg) -- cgit v1.3 From c17f0a5f60485b671e10cf8aed39c0bfa69f133e Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 11:16:47 +0200 Subject: windows-setup.md: Bekannte Stolpersteine auf zwei echte Punkte gekuerzt Entfernt: Rechtschreibpruefung (beschreibt nur bootstrap-win/neovim-dict.ps1, kein Stolperstein), Clipboard (Entwarnung statt Problem), opt.guifont (Einstellung existiert nicht mehr in options.lua), clangd/LLVM.LLVM (seit f60d38e automatisiert, kein manueller Eingriff mehr noetig). Verbleiben: MSVC/Developer PowerShell (echte, nicht automatisierbare Voraussetzung) und scripts/sonarqube.sh (bleibende POSIX-only-Einschraenkung). --- neovim-windows-setup.md | 4 ---- 1 file changed, 4 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 8847b5a..6791f3d 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -66,11 +66,7 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") ## 4. Bekannte Stolpersteine - **C-Compiler für `nvim-treesitter` (MSVC)**: `cl.exe` findet `nvim-treesitter` automatisch, aber nur wenn `INCLUDE`/`LIB` gesetzt sind – das passiert ausschließlich in einer "Developer PowerShell for VS" bzw. "x64 Native Tools Command Prompt", nicht in einer normalen PowerShell/Windows Terminal-Sitzung. Ohne das schlägt die Parser-Kompilierung mit einer Meldung wie "cannot find `
`.h" fehl, obwohl `cl.exe` selbst gefunden wird. Neovim also immer aus dieser Developer-Shell heraus starten. -- **Rechtschreibprüfung (Deutsch)**: `bootstrap-win/neovim-dict.ps1` ausführen – lädt `de.utf-8.spl`/`.sug` nach `%LOCALAPPDATA%\nvim-data\site\spell` (nativer Windows-Datenpfad von Neovim). - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. -- **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. -- **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. -- **`clangd` trotz installiertem `LLVM.LLVM` nicht gefunden**: im Praxistest beobachtet – winget meldet das Paket als bereits installiert, `clangd.exe` liegt aber nicht im PATH. `bootstrap-win/neovim.ps1` erkennt diesen Fall inzwischen und gibt einen gezielten Hinweis statt der generischen "Paket nicht gefunden"-Meldung. Abhilfe: Installationsordner suchen (typischerweise `C:\Program Files\LLVM\bin`) und manuell zum PATH hinzufügen. ## 5. Verifizieren -- cgit v1.3 From c76dc6075beb1bbbc55231df7d5aa50b5f70ba2c Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 11:20:14 +0200 Subject: neovim: SonarScan/SonarIssues nur unter POSIX registrieren sonar-scanner und scripts/sonarqube.sh haben kein Windows-Pendant. Statt die Kommandos unter Windows existieren zu lassen und dort mit Fehlern (fehlendes sh, /dev/null-artige Probleme) fehlzuschlagen, werden SonarScan/SonarIssues jetzt nur registriert, wenn vim.fn.has('win32') == 0 - unter Windows existieren die Kommandos schlicht nicht. LspOff/LspOffBuffer/LspOn bleiben unveraendert, betreffen keine Plattform-Abhaengigkeit. neovim-windows-setup.md: den damit erledigten sonarqube.sh-Stolperstein aus Abschnitt 4 entfernt, MSVC/Developer PowerShell bleibt als einziger verbleibender Punkt. --- neovim-windows-setup.md | 1 - nvim/lua/config/usercmds.lua | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 6791f3d..8227995 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -66,7 +66,6 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") ## 4. Bekannte Stolpersteine - **C-Compiler für `nvim-treesitter` (MSVC)**: `cl.exe` findet `nvim-treesitter` automatisch, aber nur wenn `INCLUDE`/`LIB` gesetzt sind – das passiert ausschließlich in einer "Developer PowerShell for VS" bzw. "x64 Native Tools Command Prompt", nicht in einer normalen PowerShell/Windows Terminal-Sitzung. Ohne das schlägt die Parser-Kompilierung mit einer Meldung wie "cannot find `
`.h" fehl, obwohl `cl.exe` selbst gefunden wird. Neovim also immer aus dieser Developer-Shell heraus starten. -- **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. ## 5. Verifizieren diff --git a/nvim/lua/config/usercmds.lua b/nvim/lua/config/usercmds.lua index 9abc50f..db02497 100644 --- a/nvim/lua/config/usercmds.lua +++ b/nvim/lua/config/usercmds.lua @@ -66,8 +66,14 @@ local function enable_lsp() vim.cmd("edit") -- triggert Reattach bei vielen Setups end -vim.api.nvim_create_user_command("SonarScan", run_sonar, {}) -vim.api.nvim_create_user_command("SonarIssues", load_sonar_issues, {}) +-- sonar-scanner/scripts/sonarqube.sh sind POSIX-only (kein Windows-Pendant), +-- deshalb Kommandos unter Windows gar nicht erst registrieren statt sie +-- dort fehlschlagen zu lassen. +if vim.fn.has("win32") == 0 then + vim.api.nvim_create_user_command("SonarScan", run_sonar, {}) + vim.api.nvim_create_user_command("SonarIssues", load_sonar_issues, {}) +end + vim.api.nvim_create_user_command("LspOff", disable_lsp, {}) vim.api.nvim_create_user_command("LspOffBuffer", disable_lsp_buffer, {}) vim.api.nvim_create_user_command("LspOn", enable_lsp, {}) -- cgit v1.3 From 430d0d108c086977b9f99040706fe0c0ebe3e2e2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 24 Jul 2026 11:28:28 +0200 Subject: windows-setup.md: Execution Policy in Abschnitt 1 (Grundwerkzeuge) verschoben Set-ExecutionPolicy -Scope CurrentUser RemoteSigned jetzt Teil des winget-Blocks in 'Grundwerkzeuge installieren' statt separat erklaert in der Einleitung und als eigener Punkt in Abschnitt 0 (beides entfernt). Hinweis: RemoteSigned als Policy-Wert beibehalten (via Bypass pro Aufruf bleibt als Alternative erwaehnt) - ein Set-ExecutionPolicy-Aufruf ohne Policy-Wert wuerde PowerShell interaktiv danach fragen. --- neovim-windows-setup.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'neovim-windows-setup.md') diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 8227995..c925f59 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -2,11 +2,10 @@ Checkliste für die Übernahme der bestehenden `nvim/`-Config aus dem Dotfiles-Repo auf ein natives Windows-System (kein WSL). Repo selbst bleibt unverändert. -Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL) – mit einer Ausnahme: `windows\bin\gmake.cmd` ist ein trivialer Ein-Zeiler-Wrapper, für den sich eine `.ps1`-Datei nicht lohnt. Falls die Ausführung der `.ps1`-Skripte durch die Execution Policy blockiert wird, entweder pro Aufruf `powershell -ExecutionPolicy Bypass -File .\skript.ps1` verwenden, oder einmalig `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. +Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein WSL) – mit einer Ausnahme: `windows\bin\gmake.cmd` ist ein trivialer Ein-Zeiler-Wrapper, für den sich eine `.ps1`-Datei nicht lohnt. ## 0. Von Hand zu erledigen (nicht durch Skripte abgedeckt) -- **Execution Policy** setzen (siehe oben), sonst starten die `.ps1`-Skripte gar nicht. - **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap-win/neovim.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. - **PATH-Registrierung stichprobenartig prüfen** – manche winget-Pakete tragen sich nicht automatisch in den PATH ein (im Praxistest z. B. `LLVM.LLVM`: bereits installiert, aber `clangd` nicht im PATH, vermutlich weil der `--silent`-Installer die PATH-Registrierung überspringt). Nach einem neuen Terminal kurz `Get-Command clangd, jq, make` aufrufen; fehlt eins, dessen Installationsordner (bei LLVM z. B. `C:\Program Files\LLVM\bin`) manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). @@ -16,7 +15,10 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein ## 1. Grundwerkzeuge installieren +Execution Policy einmalig setzen, sonst starten die `.ps1`-Skripte in diesem Repo gar nicht (Alternative pro Aufruf: `powershell -ExecutionPolicy Bypass -File .\skript.ps1`): + ```powershell +Set-ExecutionPolicy -Scope CurrentUser RemoteSigned winget install Neovim.Neovim winget install Git.Git winget install OpenJS.NodeJS.LTS -- cgit v1.3