Highly ambitious ATProtocol AppView service and sdks
at main 3.0 kB view raw
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}