Compare commits

...
22 Commits
Author SHA1 Message Date
xavier 4c7b637e97 feat(chezmoi): Add devops toolbox for ubuntu user on cloud host 2026-10-04 17:04:20 +02:00
Xavier Logerais d0327a3b70 feat(chezmoi): Split git tools in several toolboxes 2026-09-28 18:13:44 +02:00
xavier 88d13bf36c Merge pull request 'Merge dev into main' (#3) from dev into main
Reviewed-on: #3
2026-09-28 00:35:10 +02:00
xavier d094dced64 Merge pull request 'fix(hosts): Remove rage from devenv tools' (#2) from fix/devenv-remove-rage into dev
Reviewed-on: #2
2026-09-27 22:46:25 +02:00
xavierandClaude Opus 5.5 3645b0c3d0 fix(hosts): Remove rage from devenv tools
cargo-binstall finds no prebuilt binary for rage and refuses to fall back
to cargo install, so mise compiles it from source, which slows down the
bootstrap and logs an error. The tool is not used yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DNFVa9coYSXpUrxogVwSiG
2026-09-27 21:51:47 +02:00
Xavier Logerais 5c46b38455 feat(ghostty): Improve Ghostty configuration 2026-09-22 18:53:32 +02:00
xavier 12b79dc835 fix(starship): Fix zsh prompt for ViM mode 2026-09-20 22:07:36 +02:00
xavier ebf3fec9d4 feat(starship): Use same character setting for bash than zsh 2026-09-19 20:22:06 +02:00
Xavier Logerais 3a2687474e feat(starship): Add indicator for ViM mode in zsh prompt 2026-09-17 15:32:34 +02:00
xavier ead4da0581 feat(starship): Improve bash prompt 2026-09-11 23:53:06 +02:00
xavierandClaude Sonnet 5 a787c7ed51 fix(git): Guard $gitConfig.name/email lookup against missing map keys
Accessing a missing key on a map value in text/template raises an
error before `default` can run, so `configs.git` without `name`/`email`
(or hosts without a `configs` key, e.g. termux-*) broke `chezmoi diff`
with "map has no entry for key". Use `hasKey` before accessing each
field instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145M6KGu5gQ3brTPzqs8NwG
2026-09-11 23:42:19 +02:00
Xavier LogeraisandCopilot e17a18d7c5 feat(git): Templatize git config for per-host/user identity override
Convert private_dot_config/git/config to config.tmpl so that the
[user] name/email can be overridden per host/user via the existing
`configs` key in .chezmoidata/hosts*.yaml, falling back to the
default identity (Xavier Logerais / xavier@logerais.com) when no
override is defined.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-11 15:23:50 +02:00
Xavier Logerais db34347d55 feat: (starship) Improve zsh prompt 2026-09-11 15:07:38 +02:00
xavier 08dd7060b6 feat: Improve update script 2026-09-10 23:03:26 +02:00
xavier 2500668363 feat: Add an update script to update all packages/tools/config with one command 2026-09-10 22:43:04 +02:00
xavier 55af3f3539 Merge pull request 'feat(mise): Generate toolbox conf.d files dynamically from tools.yaml' (#1) from feat/mise-dynamic-toolboxes into dev
Reviewed-on: #1
2026-08-31 00:52:24 +02:00
xavier fafcf283a8 feat(lazygit): Update config to follow new syntax 2026-08-31 00:51:38 +02:00
xavierandClaude Sonnet 5 1c817a92a6 feat(mise): Add toolbox name header in generated conf.d files
Addresses PR feedback: each conf.d/<toolbox>.toml now starts with a
"# Toolbox: <name>" comment, matching the previous inline config.toml
layout.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GA4dAzARMnLz1G9AmQkYYn
2026-08-31 00:48:13 +02:00
xavierandClaude Sonnet 5 17e579e16c 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
2026-08-31 00:40:40 +02:00
xavier 3a8dca1fcb feat(chezmoi/mise): Add opencode AI agent to AI toolbox 2026-08-30 23:02:51 +02:00
xavier 5008a6c23d feat(mise) : Upgrade tea tool 2026-08-30 23:02:12 +02:00
xavier ca9629abf3 feat(external): Manage submodules for bash config repo 2026-08-22 15:49:43 +02:00
15 changed files with 432 additions and 124 deletions

No files matched your search

+13 -1
View File
@@ -10,6 +10,8 @@ hosts:
xavier: xavier:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-gitea
- dev-tools - dev-tools
- dev-languages - dev-languages
- ai - ai
@@ -28,8 +30,11 @@ hosts:
ubuntu: ubuntu:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-gitea
- dev-tools - dev-tools
- dev-languages - dev-languages
- devops
- ai - ai
tools: tools:
- pipx:vit - pipx:vit
@@ -40,10 +45,13 @@ hosts:
root: root:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-tools - dev-tools
xavier: xavier:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-gitea
- dev-tools - dev-tools
- dev-languages - dev-languages
- devops - devops
@@ -51,7 +59,6 @@ hosts:
tools: tools:
- sops - sops
- age - age
- cargo:rage
configs: {} configs: {}
# Termux (application de terminal pour android) # Termux (application de terminal pour android)
termux-debian: termux-debian:
@@ -61,10 +68,14 @@ hosts:
root: root:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-tools - dev-tools
xavier: xavier:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-github
- dev-gitea
- dev-tools - dev-tools
termux-ubuntu: termux-ubuntu:
packages: packages:
@@ -77,4 +88,5 @@ hosts:
xavier: xavier:
toolboxes: toolboxes:
- terminal - terminal
- dev-git
- dev-tools - dev-tools
+8 -2
View File
@@ -21,12 +21,17 @@ tools:
- jq - jq
- yq - yq
- shellcheck - shellcheck
- lazygit
- delta - delta
dev-git:
- lazygit
dev-github:
- gh - gh
dev-gitlab:
- glab
dev-gitea:
- tea: - tea:
url: "https://gitea.com/gitea/tea/releases/download/v{{ version }}/tea-{{ version }}-{{ os() }}-{{ arch(x64='amd64') }}.xz" url: "https://gitea.com/gitea/tea/releases/download/v{{ version }}/tea-{{ version }}-{{ os() }}-{{ arch(x64='amd64') }}.xz"
version: "0.14.2" version: "0.15.1"
dev-languages: dev-languages:
- python - python
- uv - uv
@@ -55,6 +60,7 @@ tools:
- gemini-cli - gemini-cli
- codex - codex
- copilot - copilot
- opencode
# # Password managers # # Password managers
# # vault = "latest" # # vault = "latest"
+6
View File
@@ -4,6 +4,12 @@
".config/bash": ".config/bash":
type: git-repo type: git-repo
url: https://gitea.cloud.logerais.com/xavier/config-bash.git url: https://gitea.cloud.logerais.com/xavier/config-bash.git
clone:
args:
- --recurse-submodules
pull:
args:
- --recurse-submodules
refreshPeriod: 24h # Vérifie toutes les 24h refreshPeriod: 24h # Vérifie toutes les 24h
##### [ VIM ] ##### ##### [ VIM ] #####
+17
View File
@@ -0,0 +1,17 @@
{{/* .chezmoitemplates/mise-toolbox-conf */}}
{{/* Expects data: (merge (dict "toolboxName" "<name>") .) */}}
{{- $toolboxName := .toolboxName -}}
{{ includeTemplate "chezmoi-managed-header" . }}
# Toolbox: {{ $toolboxName }}
[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 }}
+6 -24
View File
@@ -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 }}
+13
View File
@@ -46,6 +46,19 @@ shell-integration-features = sudo
gtk-titlebar-hide-when-maximized = true gtk-titlebar-hide-when-maximized = true
maximize maximize
# Ouvre les nouvelles fenêtres avec un répertoire de travail dans $HOME
window-inherit-working-directory = false
# Ouvre les nouveaux onglets avec un répertoire de travail dans $HOME
tab-inherit-working-directory = false
# mais les nouveaux splits dans le répertoire courant
split-inherit-working-directory = true
# Permet d'ouvrir un nouvel onglet en conservant le répertoire de travail courant
# keybind = shift+alt+t=new_tab:current
keybind = ctrl+b>n=new_window
keybind = ctrl+b>t=new_tab
keybind = ctrl+b>z=toggle_split_zoom
keybind = ctrl+b>`=toggle_quick_terminal
# Systemd and D-Bus Integration # Systemd and D-Bus Integration
quit-after-last-window-closed = true quit-after-last-window-closed = true
quit-after-last-window-closed-delay = 5m quit-after-last-window-closed-delay = 5m
-47
View File
@@ -1,47 +0,0 @@
[core]
excludesfile = ~/.config/git/ignore
attributesfile = ~/.config/git/attributes
pager = delta
[user]
name = Xavier Logerais
email = xavier@logerais.com
[credential]
helper = cache
[credential "https://gitea.logerais.com"]
helper = cache
helper = !tea login helper
[credential "https://gitea.cloud.logerais.com"]
helper = cache
helper = !tea login helper
[init]
defaultBranch = main
[rerere]
enabled = 1
[merge]
conflictstyle = diff3
[page]
diff = delta
show = delta
log = delta
blame = delta
reflog = delta
[delta]
navigate = true
side-by-side = true
dark = true
syntax-theme = Coldark-Dark
[interactive]
diffFilter = delta --color-only
[alias]
tree = !git ls-files | tree --fromfile -C
+70
View File
@@ -0,0 +1,70 @@
{{- $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 -}}
{{- $gitConfig := dict -}}
{{- if and $currentUser (hasKey $currentUser "configs") -}}
{{- if hasKey $currentUser.configs "git" -}}
{{- $gitConfig = $currentUser.configs.git -}}
{{- end -}}
{{- end -}}
{{- $gitName := "Xavier Logerais" -}}
{{- $gitEmail := "xavier@logerais.com" -}}
{{- if hasKey $gitConfig "name" -}}
{{- $gitName = $gitConfig.name -}}
{{- end -}}
{{- if hasKey $gitConfig "email" -}}
{{- $gitEmail = $gitConfig.email -}}
{{- end -}}
[core]
excludesfile = ~/.config/git/ignore
attributesfile = ~/.config/git/attributes
pager = delta
[user]
name = {{ $gitName }}
email = {{ $gitEmail }}
[credential]
helper = cache
[credential "https://gitea.logerais.com"]
helper = cache
helper = !tea login helper
[credential "https://gitea.cloud.logerais.com"]
helper = cache
helper = !tea login helper
[init]
defaultBranch = main
[rerere]
enabled = 1
[merge]
conflictstyle = diff3
[page]
diff = delta
show = delta
log = delta
blame = delta
reflog = delta
[delta]
navigate = true
side-by-side = true
dark = true
syntax-theme = Coldark-Dark
[interactive]
diffFilter = delta --color-only
[alias]
tree = !git ls-files | tree --fromfile -C
+2 -2
View File
@@ -11,7 +11,7 @@ gui:
- bold - bold
nerdFontsVersion: "3" nerdFontsVersion: "3"
git: git:
pagers: diffRenderers:
- colorArg: always - colorArg: always
pager: delta --paging=never command: delta --paging=never
parseEmoji: true parseEmoji: true
+2 -1
View File
@@ -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
+23 -33
View File
@@ -1,14 +1,15 @@
"$schema" = 'https://starship.rs/config-schema.json' "$schema" = 'https://starship.rs/config-schema.json'
format = """ format = """
[ ](fg:#769ff0)\
$directory\ $directory\
[](fg:#769ff0 bg:#394260)\ [](bg:#394260 fg:#769ff0)\
$git_branch\ $git_branch\
$git_commit\ $git_commit\
$git_status\ $git_status\
$git_state\ $git_state\
$direnv\
$mise\ $mise\
$direnv\
[](fg:#394260 bg:#212736)\ [](fg:#394260 bg:#212736)\
$rust\ $rust\
$golang\ $golang\
@@ -22,18 +23,7 @@ $terraform\
""" """
right_format = """ right_format = """
[](fg:#a3aed2)\ [](fg:#a3aed2)$time[](fg:#a3aed2)\
$shell\
$username\
[](fg:#394260 bg:#a3aed2)\
$os\
[](bg:#394260 fg:#a3aed2)\
$container\
$hostname\
[ ](fg:#394260)\
[](fg:#a3aed2)\
$time\
[](fg:#a3aed2)\
""" """
[hostname] [hostname]
@@ -52,7 +42,7 @@ format = '[ $symbol $name ]($style)'
[os] [os]
disabled = false disabled = false
style = "bg:#394260 fg:#a3aed2" style = "bg:#394260 fg:#a3aed2"
format = "[ $symbol ]($style)" format = "[ $symbol $name ]($style)"
[username] [username]
show_always = true show_always = true
@@ -62,42 +52,41 @@ format = '[  $user ]($style)'
[shell] [shell]
disabled = false disabled = false
bash_indicator = ' ' bash_indicator = ' bash'
zsh_indicator = ' ' zsh_indicator = ' zsh'
fish_indicator = '󰈺 ' fish_indicator = '󰈺 fish'
powershell_indicator = '_' powershell_indicator = '_ Powershell'
unknown_indicator = 'unknown shell' unknown_indicator = 'unknown shell'
format = '[ $indicator ]($style)'
style = "bg:#a3aed2 fg:#212736" style = "bg:#a3aed2 fg:#212736"
format = '[ $indicator[](fg:#394260 bg:#a3aed2)]($style)'
[sudo] [sudo]
disabled = false disabled = false
[directory] [directory]
disabled = false disabled = false
style = "fg:#e3e5e5 bg:#769ff0"
format = "[  $path ]($style)"
truncation_length = 5 truncation_length = 5
truncation_symbol = "…/" truncation_symbol = "…/"
truncate_to_repo = false truncate_to_repo = false
style = "fg:#e3e5e5 bg:#769ff0"
format = "[  $path ]($style)"
[git_branch] [git_branch]
disabled = false disabled = false
symbol = "" symbol = ""
style = "fg:#769ff0 bg:#394260" style = "fg:#769ff0 bg:#394260 bold"
format = '[ $symbol $branch ]($style)' format = '[ $symbol $branch ]($style)'
[git_commit] [git_commit]
disabled = false disabled = false
style = "fg:#769ff0 bg:#394260" only_detached = true
tag_disabled = false tag_disabled = false
tag_symbol = '  ' tag_symbol = '  '
only_detached = true style = "fg:#769ff0 bg:#394260"
format = '[ $hash $tag ]($style)' format = '[ $hash $tag ]($style)'
[git_status] [git_status]
disabled = false disabled = false
style = "fg:#769ff0 bg:#394260"
ahead = '⇡${count}' ahead = '⇡${count}'
behind = '⇣${count}' behind = '⇣${count}'
diverged = '[⇕⇡${ahead_count}⇣${behind_count}](fg:#FFA500 bg:#394260)' diverged = '[⇕⇡${ahead_count}⇣${behind_count}](fg:#FFA500 bg:#394260)'
@@ -109,18 +98,21 @@ renamed = '[$count 󱀱 ](fg:#87CEEB bg:#394260)'
untracked = '[$count󱀶 ](fg:#CCCCCC bg:#394260)' untracked = '[$count󱀶 ](fg:#CCCCCC bg:#394260)'
conflicted = '[$count󱪘 ](fg:#FF0000 bg:#394260)' conflicted = '[$count󱪘 ](fg:#FF0000 bg:#394260)'
stashed = '[$count ](fg:#FFA500 bg:#394260)' # 󱁺  stashed = '[$count ](fg:#FFA500 bg:#394260)' # 󱁺 
style = "fg:#769ff0 bg:#394260"
format = '[$all_status$ahead_behind ]($style)' format = '[$all_status$ahead_behind ]($style)'
[git_state] [git_state]
disabled = false disabled = false
style = "fg:#769ff0 bg:#394260" style = "fg:#769ff0 bg:#394260"
format = ' [$state( $progress_current/$progress_total)]($style) ' format = '[ $state ($progress_current/$progress_total)]($style)'
[direnv] [direnv]
disabled = false disabled = false
[mise] [mise]
disabled = true disabled = true
style = "bg:#212736 fg:white"
format = '[$symbol$health]($style)'
[nodejs] [nodejs]
symbol = "" symbol = ""
@@ -173,16 +165,14 @@ format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $worksp
[time] [time]
disabled = false disabled = false
time_format = '%T  󰃶 %A %e %B %Y'
style = "fg:#212736 bg:#a3aed2" style = "fg:#212736 bg:#a3aed2"
format = '[  $time ]($style)' format = '[  $time ]($style)'
time_format = '%T  󰃶 %A %e %B %Y'
# format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)'
[character] [character]
# success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) '
# error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) '
success_symbol = '[ [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' vimcmd_symbol = '[[](fg:#007f00)  ViM mode [](fg:#007f00)](bg:#007f00) '
error_symbol = '[ 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) '
[os.symbols] [os.symbols]
Windows = "󰍲" Windows = "󰍲"
+5 -8
View File
@@ -25,12 +25,10 @@ $docker_context\
$kubernetes\ $kubernetes\
$terraform\ $terraform\
[](fg:#212736)\ [](fg:#212736)\
\n$time\ \n$character"""
$character"""
right_format = """ right_format = """
[](fg:#212736 bg:#1d2230)\ [](fg:#a3aed2)$time[](fg:#a3aed2)\
\n$time\
""" """
[hostname] [hostname]
@@ -165,13 +163,12 @@ format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $worksp
[time] [time]
disabled = false disabled = false
time_format = "%R" # Hour:Minute Format time_format = "%R" # Hour:Minute Format
style = "fg:#a3aed2" style = "fg:#212736 bg:#a3aed2"
format = '[  $time ]($style)' format = '[  $time ]($style)'
# format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)'
[character] [character]
success_symbol = '[❯](bold green) ' success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) '
error_symbol = '[󰚽 ❯](bold red) ' error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) '
[os.symbols] [os.symbols]
Windows = "󰍲" Windows = "󰍲"
+215
View File
@@ -0,0 +1,215 @@
#!/usr/bin/env bash
set -u
FAILED=0
STATUS_APT="not_detected"
STATUS_BREW="not_detected"
STATUS_CHEZMOI="not_detected"
STATUS_MISE="not_detected"
STATUS_NEOVIM="not_detected"
# Couleurs
BLUE='\e[00;34;49m'
GRAY='\e[02;37;49m'
RESET='\e[39;49;00m'
# Affiche un message stylisé sur la sortie standard
echo_bold() {
printf '\e[1m%s\e[0m\n' "$*"
}
# Affiche un message informatif stylisé sur la sortie d'erreur
echo_info() {
printf >&2 "\n${BLUE}󰋼 %s${RESET}\n\n" "$*"
}
echo_success() {
printf >&2 "\e[00;01;32;49m %s${RESET}\n" "$*"
}
echo_failed() {
printf >&2 "\e[00;01;31;49m✖ %s${RESET}\n" "$*"
}
echo_skipped() {
printf >&2 "${GRAY}󰜺 %s${RESET}\n" "$*"
}
run() {
local section="$1"
local name="$2"
shift 2
local start=$SECONDS
printf '⏳ [%s] %s...' "$section" "$name"
if "$@"; then
printf '\r\033[K'
echo_success "[$section] $name ($((SECONDS - start))s)"
else
printf '\r\033[K'
echo_failed "[$section] $name ($((SECONDS - start))s)"
# Marque la section comme échouée
eval "STATUS_${section^^}=failed"
FAILED=1
return 1
fi
}
echo
echo_bold "🚀 Mise à jour quotidienne"
echo
# ----------------------------------------------------------------------
# Debian / Ubuntu
# ----------------------------------------------------------------------
if [[ -f /etc/os-release ]]; then
. /etc/os-release
if [[ "$ID" == "debian" || "$ID" == "ubuntu" ]]; then
STATUS_APT="success"
if ((EUID == 0)); then
APT=(apt)
else
APT=(sudo apt)
fi
echo_info "APT"
run APT "Mise à jour des paquets" \
"${APT[@]}" update || true
run APT "Mise à niveau des paquets" \
"${APT[@]}" upgrade -y || true
run APT "Suppression des paquets inutiles" \
"${APT[@]}" autoremove -y || true
run APT "Nettoyage du cache" \
"${APT[@]}" autoclean || true
fi
fi
# ----------------------------------------------------------------------
# Homebrew
# ----------------------------------------------------------------------
if command -v brew >/dev/null 2>&1; then
STATUS_BREW="success"
echo_info "Brew"
run BREW "Mise à jour" \
brew update || true
run BREW "Mise à niveau des paquets" \
brew upgrade || true
fi
# ----------------------------------------------------------------------
# chezmoi
# ----------------------------------------------------------------------
if command -v chezmoi >/dev/null 2>&1; then
STATUS_CHEZMOI="success"
echo_info "chezmoi"
run CHEZMOI "Récupération de la configuration" \
chezmoi git pull || true
run CHEZMOI "Application de la configuration" \
chezmoi apply -v || true
fi
# ----------------------------------------------------------------------
# mise
# ----------------------------------------------------------------------
if command -v mise >/dev/null 2>&1; then
STATUS_MISE="success"
echo_info "mise"
run MISE "Mise à jour de mise" \
mise self-update -y || true
run MISE "Mise à jour des outils" \
mise up || true
fi
# ----------------------------------------------------------------------
# Neovim / AstroNvim
# ----------------------------------------------------------------------
if command -v nvim >/dev/null 2>&1; then
STATUS_NEOVIM="success"
echo_info "Neovim / AstroNvim"
run NEOVIM "Mise à jour d'AstroNvim" \
nvim --headless \
-c 'autocmd User AstroUpdateCompleted quitall' \
-c 'AstroUpdate' \
2>&1 || true
fi
# ----------------------------------------------------------------------
# Récapitulatif
# ----------------------------------------------------------------------
echo
echo_info "Récapitulatif"
echo
echo -n " ► "
case "$STATUS_APT" in
success) echo_success "APT : réussi" ;;
failed) echo_failed "APT : échoué" ;;
not_detected) echo_skipped "APT : non détecté" ;;
esac
echo -n " ► "
case "$STATUS_BREW" in
success) echo_success "Brew : réussi" ;;
failed) echo_failed "Brew : échoué" ;;
not_detected) echo_skipped "Brew : non détecté" ;;
esac
echo -n " ► "
case "$STATUS_CHEZMOI" in
success) echo_success "chezmoi : réussi" ;;
failed) echo_failed "chezmoi : échoué" ;;
not_detected) echo_skipped "chezmoi : non détecté" ;;
esac
echo -n " ► "
case "$STATUS_MISE" in
success) echo_success "mise : réussi" ;;
failed) echo_failed "mise : échoué" ;;
not_detected) echo_skipped "mise : non détecté" ;;
esac
echo -n " ► "
case "$STATUS_NEOVIM" in
success) echo_success "Neovim : réussi" ;;
failed) echo_failed "Neovim : échoué" ;;
not_detected) echo_skipped "Neovim : non détecté" ;;
esac
echo
if ((FAILED)); then
echo_failed "Mise à jour terminée avec des erreurs"
exit 1
else
echo_success "Toutes les mises à jour sont terminées"
exit 0
fi
+1 -1
View File
@@ -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
+51 -5
View File
@@ -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