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/<toolbox>.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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GA4dAzARMnLz1G9AmQkYYn
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
{{/* .chezmoitemplates/mise-toolbox-conf */}}
|
||||||
|
{{/* Expects data: (merge (dict "toolboxName" "<name>") .) */}}
|
||||||
|
{{- $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 }}
|
||||||
@@ -10,14 +10,12 @@
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if $currentUser }}
|
{{- if $currentUser }}
|
||||||
{{- /* 1. Parcourir les toolboxes associées à cet hôte */}}
|
{{- /* Les outils individuels (la liste 'tools:' de l'utilisateur) */}}
|
||||||
{{- range $toolboxName := $currentUser.toolboxes }}
|
{{- if hasKey $currentUser "tools" }}
|
||||||
{{- /* Récupérer la liste des outils pour cette toolbox dans tools.yaml */}}
|
{{- if $currentUser.tools }}
|
||||||
{{- $toolsList := index $.tools.toolboxes $toolboxName }}
|
|
||||||
{{- if $toolsList }}
|
|
||||||
|
|
||||||
# Toolbox: {{ $toolboxName }}
|
# Outils individuels
|
||||||
{{- range $tool := $toolsList }}
|
{{- range $tool := $currentUser.tools }}
|
||||||
{{- /* Un outil est soit une chaîne ("nom"), soit un objet { nom: {version, ...params mise} } */}}
|
{{- /* Un outil est soit une chaîne ("nom"), soit un objet { nom: {version, ...params mise} } */}}
|
||||||
{{- if kindIs "map" $tool }}
|
{{- if kindIs "map" $tool }}
|
||||||
{{- range $toolName, $params := $tool }}
|
{{- range $toolName, $params := $tool }}
|
||||||
@@ -29,23 +27,7 @@
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- /* Les toolboxes de cet utilisateur sont générées séparément dans ~/.config/mise/conf.d/<toolbox>.toml */}}
|
||||||
{{- /* 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 }}
|
|
||||||
{{- else if $currentHost }}
|
{{- else if $currentHost }}
|
||||||
# Aucun profil trouvé dans hosts.yaml pour l'utilisateur {{ $username }} sur la machine : {{ $hostname }}
|
# Aucun profil trouvé dans hosts.yaml pour l'utilisateur {{ $username }} sur la machine : {{ $hostname }}
|
||||||
{{- else }}
|
{{- else }}
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ chezmoi = "latest"
|
|||||||
neovim = "latest"
|
neovim = "latest"
|
||||||
tree-sitter = "latest"
|
tree-sitter = "latest"
|
||||||
|
|
||||||
# Tools automated with chezmoi
|
# Individual tools automated with chezmoi
|
||||||
|
# (toolboxes from .chezmoidata/tools.yaml live in ~/.config/mise/conf.d/<toolbox>.toml)
|
||||||
{{ includeTemplate "mise-tools" . }}
|
{{ includeTemplate "mise-tools" . }}
|
||||||
|
|
||||||
# Password managers
|
# Password managers
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ if command -v mise &>/dev/null; then
|
|||||||
mise bootstrap --yes
|
mise bootstrap --yes
|
||||||
fi
|
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
|
if command -v mise &>/dev/null; then
|
||||||
echo "⚡ Installation des outils via Mise (dont chezmoi si désiré)..."
|
echo "⚡ Installation des outils via Mise (dont chezmoi si désiré)..."
|
||||||
mise install --yes
|
mise install --yes
|
||||||
|
|||||||
@@ -1,13 +1,59 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Déclencheur automatique : ce script se réexécutera si le config.toml de mise change,
|
# Déclencheur automatique : ce script régénère les toolboxes mise
|
||||||
# y compris quand seules les données (.chezmoidata) utilisées par ses templates changent.
|
# (~/.config/mise/conf.d/<toolbox>.toml) à partir de .chezmoidata/tools.yaml
|
||||||
# hash: {{ includeTemplate "private_dot_config/mise/config.toml.tmpl" . | sha256sum }}
|
# 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"
|
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
|
if command -v mise &>/dev/null; then
|
||||||
echo "✏️ Modification de la configuration mise détectée."
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "🚀 Mise bootstrap..."
|
echo "🚀 Mise bootstrap..."
|
||||||
mise bootstrap --yes
|
mise bootstrap --yes
|
||||||
|
|||||||
Reference in New Issue
Block a user