{ description = "Scobleclaw — NixOS + home-manager configuration for personal laptop (x86_64) and work Mac (aarch64)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; pi-mono = { url = "git+https://os.scoble.me/forgejo/sscoble/pi-mono.git"; flake = false; }; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; }; outputs = { self, nixpkgs, home-manager, pi-mono, nixos-hardware, ... }@inputs: let linuxSystem = "x86_64-linux"; darwinSystem = "aarch64-darwin"; # Linux pkgs with overlay (pi, qmd) linuxPkgs = import nixpkgs { system = linuxSystem; overlays = [ self.overlays.default ]; }; in { # === Overlay: pi + qmd (Linux only) === overlays.default = final: prev: { pi-coding-agent = final.buildNpmPackage { pname = "pi-coding-agent"; version = "0.73.0"; src = pi-mono; npmDepsHash = ""; # Fill after first build npmWorkspace = "packages/coding-agent"; npmFlags = [ "--legacy-peer-deps" ]; dontNpmBuild = true; preConfigure = '' cd packages/ai && npm run build && cd ../.. cd packages/agent && npm run build && cd ../.. cd packages/tui && npm run build && cd ../.. cd packages/coding-agent && npm run build && cd ../.. ''; installPhase = '' runHook preInstall mkdir -p $out/lib/node_modules/@mariozechner/pi-coding-agent cp -r packages/coding-agent/dist $out/lib/node_modules/@mariozechner/pi-coding-agent/ cp packages/coding-agent/package.json $out/lib/node_modules/@mariozechner/pi-coding-agent/ mkdir -p $out/bin cat > $out/bin/pi <<'EOF' #!/usr/bin/env bash exec ${final.nodejs}/bin/node $out/lib/node_modules/@mariozechner/pi-coding-agent/dist/cli.js "$@" EOF chmod +x $out/bin/pi runHook postInstall ''; }; qmd = final.writeShellScriptBin "qmd" '' exec ${final.bun}/bin/bunx --bun @tobilu/qmd "$@" ''; }; # === NixOS: full system + desktop === nixosConfigurations.laptop = nixpkgs.lib.nixosSystem { system = linuxSystem; modules = [ home-manager.nixosModules.home-manager ./modules/laptop.nix ./modules/hyprland.nix ./modules/t490.nix nixos-hardware.nixosModules.lenovo-thinkpad-t490 { nixpkgs.config.allowUnfree = true; } { home-manager = { useGlobalPkgs = true; useUserPackages = true; users.sscoble = { imports = [ ./home/sscoble.nix ./home/desktop.nix ./home/wgu.nix ]; }; }; } ]; }; # === VM: minimal NixOS for testing (aarch64, UTM) === nixosConfigurations.vm = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ home-manager.nixosModules.home-manager ./modules/vm.nix { nixpkgs.config.allowUnfree = true; } { home-manager = { useGlobalPkgs = true; useUserPackages = true; users.sscoble = { imports = [ ./home/sscoble.nix ./home/wgu.nix ]; }; }; } ]; }; # === macOS: home-manager standalone (no desktop, no Hyprland) === homeConfigurations.sscoble = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages.${darwinSystem}; modules = [ ./home/sscoble.nix ./home/wgu.nix { home.homeDirectory = "/Users/sscoble"; nixpkgs.config.allowUnfree = true; } ]; }; # === Dev shell (Linux) === devShells.${linuxSystem}.default = linuxPkgs.mkShell { buildInputs = with linuxPkgs; [ pi-coding-agent qmd nodejs bun git zsh ]; shellHook = '' echo "🦞 Scobleclaw dev shell" echo " pi: $(which pi)" echo " qmd: $(which qmd)" echo " node: $(node --version)" echo " bun: $(bun --version)" ''; }; }; }