mirror of
https://github.com/bitcoinj/bitcoinj.git
synced 2025-03-13 19:37:49 +01:00
163 lines
4.7 KiB
Nix
163 lines
4.7 KiB
Nix
|
{
|
||
|
description = "bitcoinj";
|
||
|
|
||
|
# this allows derivations with `__noChroot = true` and allows us to work around limitations with gradle
|
||
|
# see https://zimbatm.com/notes/nix-packaging-the-heretic-way
|
||
|
nixConfig.sandbox = "relaxed";
|
||
|
|
||
|
inputs = {
|
||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||
|
|
||
|
flake-parts = {
|
||
|
url = "github:hercules-ci/flake-parts";
|
||
|
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||
|
};
|
||
|
|
||
|
gitignore = {
|
||
|
url = "github:hercules-ci/gitignore.nix";
|
||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||
|
};
|
||
|
|
||
|
devshell = {
|
||
|
url = "github:numtide/devshell";
|
||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
outputs = inputs @ {
|
||
|
flake-parts,
|
||
|
devshell,
|
||
|
gitignore,
|
||
|
...
|
||
|
}:
|
||
|
flake-parts.lib.mkFlake {inherit inputs;} {
|
||
|
systems = [
|
||
|
"x86_64-linux"
|
||
|
"x86_64-darwin"
|
||
|
"aarch64-linux"
|
||
|
"aarch64-darwin"
|
||
|
];
|
||
|
|
||
|
perSystem = {
|
||
|
config,
|
||
|
inputs',
|
||
|
pkgs,
|
||
|
lib,
|
||
|
system,
|
||
|
...
|
||
|
}: let
|
||
|
inherit (pkgs) stdenv;
|
||
|
|
||
|
# pick our jdk and gradle versions
|
||
|
jdk = pkgs.jdk21.override {
|
||
|
# enabling JavaFX in the JDK allows `nix run .#wallettemplate` to work correctly.
|
||
|
# This is because the `bitcoinj-wallettemplate:installDist` Gradle task does
|
||
|
# not set up the Module Path correctly for JavaFX to be loaded from a Maven JAR.
|
||
|
enableJavaFX = true;
|
||
|
};
|
||
|
gradle = pkgs.gradle;
|
||
|
|
||
|
in {
|
||
|
# define a devshell
|
||
|
devShells.default = inputs'.devshell.legacyPackages.mkShell {
|
||
|
# setup some environment variables
|
||
|
env = with lib;
|
||
|
mkMerge [
|
||
|
[
|
||
|
# Configure nix to use nixpgks
|
||
|
{
|
||
|
name = "NIX_PATH";
|
||
|
value = "nixpkgs=${toString pkgs.path}";
|
||
|
}
|
||
|
]
|
||
|
(mkIf stdenv.isLinux [
|
||
|
{
|
||
|
name = "JAVA_HOME";
|
||
|
eval = "$DEVSHELL_DIR/lib/openjdk";
|
||
|
}
|
||
|
])
|
||
|
(mkIf stdenv.isDarwin [
|
||
|
{
|
||
|
name = "JAVA_HOME";
|
||
|
# TODO: Fix this so it isn't hardcoded to "zulu".
|
||
|
# I think it should be computed from `jdk` somehow.
|
||
|
eval = "$DEVSHELL_DIR/zulu-17.jdk/Contents/Home";
|
||
|
}
|
||
|
])
|
||
|
];
|
||
|
|
||
|
# add package dependencies
|
||
|
packages = with lib;
|
||
|
mkMerge [
|
||
|
[
|
||
|
jdk
|
||
|
gradle
|
||
|
]
|
||
|
];
|
||
|
};
|
||
|
|
||
|
# define flake output packages
|
||
|
packages = let
|
||
|
# useful for filtering src trees based on gitignore
|
||
|
inherit (gitignore.lib) gitignoreSource;
|
||
|
|
||
|
# common properties across the derivations
|
||
|
version = "0.0.1";
|
||
|
src = gitignoreSource ./.;
|
||
|
in {
|
||
|
# This package is an example of an escape hatch
|
||
|
wallettool = stdenv.mkDerivation {
|
||
|
pname = "wallettool";
|
||
|
inherit version src;
|
||
|
|
||
|
# Disable the Nix build sandbox for this specific build.
|
||
|
# This means the build can freely talk to the Internet.
|
||
|
__noChroot = true;
|
||
|
|
||
|
nativeBuildInputs = [gradle pkgs.makeWrapper];
|
||
|
|
||
|
buildPhase = ''
|
||
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||
|
gradle --no-daemon bitcoinj-wallettool:installDist
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
mkdir -p $out/share/vanilla
|
||
|
cp -r wallettool/build/install/wallet-tool/* $out/share/vanilla
|
||
|
makeWrapper $out/share/vanilla/bin/wallet-tool $out/bin/wallet-tool \
|
||
|
--set JAVA_HOME ${jdk}
|
||
|
'';
|
||
|
|
||
|
meta.mainProgram = "wallet-tool";
|
||
|
};
|
||
|
|
||
|
# This package is an example of an escape hatch
|
||
|
wallettemplate = stdenv.mkDerivation {
|
||
|
pname = "wallettemplate";
|
||
|
inherit version src;
|
||
|
|
||
|
# Disable the Nix build sandbox for this specific build.
|
||
|
# This means the build can freely talk to the Internet.
|
||
|
__noChroot = true;
|
||
|
|
||
|
nativeBuildInputs = [gradle pkgs.makeWrapper];
|
||
|
|
||
|
buildPhase = ''
|
||
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||
|
gradle --no-daemon bitcoinj-wallettemplate:installDist
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
mkdir -p $out/share/vanilla
|
||
|
cp -r wallettemplate/build/install/bitcoinj-wallettemplate/* $out/share/vanilla
|
||
|
makeWrapper $out/share/vanilla/bin/bitcoinj-wallettemplate $out/bin/bitcoinj-wallettemplate \
|
||
|
--set JAVA_HOME ${jdk}
|
||
|
'';
|
||
|
|
||
|
meta.mainProgram = "bitcoinj-wallettemplate";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|