Profiles are cumulative. Choose the smallest profile that covers the machine's role.
| Profile | Purpose |
|---|---|
minimal |
Core shell, Zinit, Vim, and macOS terminal fonts |
developer |
Minimal plus Neovim, Tree-sitter CLI, Node.js, Python, uv, GitHub CLI, FZF, Zoxide, Ripgrep, Eza, Bat, jq, and compiler tooling |
developer is selected when --profile is omitted. Choose minimal
explicitly for a lightweight shell setup without the larger development
toolchain.
The developer profile installs a pinned mise binary and activates it for
interactive Zsh. Selfishell keeps its defaults in
${XDG_CONFIG_HOME:-$HOME/.config}/selfishell/mise/selfishell.toml (which is symlinked to ~/.config/mise/conf.d/selfishell.toml so it is automatically loaded by mise); a project's
mise.toml can select different tool versions.
Built-in mise tools use exact reviewed versions pinned in config/shared/mise.toml,
the single source of truth for these versions. Projects remain free to
override them in a local mise.toml. Updating these defaults requires a normal
Selfishell release and never happens during shell startup.
Preview without changing the machine:
selfishell install --dry-runInstall or change the selected profile explicitly:
selfishell install --profile minimal --yesThe active profile is recorded in the XDG state directory. selfishell update
uses that recorded profile to install missing Apt, Homebrew, and directly
managed tools before updating configuration. Apt and Homebrew retain
responsibility for versions of packages they already manage.
Profile package requirements have two failure policies:
requiredpackages must be available and install successfully;optionalpackages are recommended and attempted automatically, but an unavailable package or installation failure does not stop the rest of setup.
optional does not mean that Selfishell asks about each package. Ghostty is the
separate interactive installation choice on macOS.
On macOS, interactive installation separately asks whether to install Ghostty
and manage its configuration. --yes accepts that choice automatically. The
choice is saved and reused by selfishell update.
The developer profile includes a pinned Neovim configuration whose leader key
is Space. In Normal mode, press Space and pause to open which-key. The popup
shows actions available in the current context; continue typing to narrow the
list. Every Selfishell mapping has a description, so which-key remains aligned
with the installed configuration without a separate shortcut list.
Lua, Python, Bash, sh, JSON, YAML, TOML, and Markdown LSP support appears when a configured server attaches. Neovim's standard LSP mappings remain available as well.
Additional LSP servers are installed with :LspInstall <server>, the standard
mason-lspconfig command; installed servers auto-enable on the next matching
buffer. For a server Selfishell does not manage by default, customize its
settings by adding ~/.config/nvim/after/lsp/<server>.lua (for example
after/lsp/rust_analyzer.lua), returning a config table Neovim's built-in
LSP client merges in (see :help lsp-config).
New splits open to the right and below, four lines of context remain above and
below the cursor when possible, commands that would discard unsaved changes ask
for confirmation, and :substitute results preview in a split before they are
applied. Bufferline shows open buffers across the top; use [b and ]b to move
between them, and Space b d to close the current buffer without closing its
editor window.
In the developer profile, vim resolves to Neovim while vi remains the
system editor.