{"id":50521112,"url":"https://github.com/dryvist/nix-ai","last_synced_at":"2026-06-07T05:02:45.401Z","repository":{"id":341045644,"uuid":"1168340986","full_name":"dryvist/nix-ai","owner":"dryvist","description":"Your AI coding toolkit, declared in Nix — Claude, Gemini, Copilot, 15+ MCP servers, one flake","archived":false,"fork":false,"pushed_at":"2026-05-29T03:50:56.000Z","size":2542,"stargazers_count":9,"open_issues_count":71,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T04:15:27.859Z","etag":null,"topics":["ai","ai-tools","claude","claude-code","copilot","gemini","home-manager","mcp-server","nix","nix-flakes","ollama"],"latest_commit_sha":null,"homepage":null,"language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dryvist.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-27T09:22:53.000Z","updated_at":"2026-05-29T03:50:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"618243fc-9eb3-4922-8d21-e6b703ba544d","html_url":"https://github.com/dryvist/nix-ai","commit_stats":null,"previous_names":["jacobpevans/nix-ai","dryvist/nix-ai"],"tags_count":164,"template":false,"template_full_name":null,"purl":"pkg:github/dryvist/nix-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fnix-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fnix-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fnix-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fnix-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dryvist","download_url":"https://codeload.github.com/dryvist/nix-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fnix-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33847265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-tools","claude","claude-code","copilot","gemini","home-manager","mcp-server","nix","nix-flakes","ollama"],"created_at":"2026-06-03T04:03:08.134Z","updated_at":"2026-06-03T04:03:12.582Z","avatar_url":"https://github.com/dryvist.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nix-ai\n\n[![CI](https://github.com/JacobPEvans/nix-ai/actions/workflows/ci-gate.yml/badge.svg)](https://github.com/JacobPEvans/nix-ai/actions/workflows/ci-gate.yml)\n\n## Your AI coding toolkit, declared once. Reproduced everywhere\n\nEver spent hours configuring Claude Code plugins, Gemini settings, and MCP servers\n-- only to lose it all when you switch machines?\n**nix-ai** captures your entire AI setup as code using [Nix](https://nixos.org/).\nOne command rebuilds everything, identically, every time.\n\n---\n\n## What it manages\n\n| Tool | What you get |\n| ---- | ------------ |\n| **Claude Code** | [Plugin ecosystem](modules/claude/README.md), hooks, agents, commands, rules, statusline |\n| **Gemini CLI** | Settings, custom commands, permission rules |\n| **GitHub Copilot** | Configuration, permissions |\n| **OpenAI Codex** | Settings |\n| **MCP Servers** | 15+ servers — GitHub, Terraform, Context7, PAL, filesystem, memory, and more |\n| **Plugin Marketplace** | [Curated marketplaces](modules/claude/plugins/README.md) with Nix-pinned flake inputs |\n| **AI Dev Tools** | cclint, doppler-mcp, claude-flow, sync-mlx-models |\n| **MLX** | Local Apple Silicon inference via vllm-mlx with macOS launchd integration |\n\n## Prerequisites\n\n- [Nix](https://nixos.org/) (Determinate Nix recommended)\n- [home-manager](https://github.com/nix-community/home-manager)\n- Compatible platform: `aarch64-darwin` or `x86_64-linux`\n\n## Quick start\n\nAdd to your Nix flake:\n\n```nix\n{\n  inputs.nix-ai = {\n    url = \"github:JacobPEvans/nix-ai\";\n    inputs.nixpkgs.follows = \"nixpkgs\";\n    inputs.home-manager.follows = \"home-manager\";\n  };\n}\n```\n\nThen in your home-manager config:\n\n```nix\nsharedModules = [ nix-ai.homeManagerModules.default ];\n```\n\nThat's it. Every AI tool, every plugin, every permission rule — managed by Nix.\n\n## How it works\n\nnix-ai exports [home-manager](https://github.com/nix-community/home-manager) modules that merge into your existing configuration:\n\n| Export | What it includes |\n| ------ | --------------- |\n| `homeManagerModules.default` | Full AI stack — Claude, Gemini, Copilot, Codex, MCP, MLX, dev tools |\n| `homeManagerModules.claude` | Just Claude Code |\n| `homeManagerModules.codex` | Just OpenAI Codex |\n| `homeManagerModules.maestro` | Just Maestro orchestration |\n| `lib.ci.claudeSettingsJson` | Pure JSON for CI validation (no derivations needed) |\n| `lib.ci.codexRules` | Codex rules export for CI validation and downstream consumers |\n| `lib.aiStackModels` | Role-name → physical model ID registry (plain attrset, no module system needed) |\n\n### Cross-repo consumption — `lib.aiStackModels`\n\n`lib.aiStackModels` is a plain attrset (no home-manager module system required) mapping stable\ncapability-class names to physical `mlx-community/*` model IDs. Foreign consumers such as the\norbstack-kubernetes Bifrost gateway can import it directly so `model: \"default\"` resolves\nprefix-free without duplicating the registry.\n\n```nix\ninputs.nix-ai.url = \"github:JacobPEvans/nix-ai\";\n# ...\n# Build Bifrost alias table from role names to mlx-local/ prefixed physical IDs\naliases = lib.mapAttrs\n  (_role: physical: \"mlx-local/${physical}\")\n  inputs.nix-ai.lib.aiStackModels;\n```\n\nThe module option `services.aiStack.models` remains the public API for nix-ai home-manager\nconsumers; `lib.aiStackModels` is for foreign consumers that do not import the module.\n\n### Self-contained design\n\nThe module injects its own dependencies via `_module.args`. Your consuming flake only needs two lines:\n\n```nix\ninputs.nixpkgs.follows = \"nixpkgs\";\ninputs.home-manager.follows = \"home-manager\";\n```\n\nNo AI-specific inputs to wire up. No extra configuration. It just works.\n\n## Available module options\n\nKey enable toggles exposed by the default module:\n\n| Option | Type | Default | Description |\n| ------ | ---- | ------- | ----------- |\n| `programs.claude.enable` | bool | — | Enable Claude Code configuration |\n| `programs.claude.apiKeyHelper.enable` | bool | false | Headless API key authentication via Bitwarden |\n| `programs.claudeStatusline.enable` | bool | false | Claude Code powerline statusline |\n| `programs.claude.settings.sandbox.enabled` | bool | false | Filesystem/network sandbox isolation |\n| `programs.claude.settings.alwaysThinkingEnabled` | bool | true | Extended thinking mode |\n| `programs.claude.remoteControlAtStartup` | bool or null | null | Remote Control auto-start |\n| `programs.claude.model` | string or null | null | Override default model (e.g. `\"opus\"`, `\"sonnet\"`) |\n| `programs.claude.effortLevel` | enum or null | `null` | Adaptive reasoning effort (`\"low\"`, `\"medium\"`, `\"high\"`); null = upstream default (medium for Max/Team as of v2.1.68) |\n| `programs.claude.trustedProjectDirs` | list of str | `[]` | Base directories for auto-trust of CLAUDE.md imports |\n\nFor the full option set, see [`modules/claude/options.nix`](modules/claude/options.nix).\n\n## Testing and validation\n\nRun quality checks locally:\n\n```bash\nnix flake check\n```\n\nThis runs formatting (nixfmt), static analysis (statix), dead code detection (deadnix),\nshell script linting (shellcheck), and full module evaluation (module-eval) to verify\nthe home-manager module instantiates correctly with real inputs.\n\nFix formatting automatically:\n\n```bash\nnix fmt\n```\n\n## Repository structure\n\n```text\nmodules/\n├── claude/          # Claude Code module — see [modules/claude/README.md](modules/claude/README.md)\n├── maestro/         # Maestro agent orchestration\n├── mcp/             # 15+ MCP server definitions\n├── common/          # Shared permission engine\n├── gh-extensions/   # GitHub CLI extensions (gh-aw)\n├── permissions/     # Per-tool permission rules\n├── mlx/             # MLX inference server (vllm-mlx)\n├── ai-tools.nix     # AI development tool packages\n├── gemini.nix       # Gemini CLI configuration\n├── copilot.nix      # GitHub Copilot configuration\n└── codex.nix        # OpenAI Codex configuration\nlib/                  # Key lib files (not full listing)\n├── claude-settings.nix    # Pure settings generator\n└── claude-registry.nix    # Marketplace format functions\n```\n\n## Part of a trio\n\nThis repo is one of three that work together:\n\n| Repo | What it does |\n| ---- | ------------ |\n| **nix-ai** (you are here) | AI coding tools |\n| [nix-home](https://github.com/JacobPEvans/nix-home) | Dev environment (git, zsh, VS Code, tmux) |\n| [nix-darwin](https://github.com/JacobPEvans/nix-darwin) | macOS system config (consumes both) |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdryvist%2Fnix-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdryvist%2Fnix-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdryvist%2Fnix-ai/lists"}