summaryrefslogtreecommitdiffstats
path: root/.local
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-06-09 17:06:08 +0200
committerThomas Vanbesien <tvanbesi@proton.me>2026-06-09 17:06:08 +0200
commitc1e42c2ba35c0a7e796e121bbff3e46616a2093c (patch)
tree5305abb4e21ff0365e6f2247a54037bf2f46c137 /.local
parentf75b4d6c8469dd98924ae4b1b540e508f0e41ba5 (diff)
downloaddotfiles-c1e42c2ba35c0a7e796e121bbff3e46616a2093c.tar.gz
dotfiles-c1e42c2ba35c0a7e796e121bbff3e46616a2093c.zip
misc(dotfiles): add ruff & basedpyright (pip) and refactor pip package sync logic
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/dotfiles56
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 ;;