-
Notifications
You must be signed in to change notification settings - Fork 852
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3389 from johndah4x0r/master
Improve install script.
- Loading branch information
Showing
1 changed file
with
195 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,199 @@ | ||
#!/bin/sh | ||
#!/bin/bash | ||
# | ||
# this is a rough beginning of a linux install script for fritzing | ||
# sets up document icons and file associations using MIME types | ||
# | ||
# first ensure fritzing is unpacked in its final destination | ||
# and then run this script | ||
|
||
APPLICATIONSDIR="${HOME}/.local/share/applications" | ||
MIMEDIR="${HOME}/.local/share/mime" | ||
PACKAGESDIR="${MIMEDIR}/packages" | ||
|
||
APPDIR=$(dirname "$0") | ||
|
||
cd $APPDIR | ||
|
||
# install fritzing into user MIME packages directory | ||
mkdir -p "${PACKAGESDIR}" | ||
cp icons/fritzing.xml "${PACKAGESDIR}" || exit 1 | ||
|
||
# install fritzing desktop entry for user (includes MIME associations) | ||
desktop-file-edit --set-key=Exec --set-value="$(pwd)/Fritzing" fritzing.desktop | ||
xdg-desktop-menu install --novendor --mode user fritzing.desktop | ||
|
||
# install image-files into user hicolor theme with specified size | ||
# ~/.local/share/icons/hicolor/*size* | ||
# /apps | ||
xdg-icon-resource install --noupdate --novendor --mode user --context apps \ | ||
--size 256 icons/fritzing_icon.png fritzing | ||
# /mimetypes | ||
ICON_SIZES="128 256" | ||
FILE_EXTENSIONS="fz fzz fzb fzbz fzp fzpz fzm" | ||
for size in ${ICON_SIZES}; do | ||
for extension in ${FILE_EXTENSIONS}; do | ||
xdg-icon-resource install --noupdate --mode user --context mimetypes \ | ||
--size ${size} "icons/${extension}_icon${size}.png" \ | ||
"application-x-fritzing-${extension}" | ||
done | ||
# this is a rough beginning of a Linux install script for fritzing | ||
# sets up document icons and file associations using mime types | ||
|
||
APPDIR="$(dirname "$0")" | ||
PROG="$(basename "$0")" | ||
APPVER="0.9.3b" | ||
ID="$(id -u)" | ||
ARGS="$*" | ||
|
||
# Mode toggles | ||
MODE="" | ||
SYSMODE="false" | ||
USERMODE="false" | ||
|
||
# Functions | ||
show_help() { | ||
cat >&2 <<END | ||
$PROG - Usage: | ||
$PROG [-h | --help] [-s | --system] [-u | --user] | ||
-h/--help - Show this message, then exit. | ||
* -s/--system - Install Fritzing in system mode (for global use) | ||
* -u/--user - Install Fritzing in user mode (recommended, optimal) | ||
*Mutually exclusive, cannot be mixed! | ||
Installer program for Fritzing. | ||
Fritzing version: $APPVER | ||
END | ||
} | ||
|
||
arg_err() { | ||
show_help | ||
echo "(exit 1) Unknown argument: $*" >&2 | ||
exit 1 | ||
} | ||
|
||
# Parse arguments | ||
for i in $ARGS; do | ||
case $i in | ||
'-h' | '--help') | ||
show_help | ||
exit 0 | ||
;; | ||
'-s' | '--system') | ||
SYSMODE="true" | ||
;; | ||
'-u' | '--user') | ||
USERMODE="true" | ||
;; | ||
'-*' | '--*') | ||
arg_err "$i" | ||
exit 1 | ||
;; | ||
esac | ||
done | ||
|
||
# update user databases | ||
update-desktop-database "${APPLICATIONSDIR}" | ||
update-mime-database "${MIMEDIR}" | ||
xdg-icon-resource forceupdate --mode user | ||
if [[ "$SYSMODE" == 'true' && "$USERMODE" == 'true' ]]; then | ||
show_help | ||
echo "Cannot be mixed: '-u/--user' and '-s/--system'" >&2 | ||
exit 1 | ||
elif [[ "$ID" -eq 0 || "$SYSMODE" == "true" ]]; then | ||
MODE="system" | ||
elif [[ "$ID" -ne 0 || "$USERMODE" = "true" ]]; then | ||
MODE="user" | ||
fi | ||
|
||
# Bug-A-Salt! [no copyright strikes pls ;(] | ||
if [[ "$MODE" == "n/a" ]]; then | ||
echo "If you see !!THIS!! message, then you have a bug!" >&2 | ||
exit 1 | ||
fi | ||
|
||
if [[ "$MODE" == "system" && "$ID" -ne 0 ]]; then | ||
echo "(exit 1) Cannot install in system mode. Must be root!" >&2 | ||
exit 1 | ||
fi | ||
|
||
# Mode interpreter | ||
case $MODE in | ||
'user') | ||
MIMEDIR=~/.local/share/mime | ||
APPS=~/.local/share/applications | ||
APP_ICON=~/.local/share/icons/hicolor/128x128/apps/fritzing.png | ||
MIMES=~/.mime.types | ||
TARGET=~/.local/share/fritzing | ||
BIN=~/.local/bin | ||
|
||
# Back-up ~/.mime.types | ||
echo ":: Copying ~/.mime.types -> ~/.mime.types.bak" | ||
cp "$MIMES" "${MIMES}.bak";; | ||
|
||
'system') | ||
MIMEDIR=/usr/share/mime | ||
APPS=/usr/share/applications | ||
MIMES=/etc/mime.types | ||
TARGET=/usr/share/fritzing | ||
APP_ICON=/usr/share/icons/hicolor/128x128/apps/fritzing.png | ||
BIN=/usr/bin | ||
|
||
# Back-up /etc/mime.types | ||
echo ":: Copying /etc/mime.types -> /etc/mime.types.bak" | ||
cp "$MIMES" "${MIMES}.bak" | ||
;; | ||
esac | ||
|
||
|
||
# check if user .mime.types file exists, otherwise create it | ||
if [[ ! -f ~/.mime.types && "$MODE" == "user" ]]; then | ||
echo "Creating ~/.mime.types ..." | ||
touch ~/.mime.types | ||
fi | ||
|
||
if [[ ! -d "$TARGET" ]]; then | ||
rm -rf "$TARGET" | ||
mkdir -p "$TARGET" | ||
fi | ||
|
||
if [[ ! -d "$BIN" ]]; then | ||
mkdir -p "$BIN" | ||
fi | ||
|
||
# add mime types for fritzing file formats | ||
grep -q 'application/x-fritzing' ~/.mime.types | ||
if [ $? -eq 0 ]; then | ||
echo "Fritzing MIME types already registered" | ||
else | ||
echo "Registering Fritzing MIME types..." | ||
{ | ||
echo -e "application/x-fritzing-fz\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzz\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzp\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzpz\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzb\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzbz\t\t\tfritzing" ; | ||
echo -e "application/x-fritzing-fzm\t\t\tfritzing" ; | ||
} >> ~/.mime.types | ||
fi | ||
|
||
echo "Copying Fritzing data..." | ||
cp -Rp "$APPDIR" "$TARGET" | ||
|
||
echo "Entering $(basename "$TARGET")/" | tr -s "/" | ||
cd "$TARGET" | ||
|
||
# install Fritzing into mime directory | ||
echo "Installing Fritzing mime types..." | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fz.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzz.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzp.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzpz.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzb.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzbz.xml' | ||
xdg-mime install --mode "$MODE" 'icons/x-fritzing-fzm.xml' | ||
|
||
# set the default application to fritzing.desktop | ||
echo "Setting up default application -> fritzing.desktop" | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fz | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzz | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzp | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzpz | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzb | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzbz | ||
xdg-mime default 'fritzing.desktop' application/x-fritzing-fzm | ||
|
||
# install image-files into mime system with specified size | ||
echo "Installing Fritzing system icons..." | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fz_icon128.png' application-x-fritzing-fz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fz_icon256.png' application-x-fritzing-fz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzz_icon128.png' application-x-fritzing-fzz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzz_icon256.png' application-x-fritzing-fzz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzp_icon128.png' application-x-fritzing-fzp | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzp_icon256.png' application-x-fritzing-fzp | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzpz_icon128.png' application-x-fritzing-fzpz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzpz_icon256.png' application-x-fritzing-fzpz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzb_icon128.png' application-x-fritzing-fzb | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzb_icon256.png' application-x-fritzing-fzb | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzbz_icon128.png' application-x-fritzing-fzbz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzbz_icon256.png' application-x-fritzing-fzbz | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 128 'icons/fzm_icon128.png' application-x-fritzing-fzm | ||
xdg-icon-resource install --mode "$MODE" --context mimetypes --size 256 'icons/fzm_icon256.png' application-x-fritzing-fzm | ||
echo "Installed Fritzing system icons" | ||
|
||
echo "Making symlinks..." | ||
ln -s $(realpath ./Fritzing) "$BIN"/Fritzing | ||
|
||
echo "Doing final touch..." | ||
sed -i "s/icons\/fritzing_icon.png/${APP_ICON}/" fritzing.desktop | ||
cp fritzing.desktop "$APPS" | ||
cp icons/fritzing_icon.png "$APP_ICON" | ||
|
||
# update databases | ||
echo "Updating databases..." | ||
update-desktop-database "$APPS" | ||
update-mime-database "$MIMEDIR" | ||
|
||
echo "installed fritzing system icons" | ||
echo "Done!" |