This is my personal development environment (DevEnv) to setup my computer from scratch. Instructions are below.
mkdir -p ~/dev/work
mkdir -p ~/dev/personal && cd $_
git clone https://github.com/rmgpinto/devenv.git
cd devenv
./devenv.sh setup- Login 1Password
- Setup 1Password CLI
op account add --address my.1password.com --signin- Load
config/raycast/raycast.rayconfiginto Raycast - Follow 1Password SSH agent instructions
- Download AppCleaner
Secrets are defined in 1Password and synced to env vars via env/:
- Define each secret as a 1Password item.
- List it in
env/secrets:<store> <name> <op://reference> <1password-account>, where<store>isnono(exposed to the AI sandbox) ormise(host mise only). - Reference it (or any non-secret var) in the relevant scope template —
env/work.mise.toml,env/personal.mise.toml, orenv/user.mise.toml(user-global, loaded in every shell regardless of cwd). Secrets exposed to the AI sandbox are mapped to env vars by theirnono-<name>keychain account in the nonoaiprofile (dotfiles/nono/.config/nono/profiles/ai.json,env_credentials). - Run
env/setup.sh(also run by./devenv.sh).
env/setup.sh pulls each secret from its 1Password account (op read --account), caches it in the macOS keychain (service <store>, account <store>-<name>), and copies the mise scope templates. The mise files resolve secrets from the keychain at load time, and the nono ai profile (stowed by dotfiles/setup.sh) resolves its env_credentials from the keychain at sandbox startup — no plaintext secret is written to disk.
Caching in the keychain avoids op read's latency on every shell/mise load:
Secrets are cached under one of two services — nono for AI-sandbox secrets,
mise for host mise-only secrets — with each account prefixed by its store
(nono-... / mise-...). Host mise secrets are added with -A;
AI-sandbox nono secrets are granted to the real nono binary with -T when
created. Existing items keep their ACLs during normal syncs; set
REFRESH_NONO_KEYCHAIN_ACL=1 for a deliberate repair after a nono reinstall
or upgrade:
# add host mise secret to keychain
security add-generic-password -a mise-name-of-my-secret -s mise -w <secret> -A
# repair existing nono secret ACL, trusting the actual nono binary
security add-generic-password -a nono-name-of-my-secret -s nono -w <secret> -U -T "$(mise which nono)"
# read secret from keychain
security find-generic-password -a <store>-name-of-my-secret -s <store> -w
# delete secret from keychain
security delete-generic-password -a <store>-name-of-my-secret -s <store>
Use REFRESH_NONO_KEYCHAIN_ACL=1 only when cc or cx prompts for Keychain
access to nono-* secrets after nono was reinstalled or upgraded. Do not use
it for normal ./devenv.sh runs; it intentionally rewrites Keychain ACLs and
macOS may prompt once per nono-* item.