Skip to content

Commit

Permalink
Merge pull request #3389 from johndah4x0r/master
Browse files Browse the repository at this point in the history
Improve install script.
  • Loading branch information
aknoerig authored Jan 21, 2018
2 parents 0e2c6c7 + a03506c commit 234def9
Showing 1 changed file with 195 additions and 42 deletions.
237 changes: 195 additions & 42 deletions install_fritzing.sh
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!"

0 comments on commit 234def9

Please sign in to comment.