diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-06-09 17:06:08 +0200 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-06-09 17:06:08 +0200 |
| commit | c1e42c2ba35c0a7e796e121bbff3e46616a2093c (patch) | |
| tree | 5305abb4e21ff0365e6f2247a54037bf2f46c137 | |
| parent | f75b4d6c8469dd98924ae4b1b540e508f0e41ba5 (diff) | |
| download | dotfiles-c1e42c2ba35c0a7e796e121bbff3e46616a2093c.tar.gz dotfiles-c1e42c2ba35c0a7e796e121bbff3e46616a2093c.zip | |
misc(dotfiles): add ruff & basedpyright (pip) and refactor pip package sync logic
| -rwxr-xr-x | .local/bin/dotfiles | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/.local/bin/dotfiles b/.local/bin/dotfiles index 361484d..7382a23 100755 --- a/.local/bin/dotfiles +++ b/.local/bin/dotfiles @@ -48,22 +48,50 @@ sync_packages() { fi } -sync_mdformat() { - local pipx_json - pipx_json="$(pipx list --json)" - if ! jq --exit-status '.venvs | has("mdformat")' <<<"$pipx_json" >/dev/null 2>&1; then - if prompt_for_install "Missing mdformat"; then pipx install mdformat; else return; fi +declare pipx_json +pipx_json="$(pipx list --json)" + +check_pipx_package_installed() { + jq --exit-status ".venvs | has(\"${1:?}\")" <<<"$pipx_json" >/dev/null 2>&1 +} + +check_pipx_injected_package() { + jq --exit-status ".venvs.${1:?}.metadata.injected_packages | has(\"${2:?}\")" <<<"$pipx_json" >/dev/null 2>&1 +} + +get_pipx_package_missing_injected_packages() { + local base_pack="${1:?missing base_pack argument}" + shift + local -a packs_to_inject=("$@") + for pack in "${packs_to_inject[@]}"; do + if ! check_pipx_injected_package "$base_pack" "$pack"; then echo "$pack"; fi + done +} + +sync_python_packages() { + # map packages to the depencies to inject in their environment + declare -A deps=( + [mdformat]="mdformat-gfm,mdformat-frontmatter,mdformat-wikilink" + [ruff]="" + [basedpyright]="" + ) + local missing_packages=() + for dep in "${!deps[@]}"; do + if ! check_pipx_package_installed "$dep"; then missing_packages+=("$dep"); fi + done + if [[ ${#missing_packages[@]} -gt 0 ]]; then + if prompt_for_install "Missing pip packages: ${missing_packages[*]}"; then + pipx install "${missing_packages[@]}" + fi fi - local missing_injected_packages=() - for pack in mdformat-gfm mdformat-frontmatter mdformat-wikilink; do - if ! jq --exit-status ".venvs.mdformat.metadata.injected_packages | has(\"$pack\")" <<<"$pipx_json" >/dev/null 2>&1; then - missing_injected_packages+=("$pack") + for dep in "${!deps[@]}"; do + IFS=',' read -ra packs_to_inject < <(echo "${deps[$dep]}") + readarray -t missing_injected_packages < <(get_pipx_package_missing_injected_packages "$dep" "${packs_to_inject[@]}") + if [[ ${#missing_injected_packages[@]} -eq 0 ]]; then return; fi + if prompt_for_install "Missing $dep extensions: ${missing_injected_packages[*]}"; then + pipx inject "$dep" "${missing_injected_packages[@]}" fi done - if [[ ${#missing_injected_packages[@]} -eq 0 ]]; then return; fi - if prompt_for_install "Missing mdformat extensions: ${missing_injected_packages[*]}"; then - pipx inject mdformat "${missing_injected_packages[@]}" - fi } sync_claude() { @@ -149,7 +177,7 @@ sync) sync_secret_service sync_proton_vpn sync_nvim - sync_mdformat + sync_python_packages sync_claude ;; reinstall-nvim) reinstall_nvim ;; |
