From 17e579e16cacfc3c3588d1cbbc215798f60ddac7 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:40:40 +0200 Subject: [PATCH 1/3] feat(mise): Generate toolbox conf.d files dynamically from tools.yaml Toolboxes declared in .chezmoidata/tools.yaml no longer need a matching source file under private_dot_config/mise/conf.d/. The run_onchange install script now loops over tools.yaml/hosts.yaml directly to (re)generate ~/.config/mise/conf.d/.toml, and removes files for toolboxes no longer assigned to the host/user, so mise config.toml stays limited to individual, non-toolbox tools. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01GA4dAzARMnLz1G9AmQkYYn --- .chezmoitemplates/mise-toolbox-conf | 15 +++++++ .chezmoitemplates/mise-tools | 30 +++---------- private_dot_config/mise/config.toml.tmpl | 3 +- run_once_after_00-install-mise.sh.tmpl | 2 +- run_onchange_after_mise-install.sh.tmpl | 56 +++++++++++++++++++++--- 5 files changed, 75 insertions(+), 31 deletions(-) create mode 100644 .chezmoitemplates/mise-toolbox-conf diff --git a/.chezmoitemplates/mise-toolbox-conf b/.chezmoitemplates/mise-toolbox-conf new file mode 100644 index 0000000..4c2f357 --- /dev/null +++ b/.chezmoitemplates/mise-toolbox-conf @@ -0,0 +1,15 @@ +{{/* .chezmoitemplates/mise-toolbox-conf */}} +{{/* Expects data: (merge (dict "toolboxName" "") .) */}} +{{- $toolboxName := .toolboxName -}} +{{ includeTemplate "chezmoi-managed-header" . }} +[tools] +{{- $toolsList := index .tools.toolboxes $toolboxName }} +{{- range $tool := $toolsList }} + {{- if kindIs "map" $tool }} + {{- range $toolName, $params := $tool }} +{{ $toolName }} = { version = "{{ $params.version | default "latest" }}"{{ range $key, $value := omit $params "version" }}, {{ $key }} = "{{ $value }}"{{ end }} } + {{- end }} + {{- else }} +"{{ $tool }}" = "latest" + {{- end }} +{{- end }} diff --git a/.chezmoitemplates/mise-tools b/.chezmoitemplates/mise-tools index 08ec7a7..36f61ec 100644 --- a/.chezmoitemplates/mise-tools +++ b/.chezmoitemplates/mise-tools @@ -10,14 +10,12 @@ {{- end }} {{- end }} {{- if $currentUser }} - {{- /* 1. Parcourir les toolboxes associées à cet hôte */}} - {{- range $toolboxName := $currentUser.toolboxes }} - {{- /* Récupérer la liste des outils pour cette toolbox dans tools.yaml */}} - {{- $toolsList := index $.tools.toolboxes $toolboxName }} - {{- if $toolsList }} + {{- /* Les outils individuels (la liste 'tools:' de l'utilisateur) */}} + {{- if hasKey $currentUser "tools" }} + {{- if $currentUser.tools }} -# Toolbox: {{ $toolboxName }} - {{- range $tool := $toolsList }} +# Outils individuels + {{- range $tool := $currentUser.tools }} {{- /* Un outil est soit une chaîne ("nom"), soit un objet { nom: {version, ...params mise} } */}} {{- if kindIs "map" $tool }} {{- range $toolName, $params := $tool }} @@ -29,23 +27,7 @@ {{- end }} {{- end }} {{- end }} - - {{- /* 2. Parcourir les outils individuels (la liste 'tools:' de l'utilisateur) */}} - {{- if hasKey $currentUser "tools" }} - {{- if $currentUser.tools }} - -# Outils individuels - {{- range $tool := $currentUser.tools }} - {{- if kindIs "map" $tool }} - {{- range $toolName, $params := $tool }} -{{ $toolName }} = { version = "{{ $params.version | default "latest" }}"{{ range $key, $value := omit $params "version" }}, {{ $key }} = "{{ $value }}"{{ end }} } - {{- end }} - {{- else }} -"{{ $tool }}" = "latest" - {{- end }} - {{- end }} - {{- end }} - {{- end }} + {{- /* Les toolboxes de cet utilisateur sont générées séparément dans ~/.config/mise/conf.d/.toml */}} {{- else if $currentHost }} # Aucun profil trouvé dans hosts.yaml pour l'utilisateur {{ $username }} sur la machine : {{ $hostname }} {{- else }} diff --git a/private_dot_config/mise/config.toml.tmpl b/private_dot_config/mise/config.toml.tmpl index 1bf2f02..f97837e 100644 --- a/private_dot_config/mise/config.toml.tmpl +++ b/private_dot_config/mise/config.toml.tmpl @@ -35,7 +35,8 @@ chezmoi = "latest" neovim = "latest" tree-sitter = "latest" -# Tools automated with chezmoi +# Individual tools automated with chezmoi +# (toolboxes from .chezmoidata/tools.yaml live in ~/.config/mise/conf.d/.toml) {{ includeTemplate "mise-tools" . }} # Password managers diff --git a/run_once_after_00-install-mise.sh.tmpl b/run_once_after_00-install-mise.sh.tmpl index 0ddfb3d..ccc8ead 100644 --- a/run_once_after_00-install-mise.sh.tmpl +++ b/run_once_after_00-install-mise.sh.tmpl @@ -15,7 +15,7 @@ if command -v mise &>/dev/null; then mise bootstrap --yes fi -# 3. Installer tous les outils déclarés dans ~/.config/mise/config.toml +# 3. Installer tous les outils déclarés dans ~/.config/mise/config.toml et ~/.config/mise/conf.d/*.toml if command -v mise &>/dev/null; then echo "⚡ Installation des outils via Mise (dont chezmoi si désiré)..." mise install --yes diff --git a/run_onchange_after_mise-install.sh.tmpl b/run_onchange_after_mise-install.sh.tmpl index c121231..93a0899 100644 --- a/run_onchange_after_mise-install.sh.tmpl +++ b/run_onchange_after_mise-install.sh.tmpl @@ -1,13 +1,59 @@ #!/usr/bin/env bash -# Déclencheur automatique : ce script se réexécutera si le config.toml de mise change, -# y compris quand seules les données (.chezmoidata) utilisées par ses templates changent. -# hash: {{ includeTemplate "private_dot_config/mise/config.toml.tmpl" . | sha256sum }} +# Déclencheur automatique : ce script régénère les toolboxes mise +# (~/.config/mise/conf.d/.toml) à partir de .chezmoidata/tools.yaml +# et .chezmoidata/hosts.yaml, puis (ré)installe les outils. +# Il se réexécute automatiquement dès que ces données changent, car la boucle +# ci-dessous fait partie du contenu templaté (donc du hash) de ce script. +# hash config.toml: {{ includeTemplate "private_dot_config/mise/config.toml.tmpl" . | sha256sum }} + +set -euo pipefail export PATH="${HOME}/.local/bin:$PATH" +MISE_CONF_D="${HOME}/.config/mise/conf.d" +mkdir -p "$MISE_CONF_D" + +{{- $hostname := output "hostname" | trim -}} +{{- $username := .chezmoi.username -}} +{{- $currentHost := index .hosts $hostname -}} +{{- $currentUser := "" -}} +{{- if $currentHost -}} + {{- if hasKey $currentHost.users $username -}} + {{- $currentUser = index $currentHost.users $username -}} + {{- end -}} +{{- end }} + +echo "✏️ Génération des toolboxes mise pour {{ $username }}@{{ $hostname }}..." + +declare -A active_toolboxes=( +{{- if $currentUser }} + {{- range $toolboxName := $currentUser.toolboxes }} + ["{{ $toolboxName }}"]=1 + {{- end }} +{{- end }} +) + +# Suppression des toolboxes qui ne sont plus assignées à cet hôte/utilisateur +for f in "$MISE_CONF_D"/*.toml; do + [ -e "$f" ] || continue + name="$(basename "$f" .toml)" + if [ -z "${active_toolboxes[$name]:-}" ]; then + echo "🗑️ Toolbox obsolète supprimée : $name" + rm -f "$f" + fi +done +{{ if $currentUser }} + {{- range $toolboxName := $currentUser.toolboxes }} + {{- $toolsList := index $.tools.toolboxes $toolboxName }} + {{- if $toolsList }} +echo " → {{ $toolboxName }}.toml" +cat > "$MISE_CONF_D/{{ $toolboxName }}.toml" <<'MISE_TOOLBOX_EOF' +{{ includeTemplate "mise-toolbox-conf" (merge (dict "toolboxName" $toolboxName) $) }} +MISE_TOOLBOX_EOF + {{- end }} + {{- end }} +{{- end }} if command -v mise &>/dev/null; then - echo "✏️ Modification de la configuration mise détectée." - echo echo "🚀 Mise bootstrap..." mise bootstrap --yes From 1c817a92a6598e4ef2bc856b28476971475beca8 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:48:13 +0200 Subject: [PATCH 2/3] feat(mise): Add toolbox name header in generated conf.d files Addresses PR feedback: each conf.d/.toml now starts with a "# Toolbox: " comment, matching the previous inline config.toml layout. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01GA4dAzARMnLz1G9AmQkYYn --- .chezmoitemplates/mise-toolbox-conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.chezmoitemplates/mise-toolbox-conf b/.chezmoitemplates/mise-toolbox-conf index 4c2f357..6cd9e58 100644 --- a/.chezmoitemplates/mise-toolbox-conf +++ b/.chezmoitemplates/mise-toolbox-conf @@ -2,6 +2,8 @@ {{/* Expects data: (merge (dict "toolboxName" "") .) */}} {{- $toolboxName := .toolboxName -}} {{ includeTemplate "chezmoi-managed-header" . }} +# Toolbox: {{ $toolboxName }} + [tools] {{- $toolsList := index .tools.toolboxes $toolboxName }} {{- range $tool := $toolsList }} From fafcf283a82326323cca3d1acdbd074f08b9e7f3 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:51:38 +0200 Subject: [PATCH 3/3] feat(lazygit): Update config to follow new syntax --- private_dot_config/lazygit/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/private_dot_config/lazygit/config.yml b/private_dot_config/lazygit/config.yml index eceb7b3..eaae2c5 100644 --- a/private_dot_config/lazygit/config.yml +++ b/private_dot_config/lazygit/config.yml @@ -11,7 +11,7 @@ gui: - bold nerdFontsVersion: "3" git: - pagers: + diffRenderers: - colorArg: always - pager: delta --paging=never + command: delta --paging=never parseEmoji: true