atagen

macltok

public
Star0
Watch0
7ef213f192883084fc424e8c97b269dd0b79d399
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git
flake.nixNix178 lines5.8 KB
1
{
2
  inputs = {
3
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
4
    fenix = {
5
      url = "github:nix-community/fenix";
6
      inputs.nixpkgs.follows = "nixpkgs";
7
    };
8
  };
9
10
  outputs =
11
    {
12
      self,
13
      nixpkgs,
14
      fenix,
15
    }:
16
    let
17
      forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
18
      webManifest = builtins.fromTOML (builtins.readFile ./harness/web/Cargo.toml);
19
      storeFeature = nixpkgs.lib.removePrefix "macltok/" (builtins.head webManifest.features.store);
20
      webLock = builtins.fromTOML (builtins.readFile ./harness/web/Cargo.lock);
21
      lockedVersion =
22
        name: (nixpkgs.lib.findFirst (p: p.name == name) null webLock.package).version;
23
      # wasm-bindgen-test-runner refuses a module built by any other wasm-bindgen version
24
      wasmBindgenCli =
25
        pkgs:
26
        pkgs.buildWasmBindgenCli rec {
27
          src = pkgs.fetchCrate {
28
            pname = "wasm-bindgen-cli";
29
            version = lockedVersion "wasm-bindgen";
30
            hash = "sha256-a7lcXJnnZkYReja+iUO7NqqrWyv3toxnUgQb8s4IS5s=";
31
          };
32
          cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
33
            inherit src;
34
            inherit (src) pname version;
35
            hash = "sha256-R1Tas33Ursy8kqsxguAkG0ZhNed2n5uFTAhw1l2qlLY=";
36
          };
37
        };
38
      wasmToolchain =
39
        system:
40
        let
41
          toolchains = fenix.packages.${system};
42
        in
43
        toolchains.combine [
44
          toolchains.stable.cargo
45
          toolchains.stable.clippy
46
          toolchains.stable.rustc
47
          toolchains.stable.rustfmt
48
          toolchains.stable.rust-src
49
          toolchains.targets.wasm32-unknown-unknown.stable.rust-std
50
        ];
51
    in
52
    {
53
      packages = forAllSystems (
54
        system:
55
        let
56
          pkgs = nixpkgs.legacyPackages.${system};
57
        in
58
        {
59
          default = pkgs.rustPlatform.buildRustPackage {
60
            pname = "macltok";
61
            version = "0.1.0";
62
            src = self;
63
            cargoLock.lockFile = ./Cargo.lock;
64
            preBuild = "export NIX_BUILD_CORES=2";
65
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
66
          };
67
        }
68
      );
69
70
      checks = forAllSystems (
71
        system:
72
        let
73
          pkgs = nixpkgs.legacyPackages.${system};
74
          toolchain = wasmToolchain system;
75
          wasmPlatform = pkgs.makeRustPlatform {
76
            cargo = toolchain;
77
            rustc = toolchain;
78
          };
79
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
80
          # stdenv's deliberately bogus SSL_CERT_FILE. no exec, run.nu launches through a shell that exits at
81
          # once and would trip --die-with-parent, so this shell stays as the parent run.nu kills
82
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
83
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
84
            ${pkgs.lib.getExe pkgs.bubblewrap} --die-with-parent --dev-bind / / --tmpfs /etc \
85
              --ro-bind ${pkgs.writeText "resolv.conf" "nameserver 127.0.0.1\n"} /etc/resolv.conf \
86
              ${pkgs.lib.getExe' pkgs.matrix-continuwuity "conduwuit"} "$@"
87
          '';
88
        in
89
        {
90
          default = self.packages.${system}.default;
91
          sqlite = pkgs.rustPlatform.buildRustPackage {
92
            pname = "macltok-sqlite-check";
93
            version = "0.1.0";
94
            src = self;
95
            cargoLock.lockFile = ./Cargo.lock;
96
            preBuild = "export NIX_BUILD_CORES=2";
97
            buildFeatures = [
98
              "sqlite"
99
              "mirror"
100
            ];
101
            nativeBuildInputs = [ pkgs.pkg-config ];
102
            buildInputs = [ pkgs.sqlite ];
103
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
104
          };
105
          wasm = wasmPlatform.buildRustPackage {
106
            pname = "macltok-wasm-check";
107
            version = "0.1.0";
108
            src = self;
109
            cargoLock.lockFile = ./Cargo.lock;
110
            buildPhase = ''
111
              runHook preBuild
112
              cargo check --offline --frozen --lib --target wasm32-unknown-unknown -j 2
113
              cargo check --offline --frozen --lib \
114
                --target wasm32-unknown-unknown --features ${storeFeature},mirror -j 2
115
              runHook postBuild
116
            '';
117
            doCheck = false;
118
            installPhase = "touch $out";
119
          };
120
          web = wasmPlatform.buildRustPackage {
121
            pname = "macltok-web-check";
122
            version = "0.1.0";
123
            src = self;
124
            cargoRoot = "harness/web";
125
            cargoLock.lockFile = ./harness/web/Cargo.lock;
126
            nativeBuildInputs = with pkgs; [
127
              (wasmBindgenCli pkgs)
128
              firefox
129
              geckodriver
130
              sandboxedHomeserver
131
              nushell
132
            ];
133
            buildPhase = ''
134
              runHook preBuild
135
              export HOME=$TMPDIR
136
              nu --no-config-file harness/web/run.nu
137
              runHook postBuild
138
            '';
139
            doCheck = false;
140
            installPhase = "touch $out";
141
          };
142
        }
143
      );
144
145
      devShells = forAllSystems (
146
        system:
147
        let
148
          pkgs = nixpkgs.legacyPackages.${system};
149
        in
150
        {
151
          default = pkgs.mkShell {
152
            packages = with pkgs; [
153
              cargo
154
              clippy
155
              pkg-config
156
              rust-analyzer
157
              rustc
158
              rustfmt
159
              sqlite
160
            ];
161
          };
162
          web = pkgs.mkShell {
163
            packages = with pkgs; [
164
              (wasmToolchain system)
165
              (wasmBindgenCli pkgs)
166
              binaryen
167
              brotli
168
              firefox
169
              geckodriver
170
              matrix-continuwuity
171
              nushell
172
            ];
173
            MACLTOK_STORE_FEATURE = storeFeature;
174
          };
175
        }
176
      );
177
    };
178
}