# vim: ft=nix : { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; flake-utils.url = "github:numtide/flake-utils/main"; nix-filter.url = "github:numtide/nix-filter/main"; cq = { url = "github:vinszent/cq-flake/main"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; clef = { url = "https://pub.npry.dev/clef"; flake = false; }; }; description = "tiny kite-borne sensor node"; outputs = { self, nixpkgs, flake-utils, ... } @ inputs: let kicadOverlay = final: prev: { opencascade-occt_7_6 = prev.opencascade-occt_7_6.overrideAttrs (finalAttrs: prevAttrs: { buildInputs = (prevAttrs.buildInputs or []) ++ [ prev.rapidjson ]; cmakeFlags = (prevAttrs.cmakeFlags or []) ++ [ "-DUSE_RAPIDJSON=1" ]; }); kicad = prev.kicad.override { with3d = true; withI18n = false; addons = with prev.kicadAddons; [ kikit kikit-library ]; }; kikit = let version = "1.6.0"; in prev.kikit.overridePythonAttrs { inherit version; src = final.fetchFromGitHub { owner = "yaqwsx"; repo = "KiKit"; rev = "refs/tags/v${version}"; hash = "sha256-r8LQcy3I6hmcrU/6HfPAYJd+cEZdhad6DUldC9HvXZU="; }; doCheck = false; }; }; mkPkgs = system: import nixpkgs { inherit system; overlays = [ kicadOverlay (final: prev: { nix-filter = inputs.nix-filter.lib; }) (final: prev: { inherit (inputs.cq.packages.${system}) cadquery; }) ]; }; mkPkg = pkgs: pkgs.callPackage ./nix { name = "ocularium"; src = ./.; main_pcb = "okm.kicad_pcb"; main_sch = "okm.kicad_sch"; layers = 4; outPath = "share/npry/ocularium"; }; in (flake-utils.lib.eachDefaultSystem (system: let pkgs = mkPkgs system; pkg = mkPkg pkgs; in { packages = { default = pkg; ocularium = pkg; }; devShells.default = pkgs.mkShell { name = "devshell"; version = self.rev or "dirty"; packages = with pkgs; [ kicad kikit ]; }; legacyPackages = pkgs // self.packages; }) ) // { overlays = { default = final: prev: self.packages.${prev.system}; kicad = kicadOverlay; }; }; }