mirror of
https://github.com/cucumber-sp/yandex-music-linux.git
synced 2024-12-24 14:34:39 +03:00
Add support for NixOS
Additionally - fix some shellcheck warnings in repack.sh Change-Id: I2cbc6516c54a4f4e4ecef817ed9fe90b0a460faa
This commit is contained in:
parent
bc6875ee33
commit
d2b1fbf4aa
@ -11,3 +11,8 @@
|
|||||||
|
|
||||||
## Самостоятельная сборка
|
## Самостоятельная сборка
|
||||||
Скачайте файл `repack.sh` и .exe файл клиента. Запустите скрипт с помощью `bash repack.sh <path_to_exe>`. В процессе выберите сборку для нужных архитектур (x64, arm64). Зависимости которые могут понадобиться: `nodejs`, `jq`, `npm`, `7z`, `npm asar`, `rpm-tools`
|
Скачайте файл `repack.sh` и .exe файл клиента. Запустите скрипт с помощью `bash repack.sh <path_to_exe>`. В процессе выберите сборку для нужных архитектур (x64, arm64). Зависимости которые могут понадобиться: `nodejs`, `jq`, `npm`, `7z`, `npm asar`, `rpm-tools`
|
||||||
|
|
||||||
|
## NixOs
|
||||||
|
Запустите `nix run` в корне этого репозитория, чтобы запустить приложение. Так
|
||||||
|
же вы можете использовать поле `modules` из flake этого репозитория. Добавив его
|
||||||
|
в модули вашей системы, вы получите пакет `yandex_music` в коллекции pkgs.
|
||||||
|
29
default.nix
Normal file
29
default.nix
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{ fetchurl
|
||||||
|
, runCommand
|
||||||
|
, writeShellApplication
|
||||||
|
|
||||||
|
, p7zip
|
||||||
|
, asar
|
||||||
|
, electron
|
||||||
|
, jq
|
||||||
|
|
||||||
|
, ymExe
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
app = runCommand "yandex_music_app"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [ p7zip asar jq ];
|
||||||
|
repack = ./repack.sh;
|
||||||
|
src = ymExe;
|
||||||
|
} ''
|
||||||
|
bash "$repack" -xl "$src"
|
||||||
|
mv ./app "$out"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
writeShellApplication {
|
||||||
|
name = "yandex_music";
|
||||||
|
runtimeInputs = [ electron ];
|
||||||
|
text = ''
|
||||||
|
electron ${app}
|
||||||
|
'';
|
||||||
|
}
|
71
flake.lock
Normal file
71
flake.lock
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701680307,
|
||||||
|
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "flake-utils",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1704874635,
|
||||||
|
"narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3dc440faeee9e889fe2d1b4d25ad0f430d449356",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"ymExe": "ymExe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ymExe": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"narHash": "sha256-9ANAW3/Cp/QAep36ax2EhjyB9Y6NrKyV1QgsHq5WPDs=",
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_x64_5.0.6.exe"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_x64_5.0.6.exe"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
35
flake.nix
Normal file
35
flake.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
description = "Native Yandex Music desktop client";
|
||||||
|
inputs = {
|
||||||
|
ymExe = {
|
||||||
|
url = https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_x64_5.0.6.exe;
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
outputs = { self, ymExe, nixpkgs, flake-utils }:
|
||||||
|
let
|
||||||
|
yandex_music_with = pkgs: pkgs.callPackage ./. {
|
||||||
|
inherit ymExe;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
flake-utils.lib.eachDefaultSystem
|
||||||
|
(system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
packages = rec {
|
||||||
|
yandex_music = yandex_music_with pkgs;
|
||||||
|
default = yandex_music;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
) // {
|
||||||
|
modules = [{
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(final: prev: {
|
||||||
|
yandex_music = yandex_music_with prev;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
}
|
101
repack.sh
101
repack.sh
@ -1,10 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
prompt_yes_no() {
|
prompt_yes_no() {
|
||||||
local question="$1"
|
local question="$1"
|
||||||
local response
|
local response
|
||||||
while true; do
|
while true; do
|
||||||
read -p "$question (y/n): " response
|
read -rp "$question (y/n): " response
|
||||||
case $response in
|
case $response in
|
||||||
[Yy]*)
|
[Yy]*)
|
||||||
return 0 # Returning success status code
|
return 0 # Returning success status code
|
||||||
@ -19,12 +20,47 @@ prompt_yes_no() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
SCRIPTDIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
usage() {
|
||||||
|
echo "Usage: $(basename "$0") [-xh] YANDEX_MUSIC_EXE"
|
||||||
|
echo
|
||||||
|
echo " Options:"
|
||||||
|
echo " -x Extract and fix only to ./app folder"
|
||||||
|
echo " -l Do not update license"
|
||||||
|
echo " -h Show this help and exit"
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_only=
|
||||||
|
exe_location=
|
||||||
|
update_license=1
|
||||||
|
while getopts :xlh name; do
|
||||||
|
case $name in
|
||||||
|
x) extract_only=1 ;;
|
||||||
|
l) update_license= ;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$OPTIND" -le "$#" ]; then
|
||||||
|
shift "$(( OPTIND - 1))"
|
||||||
|
exe_location="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -z "$exe_location" ]; then
|
||||||
|
echo "No exe file specified"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# unpacking
|
# unpacking
|
||||||
exe_location=$1
|
7z x "$exe_location" -oExtracted
|
||||||
|
|
||||||
7z x $exe_location -oExtracted
|
|
||||||
cp "./Extracted/\$PLUGINSDIR/app-64.7z" "./app-64.7z"
|
cp "./Extracted/\$PLUGINSDIR/app-64.7z" "./app-64.7z"
|
||||||
rm -rf ./Extracted
|
rm -rf ./Extracted
|
||||||
7z x "./app-64.7z" -oExtracted
|
7z x "./app-64.7z" -oExtracted
|
||||||
@ -34,13 +70,10 @@ rm ./app-64.7z
|
|||||||
asar extract "./app.asar" "./app"
|
asar extract "./app.asar" "./app"
|
||||||
rm "./app.asar"
|
rm "./app.asar"
|
||||||
|
|
||||||
# managing npm dependencies
|
|
||||||
cd ./app
|
cd ./app
|
||||||
npm uninstall @yandex-chats/signer
|
|
||||||
npm uninstall electron-notarize
|
if [ -z "$update_license" ]; then
|
||||||
npm install @electron/notarize --save-dev
|
# updating license
|
||||||
npm install --save-dev @electron-forge/cli
|
|
||||||
npx electron-forge import
|
|
||||||
if ! command -v jq &>/dev/null; then
|
if ! command -v jq &>/dev/null; then
|
||||||
echo "Error: jq is not installed. Please install jq to proceed." >&2
|
echo "Error: jq is not installed. Please install jq to proceed." >&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -49,6 +82,7 @@ jq --arg license "UNLICENSED" '. + {license: $license}' package.json > tmp_packa
|
|||||||
mv tmp_package.json package.json
|
mv tmp_package.json package.json
|
||||||
echo "Updated license field in package.json"
|
echo "Updated license field in package.json"
|
||||||
version=$(jq -r .version package.json)
|
version=$(jq -r .version package.json)
|
||||||
|
fi
|
||||||
|
|
||||||
# fixing secretKey issue
|
# fixing secretKey issue
|
||||||
echo "Fixing SecretKey"
|
echo "Fixing SecretKey"
|
||||||
@ -67,6 +101,17 @@ find "./" -type f -name "*.html" -print0 | while IFS= read -r -d $'\0' file; do
|
|||||||
done
|
done
|
||||||
echo "Title Fixed"
|
echo "Title Fixed"
|
||||||
|
|
||||||
|
if [ -n "$extract_only" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# managing npm dependencies
|
||||||
|
npm uninstall @yandex-chats/signer
|
||||||
|
npm uninstall electron-notarize
|
||||||
|
npm install @electron/notarize --save-dev
|
||||||
|
npm install --save-dev @electron-forge/cli
|
||||||
|
npx electron-forge import
|
||||||
|
|
||||||
# set some building parameters from config
|
# set some building parameters from config
|
||||||
forge_config="module.exports = {
|
forge_config="module.exports = {
|
||||||
packagerConfig: {
|
packagerConfig: {
|
||||||
@ -105,49 +150,53 @@ forge_config="module.exports = {
|
|||||||
};
|
};
|
||||||
"
|
"
|
||||||
echo Writing Forge Config...
|
echo Writing Forge Config...
|
||||||
echo $forge_config > ./forge.config.js
|
echo "$forge_config" > ./forge.config.js
|
||||||
|
|
||||||
|
build_x64=0
|
||||||
|
build_arm64=0
|
||||||
|
|
||||||
prompt_yes_no "Build for x64?"
|
if prompt_yes_no "Build for x64?"; then
|
||||||
build_x64=$?
|
build_x64=1
|
||||||
|
fi
|
||||||
|
|
||||||
prompt_yes_no "Build for arm64?"
|
if prompt_yes_no "Build for arm64?"; then
|
||||||
build_arm64=$?
|
build_arm64=1
|
||||||
|
fi
|
||||||
|
|
||||||
# building
|
# building
|
||||||
if [ "$build_x64" -eq 0 ]; then
|
if [ "$build_x64" -eq 1 ]; then
|
||||||
npx electron-forge make --arch="x64"
|
npx electron-forge make --arch="x64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$build_arm64" -eq 0 ]; then
|
if [ "$build_arm64" -eq 1 ]; then
|
||||||
npx electron-forge make --arch="arm64"
|
npx electron-forge make --arch="arm64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# moving packages and rename them
|
# moving packages and rename them
|
||||||
cd ../
|
cd ../
|
||||||
mkdir out
|
mkdir out
|
||||||
if [ "$build_x64" -eq 0 ]; then
|
if [ "$build_x64" -eq 1 ]; then
|
||||||
debpath=$(find "./app/out/make/deb/x64/" -type f -print -quit)
|
debpath=$(find "./app/out/make/deb/x64/" -type f -print -quit)
|
||||||
rpmpath=$(find "./app/out/make/rpm/x64/" -type f -print -quit)
|
rpmpath=$(find "./app/out/make/rpm/x64/" -type f -print -quit)
|
||||||
zippath=$(find "./app/out/make/zip/linux/x64/" -type f -print -quit)
|
zippath=$(find "./app/out/make/zip/linux/x64/" -type f -print -quit)
|
||||||
newdeb="./out/yandexmusic.$version.x64.deb"
|
newdeb="./out/yandexmusic.$version.x64.deb"
|
||||||
newrpm="./out/yandexmusic.$version.x64.rpm"
|
newrpm="./out/yandexmusic.$version.x64.rpm"
|
||||||
newzip="./out/yandexmusic.$version.x64.zip"
|
newzip="./out/yandexmusic.$version.x64.zip"
|
||||||
mv $debpath $newdeb
|
mv "$debpath" "$newdeb"
|
||||||
mv $rpmpath $newrpm
|
mv "$rpmpath" "$newrpm"
|
||||||
mv $zippath $newzip
|
mv "$zippath" "$newzip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$build_arm64" -eq 0 ]; then
|
if [ "$build_arm64" -eq 1 ]; then
|
||||||
debpath=$(find "./app/out/make/deb/arm64/" -type f -print -quit)
|
debpath=$(find "./app/out/make/deb/arm64/" -type f -print -quit)
|
||||||
rpmpath=$(find "./app/out/make/rpm/arm64/" -type f -print -quit)
|
rpmpath=$(find "./app/out/make/rpm/arm64/" -type f -print -quit)
|
||||||
zippath=$(find "./app/out/make/zip/linux/arm64/" -type f -print -quit)
|
zippath=$(find "./app/out/make/zip/linux/arm64/" -type f -print -quit)
|
||||||
newdeb="./out/yandexmusic.$version.arm64.deb"
|
newdeb="./out/yandexmusic.$version.arm64.deb"
|
||||||
newrpm="./out/yandexmusic.$version.arm64.rpm"
|
newrpm="./out/yandexmusic.$version.arm64.rpm"
|
||||||
newzip="./out/yandexmusic.$version.arm64.zip"
|
newzip="./out/yandexmusic.$version.arm64.zip"
|
||||||
mv $debpath $newdeb
|
mv "$debpath" "$newdeb"
|
||||||
mv $rpmpath $newrpm
|
mv "$rpmpath" "$newrpm"
|
||||||
mv $zippath $newzip
|
mv "$zippath" "$newzip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf ./app
|
rm -rf ./app
|
Loading…
Reference in New Issue
Block a user