{ pkgs ? import { } , pkgsLinux ? import { system = "x86_64-linux"; } }: let # -- swap the above pkgs with the pkgs definition below for 100% reproducability # -- WARNING: requires quite some diskspace #{ } : # #let # pkgs = import ( builtins.fetchTarball { # # https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-25.05.zip # name = "nixos-25.05"; # url = "https://github.com/NixOS/nixpkgs/archive/nixos-25.05.tar.gz"; # sha256 = "sha256:10cqhkqkifcgyibj9nwxrnq424crfl40kwr3daky83m2fisb4f6p"; # }) {}; vars = import ./vars.nix; # generate the reproducable blob below via: # $ nix-shell -p nix-prefetch-docker --run 'nix-prefetch-docker ghcr.io/manyfold3d/manyfold-solo 0.120.0' #manyfoldImage = pkgs.dockerTools.pullImage { # imageName = "ghcr.io/manyfold3d/manyfold-solo"; # imageDigest = "sha256:6250e562a05bf9476ddcfdc897a7b03cbf2090c727d9fe051afde486579b54a6"; # sha256 = "sha256-V5y1N0l4JQjVDQbboGYX15MQaImXtP/HpNwPjDtxeJQ="; # finalImageName = "ghcr.io/manyfold3d/manyfold-solo"; # finalImageTag = "0.121.0"; #}; manyfoldImage = pkgs.dockerTools.pullImage { imageName = "ghcr.io/manyfold3d/manyfold-solo"; imageDigest = "sha256:465399a2d296034ef84dba18a13744b567694c652387bd17fe97d51c672d1fa9"; hash = "sha256-j7YSUGRFUDh6FJ1CrIQEzGU/0B8uPO8y1kd9lYLad4w="; finalImageName = "ghcr.io/manyfold3d/manyfold-solo"; finalImageTag = "latest"; }; # generate the reproducable blob below via: # $ nix-shell -p nix-prefetch-github --command 'nix-prefetch-github assimp assimp --rev e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5' assimpSrc = pkgs.fetchFromGitHub { "owner" = "assimp"; "repo" = "assimp"; "rev" = "e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5"; "hash" = "sha256-ja5pFwpnzLT2MDIR8ISwC6+eA5UXyqRZW2CMCCrF1Q0="; }; myAssimp = pkgs.pkgsStatic.assimp.overrideAttrs (oldAttrs: { inherit assimpSrc; # Set the source to the fetched commit src = assimpSrc; }); in rec { xrforgeImage = pkgs.dockerTools.buildImage { name = "xrforge"; tag = "latest"; created = "now"; fromImage = manyfoldImage; # add nix pkgs + local files contents = pkgs.buildEnv { name = "image-root"; pathsToLink = ["/manyfold" "/bin" ]; paths = [ pkgs.pkgsStatic.rsync pkgs.pkgsStatic.sqlite pkgs.pkgsStatic.rclone pkgs.pkgsStatic.fuse3 pkgs.pkgsStatic.acl # getfacl e.g. pkgs.pkgsStatic.inotify-tools # inotifywait e.g. pkgs.pkgsStatic.zip # inotifywait e.g. pkgs.pkgsStatic.ts # job management myAssimp # cli 3D editing/conversion ./.. ]; }; config = { Cmd = ["/init"]; # We substitute the /init entrypoing with our own wrapper EntryPoint = ["/manyfold/cli/manyfold.sh" "boot"]; }; }; }