commit 890ab320848294a54caa45cdcf6f049de2369baf Author: Les De Ridder Date: Sun Mar 24 07:37:52 2019 +0100 Initial commit diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..535416d --- /dev/null +++ b/LICENSE @@ -0,0 +1,31 @@ +University of Illinois/NCSA +Open Source License + +Copyright (c) 2019, Les De Ridder +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + +* Neither the name of saury nor the names of its contributors may be used + to endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. diff --git a/saury b/saury new file mode 100755 index 0000000..0d152c1 --- /dev/null +++ b/saury @@ -0,0 +1,176 @@ +#!/usr/bin/fish + +set saury_version v0.0.1 +set saury_name (basename (status -f)) +set saury_authors "Les De Ridder " + +set has_pacman (type pacman ^ /dev/null > /dev/null; and echo 1) +set has_makepkg (type makepkg ^ /dev/null > /dev/null; and echo 1) + +set aurweb_rpc_base_url "https://aur.archlinux.org/rpc/" +set aurweb_rpc_version 5 + +function print_prefix + echo -n "$saury_name: " +end + +function error + print_prefix + + set_color red + echo $argv + set_color normal + + exit 1 +end + +function niy + print_prefix + + set_color cyan + echo "not implemented yet ($argv)" + set_color normal + + exit 1 +end + +function need_root + if not test (id -u) -eq 0 + error "you cannot perform this operation unless you are root" + end +end + +function print_usage + function print_operation + echo -e "\t"(status -f) $argv + end + + echo 'usage:' (status -f) ' [...]' + echo 'operations:' + print_operation "{-h --help}" + print_operation "{-V --version}" + print_operation "{-A --aur-sync} [options] [package(s)]" +end + +function print_version + echo $saury_name $saury_version + echo "Copyright © 2019 $saury_authors" + echo + echo "This program may be freely redistributed under the terms of" \ + "the University of Illinois/NCSA Open Source License." | fold -sw 60 +end + +function aur_sync + niy "install package '$argv'" +end + +function aur_search + set query $argv + + if test (string length "$query") -lt 1 + error "search query must be at least 2 characters long" + end + + set rpc_response (curl -s "$aurweb_rpc_base_url/?v=$aurweb_rpc_version&type=search&by=name-desc&arg=$query") + set rpc_response_type (echo $rpc_response | jq -r '.type') + + if test "$rpc_response_type" = "search" + set results (echo $rpc_response | jq -r '.results | map(.Name, .PackageBase, .Description, .Version, .OutOfDate != null, .NumVotes, (.Popularity * 100 | round / 100))[]') + + for i in (seq (math (count $results) / 7)) + set name $results[(math $i \* 7 - 6)] + set package_base $results[(math $i \* 7 - 5)] + set description $results[(math $i \* 7 - 4)] + set package_version $results[(math $i \* 7 - 3)] + set out_of_date $results[(math $i \* 7 - 2)] + set votes $results[(math $i \* 7 - 1)] + set popularity $results[(math $i \* 7)] + + set_color --bold + echo -n (set_color CC3399)aur/(set_color white)$name + echo -n ' ' + + if test $out_of_date = "true"; set_color CC334D; else; set_color 33CC66; end + echo -n $package_version + + if test "$name" != "$package_base" + set_color 3399CC + + echo -n " ($package_base)" + end + + set -x fish_term24bit 1 + echo -n (set_color white)' ('(set_color CC6733)"+$votes"(set_color white)' | '(set_color CC6733)$popularity(set_color white)')' + + echo + + set_color normal + echo \t$description + end + else if test "$rpc_response_type" = "error" + set rpc_error (echo $rpc_response | jq -r '.error') + + error "an RPC error occurred ("(string trim -c '.' (string lower $rpc_error))")" + else + error "an unexpected RPC response was received" + end +end + +function aur_sysupgrade + niy "upgrade installed AUR packages" +end + +function on_start + tabs -4 + + # Detect 24-bit colour support + # (Source: https://github.com/fish-shell/fish-shell/blob/619a248a3525b13ccd12f815cdb2d373e7372292/share/config.fish#L18) + if not set -q STY + and not string match -q -- 'eterm*' $TERM + and begin + set -q KONSOLE_PROFILE_NAME + or string match -q -- "*:*" $ITERM_SESSION_ID + or string match -q -- "st-*" $TERM + or test -n "$VTE_VERSION" -a "$VTE_VERSION" -ge 3600 + or test "$COLORTERM" = truecolor -o "$COLORTERM" = 24bit + end + + set -q fish_term24bit + or set -g fish_term24bit 1 + end +end + +function on_exit + tabs -8 +end + +function main + set aur_sync_options 's/search' 'u/sysupgrade' + set aur_sync_exclusive_options 's,u' + argparse -n $saury_name -x 'V,A' -x $aur_sync_exclusive_options 'h/help' 'V/version' 'A/aur-sync' $aur_sync_options -- $argv ^| sed 's/:/':(set_color red)'/;s/$/'(set_color normal)'/' | head -1 + if not set --local --query argv; exit 1; end + + if set --query _flag_help + print_usage + else if set --query _flag_version + print_version + else if set --query _flag_aur_sync + if test $_flag_search + aur_search $argv + else if test $_flag_sysupgrade + aur_sysupgrade + else + if not test $argv + error "no targets specified" + else + aur_sync $argv + end + end + else + error "no operation specified (use -h for help)" + end +end + +on_start +main $argv +on_exit