mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +01:00
The devshell `gradle` now serialises local builds with flock and runs them under `nice` with capped workers, so several agents building at once queue instead of piling up daemons and compile workers and taking the machine down. With CI/GITHUB_ACTIONS set it execs Gradle directly, leaving CI untouched. Also shorten the Gradle daemon idle timeout so idle daemons are reaped sooner.
102 lines
2.8 KiB
Nix
102 lines
2.8 KiB
Nix
{
|
|
description = "Subtracks - Kotlin/Jetpack Compose Android development shell";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-26.05";
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
nixpkgs,
|
|
nixpkgs-stable,
|
|
...
|
|
}:
|
|
let
|
|
systems = [ "x86_64-linux" ];
|
|
forEachSystem = nixpkgs.lib.genAttrs systems;
|
|
in
|
|
{
|
|
devShells = forEachSystem (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
config = {
|
|
android_sdk.accept_license = true;
|
|
allowUnfree = true;
|
|
};
|
|
};
|
|
servers = import nixpkgs-stable { inherit system; };
|
|
android = pkgs.androidenv.composeAndroidPackages {
|
|
platformVersions = [ "37" ];
|
|
buildToolsVersions = [ "37.0.0" ];
|
|
platformToolsVersion = "37.0.1";
|
|
includeEmulator = false;
|
|
includeSystemImages = false;
|
|
includeNDK = false;
|
|
includeSources = false;
|
|
includeCmake = false;
|
|
};
|
|
androidSdk = android.androidsdk;
|
|
|
|
gradle_wrapper = pkgs.writeShellScriptBin "gradle" ''
|
|
if [ -n "''${CI:-}''${GITHUB_ACTIONS:-}" ]; then
|
|
exec ${pkgs.gradle_9}/bin/gradle "$@"
|
|
fi
|
|
exec ${pkgs.util-linux}/bin/flock /tmp/subtracks-gradle.lock \
|
|
${pkgs.coreutils}/bin/nice -n 10 ${pkgs.gradle_9}/bin/gradle --max-workers=4 "$@"
|
|
'';
|
|
|
|
basePackages = [
|
|
pkgs.jdk21
|
|
gradle_wrapper
|
|
pkgs.git
|
|
pkgs.curl
|
|
pkgs.unzip
|
|
pkgs.nushell
|
|
androidSdk
|
|
android.platform-tools
|
|
];
|
|
|
|
shellHook = ''
|
|
echo "subtracks dev shell"
|
|
echo " java: $(java -version 2>&1 | head -n1)"
|
|
echo " ANDROID_HOME: $ANDROID_HOME"
|
|
'';
|
|
in
|
|
{
|
|
default = pkgs.mkShell {
|
|
packages = basePackages;
|
|
|
|
ANDROID_HOME = "${androidSdk}/libexec/android-sdk";
|
|
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
|
|
|
inherit shellHook;
|
|
};
|
|
|
|
integration = pkgs.mkShell {
|
|
packages = basePackages ++ [
|
|
servers.navidrome
|
|
servers.gonic
|
|
servers.lms
|
|
servers.sqlite
|
|
servers.php83
|
|
];
|
|
|
|
ANDROID_HOME = "${androidSdk}/libexec/android-sdk";
|
|
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
|
NEXTCLOUD_DIR = "${servers.nextcloud34}";
|
|
NEXTCLOUD_MUSIC_APP = "${servers.nextcloud34Packages.apps.music}";
|
|
|
|
inherit shellHook;
|
|
};
|
|
|
|
release = pkgs.mkShell {
|
|
packages = [ pkgs.fastlane ];
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|