atagen

malice

public
Star0
Watch0
5b26a2e7c0697a101090712f5cf74e95f37ca90c
2
ssh://brewery@pls.lobotomise.me:33/atagen/malice.git

Blame: flake.nix

973f8fbdaf80atagen2026-09-28 09:10 UTC1
{
973f8fbdaf80atagen2026-09-28 09:10 UTC2
  description = "Malice: a hosted Matrix client backed by macltok";
973f8fbdaf80atagen2026-09-28 09:10 UTC3
973f8fbdaf80atagen2026-09-28 09:10 UTC4
  inputs = {
973f8fbdaf80atagen2026-09-28 09:10 UTC5
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
973f8fbdaf80atagen2026-09-28 09:10 UTC6
    fenix = {
973f8fbdaf80atagen2026-09-28 09:10 UTC7
      url = "github:nix-community/fenix";
973f8fbdaf80atagen2026-09-28 09:10 UTC8
      inputs.nixpkgs.follows = "nixpkgs";
973f8fbdaf80atagen2026-09-28 09:10 UTC9
    };
973f8fbdaf80atagen2026-09-28 09:10 UTC10
  };
973f8fbdaf80atagen2026-09-28 09:10 UTC11
973f8fbdaf80atagen2026-09-28 09:10 UTC12
  outputs =
dffd63b58af4atagen2026-09-28 09:10 UTC13
    {
dffd63b58af4atagen2026-09-28 09:10 UTC14
      self,
dffd63b58af4atagen2026-09-28 09:10 UTC15
      nixpkgs,
dffd63b58af4atagen2026-09-28 09:10 UTC16
      fenix,
dffd63b58af4atagen2026-09-28 09:10 UTC17
    }:
973f8fbdaf80atagen2026-09-28 09:10 UTC18
    let
973f8fbdaf80atagen2026-09-28 09:10 UTC19
      systems = [
973f8fbdaf80atagen2026-09-28 09:10 UTC20
        "x86_64-linux"
973f8fbdaf80atagen2026-09-28 09:10 UTC21
        "aarch64-linux"
973f8fbdaf80atagen2026-09-28 09:10 UTC22
      ];
973f8fbdaf80atagen2026-09-28 09:10 UTC23
      forAllSystems = nixpkgs.lib.genAttrs systems;
dffd63b58af4atagen2026-09-28 09:10 UTC24
      cleanSrc =
dffd63b58af4atagen2026-09-28 09:10 UTC25
        root:
dffd63b58af4atagen2026-09-28 09:10 UTC26
        nixpkgs.lib.cleanSourceWith {
dffd63b58af4atagen2026-09-28 09:10 UTC27
          src = root;
dffd63b58af4atagen2026-09-28 09:10 UTC28
          filter =
dffd63b58af4atagen2026-09-28 09:10 UTC29
            path: type:
dffd63b58af4atagen2026-09-28 09:10 UTC30
            nixpkgs.lib.cleanSourceFilter path type
dffd63b58af4atagen2026-09-28 09:10 UTC31
            && !(
dffd63b58af4atagen2026-09-28 09:10 UTC32
              type == "directory"
dffd63b58af4atagen2026-09-28 09:10 UTC33
              && builtins.elem (baseNameOf path) [
dffd63b58af4atagen2026-09-28 09:10 UTC34
                "target"
dffd63b58af4atagen2026-09-28 09:10 UTC35
                "node_modules"
dffd63b58af4atagen2026-09-28 09:10 UTC36
                "dist"
dffd63b58af4atagen2026-09-28 09:10 UTC37
                "dist-device"
dffd63b58af4atagen2026-09-28 09:10 UTC38
              ]
dffd63b58af4atagen2026-09-28 09:10 UTC39
            );
dffd63b58af4atagen2026-09-28 09:10 UTC40
        };
973f8fbdaf80atagen2026-09-28 09:10 UTC41
      workerLock = builtins.fromTOML (builtins.readFile ./crates/malice-worker/Cargo.lock);
dffd63b58af4atagen2026-09-28 09:10 UTC42
      lockedVersion = name: (nixpkgs.lib.findFirst (p: p.name == name) null workerLock.package).version;
973f8fbdaf80atagen2026-09-28 09:10 UTC43
      # wasm-bindgen-test-runner refuses a module built by any other wasm-bindgen version
973f8fbdaf80atagen2026-09-28 09:10 UTC44
      wasmBindgenCli =
973f8fbdaf80atagen2026-09-28 09:10 UTC45
        pkgs:
973f8fbdaf80atagen2026-09-28 09:10 UTC46
        pkgs.buildWasmBindgenCli rec {
973f8fbdaf80atagen2026-09-28 09:10 UTC47
          src = pkgs.fetchCrate {
973f8fbdaf80atagen2026-09-28 09:10 UTC48
            pname = "wasm-bindgen-cli";
973f8fbdaf80atagen2026-09-28 09:10 UTC49
            version = lockedVersion "wasm-bindgen";
973f8fbdaf80atagen2026-09-28 09:10 UTC50
            hash = "sha256-a7lcXJnnZkYReja+iUO7NqqrWyv3toxnUgQb8s4IS5s=";
973f8fbdaf80atagen2026-09-28 09:10 UTC51
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC52
          cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
973f8fbdaf80atagen2026-09-28 09:10 UTC53
            inherit src;
973f8fbdaf80atagen2026-09-28 09:10 UTC54
            inherit (src) pname version;
973f8fbdaf80atagen2026-09-28 09:10 UTC55
            hash = "sha256-R1Tas33Ursy8kqsxguAkG0ZhNed2n5uFTAhw1l2qlLY=";
973f8fbdaf80atagen2026-09-28 09:10 UTC56
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC57
        };
973f8fbdaf80atagen2026-09-28 09:10 UTC58
      wasmToolchain =
973f8fbdaf80atagen2026-09-28 09:10 UTC59
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC60
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC61
          toolchains = fenix.packages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC62
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC63
        toolchains.combine [
973f8fbdaf80atagen2026-09-28 09:10 UTC64
          toolchains.stable.cargo
973f8fbdaf80atagen2026-09-28 09:10 UTC65
          toolchains.stable.clippy
973f8fbdaf80atagen2026-09-28 09:10 UTC66
          toolchains.stable.rustc
973f8fbdaf80atagen2026-09-28 09:10 UTC67
          toolchains.stable.rustfmt
973f8fbdaf80atagen2026-09-28 09:10 UTC68
          toolchains.stable.rust-src
973f8fbdaf80atagen2026-09-28 09:10 UTC69
          toolchains.targets.wasm32-unknown-unknown.stable.rust-std
973f8fbdaf80atagen2026-09-28 09:10 UTC70
        ];
dffd63b58af4atagen2026-09-28 09:10 UTC71
      webNodeModules =
dffd63b58af4atagen2026-09-28 09:10 UTC72
        pkgs:
dffd63b58af4atagen2026-09-28 09:10 UTC73
        pkgs.importNpmLock.buildNodeModules {
dffd63b58af4atagen2026-09-28 09:10 UTC74
          npmRoot = ./web;
dffd63b58af4atagen2026-09-28 09:10 UTC75
          nodejs = pkgs.nodejs_22;
dffd63b58af4atagen2026-09-28 09:10 UTC76
        };
dffd63b58af4atagen2026-09-28 09:10 UTC77
      buildWeb =
dffd63b58af4atagen2026-09-28 09:10 UTC78
        pkgs:
dffd63b58af4atagen2026-09-28 09:10 UTC79
        {
dffd63b58af4atagen2026-09-28 09:10 UTC80
          pname,
dffd63b58af4atagen2026-09-28 09:10 UTC81
          task,
dffd63b58af4atagen2026-09-28 09:10 UTC82
          outDir,
dffd63b58af4atagen2026-09-28 09:10 UTC83
          postPatch ? "",
dffd63b58af4atagen2026-09-28 09:10 UTC84
        }:
dffd63b58af4atagen2026-09-28 09:10 UTC85
        pkgs.stdenvNoCC.mkDerivation {
dffd63b58af4atagen2026-09-28 09:10 UTC86
          inherit pname postPatch;
dffd63b58af4atagen2026-09-28 09:10 UTC87
          version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC88
          src = cleanSrc ./web;
dffd63b58af4atagen2026-09-28 09:10 UTC89
          npmDeps = webNodeModules pkgs;
29f8ccacfdc7atagen2026-10-22 13:07 UTC90
          disallowedReferences = [
29f8ccacfdc7atagen2026-10-22 13:07 UTC91
            (webNodeModules pkgs)
29f8ccacfdc7atagen2026-10-22 13:07 UTC92
            pkgs.nodejs_22
29f8ccacfdc7atagen2026-10-22 13:07 UTC93
          ];
dffd63b58af4atagen2026-09-28 09:10 UTC94
          nativeBuildInputs = [
dffd63b58af4atagen2026-09-28 09:10 UTC95
            pkgs.nodejs_22
dffd63b58af4atagen2026-09-28 09:10 UTC96
            pkgs.importNpmLock.hooks.linkNodeModulesHook
dffd63b58af4atagen2026-09-28 09:10 UTC97
          ];
dffd63b58af4atagen2026-09-28 09:10 UTC98
          buildPhase = ''
dffd63b58af4atagen2026-09-28 09:10 UTC99
            runHook preBuild
dffd63b58af4atagen2026-09-28 09:10 UTC100
            export HOME=$TMPDIR
dffd63b58af4atagen2026-09-28 09:10 UTC101
            npm run ${task}
dffd63b58af4atagen2026-09-28 09:10 UTC102
            runHook postBuild
dffd63b58af4atagen2026-09-28 09:10 UTC103
          '';
dffd63b58af4atagen2026-09-28 09:10 UTC104
          installPhase = ''
dffd63b58af4atagen2026-09-28 09:10 UTC105
            runHook preInstall
dffd63b58af4atagen2026-09-28 09:10 UTC106
            mkdir -p $out/share/malice
dffd63b58af4atagen2026-09-28 09:10 UTC107
            cp -R ${outDir}/. $out/share/malice/
dffd63b58af4atagen2026-09-28 09:10 UTC108
            runHook postInstall
dffd63b58af4atagen2026-09-28 09:10 UTC109
          '';
dffd63b58af4atagen2026-09-28 09:10 UTC110
        };
973f8fbdaf80atagen2026-09-28 09:10 UTC111
    in
973f8fbdaf80atagen2026-09-28 09:10 UTC112
    {
973f8fbdaf80atagen2026-09-28 09:10 UTC113
      packages = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC114
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC115
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC116
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC117
          wasmPlatform = pkgs.makeRustPlatform {
973f8fbdaf80atagen2026-09-28 09:10 UTC118
            cargo = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC119
            rustc = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC120
          };
dffd63b58af4atagen2026-09-28 09:10 UTC121
          web = buildWeb pkgs {
973f8fbdaf80atagen2026-09-28 09:10 UTC122
            pname = "malice-web";
dffd63b58af4atagen2026-09-28 09:10 UTC123
            task = "build";
dffd63b58af4atagen2026-09-28 09:10 UTC124
            outDir = "dist";
973f8fbdaf80atagen2026-09-28 09:10 UTC125
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC126
          backend = pkgs.rustPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC127
            pname = "malice-server";
973f8fbdaf80atagen2026-09-28 09:10 UTC128
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC129
            src = cleanSrc ./.;
29f8ccacfdc7atagen2026-10-22 13:07 UTC130
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC131
              lockFile = ./Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC132
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC133
            };
973f8fbdaf80atagen2026-09-28 09:10 UTC134
            nativeBuildInputs = [ pkgs.pkg-config ];
973f8fbdaf80atagen2026-09-28 09:10 UTC135
            buildInputs = [ pkgs.sqlite ];
dffd63b58af4atagen2026-09-28 09:10 UTC136
            cargoBuildFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC137
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC138
              "malice"
dffd63b58af4atagen2026-09-28 09:10 UTC139
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC140
            cargoTestFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC141
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC142
              "malice"
dffd63b58af4atagen2026-09-28 09:10 UTC143
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC144
            # preBuild = "export NIX_BUILD_CORES=2";
973f8fbdaf80atagen2026-09-28 09:10 UTC145
            preCheck = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC146
              cargo build --release --bin malice --target ${pkgs.stdenv.hostPlatform.rust.rustcTarget} --offline --locked
973f8fbdaf80atagen2026-09-28 09:10 UTC147
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC148
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
973f8fbdaf80atagen2026-09-28 09:10 UTC149
          };
dffd63b58af4atagen2026-09-28 09:10 UTC150
          staticServer = pkgs.rustPlatform.buildRustPackage {
dffd63b58af4atagen2026-09-28 09:10 UTC151
            pname = "malice-static";
dffd63b58af4atagen2026-09-28 09:10 UTC152
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC153
            src = cleanSrc ./.;
29f8ccacfdc7atagen2026-10-22 13:07 UTC154
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC155
              lockFile = ./Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC156
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC157
            };
dffd63b58af4atagen2026-09-28 09:10 UTC158
            cargoBuildFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC159
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC160
              "malice-static"
dffd63b58af4atagen2026-09-28 09:10 UTC161
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC162
            cargoTestFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC163
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC164
              "malice-static"
dffd63b58af4atagen2026-09-28 09:10 UTC165
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC166
            meta.mainProgram = "malice-static";
dffd63b58af4atagen2026-09-28 09:10 UTC167
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC168
          server = pkgs.symlinkJoin {
973f8fbdaf80atagen2026-09-28 09:10 UTC169
            name = "malice";
973f8fbdaf80atagen2026-09-28 09:10 UTC170
            paths = [
973f8fbdaf80atagen2026-09-28 09:10 UTC171
              backend
973f8fbdaf80atagen2026-09-28 09:10 UTC172
              web
973f8fbdaf80atagen2026-09-28 09:10 UTC173
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC174
            nativeBuildInputs = [ pkgs.makeWrapper ];
973f8fbdaf80atagen2026-09-28 09:10 UTC175
            postBuild = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC176
              wrapProgram $out/bin/malice --set MALICE_WEB_DIR ${web}/share/malice
973f8fbdaf80atagen2026-09-28 09:10 UTC177
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC178
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC179
          # the wasm-bindgen `--target web` glue for malice-worker's `Host`, consumed by
973f8fbdaf80atagen2026-09-28 09:10 UTC180
          # web/src/worker/pkg (gitignored, worker-web's TS imports it as ./pkg/malice_worker.js)
973f8fbdaf80atagen2026-09-28 09:10 UTC181
          workerWasm = wasmPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC182
            pname = "malice-worker-wasm";
973f8fbdaf80atagen2026-09-28 09:10 UTC183
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC184
            src = cleanSrc ./.;
973f8fbdaf80atagen2026-09-28 09:10 UTC185
            cargoRoot = "crates/malice-worker";
29f8ccacfdc7atagen2026-10-22 13:07 UTC186
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC187
              lockFile = ./crates/malice-worker/Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC188
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC189
            };
dffd63b58af4atagen2026-09-28 09:10 UTC190
            nativeBuildInputs = [
dffd63b58af4atagen2026-09-28 09:10 UTC191
              (wasmBindgenCli pkgs)
dffd63b58af4atagen2026-09-28 09:10 UTC192
              pkgs.removeReferencesTo
dffd63b58af4atagen2026-09-28 09:10 UTC193
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC194
            buildPhase = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC195
              runHook preBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC196
              cd crates/malice-worker
973f8fbdaf80atagen2026-09-28 09:10 UTC197
              cargo build --offline --frozen --release --lib --target wasm32-unknown-unknown
973f8fbdaf80atagen2026-09-28 09:10 UTC198
              mkdir -p $out
973f8fbdaf80atagen2026-09-28 09:10 UTC199
              wasm-bindgen --target web --out-dir $out --out-name malice_worker \
973f8fbdaf80atagen2026-09-28 09:10 UTC200
                target/wasm32-unknown-unknown/release/malice_worker.wasm
dffd63b58af4atagen2026-09-28 09:10 UTC201
              remove-references-to -t ${wasmToolchain system} $out/*.wasm
973f8fbdaf80atagen2026-09-28 09:10 UTC202
              runHook postBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC203
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC204
            doCheck = false;
973f8fbdaf80atagen2026-09-28 09:10 UTC205
            installPhase = "true";
dffd63b58af4atagen2026-09-28 09:10 UTC206
            disallowedReferences = [ (wasmToolchain system) ];
973f8fbdaf80atagen2026-09-28 09:10 UTC207
          };
dffd63b58af4atagen2026-09-28 09:10 UTC208
          web-device = buildWeb pkgs {
973f8fbdaf80atagen2026-09-28 09:10 UTC209
            pname = "malice-web-device";
dffd63b58af4atagen2026-09-28 09:10 UTC210
            task = "build:device";
dffd63b58af4atagen2026-09-28 09:10 UTC211
            outDir = "dist-device";
973f8fbdaf80atagen2026-09-28 09:10 UTC212
            postPatch = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC213
              mkdir -p src/worker/pkg
973f8fbdaf80atagen2026-09-28 09:10 UTC214
              cp -R ${workerWasm}/. src/worker/pkg/
973f8fbdaf80atagen2026-09-28 09:10 UTC215
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC216
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC217
          local = pkgs.symlinkJoin {
973f8fbdaf80atagen2026-09-28 09:10 UTC218
            name = "malice-local";
973f8fbdaf80atagen2026-09-28 09:10 UTC219
            paths = [
dffd63b58af4atagen2026-09-28 09:10 UTC220
              staticServer
973f8fbdaf80atagen2026-09-28 09:10 UTC221
              web-device
973f8fbdaf80atagen2026-09-28 09:10 UTC222
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC223
            nativeBuildInputs = [ pkgs.makeWrapper ];
973f8fbdaf80atagen2026-09-28 09:10 UTC224
            postBuild = ''
dffd63b58af4atagen2026-09-28 09:10 UTC225
              wrapProgram $out/bin/malice-static \
dffd63b58af4atagen2026-09-28 09:10 UTC226
                --set MALICE_WEB_DIR ${web-device}/share/malice
973f8fbdaf80atagen2026-09-28 09:10 UTC227
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC228
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC229
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC230
        {
dffd63b58af4atagen2026-09-28 09:10 UTC231
          inherit
dffd63b58af4atagen2026-09-28 09:10 UTC232
            web
dffd63b58af4atagen2026-09-28 09:10 UTC233
            server
dffd63b58af4atagen2026-09-28 09:10 UTC234
            web-device
dffd63b58af4atagen2026-09-28 09:10 UTC235
            local
dffd63b58af4atagen2026-09-28 09:10 UTC236
            ;
973f8fbdaf80atagen2026-09-28 09:10 UTC237
          default = server;
973f8fbdaf80atagen2026-09-28 09:10 UTC238
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC239
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC240
973f8fbdaf80atagen2026-09-28 09:10 UTC241
      devShells = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC242
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC243
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC244
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC245
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC246
        {
973f8fbdaf80atagen2026-09-28 09:10 UTC247
          default = pkgs.mkShell {
973f8fbdaf80atagen2026-09-28 09:10 UTC248
            packages = [
973f8fbdaf80atagen2026-09-28 09:10 UTC249
              (wasmToolchain system)
973f8fbdaf80atagen2026-09-28 09:10 UTC250
              (wasmBindgenCli pkgs)
973f8fbdaf80atagen2026-09-28 09:10 UTC251
              pkgs.rust-analyzer
973f8fbdaf80atagen2026-09-28 09:10 UTC252
              pkgs.nodejs_22
dffd63b58af4atagen2026-09-28 09:10 UTC253
              pkgs.importNpmLock.hooks.linkNodeModulesHook
973f8fbdaf80atagen2026-09-28 09:10 UTC254
              pkgs.pkg-config
973f8fbdaf80atagen2026-09-28 09:10 UTC255
              pkgs.sqlite
973f8fbdaf80atagen2026-09-28 09:10 UTC256
              pkgs.firefox
973f8fbdaf80atagen2026-09-28 09:10 UTC257
              pkgs.geckodriver
dffd63b58af4atagen2026-09-28 09:10 UTC258
              pkgs.chromium
973f8fbdaf80atagen2026-09-28 09:10 UTC259
              pkgs.matrix-continuwuity
973f8fbdaf80atagen2026-09-28 09:10 UTC260
              pkgs.nushell
973f8fbdaf80atagen2026-09-28 09:10 UTC261
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC262
            CHROMIUM_PATH = nixpkgs.lib.getExe pkgs.chromium;
dffd63b58af4atagen2026-09-28 09:10 UTC263
            npmDeps = webNodeModules pkgs;
dffd63b58af4atagen2026-09-28 09:10 UTC264
            # the hook's own npmRoot would be a store path, so link into the checkout's web/ instead
dffd63b58af4atagen2026-09-28 09:10 UTC265
            shellHook = ''
dffd63b58af4atagen2026-09-28 09:10 UTC266
              npmRoot="$(git rev-parse --show-toplevel 2>/dev/null || pwd)/web" linkNodeModulesHook
dffd63b58af4atagen2026-09-28 09:10 UTC267
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC268
            # fenix's rustc links through its bundled rust-lld, which skips nix's ld-wrapper and so
973f8fbdaf80atagen2026-09-28 09:10 UTC269
            # the store rpaths, leaving the native server unable to find libsqlite3 at run time
dffd63b58af4atagen2026-09-28 09:10 UTC270
            "CARGO_TARGET_${
dffd63b58af4atagen2026-09-28 09:10 UTC271
              nixpkgs.lib.toUpper (builtins.replaceStrings [ "-" ] [ "_" ] pkgs.stdenv.hostPlatform.config)
dffd63b58af4atagen2026-09-28 09:10 UTC272
            }_RUSTFLAGS" =
973f8fbdaf80atagen2026-09-28 09:10 UTC273
              "-C linker-features=-lld";
973f8fbdaf80atagen2026-09-28 09:10 UTC274
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC275
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC276
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC277
973f8fbdaf80atagen2026-09-28 09:10 UTC278
      nixosModules.malice = import ./nix/module.nix { inherit self; };
973f8fbdaf80atagen2026-09-28 09:10 UTC279
      nixosModules.default = self.nixosModules.malice;
973f8fbdaf80atagen2026-09-28 09:10 UTC280
      checks = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC281
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC282
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC283
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC284
          wasmPlatform = pkgs.makeRustPlatform {
973f8fbdaf80atagen2026-09-28 09:10 UTC285
            cargo = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC286
            rustc = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC287
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC288
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
973f8fbdaf80atagen2026-09-28 09:10 UTC289
          # stdenv's deliberately bogus SSL_CERT_FILE. no exec, run.nu launches through a shell that exits at
973f8fbdaf80atagen2026-09-28 09:10 UTC290
          # once and would trip --die-with-parent, so this shell stays as the parent run.nu kills
973f8fbdaf80atagen2026-09-28 09:10 UTC291
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
973f8fbdaf80atagen2026-09-28 09:10 UTC292
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
973f8fbdaf80atagen2026-09-28 09:10 UTC293
            ${pkgs.lib.getExe pkgs.bubblewrap} --die-with-parent --dev-bind / / --tmpfs /etc \
973f8fbdaf80atagen2026-09-28 09:10 UTC294
              --ro-bind ${pkgs.writeText "resolv.conf" "nameserver 127.0.0.1\n"} /etc/resolv.conf \
973f8fbdaf80atagen2026-09-28 09:10 UTC295
              ${pkgs.lib.getExe' pkgs.matrix-continuwuity "conduwuit"} "$@"
973f8fbdaf80atagen2026-09-28 09:10 UTC296
          '';
973f8fbdaf80atagen2026-09-28 09:10 UTC297
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC298
        {
973f8fbdaf80atagen2026-09-28 09:10 UTC299
          default = self.packages.${system}.default;
973f8fbdaf80atagen2026-09-28 09:10 UTC300
          worker-wasm = self.packages.${system}.web-device;
f12c7de2a3abatagen2026-10-23 08:10 UTC301
          web = pkgs.stdenvNoCC.mkDerivation {
f12c7de2a3abatagen2026-10-23 08:10 UTC302
            pname = "malice-web-check";
f12c7de2a3abatagen2026-10-23 08:10 UTC303
            version = "0.1.0";
f12c7de2a3abatagen2026-10-23 08:10 UTC304
            src = cleanSrc ./web;
f12c7de2a3abatagen2026-10-23 08:10 UTC305
            npmDeps = webNodeModules pkgs;
f12c7de2a3abatagen2026-10-23 08:10 UTC306
            nativeBuildInputs = [
f12c7de2a3abatagen2026-10-23 08:10 UTC307
              pkgs.nodejs_22
f12c7de2a3abatagen2026-10-23 08:10 UTC308
              pkgs.importNpmLock.hooks.linkNodeModulesHook
f12c7de2a3abatagen2026-10-23 08:10 UTC309
            ];
f12c7de2a3abatagen2026-10-23 08:10 UTC310
            buildPhase = ''
f12c7de2a3abatagen2026-10-23 08:10 UTC311
              runHook preBuild
f12c7de2a3abatagen2026-10-23 08:10 UTC312
              export HOME=$TMPDIR
f12c7de2a3abatagen2026-10-23 08:10 UTC313
              npm run check
f12c7de2a3abatagen2026-10-23 08:10 UTC314
              npm test
f12c7de2a3abatagen2026-10-23 08:10 UTC315
              runHook postBuild
f12c7de2a3abatagen2026-10-23 08:10 UTC316
            '';
f12c7de2a3abatagen2026-10-23 08:10 UTC317
            installPhase = "touch $out";
f12c7de2a3abatagen2026-10-23 08:10 UTC318
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC319
          worker-browser = wasmPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC320
            pname = "malice-worker-browser-check";
973f8fbdaf80atagen2026-09-28 09:10 UTC321
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC322
            src = cleanSrc ./.;
973f8fbdaf80atagen2026-09-28 09:10 UTC323
            cargoRoot = "crates/malice-worker";
29f8ccacfdc7atagen2026-10-22 13:07 UTC324
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC325
              lockFile = ./crates/malice-worker/Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC326
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC327
            };
973f8fbdaf80atagen2026-09-28 09:10 UTC328
            nativeBuildInputs = [
973f8fbdaf80atagen2026-09-28 09:10 UTC329
              (wasmBindgenCli pkgs)
973f8fbdaf80atagen2026-09-28 09:10 UTC330
              pkgs.firefox
973f8fbdaf80atagen2026-09-28 09:10 UTC331
              pkgs.geckodriver
973f8fbdaf80atagen2026-09-28 09:10 UTC332
              sandboxedHomeserver
973f8fbdaf80atagen2026-09-28 09:10 UTC333
              pkgs.nushell
973f8fbdaf80atagen2026-09-28 09:10 UTC334
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC335
            buildPhase = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC336
              runHook preBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC337
              export HOME=$TMPDIR
973f8fbdaf80atagen2026-09-28 09:10 UTC338
              nu --no-config-file crates/malice-worker/run.nu
973f8fbdaf80atagen2026-09-28 09:10 UTC339
              runHook postBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC340
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC341
            doCheck = false;
973f8fbdaf80atagen2026-09-28 09:10 UTC342
            installPhase = "touch $out";
973f8fbdaf80atagen2026-09-28 09:10 UTC343
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC344
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC345
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC346
    };
973f8fbdaf80atagen2026-09-28 09:10 UTC347
}