Highly ambitious ATProtocol AppView service and sdks
1{
2 description = "Frontend for Slices";
3
4 inputs = {
5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6 };
7
8 outputs = { self, nixpkgs }:
9 let
10 systems = [ "x86_64-linux" "aarch64-darwin" ];
11 forAllSystems = nixpkgs.lib.genAttrs systems;
12
13 mkPackagesForSystem = system:
14 let
15 pkgs = import nixpkgs {
16 inherit system;
17 config = { allowUnfree = true; };
18 };
19
20 # Compile the Deno binary with all dependencies
21 slice-frontend = pkgs.stdenv.mkDerivation {
22 pname = "slice-frontend";
23 version = "0.1.0";
24 src = ./.;
25
26 nativeBuildInputs = [ pkgs.deno ];
27
28 # Fixed output derivation to allow network access
29 outputHashMode = "recursive";
30 outputHashAlgo = "sha256";
31 outputHash = "sha256-Gfi8gkC2pYtiFktpU/qBzehLIhciEla7ECWGYWSUnXw=";
32
33 buildPhase = ''
34 export HOME=$PWD
35 export DENO_DIR=$PWD/.deno
36 mkdir -p .deno
37 mkdir -p $out/bin
38 deno compile -A --unstable-kv --no-check --target x86_64-unknown-linux-gnu --output $out/bin/slice-frontend src/main.ts
39 '';
40 };
41
42 # Docker image for frontend
43 frontendImg = pkgs.dockerTools.buildImage {
44 name = "slice-frontend";
45 tag = "latest";
46 fromImage = pkgs.dockerTools.pullImage {
47 imageName = "debian";
48 imageDigest = "sha256:45f2e735295654f13e3be10da2a6892c708f71a71be845818f0058565d2d2076";
49 sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
50 };
51 copyToRoot = pkgs.buildEnv {
52 name = "image-root";
53 paths = [
54 slice-frontend
55 pkgs.sqlite
56 pkgs.cacert
57 ];
58 pathsToLink = [ "/bin" "/etc" ];
59 };
60
61 runAsRoot = ''
62 #!${pkgs.runtimeShell}
63 # Create data directory for Deno KV with proper permissions
64 mkdir -p /data
65 chmod 755 /data
66 '';
67
68 config = {
69 Cmd = [ "/bin/slice-frontend" ];
70 ExposedPorts = {
71 "8080/tcp" = {};
72 };
73 WorkingDir = "/";
74 Env = [
75 "PORT=8080"
76 "DATABASE_URL=sqlite:///data/slices.db"
77 ];
78 };
79 };
80
81 in
82 {
83 inherit slice-frontend frontendImg;
84 default = slice-frontend;
85 };
86 in
87 {
88 packages = forAllSystems mkPackagesForSystem;
89
90 devShells = forAllSystems (system:
91 let
92 pkgs = import nixpkgs { inherit system; };
93 in
94 {
95 default = pkgs.mkShell {
96 packages = with pkgs; [
97 deno
98 nixpkgs-fmt
99 ];
100 };
101 });
102 };
103}