atagen

malice

public
Star0
Watch0
81e91c6568a294819a15f19b1e5d9c51639610d6
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;
d9be72fdb393atagen2026-10-26 09:23 UTC89
          MALICE_BUILD = "${toString self.lastModified}-${self.shortRev or self.dirtyShortRev or "dirty"}";
dffd63b58af4atagen2026-09-28 09:10 UTC90
          npmDeps = webNodeModules pkgs;
29f8ccacfdc7atagen2026-10-22 13:07 UTC91
          disallowedReferences = [
29f8ccacfdc7atagen2026-10-22 13:07 UTC92
            (webNodeModules pkgs)
29f8ccacfdc7atagen2026-10-22 13:07 UTC93
            pkgs.nodejs_22
29f8ccacfdc7atagen2026-10-22 13:07 UTC94
          ];
dffd63b58af4atagen2026-09-28 09:10 UTC95
          nativeBuildInputs = [
dffd63b58af4atagen2026-09-28 09:10 UTC96
            pkgs.nodejs_22
dffd63b58af4atagen2026-09-28 09:10 UTC97
            pkgs.importNpmLock.hooks.linkNodeModulesHook
54e1929170a7atagen2026-10-26 03:48 UTC98
            pkgs.brotli
dffd63b58af4atagen2026-09-28 09:10 UTC99
          ];
dffd63b58af4atagen2026-09-28 09:10 UTC100
          buildPhase = ''
dffd63b58af4atagen2026-09-28 09:10 UTC101
            runHook preBuild
dffd63b58af4atagen2026-09-28 09:10 UTC102
            export HOME=$TMPDIR
dffd63b58af4atagen2026-09-28 09:10 UTC103
            npm run ${task}
dffd63b58af4atagen2026-09-28 09:10 UTC104
            runHook postBuild
dffd63b58af4atagen2026-09-28 09:10 UTC105
          '';
dffd63b58af4atagen2026-09-28 09:10 UTC106
          installPhase = ''
dffd63b58af4atagen2026-09-28 09:10 UTC107
            runHook preInstall
dffd63b58af4atagen2026-09-28 09:10 UTC108
            mkdir -p $out/share/malice
dffd63b58af4atagen2026-09-28 09:10 UTC109
            cp -R ${outDir}/. $out/share/malice/
54e1929170a7atagen2026-10-26 03:48 UTC110
            find $out/share/malice -type f \( -name '*.wasm' -o -name '*.js' -o -name '*.css' -o -name '*.html' -o -name '*.svg' -o -name '*.json' -o -name '*.webmanifest' \) -size +1k \
54e1929170a7atagen2026-10-26 03:48 UTC111
              -exec brotli --best --keep {} \; -exec gzip -9 --keep {} \;
dffd63b58af4atagen2026-09-28 09:10 UTC112
            runHook postInstall
dffd63b58af4atagen2026-09-28 09:10 UTC113
          '';
dffd63b58af4atagen2026-09-28 09:10 UTC114
        };
973f8fbdaf80atagen2026-09-28 09:10 UTC115
    in
973f8fbdaf80atagen2026-09-28 09:10 UTC116
    {
973f8fbdaf80atagen2026-09-28 09:10 UTC117
      packages = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC118
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC119
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC120
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC121
          wasmPlatform = pkgs.makeRustPlatform {
973f8fbdaf80atagen2026-09-28 09:10 UTC122
            cargo = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC123
            rustc = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC124
          };
dffd63b58af4atagen2026-09-28 09:10 UTC125
          web = buildWeb pkgs {
973f8fbdaf80atagen2026-09-28 09:10 UTC126
            pname = "malice-web";
dffd63b58af4atagen2026-09-28 09:10 UTC127
            task = "build";
dffd63b58af4atagen2026-09-28 09:10 UTC128
            outDir = "dist";
973f8fbdaf80atagen2026-09-28 09:10 UTC129
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC130
          backend = pkgs.rustPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC131
            pname = "malice-server";
973f8fbdaf80atagen2026-09-28 09:10 UTC132
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC133
            src = cleanSrc ./.;
29f8ccacfdc7atagen2026-10-22 13:07 UTC134
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC135
              lockFile = ./Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC136
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC137
            };
973f8fbdaf80atagen2026-09-28 09:10 UTC138
            nativeBuildInputs = [ pkgs.pkg-config ];
973f8fbdaf80atagen2026-09-28 09:10 UTC139
            buildInputs = [ pkgs.sqlite ];
dffd63b58af4atagen2026-09-28 09:10 UTC140
            cargoBuildFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC141
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC142
              "malice"
dffd63b58af4atagen2026-09-28 09:10 UTC143
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC144
            cargoTestFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC145
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC146
              "malice"
dffd63b58af4atagen2026-09-28 09:10 UTC147
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC148
            # preBuild = "export NIX_BUILD_CORES=2";
973f8fbdaf80atagen2026-09-28 09:10 UTC149
            preCheck = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC150
              cargo build --release --bin malice --target ${pkgs.stdenv.hostPlatform.rust.rustcTarget} --offline --locked
973f8fbdaf80atagen2026-09-28 09:10 UTC151
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC152
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
973f8fbdaf80atagen2026-09-28 09:10 UTC153
          };
dffd63b58af4atagen2026-09-28 09:10 UTC154
          staticServer = pkgs.rustPlatform.buildRustPackage {
dffd63b58af4atagen2026-09-28 09:10 UTC155
            pname = "malice-static";
dffd63b58af4atagen2026-09-28 09:10 UTC156
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC157
            src = cleanSrc ./.;
29f8ccacfdc7atagen2026-10-22 13:07 UTC158
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC159
              lockFile = ./Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC160
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC161
            };
dffd63b58af4atagen2026-09-28 09:10 UTC162
            cargoBuildFlags = [
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
            cargoTestFlags = [
dffd63b58af4atagen2026-09-28 09:10 UTC167
              "-p"
dffd63b58af4atagen2026-09-28 09:10 UTC168
              "malice-static"
dffd63b58af4atagen2026-09-28 09:10 UTC169
            ];
aa3dce5114d0atagen2026-10-26 06:09 UTC170
            SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
dffd63b58af4atagen2026-09-28 09:10 UTC171
            meta.mainProgram = "malice-static";
dffd63b58af4atagen2026-09-28 09:10 UTC172
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC173
          server = pkgs.symlinkJoin {
973f8fbdaf80atagen2026-09-28 09:10 UTC174
            name = "malice";
973f8fbdaf80atagen2026-09-28 09:10 UTC175
            paths = [
973f8fbdaf80atagen2026-09-28 09:10 UTC176
              backend
973f8fbdaf80atagen2026-09-28 09:10 UTC177
              web
973f8fbdaf80atagen2026-09-28 09:10 UTC178
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC179
            nativeBuildInputs = [ pkgs.makeWrapper ];
973f8fbdaf80atagen2026-09-28 09:10 UTC180
            postBuild = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC181
              wrapProgram $out/bin/malice --set MALICE_WEB_DIR ${web}/share/malice
973f8fbdaf80atagen2026-09-28 09:10 UTC182
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC183
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC184
          # the wasm-bindgen `--target web` glue for malice-worker's `Host`, consumed by
973f8fbdaf80atagen2026-09-28 09:10 UTC185
          # web/src/worker/pkg (gitignored, worker-web's TS imports it as ./pkg/malice_worker.js)
973f8fbdaf80atagen2026-09-28 09:10 UTC186
          workerWasm = wasmPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC187
            pname = "malice-worker-wasm";
973f8fbdaf80atagen2026-09-28 09:10 UTC188
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC189
            src = cleanSrc ./.;
973f8fbdaf80atagen2026-09-28 09:10 UTC190
            cargoRoot = "crates/malice-worker";
29f8ccacfdc7atagen2026-10-22 13:07 UTC191
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC192
              lockFile = ./crates/malice-worker/Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC193
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC194
            };
dffd63b58af4atagen2026-09-28 09:10 UTC195
            nativeBuildInputs = [
dffd63b58af4atagen2026-09-28 09:10 UTC196
              (wasmBindgenCli pkgs)
dffd63b58af4atagen2026-09-28 09:10 UTC197
              pkgs.removeReferencesTo
dffd63b58af4atagen2026-09-28 09:10 UTC198
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC199
            buildPhase = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC200
              runHook preBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC201
              cd crates/malice-worker
973f8fbdaf80atagen2026-09-28 09:10 UTC202
              cargo build --offline --frozen --release --lib --target wasm32-unknown-unknown
973f8fbdaf80atagen2026-09-28 09:10 UTC203
              mkdir -p $out
973f8fbdaf80atagen2026-09-28 09:10 UTC204
              wasm-bindgen --target web --out-dir $out --out-name malice_worker \
973f8fbdaf80atagen2026-09-28 09:10 UTC205
                target/wasm32-unknown-unknown/release/malice_worker.wasm
dffd63b58af4atagen2026-09-28 09:10 UTC206
              remove-references-to -t ${wasmToolchain system} $out/*.wasm
973f8fbdaf80atagen2026-09-28 09:10 UTC207
              runHook postBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC208
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC209
            doCheck = false;
973f8fbdaf80atagen2026-09-28 09:10 UTC210
            installPhase = "true";
dffd63b58af4atagen2026-09-28 09:10 UTC211
            disallowedReferences = [ (wasmToolchain system) ];
973f8fbdaf80atagen2026-09-28 09:10 UTC212
          };
dffd63b58af4atagen2026-09-28 09:10 UTC213
          web-device = buildWeb pkgs {
973f8fbdaf80atagen2026-09-28 09:10 UTC214
            pname = "malice-web-device";
dffd63b58af4atagen2026-09-28 09:10 UTC215
            task = "build:device";
dffd63b58af4atagen2026-09-28 09:10 UTC216
            outDir = "dist-device";
973f8fbdaf80atagen2026-09-28 09:10 UTC217
            postPatch = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC218
              mkdir -p src/worker/pkg
973f8fbdaf80atagen2026-09-28 09:10 UTC219
              cp -R ${workerWasm}/. src/worker/pkg/
973f8fbdaf80atagen2026-09-28 09:10 UTC220
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC221
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC222
          local = pkgs.symlinkJoin {
973f8fbdaf80atagen2026-09-28 09:10 UTC223
            name = "malice-local";
6d7dff75a67datagen2026-10-26 09:10 UTC224
            meta.mainProgram = "malice-static";
973f8fbdaf80atagen2026-09-28 09:10 UTC225
            paths = [
dffd63b58af4atagen2026-09-28 09:10 UTC226
              staticServer
973f8fbdaf80atagen2026-09-28 09:10 UTC227
              web-device
973f8fbdaf80atagen2026-09-28 09:10 UTC228
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC229
            nativeBuildInputs = [ pkgs.makeWrapper ];
973f8fbdaf80atagen2026-09-28 09:10 UTC230
            postBuild = ''
dffd63b58af4atagen2026-09-28 09:10 UTC231
              wrapProgram $out/bin/malice-static \
dffd63b58af4atagen2026-09-28 09:10 UTC232
                --set MALICE_WEB_DIR ${web-device}/share/malice
973f8fbdaf80atagen2026-09-28 09:10 UTC233
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC234
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC235
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC236
        {
dffd63b58af4atagen2026-09-28 09:10 UTC237
          inherit
dffd63b58af4atagen2026-09-28 09:10 UTC238
            web
dffd63b58af4atagen2026-09-28 09:10 UTC239
            server
dffd63b58af4atagen2026-09-28 09:10 UTC240
            web-device
dffd63b58af4atagen2026-09-28 09:10 UTC241
            local
dffd63b58af4atagen2026-09-28 09:10 UTC242
            ;
973f8fbdaf80atagen2026-09-28 09:10 UTC243
          default = server;
973f8fbdaf80atagen2026-09-28 09:10 UTC244
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC245
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC246
973f8fbdaf80atagen2026-09-28 09:10 UTC247
      devShells = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC248
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC249
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC250
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC251
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC252
        {
973f8fbdaf80atagen2026-09-28 09:10 UTC253
          default = pkgs.mkShell {
973f8fbdaf80atagen2026-09-28 09:10 UTC254
            packages = [
973f8fbdaf80atagen2026-09-28 09:10 UTC255
              (wasmToolchain system)
973f8fbdaf80atagen2026-09-28 09:10 UTC256
              (wasmBindgenCli pkgs)
973f8fbdaf80atagen2026-09-28 09:10 UTC257
              pkgs.rust-analyzer
973f8fbdaf80atagen2026-09-28 09:10 UTC258
              pkgs.nodejs_22
dffd63b58af4atagen2026-09-28 09:10 UTC259
              pkgs.importNpmLock.hooks.linkNodeModulesHook
973f8fbdaf80atagen2026-09-28 09:10 UTC260
              pkgs.pkg-config
973f8fbdaf80atagen2026-09-28 09:10 UTC261
              pkgs.sqlite
973f8fbdaf80atagen2026-09-28 09:10 UTC262
              pkgs.firefox
973f8fbdaf80atagen2026-09-28 09:10 UTC263
              pkgs.geckodriver
dffd63b58af4atagen2026-09-28 09:10 UTC264
              pkgs.chromium
973f8fbdaf80atagen2026-09-28 09:10 UTC265
              pkgs.matrix-continuwuity
973f8fbdaf80atagen2026-09-28 09:10 UTC266
              pkgs.nushell
973f8fbdaf80atagen2026-09-28 09:10 UTC267
            ];
dffd63b58af4atagen2026-09-28 09:10 UTC268
            CHROMIUM_PATH = nixpkgs.lib.getExe pkgs.chromium;
dffd63b58af4atagen2026-09-28 09:10 UTC269
            npmDeps = webNodeModules pkgs;
dffd63b58af4atagen2026-09-28 09:10 UTC270
            # the hook's own npmRoot would be a store path, so link into the checkout's web/ instead
dffd63b58af4atagen2026-09-28 09:10 UTC271
            shellHook = ''
dffd63b58af4atagen2026-09-28 09:10 UTC272
              npmRoot="$(git rev-parse --show-toplevel 2>/dev/null || pwd)/web" linkNodeModulesHook
dffd63b58af4atagen2026-09-28 09:10 UTC273
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC274
            # fenix's rustc links through its bundled rust-lld, which skips nix's ld-wrapper and so
973f8fbdaf80atagen2026-09-28 09:10 UTC275
            # the store rpaths, leaving the native server unable to find libsqlite3 at run time
dffd63b58af4atagen2026-09-28 09:10 UTC276
            "CARGO_TARGET_${
dffd63b58af4atagen2026-09-28 09:10 UTC277
              nixpkgs.lib.toUpper (builtins.replaceStrings [ "-" ] [ "_" ] pkgs.stdenv.hostPlatform.config)
dffd63b58af4atagen2026-09-28 09:10 UTC278
            }_RUSTFLAGS" =
973f8fbdaf80atagen2026-09-28 09:10 UTC279
              "-C linker-features=-lld";
973f8fbdaf80atagen2026-09-28 09:10 UTC280
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC281
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC282
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC283
973f8fbdaf80atagen2026-09-28 09:10 UTC284
      nixosModules.malice = import ./nix/module.nix { inherit self; };
973f8fbdaf80atagen2026-09-28 09:10 UTC285
      nixosModules.default = self.nixosModules.malice;
973f8fbdaf80atagen2026-09-28 09:10 UTC286
      checks = forAllSystems (
973f8fbdaf80atagen2026-09-28 09:10 UTC287
        system:
973f8fbdaf80atagen2026-09-28 09:10 UTC288
        let
973f8fbdaf80atagen2026-09-28 09:10 UTC289
          pkgs = nixpkgs.legacyPackages.${system};
973f8fbdaf80atagen2026-09-28 09:10 UTC290
          wasmPlatform = pkgs.makeRustPlatform {
973f8fbdaf80atagen2026-09-28 09:10 UTC291
            cargo = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC292
            rustc = wasmToolchain system;
973f8fbdaf80atagen2026-09-28 09:10 UTC293
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC294
          # continuwuity refuses to start without /etc/resolv.conf, which the build sandbox lacks, or with
973f8fbdaf80atagen2026-09-28 09:10 UTC295
          # stdenv's deliberately bogus SSL_CERT_FILE. no exec, run.nu launches through a shell that exits at
973f8fbdaf80atagen2026-09-28 09:10 UTC296
          # once and would trip --die-with-parent, so this shell stays as the parent run.nu kills
973f8fbdaf80atagen2026-09-28 09:10 UTC297
          sandboxedHomeserver = pkgs.writeShellScriptBin "conduwuit" ''
973f8fbdaf80atagen2026-09-28 09:10 UTC298
            export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
973f8fbdaf80atagen2026-09-28 09:10 UTC299
            ${pkgs.lib.getExe pkgs.bubblewrap} --die-with-parent --dev-bind / / --tmpfs /etc \
973f8fbdaf80atagen2026-09-28 09:10 UTC300
              --ro-bind ${pkgs.writeText "resolv.conf" "nameserver 127.0.0.1\n"} /etc/resolv.conf \
973f8fbdaf80atagen2026-09-28 09:10 UTC301
              ${pkgs.lib.getExe' pkgs.matrix-continuwuity "conduwuit"} "$@"
973f8fbdaf80atagen2026-09-28 09:10 UTC302
          '';
973f8fbdaf80atagen2026-09-28 09:10 UTC303
        in
973f8fbdaf80atagen2026-09-28 09:10 UTC304
        {
973f8fbdaf80atagen2026-09-28 09:10 UTC305
          default = self.packages.${system}.default;
973f8fbdaf80atagen2026-09-28 09:10 UTC306
          worker-wasm = self.packages.${system}.web-device;
f12c7de2a3abatagen2026-10-23 08:10 UTC307
          web = pkgs.stdenvNoCC.mkDerivation {
f12c7de2a3abatagen2026-10-23 08:10 UTC308
            pname = "malice-web-check";
f12c7de2a3abatagen2026-10-23 08:10 UTC309
            version = "0.1.0";
f12c7de2a3abatagen2026-10-23 08:10 UTC310
            src = cleanSrc ./web;
f12c7de2a3abatagen2026-10-23 08:10 UTC311
            npmDeps = webNodeModules pkgs;
f12c7de2a3abatagen2026-10-23 08:10 UTC312
            nativeBuildInputs = [
f12c7de2a3abatagen2026-10-23 08:10 UTC313
              pkgs.nodejs_22
f12c7de2a3abatagen2026-10-23 08:10 UTC314
              pkgs.importNpmLock.hooks.linkNodeModulesHook
f12c7de2a3abatagen2026-10-23 08:10 UTC315
            ];
f12c7de2a3abatagen2026-10-23 08:10 UTC316
            buildPhase = ''
f12c7de2a3abatagen2026-10-23 08:10 UTC317
              runHook preBuild
f12c7de2a3abatagen2026-10-23 08:10 UTC318
              export HOME=$TMPDIR
f12c7de2a3abatagen2026-10-23 08:10 UTC319
              npm run check
f12c7de2a3abatagen2026-10-23 08:10 UTC320
              npm test
f12c7de2a3abatagen2026-10-23 08:10 UTC321
              runHook postBuild
f12c7de2a3abatagen2026-10-23 08:10 UTC322
            '';
f12c7de2a3abatagen2026-10-23 08:10 UTC323
            installPhase = "touch $out";
f12c7de2a3abatagen2026-10-23 08:10 UTC324
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC325
          worker-browser = wasmPlatform.buildRustPackage {
973f8fbdaf80atagen2026-09-28 09:10 UTC326
            pname = "malice-worker-browser-check";
973f8fbdaf80atagen2026-09-28 09:10 UTC327
            version = "0.1.0";
dffd63b58af4atagen2026-09-28 09:10 UTC328
            src = cleanSrc ./.;
973f8fbdaf80atagen2026-09-28 09:10 UTC329
            cargoRoot = "crates/malice-worker";
29f8ccacfdc7atagen2026-10-22 13:07 UTC330
            cargoLock = {
29f8ccacfdc7atagen2026-10-22 13:07 UTC331
              lockFile = ./crates/malice-worker/Cargo.lock;
29f8ccacfdc7atagen2026-10-22 13:07 UTC332
              allowBuiltinFetchGit = true;
29f8ccacfdc7atagen2026-10-22 13:07 UTC333
            };
973f8fbdaf80atagen2026-09-28 09:10 UTC334
            nativeBuildInputs = [
973f8fbdaf80atagen2026-09-28 09:10 UTC335
              (wasmBindgenCli pkgs)
973f8fbdaf80atagen2026-09-28 09:10 UTC336
              pkgs.firefox
973f8fbdaf80atagen2026-09-28 09:10 UTC337
              pkgs.geckodriver
973f8fbdaf80atagen2026-09-28 09:10 UTC338
              sandboxedHomeserver
973f8fbdaf80atagen2026-09-28 09:10 UTC339
              pkgs.nushell
973f8fbdaf80atagen2026-09-28 09:10 UTC340
            ];
973f8fbdaf80atagen2026-09-28 09:10 UTC341
            buildPhase = ''
973f8fbdaf80atagen2026-09-28 09:10 UTC342
              runHook preBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC343
              export HOME=$TMPDIR
973f8fbdaf80atagen2026-09-28 09:10 UTC344
              nu --no-config-file crates/malice-worker/run.nu
973f8fbdaf80atagen2026-09-28 09:10 UTC345
              runHook postBuild
973f8fbdaf80atagen2026-09-28 09:10 UTC346
            '';
973f8fbdaf80atagen2026-09-28 09:10 UTC347
            doCheck = false;
973f8fbdaf80atagen2026-09-28 09:10 UTC348
            installPhase = "touch $out";
973f8fbdaf80atagen2026-09-28 09:10 UTC349
          };
973f8fbdaf80atagen2026-09-28 09:10 UTC350
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC351
      );
973f8fbdaf80atagen2026-09-28 09:10 UTC352
    };
973f8fbdaf80atagen2026-09-28 09:10 UTC353
}