{ lib, pkgs, mixRelease, elixir, fetchMixDeps, }: let pname = "frajtano"; pkg = mixRelease rec { inherit pname; version = "0.0.1"; inherit elixir; src = builtins.path { path = ./.; name = "${pname}-source"; filter = path: _type: baseNameOf path != "flake.nix" && baseNameOf path != "flake.lock"; }; # Adapted from https://blog.eigenvalue.net/nix-rerunning-fixed-output-derivations/ # deps hash should change any time ./mix.lock changes, and not otherwise mixFodDeps = let deps = fetchMixDeps { pname = "mix-deps-${pname}"; inherit version src; sha256 = { "x86_64-linux" = "sha256-/9Ushiv0z1wJL9FwebUF4gem8IOwlUPnQuDBiXV0Ib8="; "aarch64-darwin" = "sha256-8gFgTV1qYrC3iw5/AyeEOMAYtcEK7wTXie+Z9RDrqUI="; }.${pkgs.system}; }; hash = builtins.substring 11 32 "${./mix.lock}"; in deps.overrideAttrs (attrs: {name = "${deps.name}-${hash}";}); ELIXIR_MAKE_CACHE_DIR = "/tmp/.elixir-make-cache"; meta.mainProgram = pname; }; script = pkgs.writeShellScriptBin pname '' set -e ${pkgs.coreutils}/bin/mkdir -p $FRAJTANO_DIR file="$FRAJTANO_DIR/cookie" (umask 077; [ -f "$file" ] || ${pkgs.coreutils}/bin/head -c 128 /dev/urandom | ${pkgs.coreutils}/bin/base64 -w0 > "$file") export RELEASE_COOKIE=$(${pkgs.coreutils}/bin/cat "$file") [ -z $RELEASE_NODE ] && export RELEASE_NODE="frajtano-$(${pkgs.coreutils}/bin/whoami)@$(${pkgs.toybox}/bin/hostname -s)" run() { exec ${lib.getExe pkg} "$@" } list() { for i in "$@"; do echo "\"$i\", " done } case "''${1:-}" in assimilate) run rpc ":ok = ~S{$2} |> Frajtano.Agent.assimilate()" ;; spawn) shift run rpc ":ok = Frajtano.Agent.spawn_backing_agent({\"/usr/bin/env\", [$(list "$@")]})" ;; socket) echo $FRAJTANO_DIR/agent.sock ;; *) run "$@" ;; esac ''; in pkgs.symlinkJoin { name = pname; paths = [script pkg]; meta.mainProgram = pname; }