diff --git a/flake.nix b/flake.nix index 2b8966d..c5bec36 100644 --- a/flake.nix +++ b/flake.nix @@ -52,6 +52,11 @@ inherit system; specialArgs = { inherit catppuccin; }; modules = [ + { + nixpkgs.overlays = [ + (import ./packages/strawberry/overlay.nix) + ]; + } ./hosts/all.nix ./hosts/${hostname}.nix ./hardware/${hostname}.nix @@ -74,7 +79,9 @@ system, }: home-manager.lib.homeManagerConfiguration { - pkgs = import nixpkgs { inherit system; }; + pkgs = import nixpkgs { + inherit system; + }; home.username = user; home.homeDirectory = "/home/${user}"; modules = [ diff --git a/home/all.nix b/home/all.nix index 8acf934..94349fd 100755 --- a/home/all.nix +++ b/home/all.nix @@ -19,6 +19,8 @@ nixfmt-rfc-style chromium widevine-cdm + strawberry-master + spotify-player kde-rounded-corners kdePackages.partitionmanager @@ -303,7 +305,7 @@ kwin = { titlebarButtons = { left = [ - "application-menu" + "more-window-actions" "on-all-desktops" "keep-below-windows" "keep-above-windows" @@ -375,6 +377,7 @@ "applications:org.kde.dolphin.desktop" "applications:vesktop.desktop" "applications:kitty.desktop" + "applications:org.strawberrymusicplayer.strawberry.desktop" ]; }; } diff --git a/hosts/all.nix b/hosts/all.nix index 4e1fa68..01acf11 100755 --- a/hosts/all.nix +++ b/hosts/all.nix @@ -211,6 +211,10 @@ services.openssh.enable = true; networking.firewall.enable = false; + networking.extraHosts = '' + 0.0.0.0 apresolve.spotify.com + ''; + # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave diff --git a/packages/strawberry/overlay.nix b/packages/strawberry/overlay.nix new file mode 100644 index 0000000..086d41b --- /dev/null +++ b/packages/strawberry/overlay.nix @@ -0,0 +1,3 @@ +final: prev: { + strawberry-master = prev.callPackage (builtins.path { path = ./package.nix; }) { }; +} diff --git a/packages/strawberry/package.nix b/packages/strawberry/package.nix new file mode 100644 index 0000000..affb712 --- /dev/null +++ b/packages/strawberry/package.nix @@ -0,0 +1,133 @@ +{ + alsa-lib, + boost, + chromaprint, + cmake, + fetchFromGitHub, + fftw, + glib-networking, + gnutls, + gst_all_1, + kdsingleapplication, + lib, + libXdmcp, + libcdio, + libebur128, + libidn2, + libmtp, + libpthreadstubs, + libpulseaudio, + libselinux, + libsepol, + libtasn1, + ninja, + nix-update-script, + p11-kit, + pkg-config, + qt6, + sqlite, + stdenv, + taglib, + util-linux, + sparsehash, + rapidjson, + + # tests + gtest, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "strawberry-master"; + version = "git-master"; + + src = fetchFromGitHub { + owner = "jonaski"; + repo = "strawberry"; + rev = "master"; + hash = "sha256-A5eEXpRKZDwfmmXs+6V1qUerEma4AdncuVXohgh3z4E="; + }; + + # the big strawberry shown in the context menu is *very* much in your face, so use the grey version instead + postPatch = '' + substituteInPlace src/context/contextalbum.cpp \ + --replace-fail pictures/strawberry.png pictures/strawberry-grey.png + ''; + + buildInputs = [ + alsa-lib + boost + chromaprint + fftw + gnutls + kdsingleapplication + libXdmcp + libcdio + libebur128 + libidn2 + libmtp + libpthreadstubs + libtasn1 + qt6.qtbase + sqlite + taglib + sparsehash + rapidjson + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ + libpulseaudio + libselinux + libsepol + p11-kit + ] + ++ (with gst_all_1; [ + glib-networking + gst-libav + gst-plugins-bad + gst-plugins-base + gst-plugins-good + gst-plugins-ugly + gst-plugins-rs + gstreamer + ]); + + nativeBuildInputs = [ + cmake + ninja + pkg-config + qt6.qttools + qt6.wrapQtAppsHook + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ + util-linux + ]; + + cmakeFlags = with lib; [ (cmakeBool "ENABLE_GPOD" false) ]; + + checkInputs = [ gtest ]; + checkTarget = "strawberry_tests"; + preCheck = '' + # defaults to "xcb" otherwise, which requires a display + export QT_QPA_PLATFORM=offscreen + ''; + doCheck = true; + + postInstall = '' + qtWrapperArgs+=( + --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0" + --prefix GIO_EXTRA_MODULES : "${glib-networking.out}/lib/gio/modules" + ) + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Music player and music collection organizer"; + homepage = "https://www.strawberrymusicplayer.org/"; + changelog = "https://raw.githubusercontent.com/jonaski/strawberry/${finalAttrs.finalPackage.version}/Changelog"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ peterhoeg ]; + # upstream says darwin should work but they lack maintainers as of 0.6.6 + platforms = lib.platforms.linux; + mainProgram = "strawberry"; + }; +})