aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2026-07-28 08:17:31 +0200
committerThomas Schmucker <ts@its1.de>2026-07-28 08:17:31 +0200
commit24b2283b318fb0e68342e77c13ab220f77db4de1 (patch)
tree340bf7159a8abf6ef25ee61d2389f5b6d1e39c0c
parent6b347041dabee4b128b8778041d6ab8158fb0d13 (diff)
downloaddotfiles-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.ps175
-rwxr-xr-xbootstrap/git.sh78
-rw-r--r--neovim-windows-setup.md10
-rw-r--r--readme.md7
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
12function Write-Ok($msg) {
13 Write-Host "OK $msg" -ForegroundColor Green
14}
15
16function Write-Step($msg) {
17 Write-Host "==> $msg" -ForegroundColor Cyan
18}
19
20function Write-Skip($msg) {
21 Write-Host "- $msg bereits vorhanden" -ForegroundColor DarkGray
22}
23
24function Write-Warn($msg) {
25 Write-Host "! $msg" -ForegroundColor Yellow
26 $script:Failures += $msg
27}
28
29function Test-CommandExists([string]$Name) {
30 return [bool](Get-Command $Name -ErrorAction SilentlyContinue)
31}
32
33function 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
51function 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
58function 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
75Main
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
3set -eu
4
5OS="$(uname -s)"
6
7die() {
8 printf 'Fehler: %s\n' "$*" >&2
9 exit 1
10}
11
12have() {
13 command -v "$1" >/dev/null 2>&1
14}
15
16check_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
34setup_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
43install_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
64install_prerequisites() {
65 install_pkg git git
66 install_pkg delta git-delta
67}
68
69main() {
70 check_prerequisites
71 setup_homebrew_env
72
73 install_prerequisites
74
75 printf "\nBootstrap abgeschlossen.\n"
76}
77
78main "$@"
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
21Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 21Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
22winget install Neovim.Neovim 22winget install Neovim.Neovim
23winget install Git.Git
24winget install OpenJS.NodeJS.LTS 23winget install OpenJS.NodeJS.LTS
25winget 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. 26Git 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
diff --git a/readme.md b/readme.md
index f4e914e..abeacb7 100644
--- a/readme.md
+++ b/readme.md
@@ -25,12 +25,19 @@ Bootstrap the zsh environment:
25./bootstrap/zsh.sh 25./bootstrap/zsh.sh
26``` 26```
27 27
28Bootstrap the git environment:
29
30```sh
31./bootstrap/git.sh
32```
33
28### Windows 34### Windows
29 35
30Native PowerShell, no WSL/Git Bash required: 36Native 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```