#!/bin/bash ### # This file is part of the code-cloppers openbox setup. Use at your own risk. # # This script should setup openbox for a user on ubuntu set -eo pipefail is-in-path() { which "$1" &>>/dev/null } install-apt-dependencies() { echo "=> Installing apt dependencies" set -x sudo apt-get update && \ sudo apt-get install \ xcompmgr \ openbox \ albert \ plank \ dunst \ numix-icon-theme-circle \ vorbis-tools \ sound-theme-freedesktop set +x } are-in-path() { [[ $# -gt 0 ]] || return 0 is-in-path "$1" || return 1 shift are-in-path "$@" } asset-dirs-exist() { [[ -d /usr/share/icons/Numix-Circle ]] && [[ -d /usr/share/sounds/freedesktop ]] } install-dependencies() { echo "=> Checking dependencies" if ! are-in-path xcompmgr openbox dunst ogg123 || ! asset-dirs-exist; then install-apt-dependencies fi declare notify_send_dir='' notify_send_dir="$(local-dir)/applications/notify-send.sh" if ! [[ -d "$notify_send_dir" ]]; then mkdir -p "$notify_send_dir" git clone git@github.com:vlevit/notify-send.sh.git "$notify_send_dir" fi } here() { dirname "$(readlink -f "${BASH_SOURCE[0]}")" } config-dir() { if ! [[ $# -ge 1 ]]; then echo "$(caller) Expected argument" >&2 return 1 fi declare app="$1" echo "$HOME/.config/$app" } create-dir-if-not-exists() { [[ -d $1 ]] || mkdir -p "$1" } copy-files-in-dir-to() { declare source="$1" destination="$2" create-dir-if-not-exists "$destination" cp -r "$source/"* "$destination"/ } copy-config() { echo "=> Copying config" copy-files-in-dir-to "$(here)/config/albert" "$(config-dir albert)" copy-files-in-dir-to "$(here)/config/openbox" "$(config-dir openbox)" copy-files-in-dir-to "$(here)/config/dunst" "$(config-dir dunst)" } add-custom-startup() { declare startup_file='' read -rep "Please provide a path to a custom startup script for your sessions (default: ~/.startup):" \ startup_file [[ -z $startup_file ]] && startup_file="$HOME/.startup" printf 'source "%s"\n' "$startup_file" >> "$(config-dir openbox)/autostart.sh" } ppa-has-been-added() { declare ppa="$1" grep -q "^deb .*$ppa" /etc/apt/sources.list /etc/apt/sources.list.d/* } add-ppa-if-not-added() { declare ppa="$1" if ! ppa-has-been-added "$ppa"; then printf 'Adding ppa "%s"\n' "$ppa" sudo add-apt-repository "ppa:$ppa" fi } add-ppas() { add-ppa-if-not-added 'nilarimogard/webupd8' add-ppa-if-not-added 'numix/ppa' } cache-dir() { echo "$HOME/.cache/clopper-ob" } local-dir() { echo "$HOME/.local/share/clopper-ob" } create-cache-dir() { mkdir -p "$(cache-dir)" } create-local-dir() { mkdir -p "$(local-dir)" } copy-bins-to-local-dir() { cp -r "$(here)/bin" "$(local-dir)/" } copy-libs-to-local-dir() { cp -r "$(here)/lib" "$(local-dir)/" } setup-openbox-for-user() { add-ppas install-dependencies copy-config create-cache-dir create-local-dir copy-bins-to-local-dir copy-libs-to-local-dir add-custom-startup echo "=> Finished" } setup-openbox-for-user