laptop-config/flake.nix
2026-05-13 00:43:33 -07:00

140 lines
4.1 KiB
Nix

{
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;
};
};
outputs = { self, nixpkgs, home-manager, pi-mono, ... }@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
{ 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)"
'';
};
};
}