2025-12-20 21:32:06 +01:00
---
2026-01-30 03:15:10 +01:00
summary: "Install OpenClaw declaratively with Nix"
2025-12-20 21:32:06 +01:00
read_when:
2026-01-05 00:22:15 +01:00
- You want reproducible, rollback-able installs
- You're already using Nix/NixOS/Home Manager
- You want everything pinned and managed declaratively
2026-01-31 16:04:03 -05:00
title: "Nix"
2025-12-20 21:32:06 +01:00
---
2026-01-05 00:22:15 +01:00
# Nix Installation
2026-03-19 12:05:23 -07:00
Install OpenClaw declaratively with ** [nix-openclaw ](https://github.com/openclaw/nix-openclaw )** -- a batteries-included Home Manager module.
2026-01-05 00:22:15 +01:00
2026-03-19 12:05:23 -07:00
< Info >
The [nix-openclaw ](https://github.com/openclaw/nix-openclaw ) repo is the source of truth for Nix installation. This page is a quick overview.
< / Info >
2026-01-05 00:22:15 +01:00
2026-03-19 12:05:23 -07:00
## What You Get
2026-01-05 00:22:15 +01:00
2026-03-19 12:05:23 -07:00
- Gateway + macOS app + tools (whisper, spotify, cameras) -- all pinned
2026-01-05 00:22:15 +01:00
- Launchd service that survives reboots
- Plugin system with declarative config
- Instant rollback: `home-manager switch --rollback`
2026-03-19 12:05:23 -07:00
## Quick Start
< Steps >
< Step title = "Install Determinate Nix" >
If Nix is not already installed, follow the [Determinate Nix installer ](https://github.com/DeterminateSystems/nix-installer ) instructions.
< / Step >
< Step title = "Create a local flake" >
Use the agent-first template from the nix-openclaw repo:
```bash
mkdir -p ~/code/openclaw-local
# Copy templates/agent-first/flake.nix from the nix-openclaw repo
```
< / Step >
< Step title = "Configure secrets" >
Set up your messaging bot token and model provider API key. Plain files at `~/.secrets/` work fine.
< / Step >
< Step title = "Fill in template placeholders and switch" >
```bash
home-manager switch
```
< / Step >
< Step title = "Verify" >
Confirm the launchd service is running and your bot responds to messages.
< / Step >
< / Steps >
See the [nix-openclaw README ](https://github.com/openclaw/nix-openclaw ) for full module options and examples.
2026-01-05 00:22:15 +01:00
## Nix Mode Runtime Behavior
2026-03-19 12:05:23 -07:00
When `OPENCLAW_NIX_MODE=1` is set (automatic with nix-openclaw), OpenClaw enters a deterministic mode that disables auto-install flows.
2025-12-20 21:32:06 +01:00
2026-03-19 12:05:23 -07:00
You can also set it manually:
2025-12-20 21:32:06 +01:00
2026-01-05 00:22:15 +01:00
```bash
2026-03-19 12:05:23 -07:00
export OPENCLAW_NIX_MODE=1
2025-12-20 21:32:06 +01:00
```
2026-03-19 12:05:23 -07:00
On macOS, the GUI app does not automatically inherit shell environment variables. Enable Nix mode via defaults instead:
2025-12-20 21:32:06 +01:00
2026-01-05 00:22:15 +01:00
```bash
2026-02-25 05:03:20 +00:00
defaults write ai.openclaw.mac openclaw.nixMode -bool true
2025-12-20 21:32:06 +01:00
```
2026-03-19 12:05:23 -07:00
### What changes in Nix mode
2025-12-20 21:32:06 +01:00
2026-03-19 12:05:23 -07:00
- Auto-install and self-mutation flows are disabled
- Missing dependencies surface Nix-specific remediation messages
- UI surfaces a read-only Nix mode banner
2025-12-20 21:32:06 +01:00
2026-03-19 12:05:23 -07:00
### Config and state paths
2025-12-20 21:32:06 +01:00
2026-03-19 12:05:23 -07:00
OpenClaw reads JSON5 config from `OPENCLAW_CONFIG_PATH` and stores mutable data in `OPENCLAW_STATE_DIR` . When running under Nix, set these explicitly to Nix-managed locations so runtime state and config stay out of the immutable store.
2025-12-20 21:32:06 +01:00
2026-03-19 12:05:23 -07:00
| Variable | Default |
| ---------------------- | --------------------------------------- |
| `OPENCLAW_HOME` | `HOME` / `USERPROFILE` / `os.homedir()` |
| `OPENCLAW_STATE_DIR` | `~/.openclaw` |
| `OPENCLAW_CONFIG_PATH` | `$OPENCLAW_STATE_DIR/openclaw.json` |
2025-12-20 21:32:06 +01:00
2026-01-05 00:22:15 +01:00
## Related
2026-03-19 12:05:23 -07:00
- [nix-openclaw ](https://github.com/openclaw/nix-openclaw ) -- full setup guide
- [Wizard ](/start/wizard ) -- non-Nix CLI setup
- [Docker ](/install/docker ) -- containerized setup