katja's git: oeffisearch

fast and simple tripplanner

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
{

  description = "trainsearch";

  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";

  outputs = inputs: let
    forAllSystems = function:
      inputs.nixpkgs.lib.genAttrs [
        "x86_64-linux"
        "aarch64-linux"
        "aarch64-darwin"
      ] (system: function (import inputs.nixpkgs {
        system   = system;
        overlays = [ inputs.self.overlays.default ];
      }));

  in {

    packages = forAllSystems (pkgs: {
      default     = pkgs.oeffisearch;
      trainsearch = pkgs.oeffisearch;
    });

    devShells = forAllSystems (pkgs: {
      default = pkgs.mkShell {
        buildInputs = with pkgs; [
          nodePackages.pnpm
          nginx
        ];
        shellHook = ''
          export NODE_OPTIONS=--openssl-legacy-provider
          sed "s?PWD?$(pwd)?g" < ./nginx.conf > /tmp/nginx-oeffisearch.conf
          pnpm install
          pnpm dev
          exit
        '';
      };
    });

    overlays.default = final: prev: {
      oeffisearch = final.stdenv.mkDerivation (finalAttrs: {
        pname = "oeffisearch";
        version = finalAttrs.env.GIT_VERSION;

        src  = inputs.self;

        nativeBuildInputs = [
          final.nodejs
          final.pnpm.configHook
        ];

        pnpmDeps = final.pnpm.fetchDeps {
          inherit (finalAttrs) pname version src;
          hash = "sha256-nkop8iBvXmC9pHnwY0ylzHtw3mUIG95JYiQ5cKZtqUY=";
        };

        env.GIT_VERSION    = if (inputs.self.sourceInfo ? shortRev) then inputs.self.sourceInfo.shortRev else "dirty";
        env.GIT_COMMIT     = if (inputs.self.sourceInfo ? rev)      then inputs.self.sourceInfo.rev      else "dirty";
        env.GIT_COMMITDATE = builtins.concatStringsSep "-" (builtins.match "(.{4})(.{2})(.{2}).*" inputs.self.lastModifiedDate);

        buildPhase = ''
          pnpm build
        '';

        installPhase = ''
          cp -r dist $out
        '';
      });
    };
  };

}