Files
levin/flake.nix
T
2026-09-04 14:16:55 -04:00

112 lines
3.2 KiB
Nix

{
description = "levin - storage conversion tool";
inputs = {
flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*.tar.gz";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs =
{ self
, flake-schemas
, nixpkgs
}:
let
supportedSystems = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" "aarch64-linux" ];
forEachSupportedSystem = f:
nixpkgs.lib.genAttrs supportedSystems (system:
f {
pkgs = import nixpkgs { inherit system; };
});
in
{
schemas = flake-schemas.schemas;
devShells = forEachSupportedSystem ({ pkgs }: {
default = pkgs.mkShell {
packages = with pkgs; [
curl
git
jq
wget
nixpkgs-fmt
openssl
openssl.dev
patchelf
deno
pkg-config-unwrapped
ripgrep
];
env = {
PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
# ZELLIJ_CONFIG_FILE = "config.kdl";
};
};
});
packages = forEachSupportedSystem ({ pkgs }:
let
levinVersion = "0.0.1";
denoDeps = pkgs.stdenvNoCC.mkDerivation {
pname = "levin-deno-deps";
version = levinVersion;
src = ./.;
nativeBuildInputs = [ pkgs.deno pkgs.cacert ];
dontConfigure = true;
buildPhase = ''
runHook preBuild
export HOME="$TMPDIR"
export DENO_DIR="$TMPDIR/deno-dir"
deno cache --vendor=false --frozen --lock=deno.lock main.ts
deno compile \
--vendor=false \
--frozen \
--lock=deno.lock \
--output "$TMPDIR/levin-cache-primer" \
main.ts
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out"
cp -R "$DENO_DIR"/. "$out"
runHook postInstall
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-ndPlYrPgqHE4iE08JnKWPxAZfjWGd0Ez76aY4R1eITs=";
};
in
{
levin = pkgs.stdenvNoCC.mkDerivation {
pname = "levin";
version = levinVersion;
src = ./.;
nativeBuildInputs = [ pkgs.deno ];
dontConfigure = true;
dontFixup = true;
buildPhase = ''
runHook preBuild
export HOME="$TMPDIR"
export DENO_DIR="$TMPDIR/deno-dir"
cp -R ${denoDeps}/. "$DENO_DIR"
chmod -R u+w "$DENO_DIR"
deno compile \
--vendor=false \
--cached-only \
--frozen \
--lock=deno.lock \
--allow-all \
--output levin \
main.ts
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dm755 levin "$out/bin/levin"
runHook postInstall
'';
};
});
};
}