Files
subtracks/flake.nix
T
austinried 4012cc0272 build: harden the gradle guard wrapper
- cap workers via GRADLE_OPTS instead of a CLI flag, so a caller passing
  --max-workers no longer collides and fails the build
- keep the lock under $XDG_RUNTIME_DIR (falling back to ~/.cache) rather
  than a world-writable /tmp path
- let --stop/--status/--version bypass the lock, and announce when a build
  is waiting for it
- drop the redundant GITHUB_ACTIONS check; the CI runners all set CI
2026-10-09 07:48:00 +00:00

116 lines
3.4 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:-}" ]; then
exec ${pkgs.gradle_9}/bin/gradle "$@"
fi
for arg in "$@"; do
case "$arg" in
-v | --version | --status | --stop)
exec ${pkgs.gradle_9}/bin/gradle "$@"
;;
esac
done
runtime_dir="''${XDG_RUNTIME_DIR:-''${HOME:-/tmp}/.cache}"
mkdir -p "$runtime_dir"
lock="$runtime_dir/subtracks-gradle.lock"
if ! ${pkgs.util-linux}/bin/flock -n "$lock" ${pkgs.coreutils}/bin/true 2>/dev/null; then
echo "gradle: waiting for the build lock at $lock" >&2
fi
export GRADLE_OPTS="''${GRADLE_OPTS:-} -Dorg.gradle.workers.max=4"
exec ${pkgs.util-linux}/bin/flock "$lock" \
${pkgs.coreutils}/bin/nice -n 10 ${pkgs.gradle_9}/bin/gradle "$@"
'';
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 ];
};
}
);
};
}