on master help sign in
warden/flake.nix
133 lines 4.5 kB history raw
1{
2 inputs = {
3 flake-utils.url = "github:numtide/flake-utils";
4 bw = {
5 url =
6 # Afer this commit they started requiring path at the top level and I can't deal with this right now
7 "github:bitwarden/clients?rev=ff143760d4f527f2349333ee4b3004eeda68fac5";
8 flake = false;
9 };
10 spago2nix.url = "github:justinwoo/spago2nix";
11 easy-ps = {
12 url = "github:justinwoo/easy-purescript-nix";
13 flake = false;
14 };
15 vanilla = {
16 url = "github:ilyakooo0/vanilla-compiled";
17 flake = false;
18 };
19 nix-filter.url = "github:numtide/nix-filter";
20 };
22 outputs = inputs@{ self, nixpkgs, flake-utils, spago2nix, ... }:
23 flake-utils.lib.eachDefaultSystem (system:
24 let
25 pkgs = import nixpkgs { inherit system; };
26 spagoPkgs = pkgs.callPackage ./spago-packages.nix { };
27 easy-ps = pkgs.callPackage inputs.easy-ps { };
28 nix-filter = import inputs.nix-filter;
30 bw = pkgs.buildNpmPackage {
31 pname = "bw";
32 version = "latest";
33 npmDepsHash = "sha256-jQvL7/SzXqVk03ncU6Mxq8lqFFy+lIrF2QheheXrQ0w=";
34 makeCacheWritable = true;
35 src = inputs.bw;
36 nativeBuildInputs = [ pkgs.python3 ];
37 buildPhase = ''
38 (cd libs/common/ && rm -r spec && find . -name "*.spec.ts" -exec rm {} \; && npm exec -c "tsc -m es2020 -t es2018") '';
39 installPhase = ''
40 mkdir -p $out
41 cp -r libs/shared/dist/* $out
42 cp -r node_modules $out/node_modules
43 cp package.json $out/package.json
44 '';
45 ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
46 };
48 backendBuildScript = pkgs.writeScript "build-backend.sh" ''
49 workdir=$(mktemp -d)
50 (
51 cd $workdir
52 cp -r $1 ./backend
53 cp -r ${bw} ./bw
54 cp ${./backend-main.js} backend.js
55 ${pkgs.esbuild}/bin/esbuild backend.js --bundle --define:ENVIRONMENT_IS_WEB=true --define:ENVIRONMENT_IS_WORKER=false --define:ENVIRONMENT_IS_NODE=false --define:ENVIRONMENT_IS_SHELL=false --external:fs --external:path --loader:.wasm=base64 --outfile=$out
56 )
58 '';
59 backend-js = pkgs.stdenv.mkDerivation {
60 name = "backend-js";
61 buildInputs =
62 [ spagoPkgs.installSpagoStyle spagoPkgs.buildSpagoStyle ];
63 nativeBuildInputs = [ easy-ps.purs-0_15_7 easy-ps.spago ];
64 src = nix-filter {
65 root = ./.;
66 include = [
67 ./spago.dhall
68 ./packages.dhall
69 (nix-filter.inDirectory ./backend)
70 ];
71 };
72 unpackPhase = ''
73 cp $src/spago.dhall .
74 cp $src/packages.dhall .
75 cp -r $src/backend .
76 install-spago-style
77 '';
78 buildPhase = ''
79 build-spago-style "./backend/**/*.purs"
80 '';
81 installPhase = ''
82 mkdir $out
83 cp -r output/* $out/
84 '';
85 };
87 backend =
88 pkgs.runCommand "backend.js" { buildInputs = [ pkgs.esbuild ]; } ''
89 ${backendBuildScript} ${backend-js}
90 '';
92 frontend = pkgs.callPackage ./frontend.nix { inherit nix-filter; };
94 warden-src = pkgs.runCommand "warden-src" { } ''
95 mkdir -p $out
97 cp ${backend} $out/backend.js
98 cp -r ${frontend}/Main.min.js $out/elm.js
99 cp ${./index.html} $out/index.html
100 cp ${./style.css} $out/style.css
101 cp -r ${inputs.vanilla} $out/vanilla
102 '';
104 warden-click-src = pkgs.runCommand "warden-click-src" { } ''
105 mkdir -p $out
107 cp ${./warden.apparmor} $out/warden.apparmor
108 cp ${./warden.desktop} $out/warden.desktop
109 cp ${./manifest.json} $out/manifest.json
110 cp ${./logo.png} $out/logo.png
111 cp -r ${warden-src}/* $out/
112 '';
114 warden = pkgs.writeScript "warden" ''
115 ${pkgs.electron}/bin/electron ${warden-src}/index.html
116 '';
118 in {
119 packages = {
120 inherit bw frontend warden-src backendBuildScript warden-click-src;
121 vanilla = inputs.vanilla.outPath;
122 };
123 apps = {
124 inherit (spago2nix.apps.${system}) spago2nix;
125 warden = {
126 type = "app";
127 program = warden.outPath;
128 };
129 };
131 devShells.default = import ./shell.nix { inherit pkgs; };
132 });