about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/misc/navidrome/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/misc/navidrome/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/misc/navidrome/default.nix81
1 files changed, 53 insertions, 28 deletions
diff --git a/nixpkgs/pkgs/servers/misc/navidrome/default.nix b/nixpkgs/pkgs/servers/misc/navidrome/default.nix
index 17e648e59ab1..173dd0caa88f 100644
--- a/nixpkgs/pkgs/servers/misc/navidrome/default.nix
+++ b/nixpkgs/pkgs/servers/misc/navidrome/default.nix
@@ -1,49 +1,74 @@
-{ lib, stdenv, fetchurl, ffmpeg, ffmpegSupport ? true, makeWrapper, nixosTests }:
+{ callPackage
+, buildGoModule
+, fetchFromGitHub
+, lib
+, pkg-config
+, stdenv
+, ffmpeg
+, taglib
+, zlib
+, makeWrapper
+, nixosTests
+, ffmpegSupport ? true
+}:
 
-with lib;
+let
 
-stdenv.mkDerivation rec {
-  pname = "navidrome";
   version = "0.47.5";
 
+  src = fetchFromGitHub {
+    owner = "navidrome";
+    repo = "navidrome";
+    rev = "v${version}";
+    hash = "sha256-gTvJI+brdEpdpbEcdQycqw15seI+k5dMDVrjY3v6i14=";
+  };
+
+  ui = callPackage ./ui {
+    inherit src version;
+  };
 
-  src = fetchurl (if stdenv.hostPlatform.system == "x86_64-linux"
-  then {
-    url = "https://github.com/deluan/navidrome/releases/download/v${version}/navidrome_${version}_Linux_x86_64.tar.gz";
-    sha256 = "sha256-AkSjtln53HDdIcQgnA8Wj010RXnOlOsFm2wfVgbvwtc=";
-  }
-  else {
-    url = "https://github.com/deluan/navidrome/releases/download/v${version}/navidrome_${version}_Linux_arm64.tar.gz";
-    sha256 = "sha256-+VBRiV2zKa6PwamWj/jmE4iuoohAD6oeGnlFi4/01HM=";
-  });
+in
 
-  nativeBuildInputs = [ makeWrapper ];
+buildGoModule {
 
-  unpackPhase = ''
-    tar xvf $src navidrome
-  '';
+  pname = "navidrome";
 
-  installPhase = ''
-    runHook preInstall
+  inherit src version;
 
-     mkdir -p $out/bin
-     cp navidrome $out/bin
+  vendorSha256 = "sha256-xMAxGbq2VSXkF9R9hxB9EEk2CnqsRxg2Nmt7zyXohJI=";
 
-    runHook postInstall
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+
+  buildInputs = [ taglib zlib ];
+
+  ldflags = [
+    "-X github.com/navidrome/navidrome/consts.gitSha=${src.rev}"
+    "-X github.com/navidrome/navidrome/consts.gitTag=v${version}"
+  ];
+
+  CGO_CFLAGS = lib.optionals stdenv.cc.isGNU [ "-Wno-return-local-addr" ];
+
+  prePatch = ''
+    cp -r ${ui}/* ui/build
   '';
 
-  postFixup = ''
+  postFixup = lib.optionalString ffmpegSupport ''
     wrapProgram $out/bin/navidrome \
-      --prefix PATH : ${makeBinPath (optional ffmpegSupport ffmpeg)}
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
   '';
 
-  passthru.tests.navidrome = nixosTests.navidrome;
+  passthru = {
+    inherit ui;
+    tests.navidrome = nixosTests.navidrome;
+    updateScript = callPackage ./update.nix {};
+  };
 
   meta = {
     description = "Navidrome Music Server and Streamer compatible with Subsonic/Airsonic";
     homepage = "https://www.navidrome.org/";
-    license = licenses.gpl3Only;
-    platforms = [ "x86_64-linux" "aarch64-linux" ];
-    maintainers = with maintainers; [ aciceri ];
+    license = lib.licenses.gpl3Only;
+    sourceProvenance = with lib.sourceTypes; [ fromSource ];
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ aciceri squalus ];
   };
 }