You are not logged in.

#1 2010-11-28 06:36:20

hunterm
Member
From: the series of tubes
Registered: 2010-07-30
Posts: 20

i - an aur helper than uses plain english

After browsing around this board for a while, I came across a program named iwant, (https://bbs.archlinux.org/viewtopic.php?id=95930) and since i sorta liked it, I decided to make my own clone, since I can't write in ruby, and it had absolutly no support for the AUR. So after about 2 weeks, I made this bash script.

It requires the coreutils, pacman-color (if using the default pkgman var), cower (if using default vars), and english. :-)

To install packages with it, just say something like:
$ i want packagehere
To specify multiple packages to install, say something like:
$ i want package1, package2, package3, and package4
To search for packages, do:
$ i want to find query
To remove packages:
$ i dont want package
To specify multiple, do it the same way, but prefix with 'dont want' (if only I could make don't want possible) ;-D
To upgrade the system (pacman -Syu):
$ i want to upgrade
To update the package lists:
$ i want to update

To do --noconfirm:
$ noconfirm=1 i (whatever)

So, report bugs n' stuff here. I wouldn't mind some more ideas too ;-)

Update Log:

0.2 - Added noconfirm abilities.
0.1 - Initial Release

#!/bin/bash
# i - a miniscule interface to the aur
# created by hunterm <hunterm.haxxr@gmail.com>
# inspired by iwant (https://bbs.archlinux.org/viewtopic.php?id=95930)
# REQUIREMENTS:
# sudo
# coreutils - grep, sed, fileutils, etc.
# pacman-color (if using default pkgman variable)
# bash, of course
# cower - if using default aurget and aurfin vars
#
# ex. $ i want pacman
# ex. $ i dont want pacman

pkgman='pacman-color' # change to whatever
abs="$HOME/abs" # change to your favorite place to download the packages
aurget="cower -cdf -t $abs" # change to your favorite taurball downloader, must
                             # must accept "${package}" as the second argument.
aurfin="cower -cs" # must accept "${query}" as second arg
aurupg="cower -uq" # must print out only the names of packages that need to be upgraded.
makepkg="makepkg -fis" # what command to make the package with

# you shouldn't need to edit below this line

# ------------------------------------------------------------------------------
# color codes, shamelessly ripped off of the arch wiki
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m'   # Black - Background
bakred='\e[41m'   # Red
badgrn='\e[42m'   # Green
bakylw='\e[43m'   # Yellow
bakblu='\e[44m'   # Blue
bakpur='\e[45m'   # Purple
bakcyn='\e[46m'   # Cyan
bakwht='\e[47m'   # White
txtrst='\e[0m'    # Text Reset

function consume() {
# thanks to Svm/Wintervenom, for the awesome pacman function
# colors, variabilization, and drop-to-shell functionality added by hunterm
    if [[ "$*" == '' ]];then
        echo -e "${bldred}error:${txtrst} no target specified"
        return 1
    fi
    for package in $@; do
        echo -en "Looking for $bldred'$package'$txtrst in the$bldgrn package repos$txtrst... "
        # This is faster than attempting an install if a package isn't in the repos.
        result=$($pkgman -Sqs "^${package}$" | grep -m1 "^${package}$")
        if [[ "$result" ]]; then
            echo 'Found.'
            [[ -z "${noconfirm}" ]] && echo -e -n "${bldylw}-->$bldwht Install [Y/Enter],$bldgrn Search AUR [A],$bldred Cancel [^C]: " && read -n1 feedback
            echo
            [[ -z "${feedback}" || "${feedback}" == 'y' ]] &&
                sudo $pkgman -S ${package}
        else
            echo 'Not found.'
        fi
        if [[ -z "${result}" || "${feedback}" == 'a' ]]; then
            echo -e "Looking for $bldred'${package}'$txtrst in the$bldgrn AUR$txtrst..."
                echo 'Build exists.'
            if [[ -d "${HOME}/abs/${package}" ]]; then
                [[ -z "${noconfirm}" ]] && echo -en "${bldylw}--> ${bldgrn}Overwrite [Y/Enter] or$bldred Continue [N]: " && read -n1 feedback
                echo
                [[ "${feedback}" && "${feedback}" != 'y' ]] &&
                    continue
            fi
            echo -e "${bldwht}Downloading Package..."
            $aurget "${package}"
            cd $abs/${package} &>/dev/null || echo -e "${bldred}Package's directory could not be changed to.\nCheck the output above for information, this package might not be in the AUR."
            echo "List of files:"
            env ls -1 | grep .
            if [[ "$noconfirm" == "1" ]];then
                echo -n ''
            else
                echo -ne "${bldylw}-->${bldgrn} Drop into shell [s],$bldwht Install [Y/Enter],$bldred Cancel [^C]: "
                read -e -n1 feedback
            fi
            if [[ -z "${feedback}" || "${feedback}" == 'y' ]];then
                if [[ "$noconfirm" == "1" ]];then
                    $makepkg --noconfirm
                else
                    $makepkg
                fi
            fi
            if [[ "${feedback}" == 's' ]];then
                echo "remember to exit when done."
                echo 'hint: type $EDITOR PKGBUILD to edit the PKGBUILD'
                echo 'type $EDITOR *.install to edit the install file'
                bash
                if [[ "$noconfirm" == "1" ]];then
                    $makepkg --noconfirm
                else
                    $makepkg
                fi
            fi

        fi
    done
}


if [[ -z "$*" ]];then
    echo -e "${bldwht}what do you want?${txtrst}"
    echo -e "${bldblu}i - a simple aur frontend${txtrst}"
    echo -e "i want package - downloads and installs package"
    echo -e "i dont want package - removes package"
    echo -e "i want to find package - search for query"
    echo -e "i need help - display help message"
    echo -e "created by hunterm <hunterm.haxxr@gmail.com>"
    exit 1
fi

if [[ "$*" == "want to find" ]];then
    echo -e "${bldred}error${txtrst}: no query given"
    exit 1
elif [[ "$*" == "need to find" ]];then
    echo -e "${bldred}error${txtrst}: no query given"
    exit 1
elif [[ "$*" == "need" ]];then
    echo -e "${bldred}error${txtrst}: no operation given"
    exit 1
elif [[ "$*" == "want" ]];then
    echo -e "${bldred}error${txtrst}: no operation given"
    exit 1
elif [[ "$*" == "need to" ]];then
    echo -e "${bldred}error${txtrst}: no operation given"
    exit 1
elif [[ "$*" == "want to" ]];then
    echo -e "${bldred}error${txtrst}: no operation given"
    exit 1
fi


if [[ -n "$1" ]];then
    case "$1" in
    "-h"|"--help"|"-help")
    echo -e "${bldwht}what do you want?${txtrst}"
    echo -e "${bldblu}i - a simple aur frontend${txtrst}"
    echo -e "i want package - downloads and installs package"
    echo -e "i dont want package - removes package"
    echo -e "i want to find package - search for query"
    echo -e "i need help - display help message"
    echo -e "created by hunterm <hunterm.haxxr@gmail.com>"
    ;;
    "want")
#    trap "echo Interrupt signal recieved; exit" 2
    if [[ "$2" == "to" ]];then # incase
        if [[ "$3" == "upgrade" ]];then
            echo -e "${bldwht}Upgrading Packages..."
            pacman='consume'
            if [[ "$noconfirm" == '1' ]];then
                sudo $pkgman -Su --noconfirm
            else
                sudo $pkgman -Su
            fi
            $pacman `$aurupg`
            exit
        fi
        if [[ "$3" == "update" ]];then
            echo -e "${bldwht}Updating package lists..."
            if [[ "$noconfirm" == '1' ]];then
                sudo $pkgman -Sy --noconfirm
            else
                sudo $pkgman -Sy
            fi
            exit
        fi
        query=`echo $* | sed -e "s/$1//" -e "s/$2//" -e "s/  find //" -e "s/to//"`
        $pkgman -Ss "${query}" # a package
        $aurfin "${query}"
        exit
    fi
    packages=`echo $* | sed "s/$1//"`
    packages=`echo $packages | sed -e 's/,/ /g' -e '/\band\b/d'`
    pacman='consume'
    $pacman $packages
    ;;
    "dont")
    trap "echo Interrupt signal recieved; exit" 2
    packages=`echo $* | sed -e "s/$1//" -e "s/$2//"` # in the case of 'dont want'
    packages=`echo $packages | sed -e 's/,/ /g' -e '/\band\b/d'`
    if [[ "$noconfirm" == '1' ]];then
        pacman="sudo $pkgman --noconfirm -R"
    else
        pacman="sudo $pkgman -R"
    fi
    $pacman $packages
    ;;
    "need")
    trap "echo Interrupt signal recieved; exit" 2
    if [[ "$2" == "help" ]];then
        echo -e "${bldwht}what do you want?${txtrst}"
        echo -e "${bldblu}i - a simple aur frontend${txtrst}"
        echo -e "i want package - downloads and installs package"
        echo -e "i dont want package - removes package"
        echo -e "i want to find package - search for query"
        echo -e "i need help - display help message"
        echo -e "created by hunterm <hunterm.haxxr@gmail.com>"
        exit 1
    fi
    if [[ "$2" == "to" ]];then # incase
        if [[ "$3" == "upgrade" ]];then
            echo -e "${bldwht}Upgrading Packages..."
            if [[ "$noconfirm" == '1' ]];then
                sudo $pkgman -Su --noconfirm
            else
                sudo $pkgman -Su
            fi
            pacman='consume'
            $pacman `$aurupg`
            exit
        fi
        if [[ "$3" == "update" ]];then
            echo -e "${bldwht}Updating package lists..."
            if [[ "$noconfirm" == '1' ]];then
                sudo $pkgman -Sy --noconfirm
            else
                sudo $pkgman -Sy
            fi
            exit
        fi
        query=`echo $* | sed -e "s/$1//" -e "s/$2//" -e "s/  find //" -e "s/to//"`
        $pkgman -Ss "${query}" # a package
        $aurfin "${query}"
        exit
    fi
    packages=`echo $* | sed "s/$1//"`
    packages=`echo $packages | sed -e 's/,/ /g' -e '/\band\b/d'`
    pacman='consume'
    $pacman $packages
    ;;
    *)
    echo "what do you want?"
    echo "if you need help, do"
    echo "$ i need help"
    ;;
    esac
fi

Last edited by hunterm (2010-11-28 07:11:17)

Offline

#2 2010-11-28 11:15:27

Pank
Member
From: IT
Registered: 2009-06-13
Posts: 371

Re: i - an aur helper than uses plain english

I like the idea. It  is kind of cute.


Arch x64 on Thinkpad X200s/W530

Offline

#3 2010-11-28 12:01:07

Awebb
Member
Registered: 2010-05-06
Posts: 6,311

Re: i - an aur helper than uses plain english

I'd like to see a more polite language.

I'd really like to see foo, purdy please.
Are there any new packages, my dear?

Offline

#4 2010-11-28 15:58:24

ngoonee
Forum Fellow
From: Between Thailand and Singapore
Registered: 2009-03-17
Posts: 7,356

Re: i - an aur helper than uses plain english

I want to know who first came up with this idea.

I want cherries with that.

Interesting, but I think I'll stick with pacman smile


Allan-Volunteer on the (topic being discussed) mailn lists. You never get the people who matters attention on the forums.
jasonwryan-Installing Arch is a measure of your literacy. Maintaining Arch is a measure of your diligence. Contributing to Arch is a measure of your competence.
Griemak-Bleeding edge, not bleeding flat. Edge denotes falls will occur from time to time. Bring your own parachute.

Offline

#5 2010-11-28 17:45:34

fsckd
Forum Fellow
Registered: 2009-06-15
Posts: 4,173

Re: i - an aur helper than uses plain english

i wonder if there's a ghetto version: sup dawg, i heard you like pacman, so i put a package in your package so you can install while you install


aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies

Offline

#6 2010-11-28 17:47:54

GogglesGuy
Member
From: Rocket City
Registered: 2005-03-29
Posts: 610
Website

Re: i - an aur helper than uses plain english

Lol. Perhaps nice for 5 minutes...

There's a reason why unmount is called umount...

Offline

#7 2010-11-28 19:48:59

drcouzelis
Member
From: Connecticut, USA
Registered: 2009-11-09
Posts: 4,092
Website

Re: i - an aur helper than uses plain english

GogglesGuy wrote:

There's a reason why unmount is called umount...

If you're one of those programmers that leaves out a single character to make something shorter and look less like a normal word, I hate you.

Correction: If *anyone's*... wink

Last edited by drcouzelis (2010-11-28 23:22:59)

Offline

#8 2010-11-28 22:25:15

aeosynth
Member
From: California
Registered: 2010-02-06
Posts: 115
Website

Re: i - an aur helper than uses plain english

Awebb wrote:

I'd like to see a more polite language.

YOU MENA INTERCAL?

http://en.wikipedia.org/wiki/INTERCAL wrote:

INTERCAL has many other features designed to make it even more aesthetically unpleasing to the programmer: it uses statements such as "READ OUT", "IGNORE", "FORGET", and modifiers such as "PLEASE". This last keyword provides two reasons for the program's rejection by the compiler: if "PLEASE" does not appear often enough, the program is considered insufficiently polite, and the error message says this; if too often, the program could be rejected as excessively polite. Although this feature existed in the original INTERCAL compiler, it was undocumented.[5]

Offline

#9 2010-11-29 07:35:36

cesura
Package Maintainer (PM)
From: Tallinn, Estonia
Registered: 2010-01-23
Posts: 1,867

Re: i - an aur helper than uses plain english

How 'bout instead of "noconfirm=1" you do something like "dont ask me again but". wink

Offline

#10 2010-11-29 18:00:14

Bregol
Member
Registered: 2008-08-15
Posts: 175

Re: i - an aur helper than uses plain english

or even "noconfirm=1" is "really".  I really want cowsay

Cute, yes, but at least for me this would get old fast.


Nai haryuvalyë melwa rë

Offline

#11 2010-11-29 19:50:41

Misfit138
Misfit Emeritus
From: USA
Registered: 2006-11-27
Posts: 4,189

Re: i - an aur helper than uses plain english

GogglesGuy wrote:

Lol. Perhaps nice for 5 minutes...

There's a reason why unmount is called umount...

...and what is that reason? If list is 'ls' and copy is 'cp' why wouldn't unmount be 'umnt' or just plain 'unmount'?

Offline

#12 2010-11-29 20:33:49

fsckd
Forum Fellow
Registered: 2009-06-15
Posts: 4,173

Re: i - an aur helper than uses plain english

In Plan9 it's unmount.


aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies

Offline

#13 2010-11-30 16:47:10

JezdziecBezNicka
Member
From: Cracow, Poland
Registered: 2009-12-03
Posts: 89

Re: i - an aur helper than uses plain english

I have a suggestion about noconfirms - I use pacman in the way that downloads packages first, without confirmation, but then proceeds with the install without --noconfirm. That way I still get a chance to resolve any issues that might rise:

if ARGV[0] == 'sync'
    system "sudo powerpill -Syuw --noconfirm"  #downloads packages without confirmation
    system "sudo pacman -Su"                   #installs updates, asking for confirmation
elsif ARGV[0] != nil
    retval = system "sudo powerpill -Sw --noconfirm #{ARGV.join(' ')}"
    system "sudo pacman -S #{ARGV.join(' ')}" if retval
else
    puts 'What?'
end

Of course, one would need a timeout on sudo, or NOPASSWD set.

Last edited by JezdziecBezNicka (2010-11-30 16:57:12)


This is my signature. If you want to read it, first you need to agree to the EULA.

Offline

Board footer

Powered by FluxBB