The machine provisioner requires some basic packages.
For MacOs: Start of with xcode-select --install to launch the installer for some base packages.
All other operating systems don't have any further requirements
Linux
wget -qO- https://raw.githubusercontent.com/modell-aachen/modac-dev-machine-setup/refs/heads/main/install | bash; source ~/.bashrcMacOs
curl -fsSL https://raw.githubusercontent.com/modell-aachen/modac-dev-machine-setup/refs/heads/main/install | "$SHELL"
source ~/."$(basename $SHELL)"rc- The 1Password app is provisioned. You should be able to login
Harbor
- in 1Password: New Item
- Add Login
- Change
Logintitle toHarbor - set username to your modac email address
- set password (https://harbor.modac.cloud -> Login -> user profile [top right corner] -> User Profile -> CLI secret)
- enable cli integration (1Password app > ... > Settings > Developer > Command-Line Interface)
GitHub token (Claude Code plugins)
- create a classic PAT at https://github.com/settings/tokens (Generate new token (classic)) with scopes
repoandread:org - in 1Password (
Employeevault): New Item → Password, titleGithub Token, paste the PAT in thepasswordfield
check that you can login to 1password:
op vault listIf you want to restore other files than devbox.json you have to call the backup restore twice.
The first time, the devbox.json is restored.
The second command will restore the files defined in the restored devbox.json.
eval "$(op signin)"
machine backup restore
machine backup restoremachine provisionBack to QwikiContrib: QwikiContrib
Service machines get a minimal setup for Kubernetes access instead of the full
developer environment: a reduced devbox package set (kubectl, helm, krew, k9s,
gcloud with GKE auth plugin) and only the service-flagged provisioning modules
(machine provision list-modules marks them with *). 1Password is installed
CLI-only, without the desktop app.
- Open an admin PowerShell and run
wsl --install -d Ubuntu - Reboot and create your UNIX user when Ubuntu starts
- Make sure systemd is enabled in
/etc/wsl.conf(default on current Ubuntu images):After changing it, run[boot] systemd=truewsl --shutdownfrom Windows and start WSL again.
Inside WSL (or on a plain Ubuntu machine — the service profile is not tied to WSL):
wget -qO- https://raw.githubusercontent.com/modell-aachen/modac-dev-machine-setup/refs/heads/main/install | MACHINE_PROFILE=service bash; source ~/.bashrcThe profile is persisted in ~/.machine/profile, so later runs of
machine provision select the service module set automatically. To switch an
existing machine, run machine provision --profile service (or --profile dev).
machine provisionDuring provisioning you will be asked to add your 1Password account (sign-in address, email, secret key, master password) and to complete the device-code login for Kubernetes access.
Update your $(devbox global path)/devbox.json:
machine edit-configApply updates:
machine provisionAdd an ENV variable to "$(devbox global path)/devbox.json:
machine edit-config- add
"REPOS_DIRECTORY": "$HOME/path"to theenvobject
The docker task requires a system restart. If any succeeding docker-related tasks fail (kubectl, calico, etc.) try restarting the system
and the provisioning process (machine provision).
The calico task can fail because of an incompatibility issue:
Workaround:
apt-cache policy docker-ce | grep 24.0.7Use the printed version (e.g. 5:24.0.7-1ubuntu.22.04jammy) to ...
sudo apt install docker-ce=*VERSION*Erlang build fails with "No curses library functions found" or "CFLAGS must contain a -O flag" (macOS)
When building Erlang via asdf install erlang <version> inside the nix-shell/devbox environment on macOS, the nix-shell can hide Homebrew's ncurses from the build system. Set these env vars before installing:
brew install ncurses
export KERL_CONFIGURE_OPTIONS="--with-ssl=$(brew --prefix openssl@3) --without-javac"
export LDFLAGS="-L$(brew --prefix ncurses)/lib -L/opt/homebrew/opt/unixodbc/lib"
export CFLAGS="-O2 -g -I$(brew --prefix ncurses)/include"
asdf install erlang 28.2Important: CFLAGS must include -O2 -g — Erlang's configure requires an optimization flag.
The team's CLAUDE.md contains what we all can agree on. But everyone works differently. So feel free to enter your personal preferences to ~/.claude/personal-CLAUDE.md. It will be included automatically and take precedence over the team defaults if conflicting.