Compare commits

...
27 Commits
Author SHA1 Message Date
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
xavier 5d7933ac5a feat(starship): Improve configuration for starship.rs prompt for zsh 2026-08-19 21:34:11 +02:00
xavier e57f78c957 feat(starship): Improve configuration for starship.rs 2026-08-19 21:34:11 +02:00
xavier 48d328ea27 feat(starship): Fix symbol direction in zsh prompt 2026-08-19 21:34:11 +02:00
xavier 55b9a4e8c2 feat(starship): Cosmetic change for zsh prompt 2026-08-19 21:34:11 +02:00
xavier 990cd6b506 feat(zsh): Add support for zsh 2026-08-19 21:34:11 +02:00
xavier 24013acd34 test: Prepare for cloning password store 2026-08-19 21:34:11 +02:00
xavier 5076e78819 feat: Add TODO.md 2026-08-19 21:34:11 +02:00
19 changed files with 744 additions and 90 deletions

No files matched your search

-1
View File
@@ -51,7 +51,6 @@ hosts:
tools:
- sops
- age
- cargo:rage
configs: {}
# Termux (application de terminal pour android)
termux-debian:
+2 -1
View File
@@ -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
@@ -55,6 +55,7 @@ tools:
- gemini-cli
- codex
- copilot
- opencode
# # Password managers
# # vault = "latest"
+12
View File
@@ -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 ] #####
@@ -20,4 +26,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
+1
View File
@@ -1 +1,2 @@
README.md
TODO.md
+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 }}
{{- 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/<toolbox>.toml */}}
{{- else if $currentHost }}
# Aucun profil trouvé dans hosts.yaml pour l'utilisateur {{ $username }} sur la machine : {{ $hostname }}
{{- else }}
+6
View File
@@ -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)
+25
View File
@@ -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"
+13
View File
@@ -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
-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
nerdFontsVersion: "3"
git:
pagers:
diffRenderers:
- colorArg: always
pager: delta --paging=never
command: delta --paging=never
parseEmoji: true
+2 -1
View File
@@ -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/<toolbox>.toml)
{{ includeTemplate "mise-tools" . }}
# Password managers
+245
View File
@@ -0,0 +1,245 @@
"$schema" = 'https://starship.rs/config-schema.json'
format = """
[ ](fg:#769ff0)\
$directory\
[](bg:#394260 fg:#769ff0)\
$git_branch\
$git_commit\
$git_status\
$git_state\
$mise\
$direnv\
[](fg:#394260 bg:#212736)\
$rust\
$golang\
$python\
$nodejs\
$docker_context\
$kubernetes\
$terraform\
[](fg:#212736)\
\n$character\
"""
right_format = """
[](fg:#a3aed2)$time[](fg:#a3aed2)\
"""
[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 $name ]($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 = ' bash'
zsh_indicator = ' zsh'
fish_indicator = '󰈺 fish'
powershell_indicator = '_ Powershell'
unknown_indicator = 'unknown shell'
format = '[ $indicator ]($style)'
style = "bg:#a3aed2 fg:#212736"
[sudo]
disabled = false
[directory]
disabled = false
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 bold"
format = '[ $symbol $branch ]($style)'
[git_commit]
disabled = false
only_detached = true
tag_disabled = false
tag_symbol = '  '
style = "fg:#769ff0 bg:#394260"
format = '[ $hash $tag ]($style)'
[git_status]
disabled = false
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)' # 󱁺 
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)'
[direnv]
disabled = false
[mise]
disabled = true
style = "bg:#212736 fg:white"
format = '[$symbol$health]($style)'
[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 = '%T  󰃶 %A %e %B %Y'
style = "fg:#212736 bg:#a3aed2"
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:#007f00)  ViM mode [](fg:#007f00)](bg:#007f00) '
[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
+5 -8
View File
@@ -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,13 +163,12 @@ 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)'
[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 = "󰍲"
+71
View File
@@ -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
+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
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
+51 -5
View File
@@ -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/<toolbox>.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