#!/bin/sh
# -*- mode: shell-script; coding: utf-8 -*-
#
# elho-gnome-config
#
# Script to set some sane GNOME GConf settings
#
# Copyright (C) 2010-2015 Elmar Hoffmann
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#

set -e

HOMEPAGE_ELHO='http://www.elho.net/'
HOMEPAGE_LUSER='http://www.google.com/'

. /lib/elho/shell-tools

if which gconftool-2 > /dev/null; then
    gconf_set ()
    {
	local key="$1"
	local type="$2"
	local value="$3"

	case "${type}" in
	    list-*)
		type=$(echo "${type}" | sed --quiet --expression='s/^list-//p')
		gconftool-2 --set "${key}" --type 'list' --list-type="${type}" "${value}"
		;;
	    *)
		gconftool-2 --set "${key}" --type "${type}" "${value}"
		;;
	esac
    }
else
    warn "gconftool-2 not installed, not setting gconf values!"
    gconf_set ()
    {
	:
    }
fi
if which dconf > /dev/null; then
    dconf_set ()
    {
	local key="$1"
	local value="$2"

	dconf write "${key}" "${value}"
    }
else
    warn "dconf not installed, not setting dconf values!"
    dconf_set ()
    {
	:
    }
fi

usage ()
{
    echo "Usage: $(basename -- "$0") [--shared] [--luser]"
}

set +e
commandline=$(getopt --name "$(basename -- "$0"): Error" \
    --options='?h' --longoptions='help,usage,shared,luser' -- "$@")
if [ $? -ne 0 ]; then
        usage
        exit 2
    exit
fi
set -e
eval set -- "${commandline}"
shared=0
luser=0
while true; do
    case "$1" in
        -\?|-h|--help|--usage)
            usage
            exit
            ;;
        --shared)
            shared=1
            ;;
        --luser)
            luser=1
            ;;
        --)
            shift
            break
            ;;
        *)
            error "Invalid getopt(1) output."
            exit 1
            ;;
    esac
    shift
done
if [ $# -ne 0 ]; then
        usage
        exit 2
    exit
fi

if [ "${luser}" -eq 0 ]; then
    homepage="${HOMEPAGE_ELHO}"
else
    homepage="${HOMEPAGE_LUSER}"
fi

YRESOLUTION=''
if [ -n "${DISPLAY}" ]; then
    YRESOLUTION=$(xdpyinfo | sed --quiet --expression='s/^[[:space:]]\+dimensions:[[:space:]]\+[[:digit:]]\+x\([[:digit:]]\+\) pixels.*$/\1/p')
fi
if [ -z "${YRESOLUTION}" ]; then
    warn 'Unable to determine vertical display resolution!'
fi

# GNOME/MATE settings
dconf_set /org/mate/settings-daemon/plugins/xrandr/active true
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/gnome_settings_daemon/plugins/xrandr/active bool false
else
    gconf_set /apps/gnome_settings_daemon/plugins/xrandr/active bool true
    
fi

gconf_set /desktop/gnome/interface/cursor_blink bool false
dconf_set /org/mate/interface/cursor-blink false

gconf_set /desktop/gnome/interface/gtk_key_theme string 'Emacs'
dconf_set /org/mate/desktop/interface/gtk-key-theme "'Emacs'"
dconf_set /org/gnome/desktop/interface/gtk-key-theme "'Emacs'"

gconf_set /desktop/gnome/interface/gtk_theme string 'Raleigh'
dconf_set /org/mate/desktop/interface/gtk-theme "'Raleigh'"
dconf_set /org/gnome/desktop/interface/gtk-theme "'Clearlooks-Phenix'"
gconf_set /desktop/gnome/interface/icon_theme string 'gnome'
dconf_set /org/mate/desktop/interface/icon-theme "'gnome'"
dconf_set /org/gnome/desktop/interface/icon-theme "'mate'"
gconf_set /desktop/gnome/peripherals/mouse/cursor_theme string 'redglass'
dconf_set /org/mate/desktop/peripherals/mouse/cursor-theme "'redglass'"

dconf_set /org/gnome/desktop/interface/cursor-theme "'redglass'"
gconf_set /apps/notification-daemon/theme string 'standard'

gconf_set /desktop/gnome/background/picture_filename string ''
# Work around MATE caja issue #105
#if [ "${luser}" -eq 0 ]; then
#    dconf_set /org/mate/desktop/background/picture-filename "''"
#else
    dconf_set /org/mate/desktop/background/picture-filename "'/usr/share/images/desktop-base/login-background.svg'"
    dconf_set /org/mate/desktop/background/picture-options "'stretched'"
#fi
gconf_set /desktop/gnome/background/color_shading_type string 'vertical-gradient'
dconf_set /org/mate/desktop/background/color-shading-type "'vertical-gradient'"
gconf_set /desktop/gnome/background/primary_color string '#39374B'
dconf_set /org/mate/desktop/background/primary-color "'#39374B'"
gconf_set /desktop/gnome/background/secondary_color string '#42528F'
dconf_set /org/mate/desktop/background/secondary-color "'#42528F'"

if gconftool-2 --dir-exists /desktop/gnome/session/required_components; then
    if [ "${luser}" -eq 0 ]; then
	gconf_set /desktop/gnome/session/required_components/windowmanager string 'sawfish'
	dconf_set /org/mate/desktop/session/required-components/windowmanager "'sawfish'"
    else
	gconf_set /desktop/gnome/session/required_components/windowmanager string 'gnome-wm'
	dconf_set /org/mate/desktop/session/required-components/windowmanager "'marco'"
    fi
fi

gconf_set /desktop/gnome/peripherals/keyboard/general/groupPerWindow bool false
dconf_set /org/mate/desktop/peripherals/keyboard/general/group-per-window false

/lib/elho/add-gnome-keyboard-shortcut 'Save screen' 'xdg-screensaver activate' '<Control><Alt>s'

# GNOME 3/MATE panel settings
if [ "${luser}" -eq 0 ]; then
    dconf_set /org/mate/panel/toplevels/bottom/size 50
else
    dconf_set /org/mate/panel/toplevels/bottom/size 24
fi
gconf_set /apps/panel3-applets/clock/format string '24-hour'
dconf_set /org/mate/panel/objects/clock/prefs/format "'24-hour'"
gconf_set /apps/panel3-applets/clock/show_date bool true
dconf_set /org/mate/panel/objects/clock/prefs/show-date true
gconf_set /apps/panel3-applets/clock/show_seconds bool true
dconf_set /org/mate/panel/objects/clock/prefs/show-seconds true
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/panel3-applets/clock/show_tooltip bool false
fi
gconf_set /apps/panel3-applets/clock/speed_unit string 'km/h'
dconf_set /org/mate/panel/objects/clock/prefs/speed-unit "'km/h'"
gconf_set /apps/panel3-applets/clock/temperature_unit string 'C'
dconf_set /org/mate/panel/objects/clock/prefs/temperature-unit "'Centigrade'"

# GNOME Keyring settings
gconf_set /apps/gnome-keyring/daemon-components/ssh bool false

# GNOME pgp settings
gconf_set /desktop/pgp/ascii_armor bool true
dconf_set /desktop/gnome/crypto/pgp/ascii-armor true
gconf_set /desktop/pgp/encrypt_to_self bool true
dconf_set /desktop/gnome/crypto/pgp/encrypt-to-self true

gconf_set /desktop/pgp/keyservers/all_keyservers list-string '[hkp://pool.sks-keyservers.net,hkp://keys.gnupg.net,hkp://subkeys.pgp.net,hkp://pgp.mit.edu,ldap://keyserver.pgp.com]'
gconf_set /desktop/pgp/keyservers/search_keyservers list-string '[hkp://pool.sks-keyservers.net]'
dconf_set /desktop/gnome/crypto/pgp/keyservers "['hkp://pool.sks-keyservers.net','hkp://keys.gnupg.net','hkp://subkeys.pgp.net','hkp://pgp.mit.edu','ldap://keyserver.pgp.com']"

# seahorse settings
gconf_set /apps/seahorse/listing/show_trust bool true
dconf_set /apps/seahorse/listing/show_trust true
gconf_set /apps/seahorse/listing/show_validity bool true
dconf_set /apps/seahorse/listing/show_validity true

# GNOME Volume Manager
gconf_set /desktop/gnome/volume_manager/autobrowse bool false
gconf_set /desktop/gnome/volume_manager/autoipod bool false
gconf_set /desktop/gnome/volume_manager/autoopen bool false
gconf_set /desktop/gnome/volume_manager/autophoto bool false
gconf_set /desktop/gnome/volume_manager/autorun bool false
gconf_set /desktop/gnome/volume_manager/autoscanner bool false
gconf_set /system/storage/default_options/vfat/mount_options list-string '[shortname=mixed,uid=]'

# XScreensaver
if [ "${shared}" -eq 0 ]; then
    xdg-desktop-menu install --mode user /usr/share/applications/xscreensaver-properties.desktop
else
    xdg-desktop-menu uninstall --mode user /usr/share/applications/xscreensaver-properties.desktop
fi

# GNOME/MATE Screensaver settings
gconf_set /apps/gnome-screensaver/lock_delay int 5
dconf_set /org/mate/screensaver/lock-delay 5
gconf_set /apps/gnome-screensaver/cycle_delay int 2147483647
dconf_set /org/mate/screensaver/cycle-delay 2147483647
gconf_set /apps/gnome-screensaver/mode string 'single'
dconf_set /org/mate/screensaver/mode "'single'"
if [ "${luser}" -eq 0 ]; then
    if [ -n "${YRESOLUTION}" ]; then
	if [ "${YRESOLUTION}" -gt 854 ]; then
	    gconf_set /apps/gnome-screensaver/themes list-string '[screensavers-phosphor-small]'
	    dconf_set /org/mate/screensaver/themes "['screensavers-phosphor-small']"
	else
	    gconf_set /apps/gnome-screensaver/themes list-string '[screensavers-phosphor-tiny]'
	    dconf_set /org/mate/screensaver/themes "['screensavers-phosphor-tiny']"
	fi
    fi
else
    gconf_set /apps/gnome-screensaver/themes list-string '[screensavers-debian-floaters]'
    dconf_set /org/mate/screensaver/themes "['screensavers-footlogo-floaters']"
fi
if [ "${shared}" -eq 0 ]; then
    gconf_set /apps/gnome-screensaver/user_switch_enabled bool false
    dconf_set /org/mate/screensaver/user-switch-enabled false
else
    gconf_set /apps/gnome-screensaver/user_switch_enabled bool true
    dconf_set /org/mate/screensaver/user-switch-enabled true
fi

# metacity/marco settings
for theme in 'Clearlooks-Phenix' 'TraditionalOk' 'Industrial' 'Metabox'; do
    if [ -d "/usr/share/themes/${theme}/metacity-1" ]; then
	gconf_set /apps/metacity/general/theme string "${theme}"
	dconf_set /org/mate/marco/general/theme "'${theme}'"
	dconf_set /org/gnome/desktop/wm/preferences/theme "'${theme}'"
	break
    fi
done

# gksu settings
gconf_set /apps/gksu/save-to-keyring bool false
gconf_set /apps/gksu/force-grab bool true
gconf_set /apps/gksu/sudo-mode bool true

# GNOME Terminal settings
gconf_set /apps/gnome-terminal/global/use_menu_accelerators bool false
dconf_set /org/mate/terminal/global/use-menu-accelerators false
gconf_set /apps/gnome-terminal/global/use_mnemonics bool false
dconf_set /org/mate/terminal/global/use-mnemonics false

gconf_set /apps/gnome-terminal/keybindings/help string 'disabled'
dconf_set /org/mate/terminal/keybindings/help "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_1 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-1 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_2 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-2 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_3 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-3 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_4 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-4 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_5 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-5 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_6 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-6 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_7 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-7 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_8 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-8 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/switch_to_tab_9 string 'disabled'
dconf_set /org/mate/terminal/keybindings/switch-to-tab-9 "'disabled'"
dconf_set /org/mate/terminal/keybindings/switch-to-tab-10 "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/zoom_in string 'disabled'
dconf_set /org/mate/terminal/keybindings/zoom-in "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/zoom_normal string 'disabled'
dconf_set /org/mate/terminal/keybindings/zoom-normal "'disabled'"
gconf_set /apps/gnome-terminal/keybindings/zoom_out string 'disabled'
dconf_set /org/mate/terminal/keybindings/zoom-out "'disabled'"
gconf_set /apps/gnome-terminal/profiles/Default/background_color string '#DCDAD5'
dconf_set /org/mate/terminal/profiles/default/background-color "'#DCDAD5'"
gconf_set /apps/gnome-terminal/profiles/Default/use_theme_colors bool false
dconf_set /org/mate/terminal/profiles/default/use-theme-colors false
gconf_set /apps/gnome-terminal/profiles/Default/palette string '#000000:#AA0000:#008200:#AA5500:#0000A0:#AA00AA:#00AAAA:#AAAAAA:#555555:#FF5555:#42C842:#FFFF55:#4C4CE6:#FF55FF:#55FFFF:#FFFFFF'
dconf_set /org/mate/terminal/profiles/default/palette "'#000000:#AA0000:#008200:#AA5500:#0000A0:#AA00AA:#00AAAA:#AAAAAA:#555555:#FF5555:#42C842:#FFFF55:#4C4CE6:#FF55FF:#55FFFF:#FFFFFF'"
gconf_set /apps/gnome-terminal/profiles/Default/scrollback_lines int 2048
dconf_set /org/mate/terminal/profiles/default/scrollback-lines 2048

# Vino settings
gconf_set /desktop/gnome/remote_access/local_only bool false
gconf_set /desktop/gnome/remote_access/require_encryption bool false

# Nautilus settings
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/nautilus/preferences/enable_delete bool true
    dconf_set /org/mate/caja/preferences/enable-delete true
else
    gconf_set /apps/nautilus/preferences/enable_delete bool false
    dconf_set /org/mate/caja/preferences/enable-delete false
fi
gconf_set /apps/nautilus/preferences/media_automount_open bool false
dconf_set /org/mate/desktop/media-handling/automount-open false

# Galeon settings
gconf_set /apps/galeon/Advanced/Network/disk_cache_size int 65536
gconf_set /apps/galeon/Browsing/Bookmarks/Editor/split_view bool false
gconf_set /apps/galeon/Browsing/General/newpage_type int 2
gconf_set /apps/galeon/Browsing/General/startpage string "${homepage}"
gconf_set /apps/galeon/Browsing/History/expire int 183
gconf_set /apps/galeon/UI/Tabs/tabbed bool false
gconf_set /apps/galeon/UI/Toolbar/toolbar_override_style string 'icons_only'
gconf_set /apps/galeon/Rendering/FontsColors/default_font int 1
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/galeon/Rendering/Language/lang list-string '[en,de]'
fi

# Epiphany settings
gconf_set /apps/epiphany/directories/downloads_folder string '~/Downloads'
gconf_set /apps/epiphany/general/automatic_downloads bool false
gconf_set /apps/epiphany/general/homepage string "${homepage}"
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/epiphany/web/language list-string '[en,de]'
fi
gconf_set /apps/epiphany/web/smooth_scroll bool true

# Revelation settings
gconf_set /apps/revelation/clipboard/chain_username bool true
gconf_set /apps/revelation/file/autoload bool true
gconf_set /apps/revelation/file/autoload_file string '/home/elho/logins'
gconf_set /apps/revelation/file/autolock bool false
if [ "${luser}" -eq 0 ]; then
    gconf_set /apps/revelation/launcher/ftp string 'gnome-terminal -x lftp %(-u %u%(,%p%)%) %h%(:%o%)'
fi
gconf_set /apps/revelation/passwordgen/length int 10
gconf_set /apps/revelation/view/passwords bool false

# Totem settings
gconf_set /apps/totem/autoload_subtitles bool true
dconf_set /org/gnome/Totem/autoload-subtitles true
gconf_set /apps/totem/auto_resize bool true
dconf_set /org/gnome/Totem/auto-resize true
gconf_set /apps/totem/repeat bool true
dconf_set /org/gnome/Totem/repeat true
gconf_set /apps/totem/subtitle_font string 'Verdana Bold 20'
dconf_set /org/gnome/Totem/subtitle-font "'Verdana Bold 20'"

# Arista settings
gconf_set /apps/arista/check_updates bool false

# Cheese settings
gconf_set /apps/cheese/enable_delete bool true
if [ -n "${YRESOLUTION}" ]; then
    if [ "${YRESOLUTION}" -lt 768 ]; then
	gconf_set /apps/cheese/wide_mode bool true
    else
	gconf_set /apps/cheese/wide_mode bool false
    fi
fi
