Something went wrong. Try again.
small gleam coding and (not yet) persistent agent daemon with a detachable cli
Something went wrong. Try again.
albedo default.nix
2.7 kB · 74 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475{ lib, stdenv, buildGoModule, fetchurl, gleam, beamPackages, python3, bash, coreutils, makeWrapper }:let erlang = beamPackages.erlang; # esqlite loads the pc plugin during its Rebar3 build, which cannot fetch # plugins from Hex inside the Nix sandbox. rebar3 = beamPackages.rebar3WithPlugins { plugins = [ beamPackages.pc ]; }; manifest = builtins.fromTOML (builtins.readFile ./manifest.toml); source = lib.fileset.toSource { root = ./.; fileset = lib.fileset.unions [ ./gleam.toml ./manifest.toml ./src (lib.fileset.fileFilter (file: !file.hasExt "pyc") ./priv) ./cli/go.mod ./cli/go.sum ./cli/cmd ./cli/internal ]; }; hexPackages = map (p: { inherit (p) name version; archive = fetchurl { url = "https://repo.hex.pm/tarballs/${p.name}-${p.version}.tar"; sha256 = lib.toLower p.outer_checksum; }; }) manifest.packages; packageIndex = builtins.toFile "packages.toml" ("[packages]\n" + lib.concatMapStrings (p: "${p.name} = \"${p.version}\"\n") hexPackages + "\n[git]\n"); daemon = stdenv.mkDerivation { pname = "albedo-daemon"; version = "1.0.0"; src = source; nativeBuildInputs = [ gleam erlang rebar3 makeWrapper ]; buildPhase = '' runHook preBuild export HOME="$TMPDIR/home" mkdir -p "$HOME" build/packages ${lib.concatMapStringsSep "\n" (p: '' mkdir -p build/packages/${p.name} "$TMPDIR/hex-${p.name}" tar -xf ${p.archive} -C "$TMPDIR/hex-${p.name}" tar -xzf "$TMPDIR/hex-${p.name}/contents.tar.gz" -C build/packages/${p.name} '') hexPackages} cp ${packageIndex} build/packages/packages.toml chmod -R u+w build/packages gleam export erlang-shipment runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/lib/albedo $out/bin cp -R build/erlang-shipment/. $out/lib/albedo/ makeWrapper $out/lib/albedo/entrypoint.sh $out/bin/albedo-daemon \ --add-flags run \ --prefix PATH : ${lib.makeBinPath [ erlang python3 bash coreutils ]} runHook postInstall ''; };in buildGoModule { pname = "albedo"; version = "1.0.0"; src = source; modRoot = "cli"; subPackages = [ "cmd/albedo" ]; vendorHash = "sha256-6zL5hCue5V3Vjv42iRyZqBzF/OWum6sJ9YktyT2OOgM="; nativeBuildInputs = [ makeWrapper ]; ALBEDO_NO_BROWSER = "1"; postInstall = '' wrapProgram $out/bin/albedo \ --set-default ALBEDO_DAEMON ${daemon}/bin/albedo-daemon ''; passthru = { inherit daemon; }; meta = { description = "coding agent daemon with a Charm terminal client"; license = lib.licenses.wtfpl; mainProgram = "albedo"; platforms = lib.platforms.unix; };}