Files
frajtano/default.nix
2024-09-22 12:56:29 +01:00

45 lines
1.1 KiB
Nix

{
lib,
pkgs,
mixRelease,
elixir,
}: let
pname = "frajtano";
pkg = mixRelease {
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";
};
ELIXIR_MAKE_CACHE_DIR = "/tmp/.elixir-make-cache";
meta.mainProgram = pname;
};
script = pkgs.writeShellScriptBin pname ''
set -eu
${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")
run() {
exec ${lib.getExe pkg} "$@"
}
case "''${1:-}" in
assimilate)
run rpc ":ok = \"$(echo -n "$2" | ${pkgs.coreutils}/bin/base64)\" |> Base.decode64!() |> Frajtano.Agent.add_peer()"
;;
socket)
echo $FRAJTANO_DIR/agent.sock
;;
*)
run "$@"
;;
esac
'';
in pkgs.symlinkJoin { name = pname; paths = [ script pkg ]; meta.mainProgram = pname; }