diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1b91bad --- /dev/null +++ b/flake.nix @@ -0,0 +1,62 @@ +{ + description = "ConvertX"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils, ... }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + appSrc = ./.; + + app = pkgs.dockerTools.buildLayeredImage { + name = "convertx"; + tag = "latest"; + + contents = [ + pkgs.bun + pkgs.resvg + pkgs.ffmpeg + pkgs.graphicsmagick + pkgs.ghostscript + pkgs.vips + pkgs.pandoc + pkgs.texlive.combined.scheme-full + pkgs.calibre + pkgs.inkscape + pkgs.poppler_utils + pkgs.assimp + pkgs.jxrlib + pkgs.libheif + pkgs.libjxl + pkgs.python3Packages.numpy + ]; + + config = { + Env = [ + "NODE_ENV=production" + "PATH=/bin:/usr/bin" + ]; + WorkingDir = "/app"; + Cmd = [ "bun" "run" "./src/index.tsx" ]; + ExposedPorts = { + "3000/tcp" = {}; + }; + }; + + extraCommands = '' + export PATH=${pkgs.bun}/bin:$PATH + mkdir -p app + cp -r ${appSrc}/* app/ + cd app + bun install --frozen-lockfile --production + bun run build + ''; + }; + in { + packages.default = app; + }); +}