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: diff --git a/.chezmoidata/tools.yaml b/.chezmoidata/tools.yaml index 01a3577..5c9db9a 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 @@ -55,6 +55,7 @@ tools: - gemini-cli - codex - copilot + - opencode # # Password managers # # vault = "latest" diff --git a/.chezmoiexternal.yaml.tmpl b/.chezmoiexternal.yaml.tmpl index 1e40d66..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 ] ##### @@ -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 diff --git a/.chezmoiignore b/.chezmoiignore index b43bf86..4dd3757 100644 --- a/.chezmoiignore +++ b/.chezmoiignore @@ -1 +1,2 @@ README.md +TODO.md diff --git a/.chezmoitemplates/mise-toolbox-conf b/.chezmoitemplates/mise-toolbox-conf new file mode 100644 index 0000000..6cd9e58 --- /dev/null +++ b/.chezmoitemplates/mise-toolbox-conf @@ -0,0 +1,17 @@ +{{/* .chezmoitemplates/mise-toolbox-conf */}} +{{/* Expects data: (merge (dict "toolboxName" "") .) */}} +{{- $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 }} 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/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) 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/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 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..5b221fc --- /dev/null +++ b/private_dot_config/git/config.tmpl @@ -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 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 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/private_dot_config/starship-zsh.toml b/private_dot_config/starship-zsh.toml new file mode 100644 index 0000000..722e30f --- /dev/null +++ b/private_dot_config/starship-zsh.toml @@ -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 diff --git a/private_dot_config/starship.toml b/private_dot_config/starship.toml index 79d20dc..0cdf4da 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,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 = "󰍲" 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 diff --git a/private_dot_local/bin/executable_update b/private_dot_local/bin/executable_update new file mode 100644 index 0000000..c961aee --- /dev/null +++ b/private_dot_local/bin/executable_update @@ -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 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