Compare commits

...

2 Commits

Author SHA1 Message Date
967f3c50e4
update and chores subcommands added
+ update all chores from upstream
+ list, add and remove chores
2024-10-02 21:46:02 +03:00
b6bac4bbdc
formatting <<< moving 2 spaces to left <<< 2024-10-02 17:46:46 +03:00

116
reve.sh
View File

@ -36,10 +36,11 @@ util_help () {
echo "chore {chore_name} run a single chore, accepts chore name" echo "chore {chore_name} run a single chore, accepts chore name"
echo "where returns where reve's installed" echo "where returns where reve's installed"
echo "poll runs reve to update desktop_mode & power_mode, and do chores" echo "poll runs reve to update desktop_mode & power_mode, and do chores"
echo "help [subcommand] shows help message" echo "help [subcomma{nd] shows help message"
echo "== Subcommands ==" echo "== Subcommands =="
echo "1. config gets/sets configuration values" echo "1. config gets/sets configuration values"
echo "2. update updates chores" echo "2. update updates chores"
echo "3. chores manages installed chores"
;; ;;
config) config)
echo "=> Usage" echo "=> Usage"
@ -50,8 +51,19 @@ util_help () {
update) update)
echo "=> Usage: reve update [chore names...] updates chores from upstream" echo "=> Usage: reve update [chore names...] updates chores from upstream"
echo "== Details ==" echo "== Details =="
echo "Updates all chores present on your configuration if nothing is given. The" echo "Updates all chores present on your installation if nothing is given."
echo "chore names must be space delimited." echo "The chore names must be space delimited."
;;
chores)
echo "=> Usage"
echo "1. reve chores list lists all installed chores"
echo "2. reve chores add {chore_name} adds chore_name from .reve_repo"
echo "3. reve chores rm {chore_name} removes chore_name from installation"
echo "4. reve chores more lists chores available for installation"
echo "== Details =="
echo "'chore_name' must be a valid chore name like 'mode/gtk_theme', 'misc/foo'."
echo "The file extension (.sh) must be discarded."
echo "'.reve_repo' is managed by reve, and it's located in '\$reve_installation'."
;; ;;
esac esac
} }
@ -126,6 +138,95 @@ util_handle_pos () {
echo $forced_mode echo $forced_mode
} }
f_get_available_chores() {
c_ins=0
c_ble=0
while IFS= read -r file; do
file=${file#"$reve_installation/.reve_repo/chores/"} && file=${file%.sh}
if [ -f "$reve_installation/chores/$file.sh" ]; then
echo "$file"
((c_ins++))
else
echo "$file"
((c_ble++))
fi
done < <(find "$reve_installation/.reve_repo/chores" -type f -name "*.sh")
error I f_get_available_chores "$c_ins installed, $c_ble available"
}
f_add_chore() {
# args: $1 -- chore_name
# returns: 1 if error, otherwise 0
src_file="$reve_installation/.reve_repo/chores/$1.sh"
if [ -f "$src_file" ]; then
cp "$src_file" "$reve_installation/chores/$1.sh"
else
error E f_add_chore "there's no chore named '$1' in upstream"
return 1
fi
return 0
}
f_rm_chore() {
# args: $1 -- chore_name
# returns: 1 if error, otherwise 0
target_file="$reve_installation/chores/$1.sh"
if [ -f "$target_file" ]; then
rm "$target_file"
else
error E f_rm_chore "there's no chore named '$1' in installation"
return 1
fi
return 0
}
sub_chores() {
case $1 in
list)
echo "installed chores:"
find "$reve_installation/chores/" -type f -name "*.sh" | while read -r file; do
echo "$file" | awk -F/ '{print " -> "$(NF-1)"/"$NF}'
done
;;
more) f_get_available_chores ;;
add) f_add_chore $2 ;;
rm) f_rm_chore $2 ;;
esac
}
sub_update() {
local repo_dir="$reve_installation/.reve_repo"
local repo_url="https://git.fybx.dev/fyb/reve.git"
if [ ! -d "$repo_dir/.git" ]; then
error I reve "in sub_update, cloning repository"
git clone "$repo_url" "$repo_dir" &>/dev/null
else
error I reve "in sub_update, pulling changes"
git -C "$repo_dir" pull &>/dev/null
fi
if [ $# -eq 0 ]; then
error I sub_update "updating all chores"
count=0
find "$reve_installation/chores/" -type f -name "*.sh" | while read -r file; do
file="${file#"$reve_installation/chores/"}"
file="${file%".sh"}"
echo $file
# shellcheck disable=SC2030
f_add_chore "$file" && ((count++))
done
# shellcheck disable=SC2031
((count != 0)) && error I sub_update "copied $count files"
else
for arg in "$@"; do
f_add_chore "$arg"
done
fi
}
sub_config() { sub_config() {
case "$1" in case "$1" in
get) get)
@ -168,7 +269,11 @@ case "$1" in
exit 0 exit 0
;; ;;
update) update)
sub_update sub_update "${@:2}"
exit 0
;;
chores)
sub_chores "$2" "$3"
exit 0 exit 0
;; ;;
help) help)
@ -193,8 +298,7 @@ case "$1" in
chore) chore)
in_chore_name="$2" in_chore_name="$2"
;; ;;
poll) poll) ;;
;;
"") "")
util_help "$2" util_help "$2"
exit 0 exit 0