From 9363d12ba7819673f5f505023f0d93a0adbc1c38 Mon Sep 17 00:00:00 2001 From: Yury Shvedov Date: Wed, 31 Jan 2024 23:49:38 +0300 Subject: [PATCH] [nix] Prettify code * Make all build with one mkDerivation procedure * Use version from version_info.json file * Add meta field * Use version_info.json to download exe file if none given * Add noflake version for testing previous * Use common desktop file * Install icon with package Change-Id: I2fecc74859f3c788161bb2f96bd5aa950d6433ae --- flake.nix | 11 ++--- nix/default.nix | 107 +++++++++++++++++++++++++++++++----------------- 2 files changed, 76 insertions(+), 42 deletions(-) diff --git a/flake.nix b/flake.nix index f5c3f14..1542bae 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ }; outputs = { self, ymExe, nixpkgs, flake-utils }: let - yandex-music-with = pkgs: pkgs.callPackage ./nix { + yandexmusic-with = pkgs: pkgs.callPackage ./nix { inherit ymExe; }; in @@ -17,19 +17,20 @@ in { packages = rec { - yandex-music = yandex-music-with pkgs; - yandex-music-backgroud = yandex-music.override { + yandexmusic = yandexmusic-with pkgs; + yandexmusic-backgroud = yandexmusic.override { fixQuit = false; }; + yandexmusic-noflakes = pkgs.callPackage ./nix {}; generate_packages = pkgs.callPackage ./nix/generate_packages.nix {}; - default = yandex-music; + default = yandexmusic; }; } ) // { modules = [{ nixpkgs.overlays = [ (final: prev: { - yandex-music = yandex-music-with prev; + yandexmusic = yandexmusic-with prev; }) ]; }]; diff --git a/nix/default.nix b/nix/default.nix index 47b1a5d..8ca6fc0 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -1,48 +1,81 @@ { fetchurl -, runCommand -, writeShellApplication -, makeDesktopItem -, symlinkJoin +, stdenvNoCC +, lib +, makeWrapper , p7zip , asar -, electron , jq +, electron -, ymExe +, ymExe ? null , fixQuit ? true }: let - app = runCommand "yandex-music-app" - { - nativeBuildInputs = [ p7zip asar jq ]; - repack = ./../repack.sh; - src = ymExe; - } '' - bash "$repack" ${if !fixQuit then "-q" else ""} -o "$out" "$src" - ''; - launcher = writeShellApplication { - name = "yandex-music"; - runtimeInputs = [ electron ]; - text = '' - electron ${app}/yandexmusic.asar "$@" - ''; - }; - desktopItem = makeDesktopItem { - name = "yandex-music"; - desktopName = "Yandex Music"; - comment = "Yandex Music - we collect music for you"; - exec = "${launcher}/bin/yandex-music"; - terminal = false; - icon = "${app}/favicon.svg"; - categories = [ "Audio" "Music" "Player" "AudioVideo" ]; - extraConfig = { - "Name[ru]" = "Яндекс Музыка"; - "Comment[ru]" = "Яндекс Музыка — собираем музыку для вас"; - }; - }; + version_info = with builtins; fromJSON (readFile ../version_info.json); in -symlinkJoin { - name = "yandex-music"; - paths = [ launcher desktopItem ]; +stdenvNoCC.mkDerivation +{ + name = "yandexmusic"; + inherit (version_info) version; + + nativeBuildInputs = [ + p7zip + asar + jq + makeWrapper + ]; + + repack = ./../repack.sh; + desktopItem = ../templates/desktop; + src = + if ymExe != null + then ymExe + else + fetchurl { + url = version_info.exe_link; + sha256 = version_info.exe_sha256; + }; + + unpackPhase = '' + bash "$repack" ${if !fixQuit then "-q" else ""} -o "./app" "$src" + ''; + + installPhase = '' + mkdir -p "$out/share/nodejs" + mv app/yandexmusic.asar "$out/share/nodejs" + + # use makeWrapper on electron binary to make it call our asar package + makeWrapper "${electron}/bin/electron" "$out/bin/yandexmusic" \ + --add-flags "$out/share/nodejs/yandexmusic.asar" + + mkdir -p "$out/share/pixmaps" + mkdir -p "$out/share/icons/hicolor/48x48/apps/" + cp ./app/favicon.png "$out/share/icons/hicolor/48x48/apps/yandexmusic.png" + ln -s ../icons/hicolor/48x48/apps/yandexmusic.png "$out/share/pixmaps" + + mkdir -p $out/share/applications + cp $desktopItem $out/share/applications/yandexmusic.desktop + ''; + + meta = { + description = "Yandex Music - Personal recommendations, selections for any occasion and new music"; + homepage = "https://music.yandex.ru/"; + downloadPage = "https://music.yandex.ru/download/"; + license = lib.licenses.unfree; + platforms = [ "x86_64-linux" "aarch64-linux" ]; + maintainers = [ + { + name = "Yury Shvedov"; + email = "mestofel13@gmail.com"; + github = "ein-shved"; + githubId = 3513222; + } + { + github = "cucumber-sp"; + githubId = 100789522; + name = "Andrey Onishchenko"; + } + ]; + }; }