--- /dev/null
+#!/usr/bin/env bash
+# Yamada Hayao
+# Twitter: @Hayao0819
+# Email : hayao@fascode.net
+#
+# (c) 2019-2020 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 <dir> 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