{ description = "hyperhive — multi-Claude-Code-agent orchestration on nixos-containers"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ self, nixpkgs, nixpkgs-unstable, naersk, treefmt-nix, }: let inherit (nixpkgs) lib; systems = [ "aarch64-linux" "x86_64-linux" ]; treefmt-config = { projectRootFile = "flake.nix"; programs = { keep-sorted.enable = true; nixfmt.enable = true; rustfmt.enable = true; }; }; forAllSystems = f: lib.genAttrs systems ( system: f rec { inherit system; pkgs = nixpkgs.legacyPackages.${system}; treefmt-eval = treefmt-nix.lib.evalModule pkgs treefmt-config; naersk-lib = pkgs.callPackage naersk { }; } ); in { packages = forAllSystems ( { naersk-lib, ... }: { default = naersk-lib.buildPackage { src = ./.; meta.description = "hyperhive workspace (hive-c0re, hive-ag3nt, hive-m1nd)"; }; } ); overlays = { default = final: prev: { hyperhive = self.packages.${prev.stdenv.hostPlatform.system}.default; }; claude-unstable = final: prev: let unstable = import nixpkgs-unstable { inherit (prev.stdenv.hostPlatform) system; config.allowUnfreePredicate = pkg: builtins.elem (prev.lib.getName pkg) [ "claude-code" ]; }; in { inherit (unstable) claude-code; }; }; nixosModules = { agent-base = ./nix/templates/agent-base.nix; hive-c0re = ./nix/modules/hive-c0re.nix; }; nixosConfigurations.agent-base = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.agent-base { nixpkgs.overlays = [ self.overlays.default self.overlays.claude-unstable ]; } ]; }; devShells = forAllSystems ( { pkgs, ... }: { default = pkgs.mkShell { packages = with pkgs; [ cargo clippy pkg-config rust-analyzer rustc rustfmt sqlite ]; }; } ); formatter = forAllSystems ({ treefmt-eval, ... }: treefmt-eval.config.build.wrapper); checks = forAllSystems ( { treefmt-eval, ... }: { formatting = treefmt-eval.config.build.check self; } ); }; }