Shellcraft bootstraps and maintains a macOS developer machine with:
- profile-based package selection
- preview-first execution
- Shellcraft-managed include files instead of destructive dotfile rewrites
- a maintainer toolchain for keeping this repo healthy
Shellcraft now has two usage lanes:
makefor normal local usage after clone or downloadsetup-my-mac.shfor the one-line remote bootstrap flow
Start with a safe preview:
make plan PROFILE=coreApply the default profile after reviewing the plan:
make install PROFILE=coreCommon follow-up commands:
make doctor PROFILE=core
make fix PROFILE=core
make install PROFILE=core,backend,ai
make install PROFILE=containers WITH_FONTS=1 SET_DEFAULT_SHELL=1On macOS, make comes from Xcode Command Line Tools. If your machine does not
have make yet, bootstrap Shellcraft once with the remote installer:
URL="https://raw.githubusercontent.com/ajitgunturi/shellcraft/main/setup-my-mac.sh"
bash <(curl -fsSL "$URL") --apply --profile coreThat installs the shellcraft core profile and gives the machine Xcode Command
Line Tools, which includes make. After that, reopen your shell or run:
exec zsh -l
make plan PROFILE=corePreview-only remote run:
URL="https://raw.githubusercontent.com/ajitgunturi/shellcraft/main/setup-my-mac.sh"
bash <(curl -fsSL "$URL")Install immediately with the default core profile:
URL="https://raw.githubusercontent.com/ajitgunturi/shellcraft/main/setup-my-mac.sh"
bash <(curl -fsSL "$URL") --apply --profile coreThis remote path bypasses the Makefile and runs the Shellcraft engine
directly.
make is the primary local interface for users:
make
make help
make plan PROFILE=core
make install PROFILE=core
make doctor PROFILE=core
make fix PROFILE=coreSupported variables:
PROFILEComma-separated profiles, for examplePROFILE=core,backendWITH_FONTS0or1SET_DEFAULT_SHELL0or1ALLOW_GUI_INSTALLS0or1
Notes:
makewith no target prints helpPROFILEdefaults tocorePROFILEmust not be empty- profile lists are comma-separated without spaces
./setup-my-mac.sh remains available for advanced or direct usage:
./setup-my-mac.sh --plan --profile core
./setup-my-mac.sh --apply --profile core --profile maintainer
./setup-my-mac.sh --doctor --profile core
./setup-my-mac.sh --doctor --fix --profile corecore: daily terminal baseline Key tools:git,tmux,fzf,ripgrep,jq,yq,gh,neovimbackend: API and Kubernetes workflow Key tools:mise,direnv,xh,grpcurl,kubectl,helm,k9s,kubectxai: lightweight AI and Python workflow Key tools:uvmaintainer: keep Shellcraft itself healthy Key tools:shellcheck,shfmt,bats-core,pre-commit,go-task,markdownlint-cli,actionlint,yamllint,hadolintcontainers: local container runtime Key tools:colima,docker,docker-composelocal-ai: local model runtime Key tools:ollama
--profile all expands to every profile above.
Shellcraft is intentionally conservative:
--planis the default mode- top-level dotfiles are not overwritten wholesale
- missing Git identity is reported, never auto-filled with placeholders
- login shell changes are opt-in
- font installation is opt-in
- GUI-assisted Xcode Command Line Tools installation is opt-in
Shellcraft writes managed files under:
~/.config/shellcraft/Managed files:
zprofile.shzshrc.zshgitconfigtmux.confgitignore_globalstate.env
User-owned file:
local.zsh
Top-level files are adopted via a single include/source block:
~/.zprofilesources~/.config/shellcraft/zprofile.sh~/.zshrcsources~/.config/shellcraft/zshrc.zsh~/.gitconfigincludes~/.config/shellcraft/gitconfig~/.tmux.confsources~/.config/shellcraft/tmux.conf
task is for maintainers and repository checks, not first-run user setup.
Install the maintainer profile on a Shellcraft machine, then use:
task lint
task fmt-check
task test
task smoke-fresh
task smoke-existing
task doctorPre-commit hooks are defined in .pre-commit-config.yaml.
At commit time, pre-commit runs task lint as a repo-wide lint pass and
reports the full repository state.
Makefile User-facing local wrapper
setup-my-mac.sh Shellcraft engine
profiles/*.Brewfile Profile package definitions
lib/*.sh Planner, config adoption, verification helpers
templates/* Managed config templates
tests/*.bats Temp-HOME smoke tests
Taskfile.yml Maintainer tasks
.pre-commit-config.yaml Maintainer hooks
exercises/*.md Learning material
Exercise guides currently available:
exercises/terminal-exercises.md:coreprofile exercisesexercises/maintainer-exercises.md:maintainerprofile exercisesexercises/k8s-exercises.md: Kubernetes-focusedyqandjqfollow-up
In scope:
- macOS
- Homebrew-managed tooling
- free CLI tools
- safe bootstrap and ongoing machine maintenance
Out of scope:
- paid tools
- sign-in-required defaults
- Linux support
- GUI app management other than optional fonts
- package managers other than Homebrew