Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
build
.kotlin
.idea
.devenv
82 changes: 82 additions & 0 deletions devenv.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{
"nodes": {
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1789991752,
"narHash": "sha256-SiH+H00IutELZBg7BBNo6r5DU6E+DG7DjrbeX5+QLa0=",
"owner": "cachix",
"repo": "devenv",
"rev": "1c57b5dea0d400af97053fdd1a536fca17378f73",
"type": "github"
},
"original": {
"dir": "src/modules",
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"nix-gradle-wrapper": {
"flake": false,
"locked": {
"lastModified": 1790095744,
"narHash": "sha256-hzVOn9BrB1fbjQ32bbNIPal0yiTb6C46ZZaz4FsFgOU=",
"owner": "devinrsmith",
"repo": "nix-gradle-wrapper",
"rev": "bdaa336f22df5501834ab4e4d359a2c0dca63167",
"type": "github"
},
"original": {
"owner": "devinrsmith",
"repo": "nix-gradle-wrapper",
"type": "github"
}
},
"nixpkgs": {
"inputs": {
"nixpkgs-src": "nixpkgs-src"
},
"locked": {
"lastModified": 1789506231,
"narHash": "sha256-vNkJbtmqyBfFhn/HnzQo4ROuoyYWuy/allqTfJb4kMY=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "c2f38fe7f9e04d9aadd354d380f2bd40531d9737",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"nixpkgs-src": {
"flake": false,
"locked": {
"lastModified": 1789370336,
"narHash": "sha256-6RSEDHIWQtesQKWSu5qRai8L2h4KgCgMEfJHstW99G4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c7def046b9a883d46974757852106483d741586f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"nix-gradle-wrapper": "nix-gradle-wrapper",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}
57 changes: 57 additions & 0 deletions devenv.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{ pkgs, inputs, ... }:
let
# seqlock/build.gradle.kts's multiRelease { targetVersions(8, 11) } (the
# me.champeau.mrjar plugin) needs both a Java 8 and a Java 11 toolchain --
# the base source set plus the java11 override/java11Test source sets.
# gradle-wrapper.nix's isolatedHomeHook disables Gradle's own toolchain
# auto-detect/auto-download, so all of these have to be registered
# explicitly via extraJdkHomes below rather than relying on scanning.
jdk8 = pkgs.jdk8;
jdk11 = pkgs.jdk11;

# One of the extra LTS runtimes build.gradle.kts's java17/21/25Test tasks
# exercise the java11 override classes against (see there) -- otherwise
# unrelated to running Gradle itself, unlike jdk25 below.
jdk17 = pkgs.jdk17;
jdk21 = pkgs.jdk21;

# Runs the Gradle 9 wrapper/daemon itself (Java Compatibility table:
# https://docs.gradle.org/current/userguide/compatibility.html -- Java 25
# supported for running Gradle since 9.1.0, we're on 9.7.1), independent of
# whatever JDK version(s) the project's own toolchains target. Also one of
# the extra LTS runtimes build.gradle.kts's java17/21/25Test tasks exercise
# the java11 override classes against.
jdk25 = pkgs.jdk25;

# On Linux a JDK package's .home is already the toolchain-detectable home;
# on Darwin, nixpkgs' JDK outputs are a symlink farm and the real home is
# nested at ${pkg.bundle}/Contents/Home (per nix-gradle-wrapper's own
# README -- passing the top-level .home there lists the same JDK twice).
jdkHome = pkg: if pkg ? bundle then "${pkg.bundle}/Contents/Home" else pkg.home;

gradleWrapper = import "${inputs.nix-gradle-wrapper}/gradle-wrapper.nix" {
inherit pkgs;
wrapperPropertiesFile = ./gradle/wrapper/gradle-wrapper.properties;
name = "seqlock";
# This is a tiny single-module library (no per-task -Xmx override in
# seqlock/build.gradle.kts), so the 4 GiB default per-worker assumption
# is a big overestimate -- it collapses org.gradle.workers.max to 1 on
# an 8 GiB machine. 512 MiB is generous for this project's tests/compile.
perWorkerMemBytes = 512 * 1024 * 1024;
extraJdkHomes = [ (jdkHome jdk8) (jdkHome jdk11) (jdkHome jdk17) (jdkHome jdk21) (jdkHome jdk25) ];
# Pins the daemon JVM explicitly (org.gradle.java.home) instead of
# relying on languages.java.jdk.package below having put jdk25 first on
# JAVA_HOME/PATH by the time ./gradlew starts the daemon.
javaHome = jdkHome jdk25;
};
in
{
languages.java.enable = true;
languages.java.jdk.package = jdk25;

packages = gradleWrapper.extraBuildInputs ++ [ jdk8 jdk11 jdk17 jdk21 ];

enterShell = gradleWrapper.isolatedHomeHook + gradleWrapper.warmupHook + ''
echo "seqlock dev shell ready"
'';
}
6 changes: 6 additions & 0 deletions devenv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
inputs:
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling
nix-gradle-wrapper:
url: github:devinrsmith/nix-gradle-wrapper
flake: false
Loading