64aaf57e
no dont do that
a73x 2026-03-29 08:49
Commit message
README.md
| Old | New | ||
|---|---|---|---|
| @@ -0,0 +1,3 @@ | |||
| 1 | # nono | ||
| 2 | |||
| 3 | bwrap and overlay to allow free range frolicking with fences | ||
nono
| Old | New | ||
|---|---|---|---|
| @@ -0,0 +1,52 @@ | |||
| 1 | #!/usr/bin/env bash | ||
| 2 | set -euo pipefail | ||
| 3 | |||
| 4 | STORE=$HOME/.local/share/nono | ||
| 5 | BASE="$(realpath "$(pwd)")" | ||
| 6 | SESSION_NAME=$(echo "$BASE" | tr '/' '-' | sed 's/^-//') | ||
| 7 | SESSION_DIR=$STORE/sessions/$SESSION_NAME | ||
| 8 | UPPER=$SESSION_DIR/upper | ||
| 9 | WORK=$SESSION_DIR/work | ||
| 10 | |||
| 11 | mkdir -p "$UPPER" "$WORK" | ||
| 12 | |||
| 13 | args=( | ||
| 14 | --dev-bind /dev /dev | ||
| 15 | --proc /proc | ||
| 16 | --tmpfs /tmp | ||
| 17 | --setenv HOME "$HOME" | ||
| 18 | --setenv TERM "${TERM:-xterm}" | ||
| 19 | ) | ||
| 20 | |||
| 21 | # system (read-only) | ||
| 22 | for p in \ | ||
| 23 | /opt/claude-code/bin/claude \ | ||
| 24 | /bin \ | ||
| 25 | /etc \ | ||
| 26 | /run \ | ||
| 27 | /usr \ | ||
| 28 | /lib \ | ||
| 29 | /lib64 \ | ||
| 30 | "$HOME/.local/bin" \ | ||
| 31 | "$HOME/.config" \ | ||
| 32 | ; do | ||
| 33 | [[ -e "$p" ]] && args+=(--ro-bind "$p" "$p") | ||
| 34 | done | ||
| 35 | |||
| 36 | # user (read-write) | ||
| 37 | for p in \ | ||
| 38 | "$HOME/.claude.json" \ | ||
| 39 | "$HOME/go" \ | ||
| 40 | "$HOME/.claude" \ | ||
| 41 | ; do | ||
| 42 | [[ -e "$p" ]] && args+=(--bind "$p" "$p") | ||
| 43 | done | ||
| 44 | |||
| 45 | args+=( | ||
| 46 | --overlay-src "$BASE" | ||
| 47 | --overlay "$UPPER" "$WORK" "$BASE" | ||
| 48 | --setenv PS1 "(overlay) \w \$" | ||
| 49 | --chdir "$BASE" | ||
| 50 | ) | ||
| 51 | |||
| 52 | exec bwrap "${args[@]}" "$@" | ||