{ description = "Frontend for Slices"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs }: let systems = [ "x86_64-linux" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs systems; mkPackagesForSystem = system: let pkgs = import nixpkgs { inherit system; config = { allowUnfree = true; }; }; # Compile the Deno binary with all dependencies slice-frontend = pkgs.stdenv.mkDerivation { pname = "slice-frontend"; version = "0.1.0"; src = ./.; nativeBuildInputs = [ pkgs.deno ]; # Fixed output derivation to allow network access outputHashMode = "recursive"; outputHashAlgo = "sha256"; outputHash = "sha256-Gfi8gkC2pYtiFktpU/qBzehLIhciEla7ECWGYWSUnXw="; buildPhase = '' export HOME=$PWD export DENO_DIR=$PWD/.deno mkdir -p .deno mkdir -p $out/bin deno compile -A --unstable-kv --no-check --target x86_64-unknown-linux-gnu --output $out/bin/slice-frontend src/main.ts ''; }; # Docker image for frontend frontendImg = pkgs.dockerTools.buildImage { name = "slice-frontend"; tag = "latest"; fromImage = pkgs.dockerTools.pullImage { imageName = "debian"; imageDigest = "sha256:45f2e735295654f13e3be10da2a6892c708f71a71be845818f0058565d2d2076"; sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; }; copyToRoot = pkgs.buildEnv { name = "image-root"; paths = [ slice-frontend pkgs.sqlite pkgs.cacert ]; pathsToLink = [ "/bin" "/etc" ]; }; runAsRoot = '' #!${pkgs.runtimeShell} # Create data directory for Deno KV with proper permissions mkdir -p /data chmod 755 /data ''; config = { Cmd = [ "/bin/slice-frontend" ]; ExposedPorts = { "8080/tcp" = {}; }; WorkingDir = "/"; Env = [ "PORT=8080" "DATABASE_URL=sqlite:///data/slices.db" ]; }; }; in { inherit slice-frontend frontendImg; default = slice-frontend; }; in { packages = forAllSystems mkPackagesForSystem; devShells = forAllSystems (system: let pkgs = import nixpkgs { inherit system; }; in { default = pkgs.mkShell { packages = with pkgs; [ deno nixpkgs-fmt ]; }; }); }; }