This commit is contained in:
MangoPig
2026-07-17 00:36:54 +01:00
parent d79cb9a62b
commit eee302a4e0
10 changed files with 160 additions and 60 deletions
+13 -4
View File
@@ -1,6 +1,19 @@
project_root := justfile_directory()
bin_script_dir := project_root + "/Scripts/bin"
# List the repo-managed binary names, or available releases for one tool.
[default]
list tool='':
if [ -n '{{tool}}' ]; then \
bash '{{bin_script_dir}}/update.sh' --list '{{tool}}'; \
else \
jq -r 'keys[]' '{{project_root}}/Bins/versions.json'; \
fi
# List available releases for a supported binary.
releases tool:
bash '{{bin_script_dir}}/update.sh' --list '{{tool}}'
# Install all pinned repo-managed binaries into ~/.local/bin.
install-all:
bash '{{bin_script_dir}}/install.sh' --all
@@ -13,10 +26,6 @@ install tool:
update tool version='':
bash '{{bin_script_dir}}/update.sh' '{{tool}}' '{{version}}'
# List available releases for a supported binary.
list tool:
bash '{{bin_script_dir}}/update.sh' --list '{{tool}}'
# Print the currently pinned versions.
show:
cat '{{project_root}}/Bins/versions.json'
+11
View File
@@ -0,0 +1,11 @@
project_root := justfile_directory()
scripts_dir := project_root + "/Scripts"
# Print the active global Git configuration.
[default]
show:
bash '{{scripts_dir}}/git.sh' show
# Set the global Git editor. Defaults to VS Code; pass `nvim` for Neovim.
editor value='code':
bash '{{scripts_dir}}/git.sh' editor '{{value}}'
+9
View File
@@ -1,20 +1,29 @@
project_root := justfile_directory()
scripts_dir := project_root + "/Scripts"
# Install every language toolchain in full-setup order.
all: node go rust python r cpp
# Install Node.js, pnpm, Yarn, and Bun tooling.
node:
bash '{{scripts_dir}}/node.sh'
# Install Go and GVM tooling.
go:
bash '{{scripts_dir}}/go.sh'
# Install the Rust toolchain.
rust:
bash '{{scripts_dir}}/rust.sh'
# Install Python, pyenv, and Miniforge tooling.
python:
bash '{{scripts_dir}}/python.sh'
# Install R tooling.
r:
bash '{{scripts_dir}}/r.sh'
# Install the C and C++ toolchain.
cpp:
bash '{{scripts_dir}}/cpp.sh'
+5
View File
@@ -2,9 +2,14 @@ project_root := justfile_directory()
scripts_dir := project_root + "/Scripts"
# Run the full setup flow.
[default]
all:
bash '{{scripts_dir}}/setup.sh'
# Run the lightweight bootstrap flow: base packages and shell-file stow.
bootstrap:
bash '{{scripts_dir}}/setup.sh' --bootstrap-only
# Install the base system layer only.
base:
bash '{{scripts_dir}}/base.sh'
+6 -55
View File
@@ -1,59 +1,10 @@
set shell := ["bash", "-cu"]
project_root := justfile_directory()
scripts_dir := project_root + "/Scripts"
bin_script_dir := scripts_dir + "/bin"
mod bin "Commands/Bin"
mod git "Commands/Git"
mod lang "Commands/Lang"
mod setup "Commands/Setup"
[default]
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
just --list --list-submodules
+14 -1
View File
@@ -55,6 +55,7 @@ Modular `just` commands.
- `Commands/Setup/mod.just`
- `Commands/Lang/mod.just`
- `Commands/Bin/mod.just`
- `Commands/Git/mod.just`
#### `Bins/`
@@ -104,10 +105,15 @@ This runs the full flow in `Scripts/setup.sh`:
```bash
just setup base
just setup bootstrap
just setup stow
just setup clean
just setup update
just git show
just git editor
just git editor nvim
just lang node
just lang go
just lang rust
@@ -116,14 +122,21 @@ just lang r
just lang cpp
just bin show
just bin list
just bin install-all
just bin install nvim
just bin list nvim
just bin releases nvim
just bin list nvim # backwards-compatible shorthand for releases
just bin update nvim
just lang all
```
If `fzf` is available, `just bin update <tool>` can use interactive selection.
`just setup all` and `just setup base` now set the default global Git editor to VS Code (`code --wait`).
If you want to switch to Neovim later, run `just git editor nvim`.
---
## Secrets model
+2
View File
@@ -402,6 +402,8 @@ else
ensure_git_credential_helper 'cache --timeout=43200'
fi
git config --global core.editor "code --wait"
# 6. Cleanup & Secrets
rm -f "$HOME/.zshrc" "$HOME/.zsh_aliases"
mkdir -p "$REPO_ROOT/Zsh"
+75
View File
@@ -0,0 +1,75 @@
#!/bin/bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
git.sh show
git.sh editor [code|nvim]
EOF
}
set_editor() {
local editor_name="${1:-code}"
case "$editor_name" in
code)
git config --global core.editor "code --wait"
printf 'Set git core.editor to: %s\n' 'code --wait'
;;
nvim)
git config --global core.editor "nvim"
printf 'Set git core.editor to: %s\n' 'nvim'
;;
*)
printf 'Unknown editor: %s\n' "$editor_name" >&2
usage >&2
exit 1
;;
esac
}
show_config() {
local name email editor
local helpers=()
local helper
name="$(git config --global --get user.name || true)"
email="$(git config --global --get user.email || true)"
editor="$(git config --global --get core.editor || true)"
while IFS= read -r helper; do
[ -n "$helper" ] && helpers+=("$helper")
done < <(git config --global --get-all credential.helper || true)
printf 'Global git config\n'
printf ' user.name %s\n' "${name:-<unset>}"
printf ' user.email %s\n' "${email:-<unset>}"
printf ' core.editor %s\n' "${editor:-<unset>}"
if [ "${#helpers[@]}" -eq 0 ]; then
printf ' credential.helper %s\n' '<unset>'
else
printf ' credential.helper %s\n' "${helpers[0]}"
if [ "${#helpers[@]}" -gt 1 ]; then
local index
for (( index=1; index<${#helpers[@]}; index++ )); do
printf ' %s\n' "${helpers[$index]}"
done
fi
fi
}
case "${1:-show}" in
show)
show_config
;;
editor)
set_editor "${2:-code}"
;;
*)
usage >&2
exit 1
;;
esac
+4
View File
@@ -18,6 +18,7 @@ fi
export PATH="$HOME/.opencode/bin:$PATH"
export OPENCHAMBER_HOST="${OPENCHAMBER_HOST:-0.0.0.0}"
export VAULT_ADDR="${VAULT_ADDR:-http://192.168.30.53:8200}"
export PLANNOTATOR_REMOTE="${PLANNOTATOR_REMOTE:-1}"
export PLANNOTATOR_PORT="${PLANNOTATOR_PORT:-9999}"
# Derived environment variables that may depend on machine-local secrets.
@@ -27,3 +28,6 @@ export PLANNOTATOR_PORT="${PLANNOTATOR_PORT:-9999}"
[ -n "${AZURE_OPENAI_API_KEY:-}" ] && export FOUNDRY_ANTHROPIC_API_KEY="$AZURE_OPENAI_API_KEY"
[ -n "${AZURE_OPENAI_API_KEY:-}" ] && export CHROMA_OPENAI_API_KEY="$AZURE_OPENAI_API_KEY"
[ -n "${OUTLINE_MOKU_TOKEN:-}" ] && export OUTLINE_MOKU_AUTHORIZATION="Bearer $OUTLINE_MOKU_TOKEN"
# bun completions
[ -s "/home/mangopig/.programming/node/bun/_bun" ] && source "/home/mangopig/.programming/node/bun/_bun"
+21
View File
@@ -213,12 +213,30 @@ fi
export HISTORY_SUBSTRING_SEARCH_PREFIXED=1
zmodload zsh/terminfo 2>/dev/null || true
dotzsh_bind_if_present() {
local sequence="$1"
local widget="$2"
[ -n "$sequence" ] || return 0
bindkey "$sequence" "$widget"
}
# History keybindings
bindkey '^[[A' history-substring-search-up
bindkey '^[OA' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey '^[OB' history-substring-search-down
# Word movement keybindings
dotzsh_bind_if_present "${terminfo[kLFT5]:-}" backward-word
dotzsh_bind_if_present "${terminfo[kRIT5]:-}" forward-word
bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word
bindkey '^[[5D' backward-word
bindkey '^[[5C' forward-word
# bun
export BUN_INSTALL="$PROG_DIR/node/bun"
case ":$PATH:" in
@@ -233,3 +251,6 @@ case ":$PATH:" in
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm end
# Allow Comments
setopt INTERACTIVE_COMMENTS