├── .gitignore ├── apt-missing-dependencies ├── deepin-wine-helper_5.3.14-1_amd64.deb └── deepin-app-store-runtime_1.0.2+community_amd64.deb ├── README.zh-CN.md ├── README.md └── install-deb.sh /.gitignore: -------------------------------------------------------------------------------- 1 | *.privkey.gpg 2 | -------------------------------------------------------------------------------- /apt-missing-dependencies/deepin-wine-helper_5.3.14-1_amd64.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/HEAD/apt-missing-dependencies/deepin-wine-helper_5.3.14-1_amd64.deb -------------------------------------------------------------------------------- /apt-missing-dependencies/deepin-app-store-runtime_1.0.2+community_amd64.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/HEAD/apt-missing-dependencies/deepin-app-store-runtime_1.0.2+community_amd64.deb -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # Lyricify on Wine 2 | 这是一个存放可以在 Wine 上运行的 Lyricify 版本的仓库。 3 | 4 | [English](README.md) 5 | 6 | ## 目录 7 | - [Lyricify on Wine](#lyricify-on-wine) 8 | - [目录](#目录) 9 | - [发布渠道](#发布渠道) 10 | - [安装](#安装) 11 | - [通过 星火应用商店](#通过-星火应用商店) 12 | - [通过 Github Releases](#通过-github-releases) 13 | - [自动安装脚本](#自动安装脚本) 14 | - [手动安装](#手动安装) 15 | - [维护者](#维护者) 16 | 17 | ## 发布渠道 18 | - 星火应用商店([安装指南](#通过-星火应用商店)) 19 | - Github Releases([安装指南](#通过-github-releases)) 20 | - Docker 镜像(即将推出) 21 | 22 | *注意:经过数小时的测试,我们无法保证 APT 仓库和 Docker 镜像在多个环境中正常工作,因此暂时放弃了这种方式。* 23 | 24 | ## 安装 25 | 26 | ### 通过 星火应用商店 27 | 这种安装方式更加简单。由于这是一个中国服务,可能并非适合所有人(海外可能无法访问)。 28 | 1. 从 [官方网站](https://spark-app.store/download) 下载 Spark Store。 29 | - *本来这里要提醒你网站会是中文,但是既然你看了中文版的 README,我就给删了(笑)。* 30 | 2. 在应用商店中搜索 "Lyricify"。 31 | 3. 点击 "安装"。 32 | 4. 尽情享用! 33 | 34 | ### 通过 Github Releases 35 | #### 自动安装脚本 36 | 只需在终端中执行以下命令: 37 | ```bash 38 | curl -fsSL https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/master/install-deb.sh > install-deb.sh && sudo bash install-deb.sh 39 | ``` 40 | 41 | 如果你所在地区无法访问 `raw.githubusercontent.com`,你可以尝试使用 JSDelivr CDN 的镜像: 42 | ```bash 43 | curl -fsSL https://cdn.jsdelivr.net/gh/Lyricify/Lyricify-on-Wine@master/install-deb.sh > install-deb.sh && sudo bash install-deb.sh 44 | ``` 45 | 46 | #### 手动安装 47 | 首先,从 [Github Releases](https://github.com/Lyricify/Lyricify-on-Wine/releases) 下载最新的发布版本(目前是 .deb 包)。 48 | - 如果你使用的是 Deepin 或 UOS(待验证),可以直接使用 `apt` 命令安装该软件包。所有依赖项都存在于 Deepin 的 Apt 仓库中。 49 | - 如果你使用其他基于 apt/dpkg 的 Linux 发行版,则需要手动安装依赖项。 50 | 1. 克隆并进入此仓库:`git clone https://github.com/Lyricify/Lyricify-on-Wine.git && cd Lyricify-on-Wine` 51 | 2. 从 "apt-missing-dependencies" 目录安装依赖项:`sudo dpkg -i apt-missing-dependencies/*.deb` 52 | 3. 使用 `apt` 安装从 Github Releases 下载的 .deb 包中的 Lyricify 软件包。 53 | 4. 尽情享用! 54 | - 如果你使用非 Debian 系 Linux 发行版(即不适用 deb 软件包格式的发行版),参考下文。 55 | 56 | ## 非 Debian 系发行版的安装 57 | 58 | 该仓库提供的 `deb` 包文件对于 Debian 系发行版已经足够方便,但是对于其他发行版来说,一个 `deb` 包文件并不能提供很大的帮助。 59 | 这里以 Arch linux 举例,对于其他发行版,使用到的相关程序请自行查找安装方法。 60 | 61 | ### 安装 62 | - 安装要用到的程序 **spark-dwine-helper**,**dpkg** 和 **7z** 63 | ```bash 64 | $ sudo pacman -S spark-dwine-helper dpkg p7zip 65 | ``` 66 | 67 | - 下载 [Lyricify-on-Wine](https://github.com/Lyricify/Lyricify-on-Wine) 仓库提供的 `.deb` 包,并解包,剩余的文件可以自行删除 68 | ```bash 69 | $ curl -OL https://github.com/Lyricify/Lyricify-on-Wine/releases/download/v4.2.28/com.wxriw.lyricify4_4.2.28.240502-release-wpack240503.02_amd64.deb 70 | $ dpkg -X com.wxriw.lyricify4_4.2.28.240502-release-wpack240503.02_amd64.deb Lyricify 71 | $ mv Lyricify/opt/apps/com.wxriw.lyricify4/files/files.7z Lyricify/opt/apps/com.wxriw.lyricify4/files/wine_archive.7z . 72 | $ 7z x wine_archive.7z -o./Wine-for-Lyricify 73 | $ 7z x files.7z -o./Lyricify 74 | $ rm *7z 75 | ``` 76 | 77 | - 将 `Lyricify` 文件夹移动到 **spark-dwine-helper** 所对应的默认 `WINEPREFIX` 路径 78 | ```bash 79 | $ mv Lyricify/ ~/.deepinwine/ 80 | ``` 81 | 82 | 83 | ### 运行 84 | 至此应该已经能正常地运行 Lyricify 4,这里假设最初的工作目录是 `~/.Lyricify` 85 | ```bash 86 | $ APPRUN_CMD=~/.Lyricify/Wine-for-Lyricify/bin/wine64 /opt/deepinwine/tools/spark_run_v4.sh "Lyricify" "4.2.28.240502-release-wpack240503.02" "C:/Program Files/Lyricify 4/Lyricify for Spotify.exe" 87 | ``` 88 | 89 | 90 | ### 编写 `.desktop` 文件以将应用程序集成到应用程序菜单中 91 | 编辑 `~/.local/share/applications/com.wxriw.lyricify4.desktop` 文件 92 | ``` 93 | #!/usr/bin/env xdg-open 94 | [Desktop Entry] 95 | Encoding=UTF-8 96 | Type=Application 97 | Categories=Audio; 98 | # 解包时该文件的相对路径应该是 99 | # ./opt/apps/com.wxriw.lyricify4/entries/icons/hicolor/scalable/apps/com.wxriw.lyricify4.png 100 | Icon=~/.Lyricify/com.wxriw.lyricify4.png 101 | Exec="~/.Lyricify/run.sh" --uri 102 | Name=Lyricify 103 | Comment=Lyricify 4 in a Wine container 104 | MimeType= 105 | GenericName=com.wxriw.lyricify4 106 | Terminal=false 107 | StartupNotify=false 108 | ``` 109 | 110 | 编辑 `~/.Lyricify/run.sh` 文件 111 | ```bash 112 | #!/bin/bash 113 | 114 | export APPRUN_CMD=~/.Lyricify/Wine-for-Lyricify/bin/wine64 115 | /opt/deepinwine/tools/spark_run_v4.sh "Lyricify" "4.2.28.240502-release-wpack240503.02" "C:/Program Files/Lyricify 4/Lyricify for Spotify.exe" 116 | ``` 117 | 118 | ## 一些可能的问题 119 | - 在进行 Spotify 授权的时候浏览器无法正常弹出,需要点击左下角的 `登录时遇到问题?` 按钮手动打开浏览器授权。 120 | - 应用界面出现奇怪的显示问题,打开 `设置-Apple Music 歌词-背景-动态` 可以缓解该问题。 121 | 122 | ## 维护者 123 | 该仓库中的软件包由 [Sheng Fan](https://github.com/fred913) 维护。 124 | 关于非 Debian 系发行版的安装方法由 [Chumeng](https://github.com/lihaoze123) 维护。 125 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lyricify on Wine 2 | This is a repository for Lyricify releases that can run on Wine. 3 | 4 | [简体中文](README.zh-CN.md) 5 | 6 | ## Table of Contents 7 | - [Lyricify on Wine](#lyricify-on-wine) 8 | - [Table of Contents](#table-of-contents) 9 | - [Releasing Methods](#releasing-methods) 10 | - [Installation](#installation) 11 | - [via Github Releases](#via-github-releases) 12 | - [Auto-install Script](#auto-install-script) 13 | - [Manual Install](#manual-install) 14 | - [via Spark Store](#via-spark-store) 15 | - [Maintainer](#maintainer) 16 | 17 | ## Releasing Methods 18 | - Github Releases ([Installation Guide](#via-github-releases)) 19 | - Spark Store ([Installation Guide](#via-github-releases)) 20 | 21 | *NOTE: after hours of testing, the APT repo and the Docker image cannot be guaranteed to work properly, so the way is abandoned for now.* 22 | 23 | ## Installation 24 | 25 | ### via Github Releases 26 | #### Auto-install Script 27 | Just execute the following command in your terminal: 28 | ```bash 29 | curl -fsSL https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/master/install-deb.sh > install-deb.sh && sudo bash install-deb.sh 30 | ``` 31 | 32 | If `raw.githubusercontent.com` is blocked in your region, you can try the other one below, which uses JSDelivr CDN: 33 | ```bash 34 | curl -fsSL https://cdn.jsdelivr.net/gh/Lyricify/Lyricify-on-Wine@master/install-deb.sh > install-deb.sh && sudo bash install-deb.sh 35 | ``` 36 | 37 | #### Manual Install 38 | First of all, download the latest release (currently .deb package) from [Github Releases](https://github.com/Lyricify/Lyricify-on-Wine/releases). 39 | - If you're using Deepin or UOS(unverified), install the package using `apt` command directly. All dependecies exist in Deepin's Apt repository. 40 | - If you're using other apt/dpkg-based Linux distributions, you'd have to install dependencies manually. 41 | 1. Clone and enter this repository: `git clone https://github.com/Lyricify/Lyricify-on-Wine.git && cd Lyricify-on-Wine` 42 | 2. Install the dependencies from "apt-missing-dependencies" directory: `sudo dpkg -i apt-missing-dependencies/*.deb` 43 | 3. Install the Lyricify package from the .deb package you downloaded from Github Releases using `apt`. 44 | 4. Enjoy! 45 | 46 | ### via Spark Store 47 | This way installation is much easier. Since it's a Chinese service it might not be suitable and accessible for everyone. 48 | 1. Download Spark Store from [its official website](https://spark-app.store/download). (*might be chinese!*) 49 | 2. Search for "Lyricify" from the app store. 50 | 3. Click on "Install". 51 | 4. Enjoy! 52 | 53 | ## Installation for Non-Debian-based Distributions 54 | 55 | If you are using a non-Debian-based Linux distribution (i.e., distributions that don't use the deb package format), refer to the following. 56 | The `deb` package files provided by this repository are convenient enough for Debian-based distributions, but for other distributions, a `deb` package file doesn't offer much help. 57 | Here, we'll use Arch Linux as an example. For other distributions, please find and install the relevant programs on your own. 58 | 59 | ### Installation 60 | - Install the required programs **spark-dwine-helper**, **dpkg**, and **7z** 61 | ```bash 62 | $ sudo pacman -S spark-dwine-helper dpkg p7zip 63 | ``` 64 | 65 | - Download the `.deb` package provided by the [Lyricify-on-Wine](https://github.com/Lyricify/Lyricify-on-Wine) repository, unpack it, and you can delete the remaining files as needed 66 | ```bash 67 | $ curl -OL https://github.com/Lyricify/Lyricify-on-Wine/releases/download/v4.2.28/com.wxriw.lyricify4_4.2.28.240502-release-wpack240503.02_amd64.deb 68 | $ dpkg -X com.wxriw.lyricify4_4.2.28.240502-release-wpack240503.02_amd64.deb Lyricify 69 | $ mv Lyricify/opt/apps/com.wxriw.lyricify4/files/files.7z Lyricify/opt/apps/com.wxriw.lyricify4/files/wine_archive.7z . 70 | $ 7z x wine_archive.7z -o./Wine-for-Lyricify 71 | $ 7z x files.7z -o./Lyricify 72 | $ rm *7z 73 | ``` 74 | 75 | - Move the `Lyricify` folder to the default `WINEPREFIX` path corresponding to **spark-dwine-helper** 76 | ```bash 77 | $ mv Lyricify/ ~/.deepinwine/ 78 | ``` 79 | 80 | ### Running 81 | At this point, you should be able to run Lyricify 4 normally. Here, we assume the initial working directory is `~/.Lyricify` 82 | ```bash 83 | $ APPRUN_CMD=~/.Lyricify/Wine-for-Lyricify/bin/wine64 /opt/deepinwine/tools/spark_run_v4.sh "Lyricify" "4.2.28.240502-release-wpack240503.02" "C:/Program Files/Lyricify 4/Lyricify for Spotify.exe" 84 | ``` 85 | 86 | ### Writing a `.desktop` file to integrate the application into the application menu 87 | Edit the `~/.local/share/applications/com.wxriw.lyricify4.desktop` file 88 | ``` 89 | #!/usr/bin/env xdg-open 90 | [Desktop Entry] 91 | Encoding=UTF-8 92 | Type=Application 93 | Categories=Audio; 94 | # The relative path of this file when unpacking should be 95 | # ./opt/apps/com.wxriw.lyricify4/entries/icons/hicolor/scalable/apps/com.wxriw.lyricify4.png 96 | Icon=~/.Lyricify/com.wxriw.lyricify4.png 97 | Exec="~/.Lyricify/run.sh" --uri 98 | Name=Lyricify 99 | Comment=Lyricify 4 in a Wine container 100 | MimeType= 101 | GenericName=com.wxriw.lyricify4 102 | Terminal=false 103 | StartupNotify=false 104 | ``` 105 | 106 | Edit the `~/.Lyricify/run.sh` file 107 | ```bash 108 | #!/bin/bash 109 | 110 | export APPRUN_CMD=~/.Lyricify/Wine-for-Lyricify/bin/wine64 111 | /opt/deepinwine/tools/spark_run_v4.sh "Lyricify" "4.2.28.240502-release-wpack240503.02" "C:/Program Files/Lyricify 4/Lyricify for Spotify.exe" 112 | ``` 113 | 114 | ## Some Possible Issues 115 | - When authorizing Spotify, the browser may not pop up normally. You need to click the `Problems logging in?` button in the lower left corner to manually open the browser for authorization. 116 | - If there are strange display issues with the application interface, opening `Settings-Apple Music Lyrics-Background-Dynamic` can alleviate this problem. 117 | 118 | ## Maintainer 119 | Packages in this repository are maintained by [Sheng Fan](https://github.com/fred913). 120 | The installation methods for non-Debian based distributions are maintained by [Chumeng](https://github.com/lihaoze123). 121 | -------------------------------------------------------------------------------- /install-deb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Check if script is run as root 4 | if [ "$EUID" -ne 0 ]; then 5 | echo "ERROR: Please run as root" 6 | exit 1 7 | fi 8 | 9 | # Check requirements 10 | for cmd in dpkg; do 11 | if ! command -v $cmd &>/dev/null; then 12 | echo "ERROR: $cmd is not present, please install it first" 13 | exit 1 14 | fi 15 | done 16 | 17 | APT_GET_INSTALLED=true 18 | if ! command -v apt-get &>/dev/null; then 19 | echo "ERROR: apt-get is not present" 20 | exit 1 21 | else 22 | echo "INFO: apt-get is present" 23 | apt-get update 24 | fi 25 | 26 | # check other dependencies: curl, jq 27 | for cmd in curl jq; do 28 | if ! command -v $cmd &>/dev/null; then 29 | if [ "$APT_GET_INSTALLED" = "true" ]; then 30 | echo "INFO: $cmd is not present, attempting to install it using apt-get" 31 | apt-get install -y $cmd 32 | if [ $? -ne 0 ]; then 33 | echo "ERROR: failed to install $cmd using apt-get" 34 | exit 1 35 | else 36 | echo "INFO: $cmd installed successfully using apt-get" 37 | fi 38 | else 39 | echo "ERROR: $cmd is not present, please install it first" 40 | exit 1 41 | fi 42 | fi 43 | done 44 | 45 | # check optional dependencies 46 | ARIA2C_INSTALLED=true 47 | if ! command -v aria2c &>/dev/null; then 48 | if [ "$APT_GET_INSTALLED" = "true" ]; then 49 | echo "INFO: aria2c is not present, attempting to install it using apt-get" 50 | apt-get install -y aria2 51 | if [ $? -ne 0 ]; then 52 | echo "WARN: aria2c is not present, falling back to curl" 53 | ARIA2C_INSTALLED=false 54 | else 55 | echo "INFO: aria2c installed successfully using apt-get" 56 | fi 57 | else 58 | echo "WARN: aria2c is not present, falling back to curl" 59 | ARIA2C_INSTALLED=false 60 | fi 61 | else 62 | echo "INFO: aria2c installed" 63 | fi 64 | 65 | function parse_json() { 66 | local json_content=$1 67 | local key=$2 68 | echo $(echo $json_content | jq -r ".$key") 69 | } 70 | 71 | function download_file_from_url() { 72 | local url=$1 73 | local target_path=$2 74 | 75 | if [ -f $target_path ]; then 76 | echo "INFO: $target_path already exists, removing it" 77 | rm $target_path 78 | fi 79 | 80 | echo "INFO: downloading $url to $target_path" 81 | if [ "$ARIA2C_INSTALLED" = "true" ]; then 82 | echo "INFO: aria2c is installed, allowing parallel downloads" 83 | # aria2c -o $target_path $url 84 | aria2c -d $(dirname $target_path) -o $(basename $target_path) $url 85 | else 86 | echo "INFO: aria2c is not installed, falling back to curl" 87 | curl -L -o $target_path $url 88 | fi 89 | if [ $? -ne 0 ]; then 90 | echo "ERROR: Failed to download $url" 91 | exit 1 92 | fi 93 | } 94 | 95 | # check if raw.githubusercontent.com is accessible 96 | RAW_GITHUB_AVAILABLE=true 97 | if ! curl -s https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/master/install-deb.sh | grep -q "raw.githubusercontent.com"; then 98 | echo "WARN: raw.githubusercontent.com is not accessible. Using JSDelivr instead" 99 | RAW_GITHUB_AVAILABLE=false 100 | fi 101 | 102 | function download_file_from_repo() { 103 | local path_in_repo=$1 104 | local target_path=$2 105 | 106 | if [ -f $target_path ]; then 107 | echo "INFO: $target_path already exists, removing it" 108 | rm $target_path 109 | fi 110 | 111 | echo "INFO: downloading $path_in_repo to $target_path" 112 | if [ "$RAW_GITHUB_AVAILABLE" = "true" ]; then 113 | url=https://raw.githubusercontent.com/Lyricify/Lyricify-on-Wine/master/$path_in_repo 114 | else 115 | url=https://cdn.jsdelivr.net/gh/Lyricify/Lyricify-on-Wine@master/$path_in_repo 116 | fi 117 | download_file_from_url $url $target_path 118 | if [ $? -ne 0 ]; then 119 | echo "ERROR: Failed to download $path_in_repo" 120 | exit 1 121 | fi 122 | } 123 | 124 | function safe_dpkg_install() { 125 | local package_filepath=$1 126 | echo "INFO: installing $package_filepath using dpkg" 127 | dpkg -i $package_filepath 128 | if [ $? -ne 0 ]; then 129 | echo "ERROR: failed to install $package_filepath using dpkg" 130 | exit 1 131 | else 132 | echo "INFO: $package_filepath installed successfully using dpkg" 133 | fi 134 | } 135 | 136 | function check_and_install_package() { 137 | local package_name=$1 138 | local package_name_in_repo=$2 139 | 140 | if dpkg-query -W -f='${Status}' $package_name 2>/dev/null | grep -q "install ok installed"; then 141 | echo "INFO: $package_name is already installed" 142 | else 143 | echo "INFO: attempting to install $package_name" 144 | apt-get install -y $package_name 145 | if [ $? -ne 0 ]; then 146 | echo "ERROR: failed to install $package_name using apt-get. Falling back to dpkg" 147 | download_file_from_repo "apt-missing-dependencies/${package_name_in_repo}" "/tmp/${package_name_in_repo}" 148 | apt-get install -y /tmp/${package_name_in_repo} 149 | if [ $? -ne 0 ]; then 150 | echo "ERROR: failed to install $package_name using apt-get(local)" 151 | exit 1 152 | else 153 | echo "INFO: $package_name installed successfully using apt-get(local)" 154 | fi 155 | else 156 | echo "INFO: $package_name installed successfully, using apt-get" 157 | fi 158 | fi 159 | } 160 | 161 | check_and_install_package "deepin-app-store-runtime" "deepin-app-store-runtime_1.0.2+community_amd64.deb" 162 | check_and_install_package "deepin-wine-helper" "deepin-wine-helper_5.3.14-1_amd64.deb" 163 | 164 | echo "INFO: All dependencies installed successfully" 165 | 166 | # fetch the latest version from Github Releases 167 | latest_release=$(curl -H "Accept: application/vnd.github+json" -s "https://api.github.com/repos/Lyricify/Lyricify-on-Wine/releases/latest") 168 | 169 | # extract the download URL from the latest release 170 | release_id=$(parse_json "$latest_release" "id") 171 | version_name=$(parse_json "$latest_release" "name") 172 | upload_datetime=$(parse_json "$latest_release" "published_at") 173 | download_url=$(parse_json "$latest_release" "assets[0].browser_download_url") 174 | 175 | if [ "$release_id" = "null" ]; then 176 | echo "ERROR: Failed to fetch latest release information from Github: probably rate-limited" 177 | echo "INFO: Please try again later (maybe 20-40 seconds)" 178 | exit 1 179 | fi 180 | 181 | # echo "INFO: Extracted download URL: $download_url" 182 | echo "INFO: Version information (latest):" 183 | echo " Release ID: $release_id" 184 | echo " Version Name: $version_name" 185 | echo " Upload Date: $upload_datetime" 186 | echo " Download URL: $download_url" 187 | echo "" 188 | 189 | # prompt the user to confirm the download 190 | read -p "Install $version_name? [Y/n] " answer 191 | if [[ "$answer" =~ ^[Nn]$ ]]; then 192 | echo "INFO: abandoning installation of $version_name" 193 | else 194 | # download the package 195 | echo "INFO: Downloading $version_name from $download_url" 196 | # if ! curl -L -o /tmp/lyricify.deb $download_url; then 197 | # echo "ERROR: Failed to download $version_name" 198 | # exit 1 199 | # fi 200 | download_file_from_url $download_url /tmp/lyricify.deb 201 | 202 | # install the package 203 | echo "INFO: Installing $version_name" 204 | safe_dpkg_install /tmp/lyricify.deb 205 | 206 | # clean up 207 | rm /tmp/lyricify.deb 208 | 209 | echo "INFO: $version_name installed successfully" 210 | 211 | read -p "Install shortcut for Lyricify on Wine in /usr/bin? [Y/n] " answer 212 | if [[ "$answer" =~ ^[Nn]$ ]]; then 213 | echo "INFO: Skipping shortcut installation" 214 | echo "INFO: To launch Lyricify, run /opt/apps/com.wxriw.lyricify4/files/run.sh or start from applications menu" 215 | else 216 | # create the shortcut 217 | # target: /opt/apps/com.wxriw.lyricify4/files/run.sh 218 | cat >/usr/bin/lyricify-launcher <