Files
frajtano/default.nix

74 lines
1.9 KiB
Nix

{
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 = "sha256-/9Ushiv0z1wJL9FwebUF4gem8IOwlUPnQuDBiXV0Ib8=";
};
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.coreutils}/bin/cat /etc/hostname)"
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_peer({\"/usr/bin/env\", [$(list "$@")]})"
;;
socket)
echo $FRAJTANO_DIR/agent.sock
;;
*)
run "$@"
;;
esac
'';
in
pkgs.symlinkJoin {
name = pname;
paths = [script pkg];
meta.mainProgram = pname;
}