atagen

malice

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