diff options
| author | Thomas Schmucker <ts@its1.de> | 2026-07-28 08:17:31 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2026-07-28 08:17:31 +0200 |
| commit | 24b2283b318fb0e68342e77c13ab220f77db4de1 (patch) | |
| tree | 340bf7159a8abf6ef25ee61d2389f5b6d1e39c0c | |
| parent | 6b347041dabee4b128b8778041d6ab8158fb0d13 (diff) | |
| download | dotfiles-24b2283b318fb0e68342e77c13ab220f77db4de1.tar.gz dotfiles-24b2283b318fb0e68342e77c13ab220f77db4de1.tar.bz2 dotfiles-24b2283b318fb0e68342e77c13ab220f77db4de1.zip | |
bootstrap: git.sh und git.ps1 hinzugefuegt (git + delta), Doku angepasst
| -rw-r--r-- | bootstrap-win/git.ps1 | 75 | ||||
| -rwxr-xr-x | bootstrap/git.sh | 78 | ||||
| -rw-r--r-- | neovim-windows-setup.md | 10 | ||||
| -rw-r--r-- | readme.md | 7 |
4 files changed, 166 insertions, 4 deletions
diff --git a/bootstrap-win/git.ps1 b/bootstrap-win/git.ps1 new file mode 100644 index 0000000..41a3112 --- /dev/null +++ b/bootstrap-win/git.ps1 | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | #Requires -Version 5.1 | ||
| 2 | <# | ||
| 3 | Installiert Git und delta (Pager fuer git/config) per winget. | ||
| 4 | |||
| 5 | Aufruf (keine Admin-Rechte noetig): | ||
| 6 | .\bootstrap-win\git.ps1 | ||
| 7 | #> | ||
| 8 | |||
| 9 | $ErrorActionPreference = "Stop" | ||
| 10 | $script:Failures = @() | ||
| 11 | |||
| 12 | function Write-Ok($msg) { | ||
| 13 | Write-Host "OK $msg" -ForegroundColor Green | ||
| 14 | } | ||
| 15 | |||
| 16 | function Write-Step($msg) { | ||
| 17 | Write-Host "==> $msg" -ForegroundColor Cyan | ||
| 18 | } | ||
| 19 | |||
| 20 | function Write-Skip($msg) { | ||
| 21 | Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray | ||
| 22 | } | ||
| 23 | |||
| 24 | function Write-Warn($msg) { | ||
| 25 | Write-Host "! $msg" -ForegroundColor Yellow | ||
| 26 | $script:Failures += $msg | ||
| 27 | } | ||
| 28 | |||
| 29 | function Test-CommandExists([string]$Name) { | ||
| 30 | return [bool](Get-Command $Name -ErrorAction SilentlyContinue) | ||
| 31 | } | ||
| 32 | |||
| 33 | function Install-WingetPackage([string]$Binary, [string]$Id) { | ||
| 34 | if (Test-CommandExists $Binary) { | ||
| 35 | Write-Skip $Binary | ||
| 36 | return | ||
| 37 | } | ||
| 38 | |||
| 39 | Write-Step "winget install $Id" | ||
| 40 | $output = winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent 2>&1 | ||
| 41 | |||
| 42 | if ($LASTEXITCODE -ne 0) { | ||
| 43 | $lastLine = ($output | Select-Object -Last 3) -join " / " | ||
| 44 | Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" | ||
| 45 | return | ||
| 46 | } | ||
| 47 | |||
| 48 | Write-Ok $Id | ||
| 49 | } | ||
| 50 | |||
| 51 | function Test-Prerequisites { | ||
| 52 | if (-not (Test-CommandExists "winget")) { | ||
| 53 | Write-Host "Fehler: winget wurde nicht gefunden. 'App Installer' aus dem Microsoft Store installieren." -ForegroundColor Red | ||
| 54 | exit 1 | ||
| 55 | } | ||
| 56 | } | ||
| 57 | |||
| 58 | function Main { | ||
| 59 | Test-Prerequisites | ||
| 60 | |||
| 61 | Install-WingetPackage -Binary "git" -Id "Git.Git" | ||
| 62 | Install-WingetPackage -Binary "delta" -Id "dandavison.delta" | ||
| 63 | |||
| 64 | Write-Host "" | ||
| 65 | if ($script:Failures.Count -eq 0) { | ||
| 66 | Write-Host "Bootstrap abgeschlossen." -ForegroundColor Green | ||
| 67 | } else { | ||
| 68 | Write-Host "Bootstrap abgeschlossen, mit $($script:Failures.Count) Warnung(en):" -ForegroundColor Yellow | ||
| 69 | foreach ($f in $script:Failures) { | ||
| 70 | Write-Host " - $f" -ForegroundColor Yellow | ||
| 71 | } | ||
| 72 | } | ||
| 73 | } | ||
| 74 | |||
| 75 | Main | ||
diff --git a/bootstrap/git.sh b/bootstrap/git.sh new file mode 100755 index 0000000..36d7067 --- /dev/null +++ b/bootstrap/git.sh | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | set -eu | ||
| 4 | |||
| 5 | OS="$(uname -s)" | ||
| 6 | |||
| 7 | die() { | ||
| 8 | printf 'Fehler: %s\n' "$*" >&2 | ||
| 9 | exit 1 | ||
| 10 | } | ||
| 11 | |||
| 12 | have() { | ||
| 13 | command -v "$1" >/dev/null 2>&1 | ||
| 14 | } | ||
| 15 | |||
| 16 | check_prerequisites() { | ||
| 17 | case "$OS" in | ||
| 18 | Darwin) | ||
| 19 | if ! have brew; then | ||
| 20 | die "Homebrew ist nicht installiert." | ||
| 21 | fi | ||
| 22 | ;; | ||
| 23 | FreeBSD) | ||
| 24 | if ! have doas; then | ||
| 25 | die "doas ist nicht installiert." | ||
| 26 | fi | ||
| 27 | ;; | ||
| 28 | *) | ||
| 29 | die "Nicht unterstütztes Betriebssystem: $OS" | ||
| 30 | ;; | ||
| 31 | esac | ||
| 32 | } | ||
| 33 | |||
| 34 | setup_homebrew_env() { | ||
| 35 | case "$OS" in | ||
| 36 | Darwin) | ||
| 37 | export HOMEBREW_NO_AUTO_UPDATE=1 | ||
| 38 | export HOMEBREW_NO_INSTALL_CLEANUP=1 | ||
| 39 | ;; | ||
| 40 | esac | ||
| 41 | } | ||
| 42 | |||
| 43 | install_pkg() { | ||
| 44 | binary="$1" | ||
| 45 | package="$2" | ||
| 46 | |||
| 47 | if have "$binary"; then | ||
| 48 | printf "✓ %-32s vorhanden\n" "$binary" | ||
| 49 | return | ||
| 50 | fi | ||
| 51 | |||
| 52 | printf "→ Installiere %s\n" "$package" | ||
| 53 | |||
| 54 | case "$OS" in | ||
| 55 | Darwin) | ||
| 56 | brew install "$package" | ||
| 57 | ;; | ||
| 58 | FreeBSD) | ||
| 59 | doas pkg install -y "$package" | ||
| 60 | ;; | ||
| 61 | esac | ||
| 62 | } | ||
| 63 | |||
| 64 | install_prerequisites() { | ||
| 65 | install_pkg git git | ||
| 66 | install_pkg delta git-delta | ||
| 67 | } | ||
| 68 | |||
| 69 | main() { | ||
| 70 | check_prerequisites | ||
| 71 | setup_homebrew_env | ||
| 72 | |||
| 73 | install_prerequisites | ||
| 74 | |||
| 75 | printf "\nBootstrap abgeschlossen.\n" | ||
| 76 | } | ||
| 77 | |||
| 78 | main "$@" | ||
diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index c925f59..0fbeefe 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md | |||
| @@ -10,7 +10,7 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein | |||
| 10 | - **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. | 10 | - **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. |
| 11 | - **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`). | 11 | - **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`). |
| 12 | - **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. | 12 | - **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. |
| 13 | - **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). | 13 | - **Reihenfolge**: `install-win.ps1`, `bootstrap-win/git.ps1`, `bootstrap-win/neovim.ps1` und `bootstrap-win/neovim-dict.ps1` sind unabhängig voneinander. Empfehlenswert: erst Neovim/Node (Abschnitt 1) installieren, dann alle 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). |
| 14 | - **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. | 14 | - **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. |
| 15 | 15 | ||
| 16 | ## 1. Grundwerkzeuge installieren | 16 | ## 1. Grundwerkzeuge installieren |
| @@ -20,12 +20,14 @@ Execution Policy einmalig setzen, sonst starten die `.ps1`-Skripte in diesem Rep | |||
| 20 | ```powershell | 20 | ```powershell |
| 21 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned | 21 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
| 22 | winget install Neovim.Neovim | 22 | winget install Neovim.Neovim |
| 23 | winget install Git.Git | ||
| 24 | winget install OpenJS.NodeJS.LTS | 23 | winget install OpenJS.NodeJS.LTS |
| 25 | winget install dandavison.delta | ||
| 26 | ``` | 24 | ``` |
| 27 | 25 | ||
| 28 | `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. | 26 | Git und `delta` (Pager, von `git/config` vorausgesetzt: `pager = delta`, `diffFilter = delta --color-only`) installiert `bootstrap-win/git.ps1`: |
| 27 | |||
| 28 | ```powershell | ||
| 29 | .\bootstrap-win\git.ps1 | ||
| 30 | ``` | ||
| 29 | 31 | ||
| 30 | (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.) | 32 | (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.) |
| 31 | 33 | ||
| @@ -25,12 +25,19 @@ Bootstrap the zsh environment: | |||
| 25 | ./bootstrap/zsh.sh | 25 | ./bootstrap/zsh.sh |
| 26 | ``` | 26 | ``` |
| 27 | 27 | ||
| 28 | Bootstrap the git environment: | ||
| 29 | |||
| 30 | ```sh | ||
| 31 | ./bootstrap/git.sh | ||
| 32 | ``` | ||
| 33 | |||
| 28 | ### Windows | 34 | ### Windows |
| 29 | 35 | ||
| 30 | Native PowerShell, no WSL/Git Bash required: | 36 | Native PowerShell, no WSL/Git Bash required: |
| 31 | 37 | ||
| 32 | ```powershell | 38 | ```powershell |
| 33 | .\install-win.ps1 | 39 | .\install-win.ps1 |
| 40 | .\bootstrap-win\git.ps1 | ||
| 34 | .\bootstrap-win\neovim.ps1 | 41 | .\bootstrap-win\neovim.ps1 |
| 35 | .\bootstrap-win\neovim-dict.ps1 | 42 | .\bootstrap-win\neovim-dict.ps1 |
| 36 | ``` | 43 | ``` |
