Installation Profiles
This document provides detailed information about each installation profile and the packages they include.
Profile Overview
Profiles allow you to install groups of related tools based on your workflow. Each profile can be installed independently or combined with others.
# Install multiple profiles
./setup/setup-osx.sh -p 'devops,secops,js'Core Profile
The Core profile is always installed and provides essential system utilities.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| build-essential | Essential packages for building debian packages | ✓ | - | apt |
| ca-certificates | Common CA certificates | ✓ | homebrew | apt |
| curl | Command line tool for transferring data with URLs | ✓ | homebrew | apt |
| git | Distributed version control system | ✓ | - | apt |
| gnupg | Encryption tool (GPG) | ✓ | homebrew | apt |
| gsed | GNU sed, installed under the name gsed | ✓ | homebrew | - |
| gzip | Data compression program | ✓ | homebrew | apt |
| jq | JSON processor tool | ✓ | homebrew | apt |
| locales | Tools to generate locale definitions | ✓ | - | apt |
| oh-my-zsh | Zsh configuration manager | ✓ | shell | shell |
| sed | Non-interactive command-line text editor | ✓ | - | apt |
| tar | Create and manipulate tar archives | ✓ | - | apt |
| unzip | De-archiver for zip files | ✓ | homebrew | apt |
| wget | Retrieve files using HTTP, HTTPS, FTP and FTPS | ✓ | homebrew | apt |
| xz-utils | XZ format compression utilities | ✓ | homebrew | apt |
| zsh | Z shell, made the default login shell | ✓ | - | apt |
On macOS the system tools stay in place: git comes with the Command Line Tools, zsh ships with macOS and the BSD sed is not replaced. GNU sed is installed as gsed, and .zshrc aliases sed to it when gsed is present. On Debian, coreutils is installed by the Base profile (see below).
Base Profile
The Base profile provides enhanced CLI tools and common applications for daily development work.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| bat | Cat command with syntax highlighting | ✓ | homebrew | mise |
| bat-extras | Bat combo with other commands (batgrep, batman, etc.) | ✓ | homebrew | shell |
| chafa | Image viewer in terminal | - | homebrew | apt |
| cheat | Create and view interactive cheat sheets | ✓ | homebrew | mise |
| coreutils | Basic file, shell and text manipulation utilities (Debian) | ✓ | - | apt |
| docker | Container runtime (Debian: CLI/engine via apt; macOS: bundled with Docker Desktop, see Applications below) | ✓ | - | apt |
| exiftool | Metadata writer and reader tool | - | homebrew | apt |
| eza | Modern ls replacement with colors and icons | ✓ | homebrew | mise |
| fd | Simple, fast alternative to 'find' | ✓ | homebrew | mise |
| ffmpeg | Audio video manipulation tool | - | homebrew | apt |
| fontconfig | Font configuration library, provides fc-cache (Debian) | - | - | apt |
| fzf | Command-line fuzzy finder | ✓ | homebrew | mise |
| gh | GitHub official CLI | - | homebrew | mise |
| glab | GitLab official CLI | - | homebrew | mise |
| glow | Render markdown in the CLI with pizzazz | ✓ | homebrew | mise |
| lazydocker | Simple terminal UI for docker commands | - | homebrew | mise |
| lazygit | Simple terminal UI for git commands | - | homebrew | mise |
| man | Manual page viewer (Debian) | ✓ | - | apt |
| man-db | Manual page database and tools (Debian) | ✓ | - | apt |
| manpages-dev | Manual pages about using GNU/Linux for development | ✓ | - | apt |
| mise | Version manager: language runtimes on both platforms, plus CLI binaries on Debian | ✓ | homebrew | apt |
| nerd-fonts | Hack and Symbols Only fonts for neovim (copied to ~/.fonts, on macOS also ~/Library/Fonts) | - | shell | shell |
| nmap | Network port scanning utility | - | homebrew | apt |
| nvim | Hyperextensible Vim-based text editor | - | homebrew | mise |
| pandoc | Universal markup converter | - | homebrew | apt |
| rclone | Swiss army knife of cloud storage | ✓ | homebrew | mise |
| ripgrep | Recursively search directories for regex patterns | ✓ | homebrew | mise |
| sshs | Interactive SSH client | ✓ | homebrew | mise |
| tlrc | tldr client (official), simplified man pages | - | homebrew | mise |
| tree | Display filesystem as tree | ✓ | homebrew | apt |
| ttyd | Share terminal over the web | - | homebrew | mise |
| vhs | CLI home video recorder (terminal recordings) | - | homebrew | mise |
| vim | Ubiquitous text editor | ✓ | homebrew | apt |
| watch | Execute a program periodically | ✓ | homebrew | apt |
| yq | YAML processor (like jq for YAML) | ✓ | homebrew | mise |
On Debian, mise comes from its own apt repository (https://mise.jdx.dev/deb), added with signed-by and a key that is only trusted when its fingerprint is the one mise publishes (24853EC9F655CE80B48E6C3A8B81C9D17413A06D); apt upgrade then keeps it current. A mise installed earlier with the mise.run script (in ~/.local/bin) is kept as it is.
On Debian, bat-extras is installed from its release zip, pinned to one version and checked against its sha256, into ~/.local/bin (man pages in ~/.local/share/man), without root and without running its build script. A copy that an older version of the setup built into /usr/local/bin stays there unused, since ~/.local/bin comes first in PATH; remove it with sudo rm /usr/local/bin/{batdiff,batgrep,batman,batpipe,batwatch,bat-modules,prettybat}.
GitHub CLI Extensions
| Extension | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| gh-dash | GitHub dashboard in terminal | - | gh | gh |
| gh-notify | GitHub notifications in terminal | - | gh | gh |
Applications (macOS only)
| Application | Description | Lite | Installation |
|---|---|---|---|
| Brave | Privacy-focused web browser | - | homebrew cask |
| Docker Desktop | Container management GUI + CLI | ✓ | homebrew cask |
| Firefox | Privacy-focused web browser | - | homebrew cask |
| Insomnia | HTTP and GraphQL client | - | homebrew cask |
| Mattermost | Team collaboration platform | - | homebrew cask |
| OpenVPN Connect | VPN client | - | homebrew cask |
| VS Code | Code editor and IDE | - | homebrew cask |
DevOps Profile
The DevOps profile provides container orchestration, infrastructure as code, and cloud platform tools.
Within this profile, tools are further grouped into categories (k8s, iac, cloud, misc). By default all categories are installed; set DEVOPS_CATEGORIES to a comma-separated subset to install only what you need, e.g. for a container image that's only used for Kubernetes debugging:
DEVOPS_CATEGORIES=k8s ./setup/setup-debian.sh -p devops -lCommand Line Interfaces
The Category column corresponds to the DEVOPS_CATEGORIES values described above.
| Package | Description | Category | Lite | macOS | Debian |
|---|---|---|---|---|---|
| act | Run GitHub Actions locally | misc | - | homebrew | mise |
| actionlint | Static checker for GitHub Actions workflows | misc | - | homebrew | mise |
| ansible | IT automation tool | iac | ✓ | homebrew | uv |
| ansible-lint | Linter for Ansible playbooks (via ansible-dev-tools) | iac | - | homebrew | uv |
| argo | Argo Workflows CLI | k8s | - | homebrew | mise |
| argocd | Argo CD CLI for GitOps | k8s | - | homebrew | mise |
| chart-testing | Helm chart linting and testing | k8s | - | homebrew | mise |
| coder | Coder remote development CLI | misc | - | homebrew | mise |
| helm | Kubernetes package manager | k8s | ✓ | homebrew | mise |
| helm-docs | Auto-generate Helm chart documentation | k8s | ✓ | homebrew | mise |
| k6 | Modern load testing tool | misc | - | homebrew | mise |
| k9s | Kubernetes TUI | k8s | - | homebrew | mise |
| kind | Kubernetes in Docker | k8s | - | homebrew | mise |
| krew | kubectl plugin manager | k8s | ✓ | homebrew | mise |
| kubectl | Kubernetes command-line tool | k8s | ✓ | homebrew | mise |
| kubectx | Kubernetes context switcher | k8s | ✓ | homebrew | mise |
| kubens | Kubernetes namespace switcher (shipped with the kubectx formula on macOS; its own mise tool on Debian) | k8s | ✓ | homebrew | mise |
| libonig-dev | Oniguruma regex library, development files (installed before ansible-dev-tools) | iac | - | - | apt |
| mkcert | Make locally trusted certificates (macOS only, not installed on Debian) | misc | - | homebrew | - |
| oc | OpenShift CLI | k8s | ✓ | homebrew | mise |
| oras | OCI Registry As Storage CLI | misc | - | homebrew | mise |
| python3-dev | Python development files (installed before ansible-dev-tools) | iac | - | - | apt |
| scw | Scaleway CLI | cloud | - | homebrew | mise |
| sshpass | Non-interactive SSH password auth | misc | ✓ | homebrew | apt |
| teleport | Modern SSH server for clusters | misc | - | homebrew | apt |
| terraform | Infrastructure as code tool | iac | ✓ | homebrew | mise |
| uv | Python package installer (installs ansible on Debian) | iac | ✓ | - | mise |
| velero | Kubernetes backup and migration | k8s | - | homebrew | mise |
| yamllint | Linter for YAML files | misc | - | homebrew | mise |
On macOS, terraform comes from HashiCorp's tap (hashicorp/tap/terraform): homebrew/core stopped at 1.5.7, the last release before the license change. A terraform installed earlier from homebrew/core is uninstalled first, because Homebrew cannot install the tap formula next to it.
kubectl Plugins (via Krew)
| Plugin | Description | Lite | Installation |
|---|---|---|---|
| cmctl | cert-manager CLI (homebrew/mise, the krew plugin is stuck on 2.1.0) | ✓ | homebrew/mise |
| cnpg | CloudNativePG operator CLI | ✓ | krew |
| df-pv | Show disk usage of PersistentVolumes | ✓ | krew |
| ktop | Top-like tool for Kubernetes | ✓ | krew |
| neat | Clean up Kubernetes YAML output (macOS only) | ✓ | krew |
| stern | Multi-pod log tailing | ✓ | krew |
| view-secret | Decode Kubernetes secrets easily | ✓ | krew |
SecOps Profile
The SecOps profile provides security scanning, secret management, and compliance tools.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| age | Simple, modern file encryption | - | homebrew | mise |
| cosign | Container signing and verification | ✓ | homebrew | mise |
| dive | Docker image layer explorer | - | homebrew | mise |
| gitleaks | Secret scanner for git repos | ✓ | homebrew | mise |
| kubescape | Kubernetes security scanner | - | homebrew | mise |
| kyverno | Kubernetes policy engine CLI | - | homebrew | mise |
| sops | Encrypted file editor | - | homebrew | mise |
| trivy | Vulnerability scanner | ✓ | homebrew | mise |
| vault | HashiCorp Vault CLI | - | homebrew | mise |
On macOS, vault comes from HashiCorp's tap (hashicorp/tap/vault) for the same reason as terraform: homebrew/core stopped at 1.14.4. A vault from homebrew/core is uninstalled first.
JavaScript Profile
The JavaScript profile provides Node.js runtime and package managers.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| @antfu/ni | Package manager wrapper | - | npm | npm |
| bun | Fast JavaScript runtime | - | mise | mise |
| node | JavaScript runtime | ✓ | mise | mise |
| npm | Node package manager (ships with node) | ✓ | node | node |
| pnpm | Fast, disk-efficient package manager | - | mise | mise |
| yarn | Package manager and project manager | - | mise | mise |
Go Profile
The Go profile provides Go language development tools and Kubernetes operator SDKs.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| cobra-cli | CLI application builder | - | go | go |
| go | Go programming language | ✓ | mise | mise |
| kubebuilder | SDK for building Kubernetes APIs | - | homebrew | mise |
| kustomize | Kubernetes YAML customization | - | homebrew | mise |
| operator-sdk | Kubernetes operator SDK | - | homebrew | mise |
AI Profile
The AI profile provides tools for running AI coding agents and large language models locally.
Command Line Interfaces
| Package | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| claude-code | Claude Code CLI | - | homebrew cask | shell |
| copilot-cli | GitHub Copilot CLI | - | homebrew cask | shell |
| direnv | Per-directory env loader (scoped agent secrets) | ✓ | homebrew | mise |
| rtk | CLI proxy that reduces LLM token usage | - | homebrew | shell |
Applications
| Application | Description | Lite | macOS | Debian |
|---|---|---|---|---|
| Ollama | Run LLMs locally | - | homebrew cask | shell |
Extras Profile (macOS Only)
The Extras profile provides personal productivity and media applications.
Applications
| Application | Description | Lite | Installation |
|---|---|---|---|
| Audacity | Audio editing software | - | homebrew cask |
| Discord | Voice and chat platform | - | homebrew cask |
| Raspberry Pi Imager | OS image flasher | - | homebrew cask |
| Soulseek | P2P file sharing | - | homebrew cask |
| Transmission | BitTorrent client | - | homebrew cask |
| VLC | Media player | ✓ | homebrew cask |
Installation Tips
Combining Profiles
Profiles can be mixed and matched:
# Minimal full-stack developer
./setup/setup-osx.sh -l -p 'base,js'
# DevOps with security tools
./setup/setup-osx.sh -p 'devops,secops'
# Everything except extras
./setup/setup-osx.sh -p 'base,ai,devops,go,js,secops'Lite Mode Strategy
Use lite mode (-l) to install only essential tools, then add specific tools manually:
./setup/setup-osx.sh -l -p 'devops,js'
brew install <additional-tool>Running One Profile on Its Own
A profile script can also be run directly, without the commons and oh-my-zsh steps of the setup script. It installs mise first when the profile needs it, and runs in full mode unless FULL_MODE_SETUP=false asks for lite mode:
./setup/profiles/osx/setup-devops.sh
FULL_MODE_SETUP=false DEVOPS_CATEGORIES=k8s ./setup/profiles/debian/setup-devops.shAdding a Profile
The setup scripts find the profiles in setup/profiles/<os>/: every setup-<name>.sh there is a profile, listed by -h, accepted by -p <name> and run in its turn. Two header lines describe it:
#!/bin/bash
# Profile: One-line description shown by -h
# Order: 45Profiles run by increasing Order (base is 10, ai 70). Nothing else needs to be edited. On macOS, the Homebrew packages of a profile live in setup/profiles/osx/<name>.Brewfile, installed by the profile script with brew bundle --file (only what is missing or outdated is installed). A Brewfile reads HOMEBREW_DOTFILES_LITE (1 with -l) to leave its unless lite block out, the devops one also HOMEBREW_DOTFILES_DEVOPS_CATEGORIES, and formulae from third-party taps are written tap/formula with trusted: true. What is not a Homebrew package (mise tools, krew plugins, fonts, gh extensions) stays in the profile script, and goes through run so that -n prints it.
Package Sources
- homebrew - macOS package manager (CLI tools, via formulae)
- homebrew cask - Homebrew casks: macOS GUI apps, plus the CLIs that Homebrew only ships as casks (claude-code, copilot-cli)
- apt - Debian package manager (system packages)
- mise - Language runtimes on both platforms; portable CLI binaries on Debian
- shell - Shell script installation
- npm - Node package manager (
npm install --global) - uv - Python tool installer (
uv tool install; ansible and ansible-lint on Debian) - go - Go package manager (
go install) - gh - GitHub CLI extension
- krew - kubectl plugin manager