set shell := ["bash", "-cu"] project_root := justfile_directory() scripts_dir := project_root + "/Scripts" bin_script_dir := scripts_dir + "/bin" help: @printf '%s\n' \ 'Dot-Zsh commands:' \ '' \ ' just setup all # full setup flow' \ ' just setup base # base layer only' \ ' just setup stow # stow Zsh files into $HOME' \ ' just setup clean # remove stowed Zsh files from $HOME' \ ' just setup update # git pull + full setup' \ '' \ ' just lang node # install Node tooling' \ ' just lang go # install Go tooling' \ ' just lang rust # install Rust tooling' \ ' just lang python # install Python tooling' \ ' just lang r # install R tooling' \ ' just lang cpp # install C/C++ tooling' \ '' \ ' just bin install-all # install all pinned binaries' \ ' just bin install nvim # install one pinned binary' \ ' just bin update nvim # update pinned version for a binary' \ ' just bin list nvim # list available releases' \ ' just bin show # print current pinned versions' setup action='all': case '{{action}}' in \ all) bash '{{scripts_dir}}/setup.sh' ;; \ base) bash '{{scripts_dir}}/base.sh' ;; \ stow) bash '{{scripts_dir}}/setup.sh' --stow-only ;; \ clean) stow --dir='{{project_root}}' -D Zsh --target="$HOME" ;; \ update) git -C '{{project_root}}' pull origin main && just --justfile '{{project_root}}/Justfile' setup all ;; \ *) printf 'Unknown setup action: %s\n' '{{action}}' >&2; exit 1 ;; \ esac lang tool: case '{{tool}}' in \ node) bash '{{scripts_dir}}/node.sh' ;; \ go) bash '{{scripts_dir}}/go.sh' ;; \ rust) bash '{{scripts_dir}}/rust.sh' ;; \ python) bash '{{scripts_dir}}/python.sh' ;; \ r) bash '{{scripts_dir}}/r.sh' ;; \ cpp) bash '{{scripts_dir}}/cpp.sh' ;; \ *) printf 'Unknown language target: %s\n' '{{tool}}' >&2; exit 1 ;; \ esac bin action='show' tool='' version='': case '{{action}}' in \ install-all) bash '{{bin_script_dir}}/install.sh' --all ;; \ install) [ -n '{{tool}}' ] || { printf 'bin install requires a tool name\n' >&2; exit 1; }; bash '{{bin_script_dir}}/install.sh' '{{tool}}' ;; \ update) [ -n '{{tool}}' ] || { printf 'bin update requires a tool name\n' >&2; exit 1; }; bash '{{bin_script_dir}}/update.sh' '{{tool}}' '{{version}}' ;; \ list) [ -n '{{tool}}' ] || { printf 'bin list requires a tool name\n' >&2; exit 1; }; bash '{{bin_script_dir}}/update.sh' --list '{{tool}}' ;; \ show) cat '{{project_root}}/Bins/versions.json' ;; \ *) printf 'Unknown bin action: %s\n' '{{action}}' >&2; exit 1 ;; \ esac