diff --git a/pkgs/by-name/by/bytecode-viewer/make-deterministic.patch b/pkgs/by-name/by/bytecode-viewer/make-deterministic.patch
new file mode 100644
index 000000000000..94107b589c36
--- /dev/null
+++ b/pkgs/by-name/by/bytecode-viewer/make-deterministic.patch
@@ -0,0 +1,73 @@
+--- a/pom.xml 2024-01-08 09:44:10.495320111 +0100
++++ b/pom.xml 2024-01-08 21:31:07.529336715 +0100
+@@ -394,6 +394,15 @@
+
+
+
++ maven-jar-plugin
++ 3.3.0
++
++
++ default-jar
++
++
++
++
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.5.0
+@@ -464,6 +473,55 @@
+
+
+
++
++ org.apache.maven.plugins
++ maven-enforcer-plugin
++ 3.3.0
++
++
++ require-all-plugin-version-to-be-set
++ validate
++
++ enforce
++
++
++
++
++
++
++
++
++
++
++ org.apache.maven.plugins
++ maven-deploy-plugin
++ 3.1.1
++
++
++ org.apache.maven.plugins
++ maven-resources-plugin
++ 3.3.1
++
++
++ org.apache.maven.plugins
++ maven-site-plugin
++ 4.0.0-M9
++
++
++ org.apache.maven.plugins
++ maven-install-plugin
++ 3.1.1
++
++
++ org.apache.maven.plugins
++ maven-clean-plugin
++ 3.3.1
++
++
++ org.apache.maven.plugins
++ maven-surefire-plugin
++ 3.1.2
++
+
+
diff --git a/pkgs/by-name/by/bytecode-viewer/package.nix b/pkgs/by-name/by/bytecode-viewer/package.nix
new file mode 100644
index 000000000000..1e2a7e568db9
--- /dev/null
+++ b/pkgs/by-name/by/bytecode-viewer/package.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, jre
+, makeWrapper
+, maven
+, icoutils
+, copyDesktopItems
+, makeDesktopItem
+}:
+
+maven.buildMavenPackage rec {
+ pname = "bytecode-viewer";
+ version = "2.12";
+
+ src = fetchFromGitHub {
+ owner = "Konloch";
+ repo = "bytecode-viewer";
+ rev = "v${version}";
+ hash = "sha256-opAUmkEcWPOrcxAL+I1rBQXwHmvzbu0+InTnsg9r+z8=";
+ };
+
+ desktopItems = [
+ (makeDesktopItem {
+ name = "bytecode-viewer";
+ desktopName = "Bytecode-Viewer";
+ exec = meta.mainProgram;
+ icon = "bytecode-viewer";
+ comment = "A lightweight user-friendly Java/Android Bytecode Viewer, Decompiler & More.";
+ categories = [ "Security" ];
+ startupNotify = false;
+ })
+ ];
+
+ patches = [
+ # Make vendoring deterministic by pinning Maven plugin dependencies
+ ./make-deterministic.patch
+ ];
+
+ mvnHash = "sha256-iAxzFq8nR9UiH8y3ZWmGuChZEMwQBAkN8wD+t9q/RWY=";
+
+ mvnParameters = "-Dproject.build.outputTimestamp=1980-01-01T00:00:02Z";
+
+ nativeBuildInputs = [
+ icoutils
+ makeWrapper
+ copyDesktopItems
+ ];
+
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm644 target/Bytecode-Viewer-${version}.jar $out/share/bytecode-viewer/bytecode-viewer.jar
+
+ mv "BCV Icon.ico" bytecode-viewer.ico
+ icotool -x bytecode-viewer.ico
+
+ for size in 16 32 48
+ do
+ install -Dm644 bytecode-viewer_*_$size\x$size\x32.png $out/share/icons/hicolor/$size\x$size/apps/bytecode-viewer.png
+ done
+
+ mkdir $out/bin
+ makeWrapper ${lib.getExe jre} $out/bin/${meta.mainProgram} \
+ --add-flags "-jar $out/share/bytecode-viewer/bytecode-viewer.jar"
+
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ homepage = "https://bytecodeviewer.com";
+ description = "A lightweight user-friendly Java/Android Bytecode Viewer, Decompiler & More";
+ mainProgram = "bytecode-viewer";
+ maintainers = with maintainers; [ shard7 d3vil0p3r ];
+ platforms = platforms.unix;
+ sourceProvenance = with sourceTypes; [
+ fromSource
+ binaryBytecode # deps
+ ];
+ license = with licenses; [ gpl3Only ];
+ };
+}