66 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/zsh
 | |
| 
 | |
| zparseopts -D -E h=help -help=help d=desc -describe=desc
 | |
| 
 | |
| function not-in-left() {
 | |
| 	awk 'NR==FNR{a[$0]=1;next}!a[$0]' "$@"
 | |
| }
 | |
| 
 | |
| function first-col() {
 | |
| 	cut -d$'\t' -f1
 | |
| }
 | |
| 
 | |
| function info() {
 | |
| 	printf "$@" >&2
 | |
| }
 | |
| 
 | |
| if [[ -n $help ]]; then
 | |
| 	echo 'Usage: xbps-worldfile [-d]'
 | |
| 	echo 'Edit a list of manually installed packages in your editor and update the pkgdb'
 | |
| 	echo
 | |
| 	echo '  -d, --describe    Query short description for packages and display it in the list (slow)'
 | |
| 	exit
 | |
| fi
 | |
| 
 | |
| TMPFILE=$(mktemp -p ${TMPDIR:-/tmp} xbps-worldfile.XXXXXXXXXX)
 | |
| 
 | |
| if [[ -n $desc ]]; then
 | |
| 	info "Generating worldfile with descriptions\n"
 | |
| 	xbps-query -m | while read pkg; do
 | |
| 		info .
 | |
| 		printf "%-40s\t%s\n" $pkg "$(xbps-query -p short_desc $pkg)"
 | |
| 	done > $TMPFILE
 | |
| else
 | |
| 	xbps-query -m > $TMPFILE
 | |
| fi
 | |
| 
 | |
| EDITFILE=$(mktemp -p ${TMPDIR:-/tmp} xbps-worldfile.edit.XXXXXXXXXX)
 | |
| cp $TMPFILE $EDITFILE
 | |
| 
 | |
| ${EDITOR:-/usr/bin/vim} $EDITFILE
 | |
| 
 | |
| autopkgs=$(not-in-left $EDITFILE $TMPFILE | first-col)
 | |
| manualpkgs=$(not-in-left $TMPFILE $EDITFILE | first-col)
 | |
| rm $TMPFILE $EDITFILE
 | |
| 
 | |
| if [[ -z $manualpkgs && -z $autopkgs ]]; then
 | |
| 	info "No changes.\n"
 | |
| 	exit
 | |
| fi
 | |
| info "\e[92minstalling:\e[0m\n${manualpkgs}\n\n"
 | |
| info "\e[93mchanging to auto:\e[0m\n${autopkgs}\n\n"
 | |
| 
 | |
| 
 | |
| info "\e[1mContinue? [y/n]:"
 | |
| if ! read -q; then exit; fi
 | |
| 
 | |
| if [[ -n $manualpkgs ]]; then
 | |
| 	xbps-install $=manualpkgs
 | |
| 	xbps-pkgdb -m manual $=manualpkgs
 | |
| fi
 | |
| 
 | |
| if [[ -n $autopkgs ]]; then
 | |
| 	xbps-pkgdb -m auto $=autopkgs
 | |
| 	info "\e[93mcleaning orphans\e[0m"
 | |
| 	xbps-remove -Ro
 | |
| fi
 | 
