2025-10-23 06:15:09 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
|
|
dir=$1
|
|
|
|
|
arg=$2
|
|
|
|
|
arch=$(uname -m)
|
|
|
|
|
|
|
|
|
|
if [ "$arch" != "x86_64" ] && [ "$arch" != "aarch64" ]; then
|
|
|
|
|
echo "CPU architecture not recognised (not x86_64 or aarch64). Aborting."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# workaround if we're not renaming the artifact
|
|
|
|
|
if [ "$arch" = "aarch64" ]; then
|
|
|
|
|
arch='arm64'
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ ! -d "${dir}" ]; then
|
2025-10-27 21:43:23 +07:00
|
|
|
echo "${dir} is not a directory or does not exist. Please provide an existing directory."
|
2025-10-23 06:15:09 +02:00
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
localShare="$HOME/.local/share"
|
|
|
|
|
localShareIcons="${localShare}/icons/hicolor"
|
|
|
|
|
|
|
|
|
|
if [ "${arg}" = "remove" ]; then
|
|
|
|
|
rm -v \
|
|
|
|
|
"${localShareIcons}"/512x512/apps/org.jeffvli.feishin.png \
|
|
|
|
|
"${localShareIcons}"/256x256/apps/org.jeffvli.feishin.png \
|
|
|
|
|
"${localShareIcons}"/128x128/apps/org.jeffvli.feishin.png \
|
|
|
|
|
"${localShareIcons}"/64x64/apps/org.jeffvli.feishin.png \
|
|
|
|
|
"${localShareIcons}"/32x32/apps/org.jeffvli.feishin.png \
|
|
|
|
|
"${localShare}"/applications/org.jeffvli.feishin.desktop \
|
2025-10-27 21:43:23 +07:00
|
|
|
"${dir}/Feishin-linux-${arch}.AppImage"
|
2025-10-23 06:15:09 +02:00
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
curl -L --create-dirs --write-out '%{filename_effective}\n' \
|
|
|
|
|
-o "${dir}/Feishin-linux-${arch}.AppImage" "https://github.com/jeffvli/feishin/releases/latest/download/Feishin-linux-${arch}.AppImage" \
|
|
|
|
|
-o "${localShareIcons}"/512x512/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/512x512.png?raw=true' \
|
|
|
|
|
-o "${localShareIcons}"/256x256/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/256x256.png?raw=true' \
|
|
|
|
|
-o "${localShareIcons}"/128x128/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/128x128.png?raw=true' \
|
|
|
|
|
-o "${localShareIcons}"/64x64/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/64x64.png?raw=true' \
|
|
|
|
|
-o "${localShareIcons}"/32x32/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/32x32.png?raw=true'
|
|
|
|
|
chmod -v u+x "${dir}/Feishin-linux-${arch}.AppImage"
|
|
|
|
|
|
|
|
|
|
waylandFlags=''
|
|
|
|
|
if [ "${arg}" = "wayland-native" ]; then
|
|
|
|
|
waylandFlags=' --enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform-hint=auto'
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# this is for Debian-based kernels and ALT respectively
|
|
|
|
|
# https://unix.stackexchange.com/a/303214/145722
|
|
|
|
|
sandboxFlag=''
|
|
|
|
|
if [ "$(sysctl kernel.unprivileged_userns_clone 2>/dev/null)" = "0" ] \
|
|
|
|
|
|| [ "$(sysctl kernel.userns_restrict 2>/dev/null)" = "1" ]; then
|
|
|
|
|
sandboxFlag=' --no-sandbox'
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
mkdir -pv "${localShare}"/applications
|
|
|
|
|
cat > "${localShare}"/applications/org.jeffvli.feishin.desktop << EOL
|
|
|
|
|
[Desktop Entry]
|
|
|
|
|
Name=Feishin
|
|
|
|
|
GenericName=Music player
|
|
|
|
|
Exec=${dir}/Feishin-linux-${arch}.AppImage${sandboxFlag}${waylandFlags}
|
|
|
|
|
TryExec=${dir}/Feishin-linux-${arch}.AppImage
|
|
|
|
|
Terminal=false
|
|
|
|
|
Type=Application
|
|
|
|
|
Icon=org.jeffvli.feishin
|
|
|
|
|
StartupWMClass=feishin
|
|
|
|
|
SingleMainWindow=true
|
|
|
|
|
Categories=AudioVideo;Audio;Player;Music;
|
|
|
|
|
Keywords=Navidrome;Jellyfin;Subsonic;OpenSubsonic
|
|
|
|
|
Comment=A player for your self-hosted music server
|
|
|
|
|
EOL
|