From 11ecec5ab3144c52c82d607f05c2fdb198a354bc Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Wed, 25 Mar 2026 11:40:31 -0400 Subject: [PATCH] add nix package --- .gitignore | 5 ++- flake.nix | 9 ++++-- hook/build.dart | 36 +++++++++++++--------- linux/nix/{package.nix => pkg/default.nix} | 7 ++--- linux/nix/pkg/gomuks.nix | 31 +++++++++++++++++++ 5 files changed, 65 insertions(+), 23 deletions(-) rename linux/nix/{package.nix => pkg/default.nix} (91%) create mode 100644 linux/nix/pkg/gomuks.nix diff --git a/.gitignore b/.gitignore index dfaf03d..2bec583 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,7 @@ key.properties *.freezed.dart # Devel Password -password.txt \ No newline at end of file +password.txt + +# Nix +/result \ No newline at end of file diff --git a/flake.nix b/flake.nix index afb0d56..fdcf894 100644 --- a/flake.nix +++ b/flake.nix @@ -39,8 +39,13 @@ }; }; - packages.default = pkgs.callPackage ./linux/nix/package.nix { - src = self; + packages = { + 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 { }; diff --git a/hook/build.dart b/hook/build.dart index 69ed05d..f744652 100644 --- a/hook/build.dart +++ b/hook/build.dart @@ -46,25 +46,31 @@ Future main(List args) => build(args, (input, output) async { throw UnsupportedError("Unsupported OS: $targetOS"); } - final buildDir = input.packageRoot.resolve("build/"); + var libFile = input.packageRoot.resolve(libFileName); final gomuksBuildDir = input.packageRoot.resolve("gomuks/"); - final libFile = buildDir.resolve("${targetArch.name}/$libFileName"); - // goheif/dav1d supported on Android would need to fix upstream - final tags = targetOS == OS.android ? "goolm,noheic" : "goolm"; + if (!(await File.fromUri(libFile).exists())) { + final buildDir = input.packageRoot.resolve("build/"); + libFile = buildDir.resolve("${targetArch.name}/$libFileName"); - print( - "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, - ); + // goheif/dav1d supported on Android would need to fix upstream + final tags = targetOS == OS.android ? "goolm,noheic" : "goolm"; - if (result.exitCode != 0) { - throw Exception("Failed to build Gomuks shared library\n${result.stderr}"); + print( + "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"; diff --git a/linux/nix/package.nix b/linux/nix/pkg/default.nix similarity index 91% rename from linux/nix/package.nix rename to linux/nix/pkg/default.nix index cb5f61f..9b42510 100644 --- a/linux/nix/package.nix +++ b/linux/nix/pkg/default.nix @@ -1,9 +1,9 @@ { lib, + callPackage, libclang, flutter, src, - go, }: flutter.buildFlutterApplication { @@ -12,16 +12,13 @@ flutter.buildFlutterApplication { inherit src; preBuild = '' + cp ${callPackage ./gomuks.nix { inherit src; }}/lib/* . packageRunCustom nexus generate source/scripts test packageRun build_runner build ''; env.LIBCLANG_PATH = lib.makeLibraryPath [ libclang ]; - nativeBuildInputs = [ - go - ]; - autoPubspecLock = src + "/pubspec.lock"; gitHashes = { diff --git a/linux/nix/pkg/gomuks.nix b/linux/nix/pkg/gomuks.nix new file mode 100644 index 0000000..11210a1 --- /dev/null +++ b/linux/nix/pkg/gomuks.nix @@ -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 + ''; +})