#!/usr/bin/env bash
# Yamada Hayao
# Twitter: @Hayao0819
# Email : hayao@fascode.net
#
# (c) 2019-2021 Fascode Network.
#
set -e
force=false
alterlive=false
config_file="${HOME}/.local/share/user-places.xbel"
remove () {
local _list
local _file
_list=($(echo "$@"))
for _file in "${_list[@]}"; do
if [[ -f ${_file} ]]; then
rm -f "${_file}"
elif [[ -d ${_file} ]]; then
rm -rf "${_file}"
fi
done
}
_help() {
echo "usage ${0} [options] [command]"
echo
echo " General options:"
echo " -f | --force Force overwriting."
echo " -h | --help This help message and exit."
echo
echo " General command:"
echo " add
Add items to the sidebar."
echo " delete Delete all sidebar items."
echo " init Initializes the sidebar."
echo " help This help message and exit."
}
output() {
echo "${@}" >> ""
}
_msg_error() {
echo "${@}" >&2
}
prepare() {
if [[ ! -d "${HOME}/.config/gtk-3.0/" ]]; then
mkdir -p "${HOME}/.config/gtk-3.0/"
fi
if [[ ! -f "${config_file}" ]]; then
touch "${config_file}"
fi
}
add() {
prepare
local dir
for dir in ${@}; do
if [[ ! -d "${dir}" ]]; then
_msg_error "${dir} does not exist."
exit 1
else
output "file://${dir}"
fi
done
}
init() {
remove "${config_file}"
prepare
source "${HOME}/.config/user-dirs.dirs"
output "file://${XDG_DOCUMENTS_DIR} Documents"
output "file://${XDG_DOWNLOAD_DIR} Downloads"
output "file://${XDG_MUSIC_DIR} Music"
output "file://${XDG_PICTURES_DIR} Pictures"
output "file://${XDG_VIDEOS_DIR} Videos"
}
# Argument analysis and processing
options="${@}"
_opt_short="fh"
_opt_long="force,help,alterlive"
OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- "${@}")
if [[ ${?} != 0 ]]; then
exit 1
fi
eval set -- "${OPT}"
unset OPT
unset _opt_short
unset _opt_long
while true; do
case ${1} in
-f | --force)
force=true
shift 1
;;
-h | --help)
_help
shift 1
exit 0
;;
--alterlive)
alterlive=true
shift 1
;;
--)
shift
break
;;
*)
_msg_error "Invalid argument '${1}'"
_help
exit 1
;;
esac
done
mode="${1}"
case "${1}" in
add)
shift 1
if [[ -z "${*}" ]]; then
_msg_error "Please specify a directory."
exit 1
else
add "${@}"
fi
exit 0
;;
delete)
remove "${config_file}"
exit 0
;;
init)
if [[ -f "${config_file}" ]] && [[ "${force}" = false ]]; then
_msg_error "The sidebar already exists. Use -f to force initialization."
exit 1
else
init
fi
exit 0
;;
help)
_help
exit 0
;;
*)
_msg_error "Please specify a command."
exit 1
;;
esac
if [[ "${alterlive}" = true ]]; then
remove ~/.config/autostart/gensidebar.desktop
fi