diff options
| author | Thomas Schmucker <ts@its1.de> | 2026-09-05 09:49:59 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2026-09-05 09:49:59 +0200 |
| commit | 84755d0981123ace06786b5477a73dbd39b1a9d6 (patch) | |
| tree | 776b197fe227adaf5d09cb501967ba80b58bc0af | |
| parent | 9a11bc2be48a8a9021cbf06c691bfb3ced886a4c (diff) | |
| parent | 98b344cbacff5fad784b88abcf05186994edcef8 (diff) | |
| download | dotfiles-84755d0981123ace06786b5477a73dbd39b1a9d6.tar.gz dotfiles-84755d0981123ace06786b5477a73dbd39b1a9d6.tar.bz2 dotfiles-84755d0981123ace06786b5477a73dbd39b1a9d6.zip | |
Merge branch 'master' into add-ansible-support
| -rw-r--r-- | bootstrap-win/neovim.ps1 | 4 | ||||
| -rwxr-xr-x | bootstrap/neovim.sh | 27 | ||||
| -rw-r--r-- | neovim-windows-setup.md | 6 | ||||
| -rw-r--r-- | nvim/lua/config/filetypes.lua | 7 | ||||
| -rw-r--r-- | nvim/lua/config/treesitter.lua | 2 | ||||
| -rw-r--r-- | nvim/lua/plugins/format.lua | 2 | ||||
| -rw-r--r-- | windows/bin/system-update.cmd | 6 | ||||
| -rw-r--r-- | zsh/zshrc | 24 |
8 files changed, 58 insertions, 20 deletions
diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index c12ed6b..40f6312 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | Aufruf (keine Admin-Rechte noetig): | 6 | Aufruf (keine Admin-Rechte noetig): |
| 7 | .\bootstrap-win\neovim.ps1 | 7 | .\bootstrap-win\neovim.ps1 |
| 8 | 8 | ||
| 9 | yamlfmt, gawk und xmllint sind bewusst nicht enthalten (siehe | 9 | yamlfmt, gawk, xmllint und djlint sind bewusst nicht enthalten (siehe |
| 10 | neovim-windows-setup.md). Fehlgeschlagene Installationen werden als | 10 | neovim-windows-setup.md). Fehlgeschlagene Installationen werden als |
| 11 | Warnung gemeldet, das Skript bricht nicht ab. | 11 | Warnung gemeldet, das Skript bricht nicht ab. |
| 12 | #> | 12 | #> |
| @@ -177,7 +177,7 @@ function Install-Formatters { | |||
| 177 | Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" | 177 | Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" |
| 178 | Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" | 178 | Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" |
| 179 | 179 | ||
| 180 | # yamlfmt, gawk, xmllint: kein winget-Paket gefunden, siehe neovim-windows-setup.md. | 180 | # yamlfmt, gawk, xmllint, djlint: kein winget-Paket gefunden, siehe neovim-windows-setup.md. |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | function Install-Tools { | 183 | function Install-Tools { |
diff --git a/bootstrap/neovim.sh b/bootstrap/neovim.sh index 6010af3..e1a9112 100755 --- a/bootstrap/neovim.sh +++ b/bootstrap/neovim.sh | |||
| @@ -78,10 +78,36 @@ install_npm() { | |||
| 78 | npm install -g "$package" | 78 | npm install -g "$package" |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | install_pipx() { | ||
| 82 | binary="$1" | ||
| 83 | package="$2" | ||
| 84 | |||
| 85 | if have "$binary"; then | ||
| 86 | printf "✓ %-32s vorhanden\n" "$binary" | ||
| 87 | return | ||
| 88 | fi | ||
| 89 | |||
| 90 | if ! have pipx; then | ||
| 91 | die "pipx wurde nicht gefunden." | ||
| 92 | fi | ||
| 93 | |||
| 94 | printf "→ Installiere pipx-Paket %s\n" "$package" | ||
| 95 | pipx install "$package" | ||
| 96 | } | ||
| 97 | |||
| 81 | install_prerequisites() { | 98 | install_prerequisites() { |
| 82 | install_pkg curl curl | 99 | install_pkg curl curl |
| 83 | install_pkg git git | 100 | install_pkg git git |
| 84 | install_pkg node node | 101 | install_pkg node node |
| 102 | |||
| 103 | case "$OS" in | ||
| 104 | Darwin) | ||
| 105 | install_pkg pipx pipx | ||
| 106 | ;; | ||
| 107 | FreeBSD) | ||
| 108 | install_pkg pipx devel/py-pipx | ||
| 109 | ;; | ||
| 110 | esac | ||
| 85 | } | 111 | } |
| 86 | 112 | ||
| 87 | install_formatters() { | 113 | install_formatters() { |
| @@ -92,6 +118,7 @@ install_formatters() { | |||
| 92 | install_pkg shfmt shfmt | 118 | install_pkg shfmt shfmt |
| 93 | install_pkg stylua stylua | 119 | install_pkg stylua stylua |
| 94 | install_pkg yamlfmt yamlfmt | 120 | install_pkg yamlfmt yamlfmt |
| 121 | install_pipx djlint djlint | ||
| 95 | 122 | ||
| 96 | case "$OS" in | 123 | case "$OS" in |
| 97 | Darwin) | 124 | Darwin) |
diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index c2a4df6..801beef 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 | |||
| 9 | - **`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. | 9 | - **`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. |
| 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), djlint 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 die Formatierung von awk-, xml/xsd-, yaml- und jinja-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück, für `jinja` gibt es aktuell keinen LSP-Fallback). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; djlint ist ein reines Python-Paket, daher `pip install djlint` bzw. `pipx install djlint` (Python muss dafür separat installiert sein, siehe Abschnitt 1); 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`, `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). | 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 | ||
| @@ -29,7 +29,7 @@ Git und `delta` (Pager, von `git/config` vorausgesetzt: `pager = delta`, `diffFi | |||
| 29 | .\bootstrap-win\git.ps1 | 29 | .\bootstrap-win\git.ps1 |
| 30 | ``` | 30 | ``` |
| 31 | 31 | ||
| 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.) | 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. Nur für `djlint` als Jinja-Formatter wird optional ein eigenes Python benötigt, siehe Abschnitt 0.) |
| 33 | 33 | ||
| 34 | ## 2. Konfiguration einrichten (Windows-nativer Weg) | 34 | ## 2. Konfiguration einrichten (Windows-nativer Weg) |
| 35 | 35 | ||
| @@ -56,7 +56,7 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a | |||
| 56 | .\bootstrap-win\neovim.ps1 | 56 | .\bootstrap-win\neovim.ps1 |
| 57 | ``` | 57 | ``` |
| 58 | 58 | ||
| 59 | 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. | 59 | 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/djlint 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. |
| 60 | 60 | ||
| 61 | 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). | 61 | 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). |
| 62 | 62 | ||
diff --git a/nvim/lua/config/filetypes.lua b/nvim/lua/config/filetypes.lua index a850028..3161d40 100644 --- a/nvim/lua/config/filetypes.lua +++ b/nvim/lua/config/filetypes.lua | |||
| @@ -33,4 +33,11 @@ vim.filetype.add({ | |||
| 33 | -- yaml.ansible soll den regulaeren yaml-Parser von Treesitter verwenden. | 33 | -- yaml.ansible soll den regulaeren yaml-Parser von Treesitter verwenden. |
| 34 | vim.treesitter.language.register("yaml", M.ANSIBLE_YAML) | 34 | vim.treesitter.language.register("yaml", M.ANSIBLE_YAML) |
| 35 | 35 | ||
| 36 | -- jinja support | ||
| 37 | vim.filetype.add({ | ||
| 38 | extension = { | ||
| 39 | j2 = "jinja", | ||
| 40 | }, | ||
| 41 | }) | ||
| 42 | |||
| 36 | return M | 43 | return M |
diff --git a/nvim/lua/config/treesitter.lua b/nvim/lua/config/treesitter.lua index 1eee267..f122f37 100644 --- a/nvim/lua/config/treesitter.lua +++ b/nvim/lua/config/treesitter.lua | |||
| @@ -7,6 +7,8 @@ M.languages = { | |||
| 7 | "cpp", | 7 | "cpp", |
| 8 | "html", | 8 | "html", |
| 9 | "javascript", | 9 | "javascript", |
| 10 | -- "jinja", | ||
| 11 | -- "jinja_inline", | ||
| 10 | "jq", | 12 | "jq", |
| 11 | "json", | 13 | "json", |
| 12 | "lua", | 14 | "lua", |
diff --git a/nvim/lua/plugins/format.lua b/nvim/lua/plugins/format.lua index 8ca7f1b..8b40229 100644 --- a/nvim/lua/plugins/format.lua +++ b/nvim/lua/plugins/format.lua | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | -- Verfügbare Formater: https://github.com/stevearc/conform.nvim/tree/master/lua/conform/formatters | 1 | -- Verfügbare Formater: https://github.com/stevearc/conform.nvim/tree/master/lua/conform/formatters |
| 2 | 2 | ||
| 3 | local clang = {} | 3 | local clang = {} |
| 4 | local djlint = { "djlint" } -- pipx install djlint (macOS & FreeBSD); unter Windows kein winget-Paket, siehe neovim-windows-setup.md | ||
| 4 | local gawk = { "gawk" } -- brew install gawk, pkg install gawk | 5 | local gawk = { "gawk" } -- brew install gawk, pkg install gawk |
| 5 | local jq = { "jq" } -- brew install jq, pkg install jq | 6 | local jq = { "jq" } -- brew install jq, pkg install jq |
| 6 | local prettier = { "prettier" } -- npm install -g prettier | 7 | local prettier = { "prettier" } -- npm install -g prettier |
| @@ -30,6 +31,7 @@ return { | |||
| 30 | cpp = clang, | 31 | cpp = clang, |
| 31 | html = prettier, | 32 | html = prettier, |
| 32 | javascript = prettier, | 33 | javascript = prettier, |
| 34 | jinja = djlint, | ||
| 33 | json = jq, | 35 | json = jq, |
| 34 | lua = stylua, | 36 | lua = stylua, |
| 35 | python = ruff, | 37 | python = ruff, |
diff --git a/windows/bin/system-update.cmd b/windows/bin/system-update.cmd index 64a7b9f..6c355d0 100644 --- a/windows/bin/system-update.cmd +++ b/windows/bin/system-update.cmd | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | @echo off | 1 | @echo off |
| 2 | 2 | ||
| 3 | call npm-update.cmd | 3 | call pkg-update.cmd |
| 4 | if errorlevel 1 exit /b 1 | 4 | if errorlevel 1 exit /b 1 |
| 5 | 5 | ||
| 6 | call nvim-update.cmd | 6 | call npm-update.cmd |
| 7 | if errorlevel 1 exit /b 1 | 7 | if errorlevel 1 exit /b 1 |
| 8 | 8 | ||
| 9 | call pkg-update.cmd | 9 | call nvim-update.cmd |
| 10 | if errorlevel 1 exit /b 1 | 10 | if errorlevel 1 exit /b 1 |
| @@ -80,17 +80,6 @@ alias pwgen='pwgen -s 48 1' | |||
| 80 | alias ls='ls -G' | 80 | alias ls='ls -G' |
| 81 | 81 | ||
| 82 | # Funktionen | 82 | # Funktionen |
| 83 | npm-update() { | ||
| 84 | npm update -g --loglevel=info | ||
| 85 | } | ||
| 86 | |||
| 87 | nvim-update() { | ||
| 88 | nvim --headless \ | ||
| 89 | -c "lua require[[lazy]].sync({ wait = true })" \ | ||
| 90 | -c "UpdateParsers" \ | ||
| 91 | -c "qa" | ||
| 92 | } | ||
| 93 | |||
| 94 | pkg-update() { | 83 | pkg-update() { |
| 95 | case "$OSTYPE" in | 84 | case "$OSTYPE" in |
| 96 | darwin*) | 85 | darwin*) |
| @@ -106,6 +95,17 @@ pkg-update() { | |||
| 106 | esac | 95 | esac |
| 107 | } | 96 | } |
| 108 | 97 | ||
| 98 | npm-update() { | ||
| 99 | npm update -g --loglevel=info | ||
| 100 | } | ||
| 101 | |||
| 102 | nvim-update() { | ||
| 103 | nvim --headless \ | ||
| 104 | -c "lua require[[lazy]].sync({ wait = true })" \ | ||
| 105 | -c "UpdateParsers" \ | ||
| 106 | -c "qa" | ||
| 107 | } | ||
| 108 | |||
| 109 | pkg-clean() { | 109 | pkg-clean() { |
| 110 | case "$OSTYPE" in | 110 | case "$OSTYPE" in |
| 111 | darwin*) | 111 | darwin*) |
| @@ -122,9 +122,9 @@ pkg-clean() { | |||
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | system-update() { | 124 | system-update() { |
| 125 | pkg-update || return | ||
| 125 | npm-update || return | 126 | npm-update || return |
| 126 | nvim-update || return | 127 | nvim-update || return |
| 127 | pkg-update || return | ||
| 128 | 128 | ||
| 129 | if [[ "$1" == "--clean" ]]; then | 129 | if [[ "$1" == "--clean" ]]; then |
| 130 | pkg-clean | 130 | pkg-clean |
