aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
blob: 8cc182a5a9399226dfac84331d8868793dcbd06e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# 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;
    };
  };
}