From 5076e788194bbf924f518cdc3ebd7a6d448d16b5 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Wed, 15 Jul 2026 15:54:58 +0200 Subject: [PATCH 01/24] feat: Add TODO.md --- .chezmoiignore | 1 + TODO.md | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 TODO.md diff --git a/.chezmoiignore b/.chezmoiignore index b43bf86..4dd3757 100644 --- a/.chezmoiignore +++ b/.chezmoiignore @@ -1 +1,2 @@ README.md +TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..edc6df0 --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +# TODO + +- [ ] Review encryption workflow to manage git credentials (tea login helpers) +- [ ] Manage basic GPG Config (+ import of personnal public key) +- [ ] Integrate files from repo https://gitea.cloud.logerais.com/xavier/Ubuntu (with conditions) +- [ ] Manage fonts (See https://gitea.cloud.logerais.com/xavier/config-bootstrap/src/branch/master/fonts.bash) -- 2.43.0 From 24013acd34e3aa26bf69880f70f417c0c386e49a Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Wed, 15 Jul 2026 15:55:21 +0200 Subject: [PATCH 02/24] test: Prepare for cloning password store --- .chezmoiexternal.yaml.tmpl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.chezmoiexternal.yaml.tmpl b/.chezmoiexternal.yaml.tmpl index 1e40d66..6cb6dca 100644 --- a/.chezmoiexternal.yaml.tmpl +++ b/.chezmoiexternal.yaml.tmpl @@ -20,4 +20,10 @@ url: https://gitea.cloud.logerais.com/xavier/config-astronvim.git refreshPeriod: 24h # Vérifie toutes les 24h +##### [ PASS ] ##### + +# ".password-store": +# type: git-repo +# url: https://gitea.cloud.logerais.com/xavier/pass.git +# refreshPeriod: 24h # Vérifie toutes les 24h -- 2.43.0 From 990cd6b50612266c607fb858169f03348dd9d65c Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Wed, 22 Jul 2026 23:38:41 +0200 Subject: [PATCH 03/24] feat(zsh): Add support for zsh --- dot_zshrc | 25 +++ private_dot_config/starship-zsh.toml | 245 +++++++++++++++++++++++++++ private_dot_config/zsh/rc.d/fzf | 71 ++++++++ 3 files changed, 341 insertions(+) create mode 100644 dot_zshrc create mode 100644 private_dot_config/starship-zsh.toml create mode 100644 private_dot_config/zsh/rc.d/fzf diff --git a/dot_zshrc b/dot_zshrc new file mode 100644 index 0000000..6a1aaa7 --- /dev/null +++ b/dot_zshrc @@ -0,0 +1,25 @@ +# Set PATH +export PATH="${HOME}/.local/bin:${PATH}" + +# Activate mise +eval "$(mise activate zsh)" + +# Activate starship +export STARSHIP_CONFIG="${HOME}/.config/starship-zsh.toml" +eval "$(starship init zsh)" + +# Add some usefull tools +eval "$(zoxide init zsh)" + +# Add some usefull aliases +source "${HOME}/.config/bash/aliases.d/generic" +source "${HOME}/.config/bash/aliases.d/security" +source "${HOME}/.config/bash/aliases.d/vim" +source "${HOME}/.config/bash/aliases.d/git" +source "${HOME}/.config/bash/aliases.d/kubectl" +source "${HOME}/.config/bash/aliases.d/lsd" +source "${HOME}/.config/bash/aliases.d/bat" +source "${HOME}/.config/bash/aliases.d/lazygit" + +# Define prefered apps +source "${HOME}/.config/bash/rc.after.d/apps" diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml new file mode 100644 index 0000000..2654621 --- /dev/null +++ b/private_dot_config/starship-zsh.toml @@ -0,0 +1,245 @@ +"$schema" = 'https://starship.rs/config-schema.json' + +format = """ +$directory\ +[](fg:#769ff0 bg:#394260)\ +$git_branch\ +$git_commit\ +$git_status\ +$direnv\ +$mise\ +[](fg:#394260 bg:#212736)\ +$golang\ +$rust\ +$python\ +$nodejs\ +$docker_context\ +$kubernetes\ +$terraform\ +[](fg:#212736)\ +$character""" + +right_format = """ +[](fg:#a3aed2)\ +$time\ +[ ](fg:#a3aed2)\ +[](fg:#a3aed2)\ +$shell\ +$username\ +[](fg:#394260 bg:#a3aed2)\ +$os\ +[](bg:#394260 fg:#a3aed2)\ +$container\ +$hostname\ +""" + +[hostname] +disabled = false +ssh_only = false +style = "bg:#394260 fg:#a3aed2" +format = '[$ssh_symbol]($style)[  $hostname]($style)' +# detect_env_vars = ['!TMUX', 'SSH_CONNECTION'] +# trim_at = '.companyname.com' +# aliases = { "Max's MacBook Pro" = "home" } + +[container] +style = "bg:#394260 fg:#a3aed2" +format = '[ $symbol $name ]($style)' + +[os] +disabled = false +style = "bg:#394260 fg:#a3aed2" +format = "[ $symbol ]($style)" + +[username] +show_always = true +style_user = "bg:#a3aed2 fg:#212736" +style_root = "bg:#a3aed2 fg:#990000 bold" +format = '[  $user ]($style)' + +[shell] +disabled = false +bash_indicator = ' ' +zsh_indicator = ' ' +fish_indicator = '󰈺 ' +powershell_indicator = '_' +unknown_indicator = 'unknown shell' +style = "bg:#a3aed2 fg:#212736" +format = '[ $indicator[](fg:#394260 bg:#a3aed2)]($style)' + +[sudo] +disabled = false + +[directory] +disabled = false +style = "fg:#e3e5e5 bg:#769ff0" +format = "[  $path ]($style)" +truncation_length = 5 +truncation_symbol = "…/" +truncate_to_repo = false + +[git_branch] +disabled = false +symbol = "" +style = "fg:#769ff0 bg:#394260" +format = '[ $symbol $branch ]($style)' + +[git_commit] +disabled = false +tag_disabled = false +tag_symbol = '  ' +only_detached = true +style = "fg:#769ff0 bg:#394260" +format = '[ $hash $tag ]($style)' + +[git_status] +disabled = false +style = "fg:#769ff0 bg:#394260" +format = '[$all_status$ahead_behind]($style)' +ahead = '⇡${count}' +behind = '⇣${count}' +diverged = '⇕⇡${ahead_count}⇣${behind_count}' +up_to_date = '' +modified = '[$count󰷉 ](fg:yellow bg:#394260)' +staged = '[$count ](fg:green bg:#394260)' +deleted = '[$count ](fg:red bg:#394260)' +renamed = '[$count󱀱 ](fg:blue bg:#394260)' +untracked = '[$count󱀶 ](fg:gray bg:#394260)' +conflicted = '[$count󱪘 ](fg:red bg:#394260)' +stashed = '$count📦' # 󱁺  + +[direnv] +disabled = false + +[mise] +disabled = true + +[nodejs] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[bun] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[rust] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[golang] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[php] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[python] +symbol = "" +style = "bg:#212736" +format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' + +[docker_context] +disabled = false +only_with_files = false +symbol = " " +style = "fg:#2560ff bg:#ffffff" +format = '[[](fg:#212736 bg:#ffffff) $symbol $context [](fg:#ffffff bg:#212736)]($style)' + +[kubernetes] +disabled = false +symbol = " " +style = "bg:#316ce6 fg:#a3aed2" +format = '[[](fg:#212736 bg:#316ce6) $symbol $context (\($namespace\))[](fg:#316ce6 bg:#212736)]($style)' + +[terraform] +disabled = false +symbol = " " +style = "bg:#1b1028 fg:#7b42bc" +format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $workspace [](fg:#1b1028 bg:#212736)]($style)' + +[time] +disabled = false +time_format = "%R" # Hour:Minute Format +style = "fg:#ffffff bg:#a3aed2" +format = '[  $time ]($style)' +# format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' + +[character] +success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' +error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' + +[os.symbols] +Windows = "󰍲" +Ubuntu = "󰕈" +SUSE = "" +Raspbian = "󰐿" +Mint = "󰣭" +Macos = "󰀵" +Manjaro = "" +Linux = "󰌽" +Gentoo = "󰣨" +Fedora = "󰣛" +Alpine = "" +Amazon = "" +Android = "" +AOSC = "" +Arch = "󰣇" +Artix = "󰣇" +EndeavourOS = "" +CentOS = "" +Debian = "󰣚" +Redhat = "󱄛" +RedHatEnterprise = "󱄛" +Pop = "" + +[directory.substitutions] +"Documents" = "󰈙 " +"Pictures" = " " +"Images" = " " +"Music" = " " +"Musique" = " " +"Movies" = "󰎁 " +"Films" = "󰎁 " +"Downloads" = " " +"Téléchargements" = " " +"Developer" = "󰲋 " + +# Nerdfont symbols +# 󰚽 󰗖 󰗠 󰅙 󰀨  󰅚 +#   ✓ ✗ ✔ ✘ +# ❬ ❭ ❮ ❯ ❰ ❱ ❲ ❳ ❴ ❵ +# ➛ ➜ ➝ ➞ ➢ ➣ ➤ + +# Powerline colorsheme (from powerline source file colorsheme.py) +# 0x000000, 0xc00000, 0x008000, 0x804000, 0x0000c0, 0xc000c0, 0x008080, 0xc0c0c0, 0x808080, 0xff6060, # 0 +# 0x00ff00, 0xffff00, 0x8080ff, 0xff40ff, 0x00ffff, 0xffffff, 0x000000, 0x00005f, 0x000087, 0x0000af, # 1 +# 0x0000d7, 0x0000ff, 0x005f00, 0x005f5f, 0x005f87, 0x005faf, 0x005fd7, 0x005fff, 0x008700, 0x00875f, # 2 +# 0x008787, 0x0087af, 0x0087d7, 0x0087ff, 0x00af00, 0x00af5f, 0x00af87, 0x00afaf, 0x00afd7, 0x00afff, # 3 +# 0x00d700, 0x00d75f, 0x00d787, 0x00d7af, 0x00d7d7, 0x00d7ff, 0x00ff00, 0x00ff5f, 0x00ff87, 0x00ffaf, # 4 +# 0x00ffd7, 0x00ffff, 0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, 0x5f00d7, 0x5f00ff, 0x5f5f00, 0x5f5f5f, # 5 +# 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff, 0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, 0x5f87d7, 0x5f87ff, # 6 +# 0x5faf00, 0x5faf5f, 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff, 0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, # 7 +# 0x5fd7d7, 0x5fd7ff, 0x5fff00, 0x5fff5f, 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff, 0x870000, 0x87005f, # 8 +# 0x870087, 0x8700af, 0x8700d7, 0x8700ff, 0x875f00, 0x875f5f, 0x875f87, 0x875faf, 0x875fd7, 0x875fff, # 9 +# 0x878700, 0x87875f, 0x878787, 0x8787af, 0x8787d7, 0x8787ff, 0x87af00, 0x87af5f, 0x87af87, 0x87afaf, # 10 +# 0x87afd7, 0x87afff, 0x87d700, 0x87d75f, 0x87d787, 0x87d7af, 0x87d7d7, 0x87d7ff, 0x87ff00, 0x87ff5f, # 11 +# 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff, 0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, 0xaf00d7, 0xaf00ff, # 12 +# 0xaf5f00, 0xaf5f5f, 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff, 0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, # 13 +# 0xaf87d7, 0xaf87ff, 0xafaf00, 0xafaf5f, 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff, 0xafd700, 0xafd75f, # 14 +# 0xafd787, 0xafd7af, 0xafd7d7, 0xafd7ff, 0xafff00, 0xafff5f, 0xafff87, 0xafffaf, 0xafffd7, 0xafffff, # 15 +# 0xd70000, 0xd7005f, 0xd70087, 0xd700af, 0xd700d7, 0xd700ff, 0xd75f00, 0xd75f5f, 0xd75f87, 0xd75faf, # 16 +# 0xd75fd7, 0xd75fff, 0xd78700, 0xd7875f, 0xd78787, 0xd787af, 0xd787d7, 0xd787ff, 0xd7af00, 0xd7af5f, # 17 +# 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff, 0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, 0xd7d7d7, 0xd7d7ff, # 18 +# 0xd7ff00, 0xd7ff5f, 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff, 0xff0000, 0xff005f, 0xff0087, 0xff00af, # 19 +# 0xff00d7, 0xff00ff, 0xff5f00, 0xff5f5f, 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff, 0xff8700, 0xff875f, # 20 +# 0xff8787, 0xff87af, 0xff87d7, 0xff87ff, 0xffaf00, 0xffaf5f, 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff, # 21 +# 0xffd700, 0xffd75f, 0xffd787, 0xffd7af, 0xffd7d7, 0xffd7ff, 0xffff00, 0xffff5f, 0xffff87, 0xffffaf, # 22 +# 0xffffd7, 0xffffff, 0x080808, 0x121212, 0x1c1c1c, 0x262626, 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e, # 23 +# 0x585858, 0x626262, 0x6c6c6c, 0x767676, 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e, 0xa8a8a8, 0xb2b2b2, # 24 +# 0xbcbcbc, 0xc6c6c6, 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee # 25 diff --git a/private_dot_config/zsh/rc.d/fzf b/private_dot_config/zsh/rc.d/fzf new file mode 100644 index 0000000..3022b3b --- /dev/null +++ b/private_dot_config/zsh/rc.d/fzf @@ -0,0 +1,71 @@ +#!/bin/bash + +if (command -v fzf &>/dev/null); then + + # Shell integration + eval "$(fzf --zsh)" + + # Options par défaut + FZF_DEFAULT_OPTS="\ + --height 60% + --border rounded + --layout reverse + --highlight-line \ + --info=inline-right \ + --ansi \ + " + export FZF_DEFAULT_OPTS + + # Navigation vers un répertoire + FZF_ALT_C_OPTS="$( + cat <<'EOF' + --prompt '󰥨 ' + --pointer ❯ + --marker ✔ +EOF + )" + export FZF_ALT_C_OPTS + + # Selection de fichiers + FZF_CTRL_T_OPTS="$( + cat <<'EOF' + --prompt '󰈞 ' + --pointer ❯ + --marker ✔ + --preview="bat --color=always --style=-header {}" +EOF + )" + export FZF_CTRL_T_OPTS + + # Navigation dans l'historique + FZF_CTRL_R_OPTS="$( + cat <<'EOF' + --prompt ' ' + --pointer ❯ + --marker ✔ +EOF + )" + export FZF_CTRL_R_OPTS + + # Theme tokyonight + FZF_DEFAULT_OPTS="${FZF_DEFAULT_OPTS} \ + --color=bg+:#283457 \ + --color=bg:#16161e \ + --color=border:#27a1b9 \ + --color=fg:#c0caf5 \ + --color=gutter:#16161e \ + --color=header:#ff9e64 \ + --color=hl+:#2ac3de \ + --color=hl:#2ac3de \ + --color=info:#545c7e \ + --color=marker:#ff007c \ + --color=pointer:#ff007c \ + --color=prompt:#2ac3de \ + --color=query:#c0caf5:regular \ + --color=scrollbar:#27a1b9 \ + --color=separator:#ff9e64 \ + --color=spinner:#ff007c \ + " + export FZF_DEFAULT_OPTS + +fi -- 2.43.0 From 55b9a4e8c21c6c647a344458a0eb45abb16eb51a Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 3 Aug 2026 22:42:56 +0200 Subject: [PATCH 04/24] feat(starship): Cosmetic change for zsh prompt --- private_dot_config/starship-zsh.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index 2654621..0f09e75 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -30,14 +30,13 @@ $username\ $os\ [](bg:#394260 fg:#a3aed2)\ $container\ -$hostname\ -""" +$hostname""" [hostname] disabled = false ssh_only = false style = "bg:#394260 fg:#a3aed2" -format = '[$ssh_symbol]($style)[  $hostname]($style)' +format = '[$ssh_symbol]($style)[  $hostname ]($style)' # detect_env_vars = ['!TMUX', 'SSH_CONNECTION'] # trim_at = '.companyname.com' # aliases = { "Max's MacBook Pro" = "home" } -- 2.43.0 From 48d328ea276b2a5744a6a0749badff3239900052 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 3 Aug 2026 22:48:19 +0200 Subject: [PATCH 05/24] feat(starship): Fix symbol direction in zsh prompt --- private_dot_config/starship-zsh.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index 0f09e75..9bd0508 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -43,7 +43,7 @@ format = '[$ssh_symbol]($style)[  $hostname ]($style)' [container] style = "bg:#394260 fg:#a3aed2" -format = '[ $symbol $name ]($style)' +format = '[ $symbol $name ]($style)' [os] disabled = false -- 2.43.0 From e57f78c957157b06259f9adb89afadd3fd956180 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Fri, 24 Jul 2026 19:44:27 +0200 Subject: [PATCH 06/24] feat(starship): Improve configuration for starship.rs --- private_dot_config/starship-zsh.toml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index 9bd0508..b67db32 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -97,15 +97,15 @@ style = "fg:#769ff0 bg:#394260" format = '[$all_status$ahead_behind]($style)' ahead = '⇡${count}' behind = '⇣${count}' -diverged = '⇕⇡${ahead_count}⇣${behind_count}' +diverged = '[⇕⇡${ahead_count}⇣${behind_count}](fg:#FFA500 bg:#394260)' up_to_date = '' -modified = '[$count󰷉 ](fg:yellow bg:#394260)' -staged = '[$count ](fg:green bg:#394260)' -deleted = '[$count ](fg:red bg:#394260)' -renamed = '[$count󱀱 ](fg:blue bg:#394260)' -untracked = '[$count󱀶 ](fg:gray bg:#394260)' -conflicted = '[$count󱪘 ](fg:red bg:#394260)' -stashed = '$count📦' # 󱁺  +modified = '[$count󰷉 ](fg:#FFFF00 bg:#394260)' +staged = '[$count ](fg:#00D000 bg:#394260)' +deleted = '[$count ](fg:#FF0000 bg:#394260)' +renamed = '[$count󱀱 ](fg:#87CEEB bg:#394260)' +untracked = '[$count󱀶 ](fg:#CCCCCC bg:#394260)' +conflicted = '[$count󱪘 ](fg:#FF0000 bg:#394260)' +stashed = '[$count](fg:#FFA500 bg:#394260)' # 󱁺  [direnv] disabled = false -- 2.43.0 From 5d7933ac5a26c2f17b3da152879bc9787a108244 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Wed, 19 Aug 2026 21:31:51 +0200 Subject: [PATCH 07/24] feat(starship): Improve configuration for starship.rs prompt for zsh --- private_dot_config/starship-zsh.toml | 51 +++++++++++++++++----------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index b67db32..b855fad 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -6,23 +6,22 @@ $directory\ $git_branch\ $git_commit\ $git_status\ +$git_state\ $direnv\ $mise\ [](fg:#394260 bg:#212736)\ -$golang\ $rust\ +$golang\ $python\ $nodejs\ $docker_context\ $kubernetes\ $terraform\ [](fg:#212736)\ -$character""" +\n$character\ +""" right_format = """ -[](fg:#a3aed2)\ -$time\ -[ ](fg:#a3aed2)\ [](fg:#a3aed2)\ $shell\ $username\ @@ -30,7 +29,12 @@ $username\ $os\ [](bg:#394260 fg:#a3aed2)\ $container\ -$hostname""" +$hostname\ +[ ](fg:#394260)\ +[](fg:#a3aed2)\ +$time\ +[](fg:#a3aed2)\ +""" [hostname] disabled = false @@ -85,27 +89,32 @@ format = '[ $symbol $branch ]($style)' [git_commit] disabled = false +style = "fg:#769ff0 bg:#394260" tag_disabled = false tag_symbol = '  ' only_detached = true -style = "fg:#769ff0 bg:#394260" format = '[ $hash $tag ]($style)' [git_status] disabled = false style = "fg:#769ff0 bg:#394260" -format = '[$all_status$ahead_behind]($style)' ahead = '⇡${count}' behind = '⇣${count}' diverged = '[⇕⇡${ahead_count}⇣${behind_count}](fg:#FFA500 bg:#394260)' up_to_date = '' -modified = '[$count󰷉 ](fg:#FFFF00 bg:#394260)' -staged = '[$count ](fg:#00D000 bg:#394260)' -deleted = '[$count ](fg:#FF0000 bg:#394260)' -renamed = '[$count󱀱 ](fg:#87CEEB bg:#394260)' -untracked = '[$count󱀶 ](fg:#CCCCCC bg:#394260)' -conflicted = '[$count󱪘 ](fg:#FF0000 bg:#394260)' -stashed = '[$count](fg:#FFA500 bg:#394260)' # 󱁺  +modified = '[$count 󰷉 ](fg:#FFFF00 bg:#394260)' +staged = '[$count  ](fg:#00D000 bg:#394260)' +deleted = '[$count  ](fg:#FF0000 bg:#394260)' +renamed = '[$count 󱀱 ](fg:#87CEEB bg:#394260)' +untracked = '[$count 󱀶 ](fg:#CCCCCC bg:#394260)' +conflicted = '[$count 󱪘 ](fg:#FF0000 bg:#394260)' +stashed = '[$count ](fg:#FFA500 bg:#394260)' # 󱁺  +format = '[$all_status$ahead_behind ]($style)' + +[git_state] +disabled = false +style = "fg:#769ff0 bg:#394260" +format = ' [$state( $progress_current/$progress_total)]($style) ' [direnv] disabled = false @@ -164,14 +173,16 @@ format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $worksp [time] disabled = false -time_format = "%R" # Hour:Minute Format -style = "fg:#ffffff bg:#a3aed2" -format = '[  $time ]($style)' +style = "fg:#212736 bg:#a3aed2" +format = '[  $time ]($style)' +time_format = '%T  󰃶 %A %e %B %Y' # format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' [character] -success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' -error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' +# success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' +# error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' +success_symbol = '[  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' +error_symbol = '[ 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' [os.symbols] Windows = "󰍲" -- 2.43.0 From ca9629abf33434c28d69735d0917b726714f1517 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sat, 22 Aug 2026 15:49:43 +0200 Subject: [PATCH 08/24] feat(external): Manage submodules for bash config repo --- .chezmoiexternal.yaml.tmpl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.chezmoiexternal.yaml.tmpl b/.chezmoiexternal.yaml.tmpl index 6cb6dca..3e978f0 100644 --- a/.chezmoiexternal.yaml.tmpl +++ b/.chezmoiexternal.yaml.tmpl @@ -4,6 +4,12 @@ ".config/bash": type: git-repo 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 ##### [ VIM ] ##### -- 2.43.0 From 5008a6c23d93e847ac17f5b5f5acdcc2ab13217a Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sun, 30 Aug 2026 23:02:12 +0200 Subject: [PATCH 09/24] feat(mise) : Upgrade tea tool --- .chezmoidata/tools.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chezmoidata/tools.yaml b/.chezmoidata/tools.yaml index 01a3577..a521093 100644 --- a/.chezmoidata/tools.yaml +++ b/.chezmoidata/tools.yaml @@ -26,7 +26,7 @@ tools: - gh - tea: 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: - python - uv -- 2.43.0 From 3a8dca1fcb4725724ce5bb4e4b7c1b8ca61bbe78 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sun, 30 Aug 2026 23:02:51 +0200 Subject: [PATCH 10/24] feat(chezmoi/mise): Add opencode AI agent to AI toolbox --- .chezmoidata/tools.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.chezmoidata/tools.yaml b/.chezmoidata/tools.yaml index a521093..5c9db9a 100644 --- a/.chezmoidata/tools.yaml +++ b/.chezmoidata/tools.yaml @@ -55,6 +55,7 @@ tools: - gemini-cli - codex - copilot + - opencode # # Password managers # # vault = "latest" -- 2.43.0 From 17e579e16cacfc3c3588d1cbbc215798f60ddac7 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:40:40 +0200 Subject: [PATCH 11/24] 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 -- 2.43.0 From 1c817a92a6598e4ef2bc856b28476971475beca8 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:48:13 +0200 Subject: [PATCH 12/24] 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 }} -- 2.43.0 From fafcf283a82326323cca3d1acdbd074f08b9e7f3 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Mon, 31 Aug 2026 00:51:38 +0200 Subject: [PATCH 13/24] 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 -- 2.43.0 From 2500668363da354d19f0bd15b271cc4062960942 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Thu, 10 Sep 2026 22:43:04 +0200 Subject: [PATCH 14/24] feat: Add an update script to update all packages/tools/config with one command --- private_dot_local/bin/executable_update | 208 ++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 private_dot_local/bin/executable_update diff --git a/private_dot_local/bin/executable_update b/private_dot_local/bin/executable_update new file mode 100644 index 0000000..bd694e3 --- /dev/null +++ b/private_dot_local/bin/executable_update @@ -0,0 +1,208 @@ +#!/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 "${BLUE}󰋼 %s${RESET}\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" + +# ---------------------------------------------------------------------- +# 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" + +case "$STATUS_APT" in +success) echo_success "APT : réussi" ;; +failed) echo_failed "APT : échoué" ;; +not_detected) echo_skipped "APT : non détecté" ;; +esac + +case "$STATUS_BREW" in +success) echo_success "Brew : réussi" ;; +failed) echo_failed "Brew : échoué" ;; +not_detected) echo_skipped "Brew : non détecté" ;; +esac + +case "$STATUS_CHEZMOI" in +success) echo_success "chezmoi : réussi" ;; +failed) echo_failed "chezmoi : échoué" ;; +not_detected) echo_skipped "chezmoi : non détecté" ;; +esac + +case "$STATUS_MISE" in +success) echo_success "mise : réussi" ;; +failed) echo_failed "mise : échoué" ;; +not_detected) echo_skipped "mise : non détecté" ;; +esac + +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 -- 2.43.0 From 08dd7060b6c6554cd1d8730e41b9606c5d9de8bc Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Thu, 10 Sep 2026 23:03:26 +0200 Subject: [PATCH 15/24] feat: Improve update script --- private_dot_local/bin/executable_update | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/private_dot_local/bin/executable_update b/private_dot_local/bin/executable_update index bd694e3..c961aee 100644 --- a/private_dot_local/bin/executable_update +++ b/private_dot_local/bin/executable_update @@ -22,7 +22,7 @@ echo_bold() { # Affiche un message informatif stylisé sur la sortie d'erreur echo_info() { - printf >&2 "${BLUE}󰋼 %s${RESET}\n" "$*" + printf >&2 "\n${BLUE}󰋼 %s${RESET}\n\n" "$*" } echo_success() { @@ -63,6 +63,7 @@ run() { echo echo_bold "🚀 Mise à jour quotidienne" +echo # ---------------------------------------------------------------------- # Debian / Ubuntu @@ -166,31 +167,37 @@ fi 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é" ;; -- 2.43.0 From db34347d5542e3ec6fae6a291d0213b25afaefad Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Fri, 11 Sep 2026 15:07:38 +0200 Subject: [PATCH 16/24] feat: (starship) Improve zsh prompt --- private_dot_config/starship-zsh.toml | 70 ++++++++++++---------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index b855fad..3e9ca92 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -1,14 +1,15 @@ "$schema" = 'https://starship.rs/config-schema.json' format = """ +[ ](fg:#769ff0)\ $directory\ -[](fg:#769ff0 bg:#394260)\ +[](bg:#394260 fg:#769ff0)\ $git_branch\ $git_commit\ $git_status\ $git_state\ -$direnv\ $mise\ +$direnv\ [](fg:#394260 bg:#212736)\ $rust\ $golang\ @@ -22,18 +23,7 @@ $terraform\ """ right_format = """ -[](fg:#a3aed2)\ -$shell\ -$username\ -[](fg:#394260 bg:#a3aed2)\ -$os\ -[](bg:#394260 fg:#a3aed2)\ -$container\ -$hostname\ -[ ](fg:#394260)\ -[](fg:#a3aed2)\ -$time\ -[](fg:#a3aed2)\ +[](fg:#a3aed2)$time[](fg:#a3aed2)\ """ [hostname] @@ -52,7 +42,7 @@ format = '[ $symbol $name ]($style)' [os] disabled = false style = "bg:#394260 fg:#a3aed2" -format = "[ $symbol ]($style)" +format = "[ $symbol $name ]($style)" [username] show_always = true @@ -62,65 +52,67 @@ format = '[  $user ]($style)' [shell] disabled = false -bash_indicator = ' ' -zsh_indicator = ' ' -fish_indicator = '󰈺 ' -powershell_indicator = '_' +bash_indicator = ' bash' +zsh_indicator = ' zsh' +fish_indicator = '󰈺 fish' +powershell_indicator = '_ Powershell' unknown_indicator = 'unknown shell' +format = '[ $indicator ]($style)' style = "bg:#a3aed2 fg:#212736" -format = '[ $indicator[](fg:#394260 bg:#a3aed2)]($style)' [sudo] disabled = false [directory] disabled = false -style = "fg:#e3e5e5 bg:#769ff0" -format = "[  $path ]($style)" truncation_length = 5 truncation_symbol = "…/" truncate_to_repo = false +style = "fg:#e3e5e5 bg:#769ff0" +format = "[  $path ]($style)" [git_branch] disabled = false symbol = "" -style = "fg:#769ff0 bg:#394260" +style = "fg:#769ff0 bg:#394260 bold" format = '[ $symbol $branch ]($style)' [git_commit] disabled = false -style = "fg:#769ff0 bg:#394260" +only_detached = true tag_disabled = false tag_symbol = '  ' -only_detached = true +style = "fg:#769ff0 bg:#394260" format = '[ $hash $tag ]($style)' [git_status] disabled = false -style = "fg:#769ff0 bg:#394260" ahead = '⇡${count}' behind = '⇣${count}' diverged = '[⇕⇡${ahead_count}⇣${behind_count}](fg:#FFA500 bg:#394260)' up_to_date = '' -modified = '[$count 󰷉 ](fg:#FFFF00 bg:#394260)' -staged = '[$count  ](fg:#00D000 bg:#394260)' -deleted = '[$count  ](fg:#FF0000 bg:#394260)' -renamed = '[$count 󱀱 ](fg:#87CEEB bg:#394260)' -untracked = '[$count 󱀶 ](fg:#CCCCCC bg:#394260)' -conflicted = '[$count 󱪘 ](fg:#FF0000 bg:#394260)' -stashed = '[$count ](fg:#FFA500 bg:#394260)' # 󱁺  +modified = '[$count󰷉 ](fg:#FFFF00 bg:#394260)' +staged = '[$count ](fg:#00D000 bg:#394260)' +deleted = '[$count ](fg:#FF0000 bg:#394260)' +renamed = '[$count󱀱 ](fg:#87CEEB bg:#394260)' +untracked = '[$count󱀶 ](fg:#CCCCCC bg:#394260)' +conflicted = '[$count󱪘 ](fg:#FF0000 bg:#394260)' +stashed = '[$count ](fg:#FFA500 bg:#394260)' # 󱁺  +style = "fg:#769ff0 bg:#394260" format = '[$all_status$ahead_behind ]($style)' [git_state] disabled = false style = "fg:#769ff0 bg:#394260" -format = ' [$state( $progress_current/$progress_total)]($style) ' +format = '[ $state ($progress_current/$progress_total)]($style)' [direnv] disabled = false [mise] disabled = true +style = "bg:#212736 fg:white" +format = '[$symbol$health]($style)' [nodejs] symbol = "" @@ -161,7 +153,7 @@ format = '[[](fg:#212736 bg:#ffffff) $symbol $context [](fg:#ffffff bg:#21 [kubernetes] disabled = false -symbol = " " +symbol = "" style = "bg:#316ce6 fg:#a3aed2" format = '[[](fg:#212736 bg:#316ce6) $symbol $context (\($namespace\))[](fg:#316ce6 bg:#212736)]($style)' @@ -173,16 +165,14 @@ format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $worksp [time] disabled = false +time_format = '%T  󰃶 %A %e %B %Y' style = "fg:#212736 bg:#a3aed2" format = '[  $time ]($style)' -time_format = '%T  󰃶 %A %e %B %Y' # format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' [character] -# success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' -# error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' -success_symbol = '[  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' -error_symbol = '[ 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' +success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' +error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' [os.symbols] Windows = "󰍲" -- 2.43.0 From e17a18d7c5bf3d456b1ecd30d5b0f98dab79fee7 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Fri, 11 Sep 2026 15:23:50 +0200 Subject: [PATCH 17/24] 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> --- private_dot_config/git/config | 47 ---------------------- private_dot_config/git/config.tmpl | 64 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 47 deletions(-) delete mode 100644 private_dot_config/git/config create mode 100644 private_dot_config/git/config.tmpl diff --git a/private_dot_config/git/config b/private_dot_config/git/config deleted file mode 100644 index fbde937..0000000 --- a/private_dot_config/git/config +++ /dev/null @@ -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 diff --git a/private_dot_config/git/config.tmpl b/private_dot_config/git/config.tmpl new file mode 100644 index 0000000..ad0c025 --- /dev/null +++ b/private_dot_config/git/config.tmpl @@ -0,0 +1,64 @@ +{{- $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 := $gitConfig.name | default "Xavier Logerais" -}} +{{- $gitEmail := $gitConfig.email | default "xavier@logerais.com" -}} +[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.43.0 From a787c7ed514d319d39dddcc0c8f4e00e1d2c6256 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Fri, 11 Sep 2026 23:42:19 +0200 Subject: [PATCH 18/24] 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 Claude-Session: https://claude.ai/code/session_0145M6KGu5gQ3brTPzqs8NwG --- private_dot_config/git/config.tmpl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/private_dot_config/git/config.tmpl b/private_dot_config/git/config.tmpl index ad0c025..5b221fc 100644 --- a/private_dot_config/git/config.tmpl +++ b/private_dot_config/git/config.tmpl @@ -13,8 +13,14 @@ {{- $gitConfig = $currentUser.configs.git -}} {{- end -}} {{- end -}} -{{- $gitName := $gitConfig.name | default "Xavier Logerais" -}} -{{- $gitEmail := $gitConfig.email | default "xavier@logerais.com" -}} +{{- $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 -- 2.43.0 From ead4da0581ff61ba116dc8c5bc40d9ccfb31602c Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Fri, 11 Sep 2026 23:53:06 +0200 Subject: [PATCH 19/24] feat(starship): Improve bash prompt --- private_dot_config/starship.toml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/private_dot_config/starship.toml b/private_dot_config/starship.toml index 79d20dc..29fdf7e 100644 --- a/private_dot_config/starship.toml +++ b/private_dot_config/starship.toml @@ -25,12 +25,10 @@ $docker_context\ $kubernetes\ $terraform\ [](fg:#212736)\ -\n$time\ -$character""" +\n$character""" right_format = """ -[](fg:#212736 bg:#1d2230)\ -\n$time\ +[](fg:#a3aed2)$time[](fg:#a3aed2)\ """ [hostname] @@ -165,7 +163,7 @@ format = '[[](fg:#212736 bg:#1b1028) [$symbol](fg:#7b42bc bg:#1b1028) $worksp [time] disabled = false time_format = "%R" # Hour:Minute Format -style = "fg:#a3aed2" +style = "fg:#212736 bg:#a3aed2" format = '[  $time ]($style)' # format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' -- 2.43.0 From 3a2687474e3cc20a5a73b84d60541c5124c776fe Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Thu, 17 Sep 2026 15:32:34 +0200 Subject: [PATCH 20/24] feat(starship): Add indicator for ViM mode in zsh prompt --- private_dot_config/starship-zsh.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index 3e9ca92..aea5ced 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -173,6 +173,7 @@ format = '[  $time ]($style)' [character] success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' +vimcmd_symbol = "[[](fg:#394260)  ViM mode [](fg:#394260)](bg:#394260 fg:#a3aed2)" [os.symbols] Windows = "󰍲" -- 2.43.0 From ebf3fec9d46773e96da9d1aab7da78fae0938c34 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sat, 19 Sep 2026 20:22:06 +0200 Subject: [PATCH 21/24] feat(starship): Use same character setting for bash than zsh --- private_dot_config/starship.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/private_dot_config/starship.toml b/private_dot_config/starship.toml index 29fdf7e..0cdf4da 100644 --- a/private_dot_config/starship.toml +++ b/private_dot_config/starship.toml @@ -165,11 +165,10 @@ disabled = false time_format = "%R" # Hour:Minute Format style = "fg:#212736 bg:#a3aed2" format = '[  $time ]($style)' -# format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' [character] -success_symbol = '[ ❯](bold green) ' -error_symbol = '[󰚽 ❯](bold red) ' +success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' +error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' [os.symbols] Windows = "󰍲" -- 2.43.0 From 12b79dc83550e41997e0321c75af97cde1db7628 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sun, 20 Sep 2026 22:07:36 +0200 Subject: [PATCH 22/24] fix(starship): Fix zsh prompt for ViM mode --- private_dot_config/starship-zsh.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml index aea5ced..722e30f 100644 --- a/private_dot_config/starship-zsh.toml +++ b/private_dot_config/starship-zsh.toml @@ -168,12 +168,11 @@ disabled = false time_format = '%T  󰃶 %A %e %B %Y' style = "fg:#212736 bg:#a3aed2" format = '[  $time ]($style)' -# format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)' [character] success_symbol = '[[](fg:#ddffdd)  [](fg:#ddffdd)](bg:#ddffdd fg:#00af5f) ' error_symbol = '[[](fg:#ffddff) 󰚽 [](fg:#ffddff)](bg:#ffddff fg:#f44336) ' -vimcmd_symbol = "[[](fg:#394260)  ViM mode [](fg:#394260)](bg:#394260 fg:#a3aed2)" +vimcmd_symbol = '[[](fg:#007f00)  ViM mode [](fg:#007f00)](bg:#007f00) ' [os.symbols] Windows = "󰍲" -- 2.43.0 From 5c46b384558b8a9a2c9011761989a2b64aa73551 Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Tue, 22 Sep 2026 18:53:32 +0200 Subject: [PATCH 23/24] feat(ghostty): Improve Ghostty configuration --- private_dot_config/ghostty/config | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/private_dot_config/ghostty/config b/private_dot_config/ghostty/config index 016cbc2..51d6bda 100644 --- a/private_dot_config/ghostty/config +++ b/private_dot_config/ghostty/config @@ -46,6 +46,19 @@ shell-integration-features = sudo gtk-titlebar-hide-when-maximized = true 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 quit-after-last-window-closed = true quit-after-last-window-closed-delay = 5m -- 2.43.0 From 3645b0c3d0e481ef74fadd21028e2e9f3f6bfc9d Mon Sep 17 00:00:00 2001 From: Xavier Logerais Date: Sun, 27 Sep 2026 21:51:47 +0200 Subject: [PATCH 24/24] 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 Claude-Session: https://claude.ai/code/session_01DNFVa9coYSXpUrxogVwSiG --- .chezmoidata/hosts.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.chezmoidata/hosts.yaml b/.chezmoidata/hosts.yaml index 11d9fa9..aa7dd0c 100644 --- a/.chezmoidata/hosts.yaml +++ b/.chezmoidata/hosts.yaml @@ -51,7 +51,6 @@ hosts: tools: - sops - age - - cargo:rage configs: {} # Termux (application de terminal pour android) termux-debian: -- 2.43.0