Programmierbeleg/flake.nix
2022-08-28 14:31:59 +01:00

142 lines
5.2 KiB
Nix

{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
android-nixpkgs.url = "github:tadfisher/android-nixpkgs";
android-nixpkgs.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = {
self,
nixpkgs,
flake-utils,
android-nixpkgs
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true;
allowUnfree = true;
};
};
texlive-env = (pkgs.texlive.combine {
inherit (pkgs.texlive) scheme-basic
xetex
float xcolor varwidth fancyvrb multirow hanging adjustbox stackengine
enumitem alphalph ulem xkeyval collectbox etoolbox wasysym sectsty
tocloft newunicodechar caption etoc psnfss metafont helvetic courier
wasy wasy-type1
;
});
androidSdk = android-nixpkgs.sdk.${system} (sdkPkgs: with sdkPkgs; [
build-tools-30-0-3
build-tools-33-0-0
cmdline-tools-latest
platform-tools
platforms-android-33
]);
in rec {
formatter = pkgs.alejandra;
devShells.default =
pkgs.mkShell {
buildInputs = with pkgs; [
androidSdk
glibc
doxygen
graphviz
texlive-env
nodejs
yarn
];
# override the aapt2 that gradle uses with the nix-shipped version
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/share/android-sdk/build-tools/33.0.0/aapt2";
};
packages = rec {
invtracker-deps = pkgs.stdenv.mkDerivation {
name = "invtracker-deps";
src = self;
nativeBuildInputs = with pkgs; [gradle openjdk_headless perl];
buildPhase = ''
export GRADLE_USER_HOME=$(mktemp -d)
# Fetch the maven deps
gradle --no-daemon --info -Dorg.gradle.java.home=${pkgs.openjdk_headless} --write-verification-metadata sha256
'';
installPhase = ''
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(aar\|jar\|pom\|module\)$' \
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
| sh
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-L3aD3xDhg9a1588V5kc7qTYQxqVxslqKjLvjb152Qck=";
};
invtracker-server = pkgs.stdenv.mkDerivation {
pname = "invtracker-server";
version = self.lastModifiedDate;
src = self;
nativeBuildInputs = with pkgs; [gradle openjdk_headless];
buildPhase = ''
sed -i 's#gradlePluginPortal..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
sed -i 's#google..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
export GRADLE_USER_HOME=$(mktemp -d)
gradle --offline --no-daemon --info -Dorg.gradle.java.home=${pkgs.openjdk_headless} server:installDist
'';
installPhase = ''
cp -rv server/build/install/server $out/
'';
};
invtracker-client =
pkgs.stdenv.mkDerivation rec {
pname = "invtracker-client";
version = self.lastModifiedDate;
src = self;
nativeBuildInputs = with pkgs; [gradle openjdk_headless androidSdk ];
buildPhase = ''
sed -i 's#gradlePluginPortal..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
sed -i 's#google..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
export GRADLE_USER_HOME=$(mktemp -d)
gradle --offline --no-daemon --info -Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/share/android-sdk/build-tools/33.0.0/aapt2 -Dorg.gradle.java.home=${pkgs.openjdk_headless} app:packageDebug
'';
installPhase = ''
mkdir $out
cp app/build/outputs/apk/debug/app-debug.apk $out/app.apk
mkdir $out/nix-support
echo "file binary-dist $out/app.apk" > $out/nix-support/hydra-build-products
echo "$pname-$version" > $out/nix-support/hydra-release-name
'';
};
invtracker-docs = pkgs.callPackage ./doc.nix { inherit self texlive-env; };
invtracker-web = pkgs.mkYarnPackage rec {
pname = "invtracker-web";
version = self.lastModifiedDate;
nativeBuildInputs = with pkgs; [
brotli
gzip
zstd
];
src = "${self}/map-desktop";
yarnLock = "${self}/map-desktop/yarn.lock";
buildPhase = "yarn run build";
installPhase = "cp -rv deps/map-desktop/dist $out";
distPhase = ''
fnames=$(find $out -type f)
for f in $fnames; do
brotli -k $f
gzip -k9 $f
zstd --ultra -22 -k $f
done
'';
};
};
hydraJobs =
if system == "x86_64-linux"
then devShells // packages
else {};
});
}