add nix package

This commit is contained in:
Henry Hiles 2026-03-25 11:40:31 -04:00
commit 11ecec5ab3
No known key found for this signature in database
5 changed files with 65 additions and 23 deletions

3
.gitignore vendored
View file

@ -39,3 +39,6 @@ key.properties
# Devel Password # Devel Password
password.txt password.txt
# Nix
/result

View file

@ -39,8 +39,13 @@
}; };
}; };
packages.default = pkgs.callPackage ./linux/nix/package.nix { packages = {
src = self; default = pkgs.callPackage ./linux/nix/pkg {
src = self;
};
gomuks = pkgs.callPackage ./linux/nix/pkg/gomuks.nix {
src = self;
};
}; };
devShells.default = pkgs.callPackage ./linux/nix/devshell.nix { }; devShells.default = pkgs.callPackage ./linux/nix/devshell.nix { };

View file

@ -46,25 +46,31 @@ Future<void> main(List<String> args) => build(args, (input, output) async {
throw UnsupportedError("Unsupported OS: $targetOS"); throw UnsupportedError("Unsupported OS: $targetOS");
} }
final buildDir = input.packageRoot.resolve("build/"); var libFile = input.packageRoot.resolve(libFileName);
final gomuksBuildDir = input.packageRoot.resolve("gomuks/"); final gomuksBuildDir = input.packageRoot.resolve("gomuks/");
final libFile = buildDir.resolve("${targetArch.name}/$libFileName");
// goheif/dav1d supported on Android would need to fix upstream if (!(await File.fromUri(libFile).exists())) {
final tags = targetOS == OS.android ? "goolm,noheic" : "goolm"; final buildDir = input.packageRoot.resolve("build/");
libFile = buildDir.resolve("${targetArch.name}/$libFileName");
print( // goheif/dav1d supported on Android would need to fix upstream
"Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source...", final tags = targetOS == OS.android ? "goolm,noheic" : "goolm";
);
final result = await Process.run(
"go",
["build", "-tags", tags, "-o", libFile.path, "-buildmode=c-shared"],
workingDirectory: gomuksBuildDir.resolve("pkg/ffi/").toFilePath(),
environment: env.isNotEmpty ? env : null,
);
if (result.exitCode != 0) { print(
throw Exception("Failed to build Gomuks shared library\n${result.stderr}"); "Building Gomuks shared library $libFileName (${targetOS.name}/${targetArch.name}) from source...",
);
final result = await Process.run(
"go",
["build", "-tags", tags, "-o", libFile.path, "-buildmode=c-shared"],
workingDirectory: gomuksBuildDir.resolve("pkg/ffi/").toFilePath(),
environment: env.isNotEmpty ? env : null,
);
if (result.exitCode != 0) {
throw Exception(
"Failed to build Gomuks shared library\n${result.stderr}",
);
}
} }
final generatedFile = "src/third_party/gomuks.g.dart"; final generatedFile = "src/third_party/gomuks.g.dart";

View file

@ -1,9 +1,9 @@
{ {
lib, lib,
callPackage,
libclang, libclang,
flutter, flutter,
src, src,
go,
}: }:
flutter.buildFlutterApplication { flutter.buildFlutterApplication {
@ -12,16 +12,13 @@ flutter.buildFlutterApplication {
inherit src; inherit src;
preBuild = '' preBuild = ''
cp ${callPackage ./gomuks.nix { inherit src; }}/lib/* .
packageRunCustom nexus generate source/scripts test packageRunCustom nexus generate source/scripts test
packageRun build_runner build packageRun build_runner build
''; '';
env.LIBCLANG_PATH = lib.makeLibraryPath [ libclang ]; env.LIBCLANG_PATH = lib.makeLibraryPath [ libclang ];
nativeBuildInputs = [
go
];
autoPubspecLock = src + "/pubspec.lock"; autoPubspecLock = src + "/pubspec.lock";
gitHashes = { gitHashes = {

31
linux/nix/pkg/gomuks.nix Normal file
View file

@ -0,0 +1,31 @@
{
src,
buildGoModule,
}:
buildGoModule (finalAttrs: {
pname = "gomuks-ffi";
version = "submodule";
doCheck = false;
src = "${src}/gomuks";
vendorHash = "sha256-zBDfBZqUoHIfZ0AajZEvSBbskjpFB7yIsomt0KYDo7Y=";
buildPhase = ''
runHook preBuild
go build -buildmode=c-shared -o libgomuks.so -tags goolm,noheic ./pkg/ffi
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -D --mode=0644 libgomuks.so --target-directory $out/lib
runHook postInstall
'';
})