atagen

macltok

public
Star0
Watch0
c495e7521c3aa091380ce9439c827634e53838d6
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git
flake.nixNix188 lines6.0 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 = {
64
              lockFile = ./Cargo.lock;
65
              allowBuiltinFetchGit = true;
66
            };
67
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
68
          };
69
        }
70
      );
71
72
      checks = forAllSystems (
73
        system:
74
        let
75
          pkgs = nixpkgs.legacyPackages.${system};
76
          toolchain = wasmToolchain system;
77
          wasmPlatform = pkgs.makeRustPlatform {
78
            cargo = toolchain;
79
            rustc = toolchain;
80
          };
81
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
82
          # stdenv's deliberately bogus SSL_CERT_FILE. no exec, run.nu launches through a shell that exits at
83
          # once and would trip --die-with-parent, so this shell stays as the parent run.nu kills
84
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
85
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
86
            ${pkgs.lib.getExe pkgs.bubblewrap} --die-with-parent --dev-bind / / --tmpfs /etc \
87
              --ro-bind ${pkgs.writeText "resolv.conf" "nameserver 127.0.0.1\n"} /etc/resolv.conf \
88
              ${pkgs.lib.getExe' pkgs.matrix-continuwuity "conduwuit"} "$@"
89
          '';
90
        in
91
        {
92
          default = self.packages.${system}.default;
93
          sqlite = pkgs.rustPlatform.buildRustPackage {
94
            pname = "macltok-sqlite-check";
95
            version = "0.1.0";
96
            src = self;
97
            cargoLock = {
98
              lockFile = ./Cargo.lock;
99
              allowBuiltinFetchGit = true;
100
            };
101
            buildFeatures = [
102
              "sqlite"
103
              "mirror"
104
            ];
105
            nativeBuildInputs = [ pkgs.pkg-config ];
106
            buildInputs = [ pkgs.sqlite ];
107
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
108
          };
109
          wasm = wasmPlatform.buildRustPackage {
110
            pname = "macltok-wasm-check";
111
            version = "0.1.0";
112
            src = self;
113
            cargoLock = {
114
              lockFile = ./Cargo.lock;
115
              allowBuiltinFetchGit = true;
116
            };
117
            buildPhase = ''
118
              runHook preBuild
119
              cargo check --offline --frozen --lib --target wasm32-unknown-unknown -j $NIX_BUILD_CORES
120
              cargo check --offline --frozen --lib \
121
                --target wasm32-unknown-unknown --features ${storeFeature},mirror -j $NIX_BUILD_CORES
122
              runHook postBuild
123
            '';
124
            doCheck = false;
125
            installPhase = "touch $out";
126
          };
127
          web = wasmPlatform.buildRustPackage {
128
            pname = "macltok-web-check";
129
            version = "0.1.0";
130
            src = self;
131
            cargoRoot = "harness/web";
132
            cargoLock = {
133
              lockFile = ./harness/web/Cargo.lock;
134
              allowBuiltinFetchGit = true;
135
            };
136
            nativeBuildInputs = with pkgs; [
137
              (wasmBindgenCli pkgs)
138
              firefox
139
              geckodriver
140
              sandboxedHomeserver
141
              nushell
142
            ];
143
            buildPhase = ''
144
              runHook preBuild
145
              export HOME=$TMPDIR
146
              nu --no-config-file harness/web/run.nu
147
              runHook postBuild
148
            '';
149
            doCheck = false;
150
            installPhase = "touch $out";
151
          };
152
        }
153
      );
154
155
      devShells = forAllSystems (
156
        system:
157
        let
158
          pkgs = nixpkgs.legacyPackages.${system};
159
        in
160
        {
161
          default = pkgs.mkShell {
162
            packages = with pkgs; [
163
              cargo
164
              clippy
165
              pkg-config
166
              rust-analyzer
167
              rustc
168
              rustfmt
169
              sqlite
170
            ];
171
          };
172
          web = pkgs.mkShell {
173
            packages = with pkgs; [
174
              (wasmToolchain system)
175
              (wasmBindgenCli pkgs)
176
              binaryen
177
              brotli
178
              firefox
179
              geckodriver
180
              matrix-continuwuity
181
              nushell
182
            ];
183
            MACLTOK_STORE_FEATURE = storeFeature;
184
          };
185
        }
186
      );
187
    };
188
}