diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # Aura Changelog
 
+## 3.2.10 (2024-07-17)
+
+#### Added
+
+- Hindi translations thanks to "yozachar". धन्यवाद!
+- A `--turkish` flag to activate the Turkish localisations.
+
+#### Fixed
+
+- Corrections made to the Mandarin Chinese translation.
+- Don't attempt to remove VCS dirs if they don't exist.
+- Updated dependencies.
+
 ## 3.2.9 (2022-05-23)
 
 #### Fixed
diff --git a/aura.cabal b/aura.cabal
--- a/aura.cabal
+++ b/aura.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               aura
-version:            3.2.9
+version:            3.2.10
 synopsis:           A secure package manager for Arch Linux and the AUR.
 description:
   Aura is a package manager for Arch Linux. It connects to both the
@@ -19,17 +19,17 @@
 extra-source-files:
   README.md
   CHANGELOG.md
-  doc/aura.8
-  doc/aura.conf
-  doc/aura.conf.5
-  doc/completions/bashcompletion.sh
-  doc/completions/_aura
+  misc/aura.8
+  misc/aura.conf
+  misc/aura.conf.5
+  misc/completions/bashcompletion.sh
+  misc/completions/_aura
   test/pacman.conf
   test/good.PKGBUILD
   test/bad.PKGBUILD
 
 common commons
-  default-language:   Haskell2010
+  default-language:   GHC2021
   default-extensions:
     NoImplicitPrelude
     OverloadedStrings
@@ -46,11 +46,11 @@
     , megaparsec  >=7      && <10
     , rio         ^>=0.1.17
     , text        >=1.2 && < 1.3 || ^>= 2.0
-    , versions    ^>=5
+    , versions    ^>=6.0.3
 
 common libexec
   build-depends:
-    , aeson                        ^>=2.0
+    , aeson                        >=2.1 && < 2.3
     , aur                          ^>=7.0.5
     , http-client                  >=0.5 && <0.8
     , prettyprinter                >=1.2 && <1.8
@@ -90,14 +90,14 @@
     Aura.Utils
 
   build-depends:
-    , algebraic-graphs  >=0.1 && <0.7
+    , algebraic-graphs  >=0.1 && <0.8
     , filepath          ^>=1.4
     , hashable          ^>=1.4
     , http-types        >=0.9 && <0.13
     , language-bash     >=0.8 && <0.10
     , network-uri       ^>=2.6
     , stm               ^>=2.5
-    , time              >=1.8 && <1.12
+    , time              >=1.8 && <1.13
 
 executable aura
   import:         commons, libexec
diff --git a/doc/aura.8 b/doc/aura.8
deleted file mode 100644
--- a/doc/aura.8
+++ /dev/null
@@ -1,730 +0,0 @@
-'\" t
-.\" Man page for `aura`
-.\" Written by Colin Woodbury <colin@fosskers.ca>
-.
-.TH aura 8 "2021 September" "Aura" "Aura Manual"
-.
-.de SAMPLE      \" Indented example - on its own paragraph.
-.  P
-.  RS
-.  EX
-..
-.de ESAMPLE     \" End of Indented example.
-.  EE
-.  RE
-..
-.de RSAMPLE     \" Relative sample - even more indented example.
-.  RS
-.  SAMPLE
-..
-.de ERSAMPLE    \" End of Relative sample.
-.  ESAMPLE
-.  RE
-..
-.
-.ds ellipsis \&.\|.\|.\&
-.\" Format repeatable parameter (1 or more) with ellipsis.
-.ds multi                 \fI\\$1\fP\fR\\ \\*[ellipsis]\fP
-.\" Format optional repeatable parameter (0 or more)
-.\" with ellipsis and square brackets.
-.ds multi-optional \fR[\fP\fI\\$1\fP\fR\\ \\*[ellipsis]]\fP
-.ds packages          \\*[multi          packages]
-.ds packages-optional \\*[multi-optional packages]
-.
-.SH NAME
-.
-aura \- package manager utility and AUR helper
-.
-.SH SYNOPSIS
-.
-.SY aura
-.I OPERATION
-\*[multi-optional OPTIONS]
-\*[multi-optional targets]
-.YS
-.
-.SH DESCRIPTION
-.
-.B aura
-is a secure, multilingual package manager for Arch Linux written in Haskell.
-.
-It connects to both the official Arch repositories and to the
-Arch User Repositories (AUR),
-allowing easy control of all packages on an Arch system.
-.
-Aura allows
-.I all
-pacman operations and provides
-.I new
-custom ones for dealing with AUR packages.
-.
-.SH OPERATIONS
-.
-.TP
-.BR \-A ", " \-\-aursync " \*[packages-optional]"
-.
-Perform actions involving the
-.BR A UR.
-.
-Default action installs packages from the AUR.
-.
-.IP
-During building, makepkg output is
-.I not
-shown by default.
-.
-After building, the built
-.I *.pkg.tar.xz
-file is moved to the package cache and installed from there.
-.
-This allows for easy AUR package downgrading.
-.
-.TP
-.BR -B ", " \-\-save
-.
-Manage the saving and restoring of the global package state.
-.
-Default action stores a record of all currently installed packages and their
-versions.
-.
-.TP
-.BR -C ", " \-\-downgrade " \*[packages-optional]"
-.
-Perform actions involving the package
-.BR C ache.
-.
-Default action downgrades specified
-.IR packages .
-.
-.IP
-This process is interactive, allowing the user to choose from any previous
-version they have available in the package cache.
-.
-.TP
-.BR \-L ", " \-\-viewlog
-.
-Perform actions involving the pacman
-.BR L ogfile.
-.
-Default action opens the log for read-only viewing.
-.
-.TP
-.BR \-O ", " \-\-orphans " \*[packages-optional]"
-.
-Perform actions involving
-.BR O rphan
-packages.
-.
-Default action is to list the current orphans.
-.
-.IP
-Orphan packages are packages installed as dependencies,
-but are no longer required by any other package.
-.
-.TP
-.BR \-P ", " \-\-analysis
-.
-Perform security analysis of a
-.BR P KGBUILD.
-.
-Default action reads PKGBUILD from stdin.
-.
-.IP
-Useful for package maintainers and sysadmins to verify the safety of the
-PKGBUILD files that they write.
-.
-To test any package on the AUR, try the following:
-.
-.RSAMPLE
-.BI "aura -Ap " "package" " | aura -P"
-.ERSAMPLE
-.
-.SH AUR SYNC OPTIONS (\fR\-A\fP)
-.
-.TP
-.BR \-a ", " \-\-delmakedeps
-.
-Uninstalls build dependencies that are no longer required after installing the
-main package.
-.
-This prevents the creation of orphan packages.
-.
-Also note that while the package itself will be uninstalled,
-its package file will remain in the cache.
-.
-.TP
-.BR \-c ", " \-\-clean
-.
-After a package's tarball has been built and copied to the package cache,
-delete its build directory immediately.
-.
-.TP
-.BR \-d ", " \-\-deps " \*[packages]"
-.
-View all dependencies of
-.IR packages .
-.
-This process is recursive for AUR packages,
-so all dependencies of dependencies (and so on) will also be shown.
-.
-This can aid the pre-install package research process.
-.
-.TP
-.BR \-i ", " \-\-info " \*[packages]"
-.
-View information about AUR
-.IR packages .
-.
-.TP
-.BR \-k ", " \-\-diff
-.
-Show PKGBUILD diffs.
-.
-When upgrading, using this option will compare the most and second-most recent
-PKGBUILDs and output changes in colour.
-.
-.TP
-.BR \-p ", " \-\-pkgbuild " \*[packages]"
-.
-View PKGBUILDs of AUR
-.IR packages .
-.
-Use this before installing new packages to confirm that the build scripts
-aren't doing anything fishy.
-.
-.TP
-.BR \-q ", " \-\-quiet
-.
-Display less information about certain
-.B \-A
-operations
-(this is useful when processing Aura's output in a script).
-.
-In particular, search and view dependencies will only show uncoloured package
-names.
-.
-.TP
-.BR \-s ", " \-\-search " \*[multi word]"
-.
-Search AUR for packages containing
-.IR word s
-(not regex) in their names or descriptions.
-.
-Multiple terms will narrow down the search.
-.
-Results are sorted by votes.
-.
-Suboptions:
-.
-.RS
-.
-.  TP
-.  B \-\-abc
-.
-Sorts results alphabetically.
-.
-.  TP
-.  BR \-\-head [ =\fIN\fR ]
-.
-Only show the first
-.I N
-results.
-.I N
-defaults to 10.
-.
-.  TP
-.  BR \-\-tail [ =\fIN\fR ]
-.
-Only show the last
-.I N
-results.
-.I N
-defaults to 10.
-.
-.  TP
-.  BR \-r ", " \-\-both
-.
-Show results from the official repos as well.
-.
-.RE
-.
-.TP
-.BR \-u ", " \-\-sysupgrade
-.
-Upgrade all installed AUR packages.
-.B -Au
-is like
-.B -Su
-but for AUR packages.
-.
-.TP
-.BR \-w ", " \-\-downloadonly " \*[packages]"
-.
-Retrieve AUR
-.I packages
-source tarballs,
-but do not build/install/upgrade anything.
-.
-.TP
-.BR \-x ", " \-\-unsuppress
-.
-Unsuppress
-.BR makepkg (8)
-output during building.
-.
-By default this output is suppressed for a more silent install.
-.
-Note that when this option isn't used,
-.B makepkg
-output is actually collected and printed if any errors occur.
-.
-.TP
-.B \-\-json \*[packages]
-.
-Query the AUR RPC for
-.I packages
-info as raw JSON.
-.
-Good for debugging.
-.
-.TP
-.BI \-\-build " path"
-.
-Specify build
-.I path
-when building AUR packages.
-.
-Only the
-.I full
-path of a pre-existing directory can be used.
-.
-Example:
-.
-.RSAMPLE
-aura -A foo --build=/full/path/to/build/location/
-.ERSAMPLE
-.
-.TP
-.BI \-\-builduser " user"
-.
-Specify the
-.I user
-to build packages as.
-.
-This can be useful when logged in as root and a build user is available.
-.
-.TP
-.B \-\-devel
-.
-When ran with
-.BR \-Au ,
-adds all development packages to the queue of packages to upgrade.
-.
-Devel packages are those pulled directly from online repositories,
-via git / mercurial / etc.
-.
-.TP
-.B \-\-dryrun
-.
-When ran with
-.BR \-A " or " \-Au ,
-update checks,
-PKGBUILD diffs,
-and dependency checks will be performed,
-but nothing will be built.
-.
-Also usable with
-.BR \-M .
-.
-.TP
-.B \-\-force
-.
-Always (re)build the specified packages.
-.
-Usually Aura will not rebuild packages whose versions are already available in
-the local package cache.
-.
-.TP
-.B \-\-hotedit
-.
-Before building, prompt the user if they wish to view/edit the
-.IR PKGBUILD ,
-as well as any
-.IR .install " or " .patch
-files.
-.
-However, research into packages (and by extension, their PKGBUILDs) should be
-done by the user before any building occurs.
-.
-Please use
-.BR \-Ap " and " \-Ad
-for this,
-as they will be much faster at presenting information than searching the AUR
-website manually.
-.
-Note that, since aura is run through sudo,
-your local value of
-.RB $ EDITOR
-may not be preserved.
-.
-Run as
-\(lqsudo
-.B \-E
-aura -A --hotedit \*[ellipsis]\(rq
-to preserve your environment.
-.
-To always allow environment variables to be passed,
-have a look at the
-.IR env_reset " and " env_keep
-options in
-.BR sudoers (5).
-.
-.TP
-.B \-\-skipdepcheck
-.
-Perform no dependency solving.
-.
-Consider this when using
-.B \-\-hotedit
-to avoid building annoying dependencies that aren't necessary for your special
-use-case.
-.
-.TP
-.BI \-\-vcspath " path"
-.
-Save the cloned sources of VCS packages (i.e.\& those that end in
-.IR *-git ,
-etc.) in the given
-.IR path ,
-instead of the default
-.IR /var/cache/aura/vcs/ .
-.
-.SH GLOBAL PACKAGE STATE OPTIONS (\fR\-B\fP)
-.
-.TP
-.BR \-c ", " \-\-clean \c
-.I " states-to-retain
-.
-Retains a given number of the most recently saved package states and removes the
-rest.
-.
-.TP
-.BR \-r ", " \-\-restore
-.
-Restores a record kept with
-.BR \-B .
-.
-Attempts to downgrade any packages that were upgraded since the chosen save.
-.
-Will remove any that weren't installed at the time.
-.
-.TP
-.BR \-l ", " \-\-list
-.
-Show all saved package state filenames.
-.
-.SH DOWNGRADE OPTIONS (\fR\-C\fP)
-.
-.TP
-.BR \-b ", " \-\-backup \c
-.I " path
-.
-Backup the package cache to a given directory.
-.
-The given directory must already exist.
-.
-During copying, progress will be shown.
-.
-If the copy takes too long,
-you may want to reduce the number of older versions of each package by using
-.BR \-Cc .
-.
-.TP
-.BR \-c ", " \-\-clean \c
-.I " versions-to-retain
-.
-Retains a given number of package versions for each package,
-and deletes the rest from the package cache.
-.
-Count is made from the most recent version, so using:
-.
-.RSAMPLE
-aura -Cc 3
-.ERSAMPLE
-.
-.IP
-would save the three most recent versions of each package file.
-.
-Giving the number 0 as an argument is identical to
-.BR \-Scc .
-.
-.TP
-.B \-\-notsaved
-.
-Remove only those package files which are not saved in a package record (a la
-.BR \-B ).
-.
-.TP
-.BR \-s ", " \-\-search \c
-.I " regex
-.
-Search the package cache via a
-.IR regex .
-.
-Any package name that matches the regex will be output as-is.
-.
-.SH LOGFILE OPTIONS (\fR\-L\fP)
-.
-.TP
-.BR \-i ", " \-\-info " \*[packages]"
-.
-Displays install/upgrade history for given
-.IR packages .
-.
-Under the \(lqRecent Actions\(rq section,
-only the last five entries will be displayed.
-.
-If there are less than five actions ever performed with the package,
-what is available will be printed.
-.
-.TP
-.BR \-s ", " \-\-search \c
-.I " regex
-.
-Search the pacman log file via a
-.IR regex .
-.
-Useful for singling out any and all actions performed on a package.
-.
-.SH ORPHAN PACKAGE OPTIONS (\fR\-O\fP)
-.
-.TP
-.BR \-a ", " \-\-adopt " \*[packages]"
-.
-Mark
-.I packages
-as being explicitly installed (i.e.\& it's not a dependency).
-.
-.TP
-.BR \-j ", " \-\-abandon
-.
-Uninstall all orphan packages.
-.
-.SH ANALYSIS OPTIONS (\fR\-P\fP)
-.
-.TP
-.BR \-f ", " \-\-file \c
-.I " path
-.
-Analyse a PKGBUILD at the specified
-.IR path .
-.
-.TP
-.BR \-d ", " \-\-dir \c
-.I " path
-.
-Analyse a
-.IR path /PKGBUILD
-found in the specified directory.
-.
-.TP
-.BR \-a ", " \-\-audit
-.
-Analyse the PKGBUILDs of all locally installed AUR packages.
-.
-.SH PACMAN / AURA DUAL FUNCTIONALITY OPTIONS
-.
-.TP
-.B \-\-noconfirm
-.
-Never ask for any Aura or Pacman confirmation.
-.
-Any time a prompt would appear,
-say before building or installation,
-it is assumed the user answered in whatever way would progress the program.
-.
-.TP
-.B \-\-needed
-.
-Don't rebuild/reinstall packages that are already up to date.
-.
-.TP
-.B \-\-debug
-.
-View some handy debugging information.
-.
-.TP
-.BI \-\-color " when"
-.
-Specify when to enable colouring.
-.
-Without this flag, both Aura and Pacman will attempt to colour text if the
-terminal allows it.
-.
-Otherwise, you can pass
-.BR always " or " never
-to be specific about your wants.
-.
-.TP
-.BI \-\-overwrite " glob"
-.
-If there are file conflicts during installation,
-overwrite conflicting files that match the given
-.I glob
-pattern.
-.
-.SH EXPOSED MAKEPKG OPTIONS
-.
-.TP
-.B \-\-ignorearch
-.
-Ignores processor architecture when building packages.
-.
-.TP
-.B \-\-allsource
-.
-Creates a
-.I .src
-file containing all the downloaded sources (code, etc.\&)
-and stores it at
-.IR /var/cache/aura/src/ .
-.
-To change the location where sources are stored,
-use the
-.B \-\-allsourcepath
-flag on command line or via
-.BR aura.conf (5).
-.
-.TP
-.B \-\-skipinteg
-.
-Skip package source integrity checks (hash sums).
-.
-.TP
-.B \-\-skippgpcheck
-.
-Skip all PGP checks.
-.
-.SH LANGUAGE OPTIONS
-.
-Aura is available in multiple languages.
-.
-As options, they can be used with either their English names or their real
-names written in their native characters.
-.
-The available languages are, in option form:
-.
-.TS \" Tab-separated
-l l.
-\fB\-\-english\fP	(default)
-\fB\-\-japanese\fP	\fB\-\-日本語\fP
-\fB\-\-polish\fP	\fB\-\-polski\fP
-\fB\-\-croatian\fP	\fB\-\-hrvatski\fP
-\fB\-\-swedish\fP	\fB\-\-svenska\fP
-\fB\-\-german\fP	\fB\-\-deutsch\fP
-\fB\-\-spanish\fP	\fB\-\-español\fP
-\fB\-\-portuguese\fP	\fB\-\-português\fP
-\fB\-\-french\fP	\fB\-\-français\fP
-\fB\-\-russian\fP	\fB\-\-русский\fP
-\fB\-\-italian\fP	\fB\-\-italiano\fP
-\fB\-\-serbian\fP	\fB\-\-српски\fP
-\fB\-\-norwegian\fP	\fB\-\-norsk\fP
-\fB\-\-indonesian\fP
-\fB\-\-chinese\fP	\fB\-\-中文\fP
-\fB\-\-esperanto\fP
-\fB\-\-dutch\fP	\fB\-\-nederlands\fP
-\fB\-\-romanian\fP	\fB\-\-română\fP
-\fB\-\-vietnamese\fP
-\fB\-\-czech\fP	\fB\-\-čeština\fP
-.TE
-.
-.SH PRO TIPS
-.
-.IP \(bu 2n
-.
-If you build a package and then choose not to install it,
-the built package file will still be moved to the cache.
-You can then install it whenever you want with
-.BR \-C .
-.
-.IP \(bu 2n
-.
-Research packages using
-.BR \-Ad \ ( \-\-deps ),
-.BR \-Ai \ ( \-\-info )
-and
-.BR \-Ap \ ( \-\-pkgbuild )!
-.
-.IP \(bu 2n
-.
-When upgrading, use
-.B \-Akua
-instead of just
-.BR \-Au .
-.
-This will remove make deps, as well as show PKGBUILD diffs before building.
-.
-.SH SEE ALSO
-.
-.BR aura.conf (5),
-.BR pacman (8),
-.BR pacman.conf (5),
-.BR makepkg (8)
-.
-.SH BUGS
-.
-It is not recommended to install non-AUR packages with pacman or aura.
-.
-Aura will assume they are AUR packages during a
-.B \-Au
-and attempt to upgrade them.
-.
-If a name collision occurs (that is, if there is a legitimate AUR package with
-the same name as the one you installed) previous installations could be
-overwritten.
-.
-.SH AUTHOR
-.
-Colin Woodbury <colin@fosskers.ca>
-.
-.SH CONTRIBUTORS
-.
-.TS \" Tab-separated
-l .
-Chris Warrick
-Brayden Banks
-Denis Kasak
-Edwin Marshall
-Jimmy Brisson
-Kyle Raftogianis
-Nicholas Clarke
-.TE
-.
-.SH TRANSLATORS
-.
-.TS \" Tab-separated
-c l .
-Polish	Chris Warrick and Michał Kurek
-Croatian	Denis Kasak and "stranac"
-Swedish	Fredrik Haikarainen and Daniel Beecham
-German	Lukas Niederbremer
-Spanish	Alejandro Gómez, Sergio Conde, and Max Ferrer
-Portuguese	Henry Kupty, Thiago Perrotta, and Wagner Amaral
-French	Ma Jiehong and Fabien Dubosson
-Russian	Kyrylo Silin and Alexey Kotlyarov
-Italian	Bob Valantin and Cristian Tentella
-Serbian	Filip Brcic
-Norwegian	"chinatsun"
-Indonesian	"pak tua Greg"
-Chinese	Kai Zhang
-Japanese	Onoue Takuro and Colin Woodbury
-Esperanto	Zachary Matthews
-Dutch	Joris Blanken and Heimen Stoffels
-Turkish	Cihan Alkan
-Arabic	"Array in a Matrix"
-Ukrainian	Andriy Cherniy
-Romanian	"90" and "benone"
-Vietnamese	"Kritiqual"
-Czech	Daniel Rosel
-Korean	"Nioden"
-.TE
diff --git a/doc/aura.conf b/doc/aura.conf
deleted file mode 100644
--- a/doc/aura.conf
+++ /dev/null
@@ -1,68 +0,0 @@
-# --- Aura Config --- #
-#
-# Template updated on: Mon 11 May 2020
-#
-# You can uncomment the various settings below in order to activate them.
-# Otherwise, Aura will use its internal defaults.
-
-# --- Language --- #
-# Aura can be used in different human languages. This field must be a 2-letter
-# language code, similar to those used in LOCALE. The available codes are:
-#
-# |------+------------|
-# | Code | Language   |
-# |------+------------|
-# | nl   | Dutch      |
-# | en   | English    |
-# | de   | German     |
-# | nb   | Norwegian  |
-# | sv   | Swedish    |
-# |------+------------|
-# | fr   | French     |
-# | it   | Italian    |
-# | pt   | Portuguese |
-# | es   | Spanish    |
-# | ro   | Romanian   |
-# |------+------------|
-# | ar   | Arabic     |
-# |------+------------|
-# | hr   | Croatian   |
-# | cs   | Czech      |
-# | pl   | Polish     |
-# | ru   | Russian    |
-# | sr   | Serbian    |
-# | uk   | Ukrainian  |
-# |------+------------|
-# | zh   | Chinese    |
-# | id   | Indonesian |
-# | ja   | Japanese   |
-# | vi   | Vietnamese |
-# |------+------------|
-# | eo   | Esperanto  |
-# |------+------------|
-
-# Uncomment to activate:
-# language = en
-
-# --- Build Settings --- #
-# Aura runs via `sudo` but builds packages as the underlying non-root user.
-# Here, you can alter who that user is, and where packages are built.
-
-# Uncomment to activate:
-# user = YOU
-# buildpath = /tmp
-# allsourcepath = /var/cache/aura/src
-# vcspath = /var/cache/aura/vcs
-
-# --- PKGBUILD Analysis --- #
-# Aura automatically scans PKGBUILDs for malicious bash usage and other "bad
-# practices". Here, you can turn those scans off.
-
-# Uncomment to activate:
-# analyse = True
-
-# --- Misc. --- #
-
-# The editor to use with `--hotedit`.
-# Uncomment to activate:
-# editor = vi
diff --git a/doc/aura.conf.5 b/doc/aura.conf.5
deleted file mode 100644
--- a/doc/aura.conf.5
+++ /dev/null
@@ -1,150 +0,0 @@
-'\" t
-.\" Man page for `aura.conf`
-.\" Written by Colin Woodbury <colin@fosskers.ca>
-.
-.TH aura.conf 5 "2021 January" "Aura" "Aura Manual"
-.
-.de SAMPLE      \" Indented example - on its own paragraph.
-.  P
-.  RS
-.  EX
-..
-.de ESAMPLE     \" End of Indented example.
-.  EE
-.  RE
-..
-.de RSAMPLE     \" Relative sample - even more indented example.
-.  RS
-.  SAMPLE
-..
-.de ERSAMPLE    \" End of Relative sample.
-.  ESAMPLE
-.  RE
-..
-.
-.SH NAME
-.
-aura.conf \- aura package manager configuration file
-.
-.SH SYNOPSIS
-.
-/etc/aura.conf
-.
-.SH DESCRIPTION
-.
-Aura can be configured at runtime by commandline flags,
-but for users who use the same options all the time
-(say, build paths or language flags) this can be verbose.
-.I aura.conf
-lets you make these common settings permanent.
-.
-.SH EXAMPLE
-.
-Overview of options in
-.IR aura.conf :
-.
-.SAMPLE
-#
-# aura.conf
-#
-
-#[ Language ]
-language = en
-
-#[ Build Settings ]
-user = <you>
-buildpath = /tmp
-vcspath = /var/cache/aura/vcs
-
-#[ Misc. ]
-editor = vi
-.ESAMPLE
-.
-.SH OPTIONS
-.
-.TP
-.B language
-.
-Aura can be used in different human languages.
-This field must be a 2-letter language code,
-similar to those used in LOCALE.
-The available codes are:
-.
-.TS \" Tab-separated
-box;
-l l.
-Code	Language
-
-nl	Dutch
-en	English
-de	German
-nb	Norwegian
-sv	Swedish
-
-fr	French
-it	Italian
-pt	Portuguese
-es	Spanish
-ro	Romanian
-
-hr	Croatian
-cs	Czech
-pl	Polish
-ru	Russian
-sr	Serbian
-uk	Ukrainian
-
-ar	Arabic
-
-zh	Chinese
-id	Indonesian
-ja	Japanese
-vi	Vietnamese
-
-eo	Esperanto
-.TE
-.
-.TP
-.B user
-.
-The real, non-sudo user to build packages as.
-.
-.TP
-.B buildpath
-.
-The location on the filesystem in which to build packages.
-.
-.TP
-.B allsourcepath
-.
-The location on the filesystem in which to save "source packages" built with
-.BR \-\-allsource .
-.
-.TP
-.B vcspath
-.
-The location on the filesystem in which to store the cloned repositories of
-\fI*-git\fR, etc., packages.
-.
-.TP
-.B analyse
-.
-Aura automatically scans PKGBUILDs for malicious bash usage
-and other "bad practices".
-Set this to
-.B False
-to turn off.
-.
-.TP
-.B editor
-.
-The editor to use during
-.BR \-\-hotedit .
-.
-.SH SEE ALSO
-.
-.BR aura (8)
-.
-.SH AUTHOR
-.
-Colin Woodbury <colin@fosskers.ca>
diff --git a/doc/completions/_aura b/doc/completions/_aura
deleted file mode 100644
--- a/doc/completions/_aura
+++ /dev/null
@@ -1,590 +0,0 @@
-#compdef aura
-
-# Zsh completion file for Aura, based on pacman's
-# copy this file to /usr/share/site-functions/_aura
-
-typeset -A opt_args
-setopt extendedglob
-
-# options for passing to _arguments: main aura commands
-_aura_opts_commands=(
-    {-A,--aursync}'[Install and manage AUR packages]'
-    {-B,--save}'[Manage the global package state]'
-    {-C,--downgrade}'[Manage the package cache]'
-    {-L,--viewlog}'[Analyse the pacman log file]'
-    {-M,--abssync}'[Build and install from the ABS tree]'
-    {-O,--orphans}'[Manage orphan packages]'
-    {-Q,--query}'[Query the package database]'
-    {-R,--remove}'[Remove a packags]'
-    {-S,--sync}'[Synchronize repo packages]'
-    {-U,--upgrade}'[Upgrade packages]'
-    {-V,--version}'[Display version information]'
-    '--viewconf[View the pacman config file read-only]'
-    '--languages[Display available output languages]'
-    '(-h --help)'{-h,--help}'[Help message]'
-)
-
-# options for passing to _arguments: options common to all commands
-_aura_opts_common=(
-    {-b,--dbpath}'[Alternate database location]:database_location:_files -/'
-    '--color[colorize the output]:color options:(always never auto)'
-    {-h,--help}'[Display syntax for the given operation]'
-    {-r,--root}'[Set alternate installation root]:installation root:_files -/'
-    {-v,--verbose}'[Be more verbose]'
-    '--cachedir[Alternate package cache location]:cache_location:_files -/'
-    '--config[An alternate configuration file]:config file:_files'
-    '--debug[Display debug messages]'
-    '--gpgdir[Set an alternate home directory for GnuPG]:_files -/'
-    '--logfile[An alternate log file]:config file:_files'
-    '--noconfirm[Do not ask for confirmation]'
-    '--no-pp[Do not use powerpill]'
-    '--noprogressbar[Do not show a progress bar when downloading files]'
-    '--noscriptlet[Do not execute the install scriptlet if one exists]'
-    '--print[Only print the targets instead of performing the operation]'
-)
-
-# options for passing to _arguments: options for --upgrade commands
-_aura_opts_pkgfile=(
-    '*-d[Skip dependency checks]'
-    '*--nodeps[Skip dependency checks]'
-    '--dbonly[Only remove database entry, do not remove files]'
-    '--force[Overwrite conflicting files]'
-    '--needed[Do not reinstall up to date packages]'
-    '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
-)
-
-# options for passing to _arguments: subactions for --query command
-_aura_opts_query_actions=(
-    '(-Q --query)'{-Q,--query}
-    {-g,--groups}'[View all members of a package group]:*:package groups:->query_group'
-    {-o,--owns}'[Query the package that owns a file]:file:_files'
-    {-p,--file}'[Package file to query]:*:package file:->query_file'
-    {-s,--search}'[Search package names and descriptions]:*:search text:->query_search'
-)
-
-# options for passing to _arguments: options for --query and subcommands
-_aura_opts_query_modifiers=(
-    {-c,--changelog}'[List package changelog]'
-    {-d,--deps}'[List packages installed as dependencies]'
-    {-e,--explicit}'[List packages explicitly installed]'
-    {\*-i,\*--info}'-i[View package information]'
-    #'-ii[View package information including backup files]'
-    {\*-k,\*--check}'[Check package files]'
-    {-l,--list}'-l[List package contents]'
-    {-m,--foreign}'-m[List installed packages not found in sync db(s)]'
-    {-n,--native}'[List installed packages found in sync db(s)]'
-    {-q,--quiet}'[Display less information for certain operations.]'
-    {-t,--unrequired}'[List packages not required by any package]'
-    {-u,--upgrades}'[List packages that can be upgraded]'
-)
-
-# options for passing to _arguments: options for --remove command
-_aura_opts_remove=(
-    {-c,--cascade}'[Remove all dependent packages]'
-    {*-d,*--nodeps}'[Skip dependency checks]'
-    {-n,--nosave}'[Remove protected configuration files]'
-    {\*-s,\*--recursive}'[Remove dependencies not required by other packages]'
-    '--dbonly[Only remove database entry, do not remove files]'
-    '*:installed package:_aura_completions_installed_packages'
-)
-
-# options for passing to _arguments: options for commands dealing with the database
-_aura_opts_database=(
-    '--asdeps[mark packages as non-explicitly installed]'
-    '--asexplicit[mark packages as explicitly installed]'
-    '*:installed package:_aura_completions_installed_packages'
-)
-
-# options for passing to _arguments: options for --sync command
-_aura_opts_sync_actions=(
-    '(-S --sync)'{-S,--sync}
-    {\*-c,\*--clean}'[Remove old packages from cache]:\*:clean:->sync_clean'
-    #'*-cc[Remove all packages from cache]:*:clean:->sync_clean'
-    {-g,--groups}'[View all members of a package group]:*:package groups:->sync_group'
-    {-s,--search}'[Search package names and descriptions]:*:search text:->sync_search'
-    '--dbonly[Only remove database entry, do not remove files]'
-    '--needed[Do not reinstall up to date packages]'
-    '--recursive[Reinstall all dependencies of target packages]'
-)
-
-# options for passing to _arguments: options for --sync command
-_aura_opts_sync_modifiers=(
-    {\*-d,\*--nodeps}'[Skip dependency checks]'
-    {\*-i,\*--info}'[View package information]'
-    {-l,--list}'[List all packages in a repository]'
-    {-p,--print}'[Print download URIs for each package to be installed]'
-    {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]'
-    {-w,--downloadonly}'[Download packages only]'
-    {\*-y,\*--refresh}'[Download fresh package databases]'
-    '*--ignore[Ignore a package upgrade]:package: _aura_completions_all_packages'
-    '*--ignoregroup[Ignore a group upgrade]:package group:_aura_completions_all_groups'
-    '--asdeps[Install packages as non-explicitly installed]'
-    '--asexplicit[Install packages as explicitly installed]'
-    '--force[Overwrite conflicting files]'
-
-    #'-q[Display less information for certain operations.]'
-)
-
-# options for passing to _arguments: options for --aursync command
-_aura_opts_aursync_actions=(
-    '(-A --aursync)'{-A,--aursync}
-    {-p,--pkgbuild}'[Display an AUR package''s PKGBUILD]'
-    {-s,--search}'[Search AUR package names and descriptions]'
-    {-w,--downloadonly}'[Download an AUR package''s source tarball]'
-)
-
-# options for passing to _arguments: options for --aursync command
-_aura_opts_aursync_modifiers=(
-    {-a,--delmakedeps}'[Uninstall unneeded build deps after installation]'
-    {-d,--deps}'[Display package dependencies. Recursive for AUR packages]'
-    {\*-i,\*--info}'[Display AUR package information]'
-    {-k,--diff}'[Show PKGBUILD diffs when upgrading]'
-    {-u,--sysupgrade}'[Upgrade all installed AUR packages]'
-    {-x,--unsuppress}'[Unsuppress makepkg output during building]'
-    '*--aurignore[Ignore AUR packages when installing]:package: _aura_completions_aur_packages'
-    '--build[Build packages in specified path]'
-    '--builduser[Use specified user to build packages]'
-    {--dev,--devel}'[With -Au, also upgrades all development packages]'
-    "--dryrun[Perform checks, but don't build]"
-    '--hotedit[Prompt user to edit PKGBUILD before dep checks]'
-    '--ignorearch[makepkg will ignore processor architecture]'
-)
-
-# options for passing to _arguments: options for --save commands
-_aura_opts_save=(
-    {-c,--clean}'[Given n, save n recent package states and remove the rest]'
-    {-r,--restore}'[Restore a previously saved package state]'
-)
-
-# options for passing to _arguments: options for --downgrade commands
-_aura_opts_downgrade=(
-    {-b,--backup}'[Backup the cache to a given directory]'
-    {-c,--clean}'[Given n, save n versions of each package file]'
-    {-s,--search}'[Search the cache via a regex]'
-    '*:installed package:_aura_completions_installed_packages'
-)
-
-# options for passing to _arguments: options for --viewlog commands
-typeset -a _aura_opts_viewlog
-_aura_opts_viewlog=(
-    '-i[View package installation history.]'
-    '-s[Search log file via a regex.]'
-)
-
-# options for passing to _arguments: options for --orphans commands
-typeset -a _aura_opts_orphans
-_aura_opts_orphans=( '-j[Uninstall all orphan packages.]' )
-
-# handles --help subcommand
-_aura_action_help() {
-    _arguments -s : \
-        "$_aura_opts_commands[@]"
-}
-
-# handles cases where no subcommand has yet been given
-_aura_action_none() {
-    _arguments -s : \
-        "$_aura_opts_commands[@]"
-}
-
-# handles --query subcommand
-_aura_action_query() {
-    local context state line
-    typeset -A opt_args
-
-    case $state in
-        query_file)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
-            ;;
-        query_group)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:groups:_aura_completions_installed_groups'
-            ;;
-        query_owner)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:file:_files'
-            ;;
-        query_search)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:search text: '
-            ;;
-        *)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_actions[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:package:_aura_completions_installed_packages'
-            ;;
-    esac
-}
-
-# handles --remove subcommand
-_aura_action_remove() {
-    _arguments -s : \
-        '(--remove -R)'{-R,--remove} \
-        "$_aura_opts_common[@]" \
-        "$_aura_opts_remove[@]"
-}
-
-# handles --database subcommand
-_aura_actions_database() {
-    _arguments -s : \
-        '(--database -D)'{-D,--database} \
-        "$_aura_opts_common[@]" \
-        "$_aura_opts_database[@]"
-}
-
-# handles --deptest subcommand
-_aura_action_deptest() {
-    _arguments -s : \
-        '(--deptest)-T' \
-        "$_aura_opts_aura_common[@]" \
-        ":packages:_aura_all_packages"
-}
-
-# handles --sync subcommand
-_aura_action_sync() {
-    local context state line
-    typeset -A opt_args
-
-    case $state in
-        sync_clean)
-            _arguments -s : \
-                {\*-c,\*--clean}'[Remove old packages from cache]'
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                ;;
-        sync_group)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '(-g --group)'{-g,--groups} \
-                '*:package group:_aura_completions_all_groups'
-            ;;
-        sync_search)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '*:search text: '
-            ;;
-        *)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_actions[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '*:package:_aura_completions_repo_packages'
-            ;;
-    esac
-}
-
-# handles --upgrade subcommand
-_aura_action_upgrade() {
-    _arguments -s : \
-        '(-U --upgrade)'{-U,--upgrade} \
-        "$_aura_opts_common[@]" \
-        "$_aura_opts_pkgfile[@]"
-}
-
-# handles --version subcommand
-_aura_action_version() {
-    # no further arguments
-    return 0
-}
-
-# provides completions for package groups
-_aura_completions_all_groups() {
-    local -a cmd groups
-    _aura_get_command
-    groups=( $(_call_program groups $cmd[@] -Sg) )
-    typeset -U groups
-    compadd "$@" -a groups
-}
-
-# provides completions for packages available from repositories
-# these can be specified as either 'package' or 'repository/package'
-_aura_completions_repo_packages() {
-    local -a cmd packages repositories packages_long
-    _aura_get_command
-
-    if compset -P '*/'; then
-        packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) )
-        typeset -U packages
-        _wanted repo_packages expl "repository/package" compadd ${(@)packages}
-    else
-        packages=( $(_call_program packages $cmd[@] -Sql) )
-        typeset -U packages
-        _wanted packages expl "packages" compadd - "${(@)packages}"
-
-        repositories=( aur ${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options} )
-        typeset -U repositories
-        _wanted repo_packages expl "repository/package" compadd -S "/" $repositories
-    fi
-}
-
-# provides completions for packages in the AUR
-_aura_completions_aur_packages() {
-    local -a cmd packages repositories packages_long
-    _aura_get_command
-
-    packages=()
-    if [[ -d /var/aur ]]; then
-        packages=( $(ls /var/aur) )
-    fi
-    typeset -U packages
-    _wanted aur_packages expl "packages" compadd - "${(@)packages}"
-}
-
-# provides completions for packages available from repositories and the AUR
-# these can be specied as either 'package' or 'repository/package'
-_aura_completions_all_packages() {
-    _alternative : \
-        'aurpkgs:aur packages:_aura_completions_aur_packages' \
-        'repopkgs:repository packages:_aura_completions_repo_packages'
-}
-
-_aura_all_packages() {
-    _alternative : \
-        'localpkgs:local packages:_aura_completions_installed_packages' \
-        'aurpkgs:aur packages:_aura_completions_aur_packages' \
-        'repopkgs:repository packages:_aura_completions_repo_packages'
-}
-
-# provides completions for package groups
-_aura_completions_installed_groups() {
-    local -a cmd groups
-    _aura_get_command
-    groups=(${(o)${(f)"$(_call_program groups $cmd[@] -Qg)"}% *})
-    typeset -U groups
-    compadd "$@" -a groups
-}
-
-# provides completions for installed packages
-_aura_completions_installed_packages() {
-    local -a cmd packages packages_long
-    packages_long=(/var/lib/pacman/local/*(/))
-    packages=( ${${packages_long#/var/lib/pacman/local/}%-*-*} )
-    compadd "$@" -a packages
-}
-
-# provides completions for repository names
-_aura_completions_repositories() {
-    local -a cmd repositories
-    repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
-    # Uniq the array
-    typeset -U repositories
-    compadd "$@" -a repositories
-}
-
-# builds command for invoking pacman in a _call_program command - extracts
-# relevant options already specified (config file, etc)
-# $cmd must be declared by calling function
-_aura_get_command() {
-    # this is mostly nicked from _perforce
-    cmd=( "aura" "2>/dev/null" )
-    integer i
-    for (( i = 2; i < CURRENT - 1; i++ )); do
-        if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then
-            cmd+=( ${words[i,i+1]} )
-        fi
-    done
-}
-
-_aura_comp() {
-    local -a args cmds
-    local tmp
-    args=( ${${${(M)words:#-*}#-}:#-*} )
-    _message 'now what'
-    for tmp in $words; do
-        cmds+=("${${_aura_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}")
-    done
-    case $args in #$words[2] in
-        h*)
-            if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then
-                _aura_action_help
-            else
-                _message "no more arguments"
-            fi
-            ;;
-        *h*)
-            _message "no more arguments"
-            ;;
-        D*)
-            _aura_action_database
-            ;;
-        Q*g*) # ipkg groups
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:groups:_aura_completions_installed_groups'
-            ;;
-        Q*o*) # file
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:package file:_files'
-            ;;
-        Q*p*) # file *.pkg.tar.*
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_query_modifiers[@]" \
-                '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
-            ;;
-        T*)
-            _aura_action_deptest
-            ;;
-        Q*)
-            _aura_action_query
-            ;;
-        R*)
-            _aura_action_remove
-            ;;
-        S*c*)
-            _arguments -s : \
-                '(-S --sync)'{-S,--sync} \
-                '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \
-                "$_aura_opts_common[@]"
-            ;;
-        S*l*) # repos
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '*:package repo:_aura_completions_repositories' \
-                ;;
-        S*g*) # pkg groups
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '*:package group:_aura_completions_all_groups'
-            ;;
-        S*s)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_sync_modifiers[@]" \
-                '*:search text: '
-                ;;
-        S*)
-            _aura_action_sync
-            ;;
-        U*)
-            _aura_action_upgrade
-            ;;
-        V*)
-            _aura_action_version
-            ;;
-        A*)
-            _arguments -s : \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_aursync_modifiers[@]" \
-                "$_aura_opts_aursync_actions[@]" \
-                '*:package:_aura_completions_aur_packages'
-                ;;
-        B*)
-            _arguments -s : \
-                '(-B --save)'{-B,--save} \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_save[@]"
-      ;;
-        C*)
-            _arguments -s : \
-                '(-C --downgrade)'{-C,--downgrade} \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_downgrade[@]"
-            ;;
-        L*)
-            _arguments -s : \
-                '(-L --viewlog)'{-L,--viewlog} \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_viewlog[@]"
-            ;;
-        M*)
-            _arguments -s : \
-                '(-M --abssync)'{-M,--abssync} \
-                "$_aura_opts_common[@]"
-            ;;
-        O*)
-            _arguments -s : \
-                '(-O --orphans)'{-O,--orphans} \
-                "$_aura_opts_common[@]" \
-                "$_aura_opts_orphans[@]"
-            ;;
-        *)
-            case ${(M)words:#--*} in
-                *--help*)
-                    if (( ${(W)#cmds} == 1 )); then
-                        _aura_action_help
-                    else
-                        return 0
-                    fi
-                    ;;
-                *--sync*)
-                    _aura_action_sync
-                    ;;
-                *--query*)
-                    _aura_action_query
-                    ;;
-                *--remove*)
-                    _aura_action_remove
-                    ;;
-                *--deptest*)
-                    _aura_action_deptest
-                    ;;
-                *--database*)
-                    _aura_action_database
-                    ;;
-                *--version*)
-                    _aura_action_version
-                    ;;
-                *--upgrade*)
-                    _aura_action_upgrade
-                    ;;
-
-                *--aursync*)
-                    _arguments -s : \
-                        "$_aura_opts_common[@]" \
-                        "$_aura_opts_aursync_modifiers[@]" \
-                        "$_aura_opts_aursync_actions[@]" \
-                        '*:package:_aura_completions_aur_packages'
-                    ;;
-                *--save*)
-                    _arguments -s : \
-                        '(-B --save)'{-B,--save} \
-                        "$_aura_opts_common[@]" \
-                        "$_aura_opts_save[@]"
-                    ;;
-                *--downgrade*)
-                    _arguments -s : \
-                        '(-C --downgrade)'{-C,--downgrade} \
-                        "$_aura_opts_common[@]" \
-                        "$_aura_opts_downgrade[@]"
-                    ;;
-                *--viewlog*)
-                    _arguments -s : \
-                        '(-L --viewlog)'{-L,--viewlog} \
-                        "$_aura_opts_common[@]" \
-                        "$_aura_opts_viewlog[@]"
-                    ;;
-                *--orphans*)
-                    _arguments -s : \
-                        '(-O --orphans)'{-O,--orphans} \
-                        "$_aura_opts_common[@]" \
-                        "$_aura_opts_orphans[@]"
-                    ;;
-                *)
-                    _aura_action_none
-                    ;;
-            esac
-            ;;
-    esac
-}
-
-# run the main dispatcher
-_aura_comp "$@"
diff --git a/doc/completions/bashcompletion.sh b/doc/completions/bashcompletion.sh
deleted file mode 100644
--- a/doc/completions/bashcompletion.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-# This file is in the public domain.
-
-_aura_compgen() {
-  local i r
-  COMPREPLY=($(compgen -W '$*' -- "$cur"))
-  for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
-    for r in ${!COMPREPLY[@]}; do
-      if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
-        unset 'COMPREPLY[r]'; break
-      fi
-    done
-  done
-}
-
-_aura_ptr2comp() {
-  local list= x y
-  for x; do
-    for y in '0 --' '1 -'; do
-      eval 'set -- ${'$x'[${y% *}]}'
-      list+=\ ${@/#/${y#* }}
-    done
-  done
-  _aura_compgen $list
-}
-
-_aura_incomp() {
-  local r="[[:space:]]-(-${1#* }[[:space:]]|[[:alnum:]_]*${1% *})"; [[ $COMP_LINE =~ $r ]]
-}
-
-_aura_pkg() {
-  _aura_compgen "$(
-    if [[ $2 ]]; then
-      \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u
-    else
-      \pacman -$1 2>/dev/null
-    fi
-  )"
-}
-
-_aura_repo_list() {
-  _aura_compgen "$(pacman-conf --repo-list)"
-}
-
-_aura() {
-  compopt -o default
-  local common core database files query remove sync upgrade o
-  local cur prev words cword
-  _init_completion || return
-  database=('asdeps asexplicit')
-  files=('list machinereadable refresh regex' 'l x y')
-  query=('changelog check deps explicit file foreign groups info list native owns
-          search unrequired upgrades' 'c e g i k l m n o p s t u')
-  remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u')
-  sync=('asdeps asexplicit clean dbonly downloadonly groups ignore ignoregroup
-         info list needed nodeps assume-installed print refresh recursive search sysupgrade'
-        'c g i l p s u w y')
-  upgrade=('asdeps asexplicit needed nodeps assume-installed print recursive' 'p')
-  common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
-           noconfirm noprogressbar noscriptlet quiet root verbose' 'b d h q r v')
-  core=('aursync save downgrade database files viewlog help orphans analysis query remove sync upgrade version' 'A B C D F L O P Q R S U V h')
-
-  for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade'; do
-    _aura_incomp "$o" && break
-  done
-
-  if [[ $? != 0 ]]; then
-    _aura_ptr2comp core
-  elif [[ ! $prev =~ ^-[[:alnum:]_]*[Vbhr] &&
-    ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]
-  then
-    [[ $cur = -* ]] && _aura_ptr2comp ${o#* } common ||
-      case ${o% *} in
-      # Pacman Commands
-      D|R)
-          _aura_pkg Qq;;
-      F)
-        { _aura_incomp 'l list'   && _aura_pkg Slq ; }       ||
-          compopt +o default;;
-      Q)
-        { _aura_incomp 'g groups' && _aura_pkg Qg sort; }    ||
-        { _aura_incomp 'p file'   && _aura_file; }           ||
-        { _aura_incomp 's search' && compopt +o default; }     ||
-        { _aura_incomp 'u upgrades' && compopt +o default; }   ||
-          _aura_incomp 'o owns'   ||
-          _aura_pkg Qq;;
-      S)
-        { _aura_incomp 'g groups' && _aura_pkg Sg; }      ||
-        { _aura_incomp 'l list'   && _aura_repo_list; } ||
-        { _aura_incomp 's search' && compopt +o default; }  ||
-          _aura_pkg Slq;;
-      U)
-          _aura_file;;
-      esac
-  fi
-  true
-}
-
-_aura_file() {
-  compopt -o filenames; _filedir 'pkg.tar*'
-}
-
-complete -F _aura aura
-
-# ex:et ts=2 sw=2 ft=sh
diff --git a/exec/Aura/Commands/A.hs b/exec/Aura/Commands/A.hs
--- a/exec/Aura/Commands/A.hs
+++ b/exec/Aura/Commands/A.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module    : Aura.Commands.A
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/exec/Aura/Commands/B.hs b/exec/Aura/Commands/B.hs
--- a/exec/Aura/Commands/B.hs
+++ b/exec/Aura/Commands/B.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Commands.B
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/exec/Aura/Commands/C.hs b/exec/Aura/Commands/C.hs
--- a/exec/Aura/Commands/C.hs
+++ b/exec/Aura/Commands/C.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module    : Aura.Commands.C
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -200,5 +200,7 @@
 cleanDir = do
   ss <- asks settings
   let !vcsPath = fromMaybe vcsStore . vcsPathOf $ buildConfigOf ss
-  notify ss cleanCache_6
-  listDirectory vcsPath >>= traverse_ (removeDirectoryRecursive . (</>) vcsPath)
+  exists <- doesDirectoryExist vcsPath
+  when exists $ do
+    notify ss cleanCache_6
+    listDirectory vcsPath >>= traverse_ (removeDirectoryRecursive . (</>) vcsPath)
diff --git a/exec/Aura/Commands/L.hs b/exec/Aura/Commands/L.hs
--- a/exec/Aura/Commands/L.hs
+++ b/exec/Aura/Commands/L.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Commands.L
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/exec/Aura/Commands/O.hs b/exec/Aura/Commands/O.hs
--- a/exec/Aura/Commands/O.hs
+++ b/exec/Aura/Commands/O.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Commands.O
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/exec/Aura/Commands/P.hs b/exec/Aura/Commands/P.hs
--- a/exec/Aura/Commands/P.hs
+++ b/exec/Aura/Commands/P.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Commands.P
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/exec/Aura/Flags.hs b/exec/Aura/Flags.hs
--- a/exec/Aura/Flags.hs
+++ b/exec/Aura/Flags.hs
@@ -569,7 +569,7 @@
 
 language :: Parser Language
 language = foldr1 (<|>) $ NEL.map (\(f, v) -> flag' v (long f <> hidden)) langs
-  where langs = [ ( "japanese",   Japanese ),   ( "日本語",      Japanese )
+  where langs = [ ( "japanese",   Japanese ),   ( "日本語",     Japanese )
                 , ( "polish",     Polish ),     ( "polski",     Polish )
                 , ( "croatian",   Croatian ),   ( "hrvatski",   Croatian )
                 , ( "swedish",    Swedish ),    ( "svenska",    Swedish )
@@ -582,15 +582,17 @@
                 , ( "serbian",    Serbian ),    ( "српски",     Serbian )
                 , ( "norwegian",  Norwegian ),  ( "norsk",      Norwegian )
                 , ( "indonesian", Indonesia )
-                , ( "chinese",    Chinese ),    ( "中文",        Chinese )
+                , ( "chinese",    Chinese ),    ( "中文",       Chinese )
                 , ( "esperanto",  Esperanto )
                 , ( "dutch",      Dutch ),      ( "nederlands", Dutch )
-                , ( "arabic",     Arabic ),     ( "العربية",       Arabic )
+                , ( "turkish",    Turkish )
+                , ( "arabic",     Arabic ),     ( "العربية",    Arabic )
                 , ( "ukrainian",  Ukrainian ),  ( "українська", Ukrainian)
-                , ( "vietnamese", Vietnamese )
                 , ( "romanian",   Romanian ),   ( "română",     Romanian )
-                , ( "czech",      Czech ),      ( "český",       Czech )
-                , ( "korean",     Korean),      ( "한국어",      Korean )
+                , ( "vietnamese", Vietnamese )
+                , ( "czech",      Czech ),      ( "český",      Czech )
+                , ( "korean",     Korean),      ( "한국어",     Korean )
+                , ( "hindi",      Hindi),       ( "हिंदी",       Hindi )
                 ]
 
 logLevel :: Parser LogLevel
diff --git a/exec/Aura/Settings/Runtime.hs b/exec/Aura/Settings/Runtime.hs
--- a/exec/Aura/Settings/Runtime.hs
+++ b/exec/Aura/Settings/Runtime.hs
@@ -2,7 +2,7 @@
 
 {-
 
-Copyright 2012 - 2021 Colin Woodbury <colin@fosskers.ca>
+Copyright 2012 - 2024 Colin Woodbury <colin@fosskers.ca>
 
 This file is part of Aura.
 
diff --git a/exec/aura.hs b/exec/aura.hs
--- a/exec/aura.hs
+++ b/exec/aura.hs
@@ -4,7 +4,7 @@
 
 {-
 
-Copyright 2012 - 2021 Colin Woodbury <colin@fosskers.ca>
+Copyright 2012 - 2024 Colin Woodbury <colin@fosskers.ca>
 
 This file is part of Aura.
 
diff --git a/lib/Aura/Build.hs b/lib/Aura/Build.hs
--- a/lib/Aura/Build.hs
+++ b/lib/Aura/Build.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Build
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Cache.hs b/lib/Aura/Cache.hs
--- a/lib/Aura/Cache.hs
+++ b/lib/Aura/Cache.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module    : Aura.Cache
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Colour.hs b/lib/Aura/Colour.hs
--- a/lib/Aura/Colour.hs
+++ b/lib/Aura/Colour.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Colour
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Core.hs b/lib/Aura/Core.hs
--- a/lib/Aura/Core.hs
+++ b/lib/Aura/Core.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module    : Aura.Core
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Dependencies.hs b/lib/Aura/Dependencies.hs
--- a/lib/Aura/Dependencies.hs
+++ b/lib/Aura/Dependencies.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module    : Aura.Dependencies
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -171,8 +171,8 @@
     | isVersionConflict reqVer curVer = Just $ VerConflict failMsg2
     | otherwise                       = Nothing
     where pn       = pname pkg
-          curVer   = pver pkg & release .~ []
-          reqVer   = dDemand dep & _VersionDemand . release .~ []
+          curVer   = pver pkg & release .~ Nothing
+          reqVer   = dDemand dep & _VersionDemand . release .~ Nothing
           lang     = langOf ss
           toIgnore = ignoresOf ss
           failMsg1 = getRealPkgConflicts_2 pn lang
diff --git a/lib/Aura/IO.hs b/lib/Aura/IO.hs
--- a/lib/Aura/IO.hs
+++ b/lib/Aura/IO.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.IO
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Install.hs b/lib/Aura/Install.hs
--- a/lib/Aura/Install.hs
+++ b/lib/Aura/Install.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module    : Aura.Install
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Languages.hs b/lib/Aura/Languages.hs
--- a/lib/Aura/Languages.hs
+++ b/lib/Aura/Languages.hs
@@ -8,7 +8,7 @@
 
 -- |
 -- Module    : Aura.Languages
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -45,7 +45,7 @@
     , (Serbian,    "Filip Brcic")
     , (Norwegian,  "\"chinatsun\"")
     , (Indonesia,  "\"pak tua Greg\"")
-    , (Chinese,    "Kai Zhang")
+    , (Chinese,    "Kai Zhang / Alex3236")
     , (Japanese,   "Onoue Takuro / Colin Woodbury")
     , (Esperanto,  "Zachary Matthews")
     , (Dutch,      "Joris Blanken / Heimen Stoffels")
@@ -56,6 +56,7 @@
     , (Vietnamese, "\"Kritiqual\"")
     , (Czech,      "Daniel Rosel")
     , (Korean,     "\"Nioden\"")
+    , (Hindi,      "@yozachar")
     ]
 
 translatorMsgTitle :: Language -> Text
@@ -83,6 +84,7 @@
     Vietnamese -> "Dịch giả của Aura:"
     Czech      -> "Překladači Aury:"
     Korean     -> "Aura 번역자:"
+    Hindi      -> "Aura अनुवादकों:"
     _          -> "Aura Translators:"
 
 translatorMsg :: Language -> [Text]
@@ -95,7 +97,7 @@
     names = mapMaybe (\l -> formatLang . (,l) <$> M.lookup l translators) [English ..]
 
     formatLang :: (Text, Language) -> Text
-    formatLang (translator, lang') = " (" <> (T.pack $ show lang') <> ") " <> translator
+    formatLang (translator, lang') = " (" <> T.pack (show lang') <> ") " <> translator
 
 -- | Make some `Text` cyan. Previous wrapped things in backticks.
 bt :: Pretty a => a -> Doc AnsiStyle
@@ -131,6 +133,7 @@
   "vi" -> Just Vietnamese
   "cs" -> Just Czech
   "ko" -> Just Korean
+  "hi" -> Just Hindi
   _    -> Nothing
 
 ----------------------
@@ -160,6 +163,7 @@
     Vietnamese -> "Cơ sở dữ liệu của gói đã bị khóa. Nhấn Enter sau khi nó được mở khóa để tiếp tục."
     Czech      -> "Databáze balíčků je uzamčena. Až bude odemčena, stiskněte Enter pro pokračování."
     Korean     -> "패키지 데이터베이스가 잠겨있습니다. 계속하려면 Enter 키를 누르시오."
+    Hindi      -> "पैकेज डेटाबेस लॉक है. जारी रखने के लिए अनलॉक होने पर एंटर दबाएँ।"
     _          -> "The package database is locked. Press enter when it's unlocked to continue."
 
 trueRoot_3 :: Language -> Doc AnsiStyle
@@ -182,6 +186,7 @@
     Vietnamese -> "Kể từ makepkg v4.2, build bằng quyền root không còn khả dụng."
     Czech      -> "Od makepkg v4.2 již není sestavení jako root možné."
     Korean     -> "makepkg v4.2부터는 루트 권한으로 빌드 할 수 없습니다."
+    Hindi      -> "मेकपीकेजी v4.2 के अनुसार, रूट के रूप में निर्माण अब संभव नहीं है।"
     _          -> "As of makepkg v4.2, building as root is no longer possible."
 
 mustBeRoot_1 :: Language -> Doc AnsiStyle
@@ -201,7 +206,7 @@
     Serbian    -> "Морате да користите " <> sudo <> " за ову радњу."
     Norwegian  -> "Du må bruke " <> sudo <> " for det."
     Indonesia  -> "Anda harus menggunakan " <> sudo <> " untuk melakukannya."
-    Chinese    -> "除非是根用户，否则不能执行此操作。"
+    Chinese    -> "需要" <> sudo <> "以执行此操作。"
     Esperanto  -> "Vi ne povas fari ĉi tiun operacion, sen " <> sudo <> "."
     Dutch      -> "U kunt deze actie niet uitvoeren zonder " <> sudo <> " te gebruiken."
     Ukrainian  -> "Для цієї дії, потрібно використати " <> sudo <> "."
@@ -209,6 +214,7 @@
     Vietnamese -> "Bạn không thể thực hiện hành động này nếu không dùng " <> sudo <> "."
     Czech      -> "Tuto operaci nelze provést bez použití sudo."
     Korean     -> "루트 권한으로 실행해야 합니다."
+    Hindi      -> "आप सूडो का उपयोग किए बिना यह ऑपरेशन नहीं कर सकते।"
     _          -> "You cannot perform this operation without using sudo."
 
 -----------------------
@@ -239,6 +245,7 @@
     Vietnamese -> "Đang build " <> p <> "..."
     Czech      -> "Kompilace " <> p <> "..."
     Korean     -> p <> "빌드 중..."
+    Hindi      -> "बिल्डिंग " <> p <> "..."
     _          -> "Building " <> p <> "..."
 
 buildPackages_2 :: Language -> Doc AnsiStyle
@@ -252,6 +259,8 @@
     Czech      -> "Bylo nalezeno '-allsource'. Žádné skutečné instalovatelné balíčky nebudou sestaveny."
     Korean     -> "'--allsource' 감지되었습니다. 실제 설치 가능한 패키지는 빌드되지 않습니다."
     Dutch      -> "--allsource gedetecteerd. Er worden geen installeerbare pakketten gebouwd."
+    Hindi      -> "'--allsource' का पता चला। कोई वास्तविक इंस्टाल करने योग्य पैकेज नहीं बनाया जाएगा।"
+    Chinese    -> "检测到 '--allsource'。不会构建实际的可安装软件包。"
     _          -> "'--allsource' detected. No actual installable packages will be built."
 
 buildPackages_3 :: FilePath -> Language -> Doc AnsiStyle
@@ -266,25 +275,31 @@
     Czech      -> "Všechny soubory .src.tar.gz byly vytvořeny a zkopírovány do: " <> pretty fp
     Dutch      -> "Alle .src.tar.gz-bestanden zijn gebouwd en gekopieerd naar " <> pretty fp
     Korean     -> "모든 .src.tar.gz 파일은 빌드되고 복사됩니다:" <> pretty fp
+    Hindi      -> "सभी .src.tar.gz फ़ाइलें बनाई गईं और यहां कॉपी की गईं: " <> pretty fp
+    Chinese    -> "所有 .src.tar.gz 文件已经构建并复制到：" <> pretty fp
     _          -> "All .src.tar.gz files were built and copied to: " <> pretty fp
 
 buildPackages_4 :: Language -> Doc AnsiStyle
 buildPackages_4 = \case
-    Romanian -> bt @Text "--hotedit" <+> "detectat, dar acestea au date în cache și vor fi omise din editare:"
+    Romanian   -> bt @Text "--hotedit" <+> "detectat, dar acestea au date în cache și vor fi omise din editare:"
     Vietnamese -> bt @Text "--hotedit" <+> "được sử dụng, những gói sau có trong cache và sẽ được bỏ qua để chỉnh sửa:"
-    Czech    -> bt @Text "--hotedit" <+> "zjištěno, ale následující položky mají položky mezipaměti a budou přeskočeny pro úpravy:"
-    Korean   -> bt @Text "--hotedit" <+> "감지되었지만 캐시 목록이 있으므로 편집을 위해 건너뜁니다."
+    Czech      -> bt @Text "--hotedit" <+> "zjištěno, ale následující položky mají položky mezipaměti a budou přeskočeny pro úpravy:"
+    Korean     -> bt @Text "--hotedit" <+> "감지되었지만 캐시 목록이 있으므로 편집을 위해 건너뜁니다."
     Dutch      -> "--hotedit gedetecteerd. De volgende pakketten zijn gecachet en zullen niet worden bewerkt:"
-    _        -> bt @Text "--hotedit" <+> "detected, but the following have cache entries and will be skipped for editing:"
+    Hindi      -> bt @Text "--hotedit" <+> "पता चला, लेकिन निम्नलिखित में कैश प्रविष्टियाँ हैं और इन्हें संपादन के लिए छोड़ दिया जाएगा:"
+    Chinese    -> "检测到" <+> bt @Text "--hotedit" <+> "，但以下条目已缓存，将跳过编辑："
+    _          -> bt @Text "--hotedit" <+> "detected, but the following have cache entries and will be skipped for editing:"
 
 buildPackages_5 :: Language -> Doc AnsiStyle
 buildPackages_5 = \case
-    Romanian -> "Se poate folosi" <+> bt @Text "--force" <+> "pentru a trece peste acest comportament."
+    Romanian   -> "Se poate folosi" <+> bt @Text "--force" <+> "pentru a trece peste acest comportament."
     Vietnamese -> "Bạn có thể dùng" <+> bt @Text "--force" <+> "để ghi đè hành động này."
-    Czech    -> "Můžete použít" <+> bt @Text "--force" <+> "k potlačení tohoto chování."
-    Korean   -> bt @Text "--force" <+> "를 사용하여 이 동작을 무시할 수 있습니다."
+    Czech      -> "Můžete použít" <+> bt @Text "--force" <+> "k potlačení tohoto chování."
+    Korean     -> bt @Text "--force" <+> "를 사용하여 이 동작을 무시할 수 있습니다."
     Dutch      -> "U kunt" <+> bt @Text "--force" <+> "toekennen om dit gedrag te omzeilen."
-    _        -> "You can use" <+> bt @Text "--force" <+> "to override this behaviour."
+    Hindi      -> "आप इस व्यवहार को ओवरराइड करने के लिए" <+> bt @Text "--force" <+> "का उपयोग कर सकते हैं।"
+    Chinese    -> "使用" <+> bt @Text "--force" <+> "可忽略此行为。"
+    _          -> "You can use" <+> bt @Text "--force" <+> "to override this behaviour."
 
 buildFail_5 :: Language -> Doc AnsiStyle
 buildFail_5 = \case
@@ -310,6 +325,7 @@
     Vietnamese -> "Build thất bại."
     Czech      -> "Budování se nezdařilo."
     Korean     -> "빌드 실패"
+    Hindi      -> "बिल्डिंग फेल हो गई।"
     _          -> "Building failed."
 
 -- NEEDS TRANSLATION
@@ -327,7 +343,7 @@
     French     -> "Voulez-vous tout de même continuer ?"
     Russian    -> "Продолжить, несмотря ни на что?"
     Indonesia  -> "Apakah anda tetap ingin melanjutkan?"
-    Chinese    -> "你仍然希望继续吗？"
+    Chinese    -> "仍要继续吗？"
     Swedish    -> "Vill du fortsätta ändå?"
     Esperanto  -> "Ĉu vi volas daŭrigi?"
     Dutch      -> "Wilt u toch doorgaan?"
@@ -336,6 +352,7 @@
     Vietnamese -> "Bạn có muốn tiếp tục không?"
     Czech      -> "Chcete přesto pokračovat?"
     Korean     -> "계속하시겠습니까?"
+    Hindi      -> "क्या आप फिर भी जारी रखना चाहेंगे?"
     _          -> "Would you like to continue anyway?"
 
 -- NEEDS TRANSLATION
@@ -350,7 +367,7 @@
     Indonesia  -> "Gagal mendapatkan skrip untuk " <> p <> "."
     Russian    -> "Не удалось получить сценарии сборки для " <> p <> "."
     Italian    -> "Non è stato possibile ottenere gli script di compilazione per " <> p <> "."
-    Chinese    -> "无法获得 " <> p <> " 的构建脚本。"
+    Chinese    -> "无法获取 " <> p <> " 的构建脚本。"
     Swedish    -> "Kunde inte hämta byggskript för " <> p <> "."
     Esperanto  -> "Paneis akiri muntaj skriptoj de " <> p <> "."
     Dutch      -> "De bouwscripts van " <> p <> " kunnen niet worden opgehaald."
@@ -359,6 +376,7 @@
     Vietnamese -> "Không thể lấy tập lệnh build cho " <> p <> "."
     Czech      -> "Nepodařilo se získat sestavení skriptů pro " <> p <> "."
     Korean     -> p <> "의 빌드 스크립트를 가져올 수 없습니다."
+    Hindi      -> "" <> p <> "के लिए बिल्ड स्क्रिप्ट प्राप्त करने में विफल।"
     _          -> "Failed to obtain build scripts for " <> p <> "."
 
 buildFail_8 :: Language -> Doc AnsiStyle
@@ -377,22 +395,26 @@
     Vietnamese -> "Có lỗi khi makepkg."
     Czech      -> "Došlo k chybě makepkg."
     Korean     -> "makepkg를 실패했습니다."
+    Hindi      -> "मेकपेकेजी विफलता थी।"
+    Chinese    -> "makepkg 失败。"
     _          -> "There was a makepkg failure."
 
 buildFail_9 :: Language -> Doc AnsiStyle
 buildFail_9 = \case
-  Polish    -> "Nie udało się zlokalizować żadnych zbudowanych pakietów (*.pkg.tar.xz)."
-  Arabic    -> ".(*.pkg.tar.xz) فشل في اكتشاف اي ملف من ملفات البناء"
-  Spanish   -> "Error al detectar todos los archivo de paquete (*.pkg.tar.xz)."
-  Italian   -> "Non è stato possibile trovare nessun archivio risultante dalla compilazione del pacchetto (*.pkg.tar.xz)."
-  Esperanto -> "Paneis detekti ĉiujn dosierojn de pakaĵoj (*.pkg.tar.xz)."
-  Dutch     -> "Er zijn geen gebouwde pakketbestanden aangetroffen (*.pkg.tar.xz)."
-  Ukrainian -> "Не вдалось знайти жодного файлу пакунку (*.pkg.tar.xz)."
-  Romanian  -> "Nu s-a detectat nici un pachet construit (*.pkg.tar.xz)."
+  Polish     -> "Nie udało się zlokalizować żadnych zbudowanych pakietów (*.pkg.tar.xz)."
+  Arabic     -> ".(*.pkg.tar.xz) فشل في اكتشاف اي ملف من ملفات البناء"
+  Spanish    -> "Error al detectar todos los archivo de paquete (*.pkg.tar.xz)."
+  Italian    -> "Non è stato possibile trovare nessun archivio risultante dalla compilazione del pacchetto (*.pkg.tar.xz)."
+  Esperanto  -> "Paneis detekti ĉiujn dosierojn de pakaĵoj (*.pkg.tar.xz)."
+  Dutch      -> "Er zijn geen gebouwde pakketbestanden aangetroffen (*.pkg.tar.xz)."
+  Ukrainian  -> "Не вдалось знайти жодного файлу пакунку (*.pkg.tar.xz)."
+  Romanian   -> "Nu s-a detectat nici un pachet construit (*.pkg.tar.xz)."
   Vietnamese -> "Không thể phát hiện các tệp đã được build (*.pkg.tar.xz)."
-  Czech     -> "Nepodařilo se detekovat žádné soubory zabudovaného balíčku (*.pkg.tar.xz)."
-  Korean    -> "빌드된 패키지 파일 (*.pkg.tar.xz)을 검색하지 못했습니다."
-  _         -> "Failed to detect any built package files (*.pkg.tar.xz)."
+  Czech      -> "Nepodařilo se detekovat žádné soubory zabudovaného balíčku (*.pkg.tar.xz)."
+  Korean     -> "빌드된 패키지 파일 (*.pkg.tar.xz)을 검색하지 못했습니다."
+  Hindi      -> "किसी भी निर्मित पैकेज फ़ाइल (*.pkg.tar.xz) का पता लगाने में विफल।"
+  Chinese    -> "未能发现任何已构建的包 (*.pkg.tar.xz)。"
+  _          -> "Failed to detect any built package files (*.pkg.tar.xz)."
 
 buildFail_10 :: Language -> Doc AnsiStyle
 buildFail_10 = \case
@@ -407,6 +429,8 @@
   Vietnamese -> "Tất cả các gói build thất bại."
   Czech      -> "Sestavení každého balíčku se nezdařilo."
   Korean     -> "모든 패키지를 빌드하지 못했습니다."
+  Hindi      -> "हर पैकेज बनाने में असफल रहा।"
+  Chinese    -> "所有包都未能构建。"
   _          -> "Every package failed to build."
 
 buildFail_11 :: Language -> Doc AnsiStyle
@@ -423,6 +447,8 @@
   Vietnamese -> "Build thất bại. Bạn có muốn xem lịch sử lỗi?"
   Czech      -> "Budování se nezdařilo. Chcete vidět chybu?"
   Korean     -> "빌드를 실패했습니다. 오류를 확인하시겠습니까?"
+  Hindi      -> "बिल्डिंग विफल हो गई। क्या आप त्रुटि देखना चाहेंगे?"
+  Chinese    -> "构建失败。要检查错误吗？"
   _          -> "Building failed. Would you like to see the error?"
 
 buildFail_12 :: Language -> Doc AnsiStyle
@@ -436,6 +462,8 @@
     Czech      -> "Nepodařilo se 'git stáhnout' nejnovější aktualizace."
     Korean     -> "최신 버전 'git pull'을 실패했습니다."
     Dutch      -> "Het uitvoeren van ‘git pull’ om de nieuwste bestanden op te halen is mislukt."
+    Hindi      -> "नवीनतम अपडेट को 'गिट पुल' करने में विफल।"
+    Chinese    -> "未能从 'git pull' 获取最新更新。"
     _          -> "Failed to 'git pull' the latest updates."
 
 ------------------------------
@@ -458,7 +486,7 @@
     Serbian    -> "Зависност " <> p <> " захтева верзију " <> d <> ", али најновија верзија је " <> r <> "."
     Norwegian  -> "Avhengigheten " <> p <> " krever versjon " <> d <>", men den nyeste versjonen er " <> r <> "."
     Indonesia  -> "Dependensi " <> p <> " meminta versi " <> d <> " namun versi paling baru adalah " <> r <> "."
-    Chinese    -> "依赖 " <> p <> " 需要版本 " <> d <> "，但是最新的版本是 " <> r <> "。"
+    Chinese    ->  p <> " 依赖于版本 " <> d <> "，但最新版本是 " <> r <> "。"
     Esperanto  -> "La pakaĵo, " <> prnt <> ", dependas de versio " <> d <> " de " <> p <> ", sed la plej nova versio estas " <> r <> "."
     Dutch      -> prnt <> " is afhankelijk van versie " <> d <> " van " <> p <> ", maar de nieuwste versie is " <> r <> "."
     Ukrainian  -> "Залежність " <> p <> " потребує версію " <> d <> ", проте останньою версією є " <> r <> "."
@@ -466,6 +494,7 @@
     Vietnamese -> "Gói " <> prnt <> " phụ thuộc vào bản " <> d <> " của " <> p <> ", nhưng bản mới nhất là " <> r <> "."
     Czech      -> "Balík " <> prnt <> " závisí na verzi " <> d <> " z " <> p <> ", ale nejnovější verze je " <> r <> "."
     Korean     -> prnt <> " 패키지는 " <> p <> "의 버전 " <> d <> "에 의존하지만 가장 최신 버전은 " <> r <> "입니다."
+    Hindi      -> "पैकेज " <> prnt <> " " <> p <> " के संस्करण " <> d <> " पर निर्भर करता है, लेकिन सबसे हालिया संस्करण " <> r <> " है।"
     _          -> "The package " <> prnt <> " depends on version " <> d <> " of " <> p <> ", but the most recent version is " <> r <> "."
 
 getRealPkgConflicts_2 :: PkgName -> Language -> Doc AnsiStyle
@@ -484,7 +513,7 @@
   Serbian    -> "Пакет " <> p <> " је игнорисан! Видите ваш фајл „pacman.conf“."
   Norwegian  -> p <> " er en ignorert pakke! Sjekk din `pacman.conf`-fil."
   Indonesia  -> p <> " merupakan paket yang diabaikan! Lihat `pacman.conf` anda."
-  Chinese    -> p <> " 是一个被忽略的包！请查看你的 `pacman.conf` 文件。"
+  Chinese    -> p <> " 是一个被忽略的包！请检查 `pacman.conf` 文件。"
   Esperanto  -> p <> " estas malatenta pakaĵo! Vidu vian `pacman.conf` dosieron."
   Dutch      -> p <> " wordt genegeerd! Bekijk uw `pacman.conf`-bestand."
   Ukrainian  -> "Пакунок " <> p <> " буде проігноровано! Перевірте ваш файл `pacman.conf`."
@@ -492,6 +521,7 @@
   Vietnamese -> "Gói " <> p <> "đã bị bỏ qua! Hãy xem trong `pacman.conf` của bạn."
   Czech      -> p <> " je ignorovaný balíček! Podívejte se na svůj soubor `pacman.conf`."
   Korean     -> p <> "은(는) 무시된 패키지입니다! `pacman.conf`를 확인하시오."
+  Hindi      -> p <> " एक उपेक्षित पैकेज है! अपनी `pacman.conf` फ़ाइल देखें।"
   _          -> p <> " is an ignored package! See your `pacman.conf` file."
 
 missingPkg_2 :: [DepError] -> Language -> Doc AnsiStyle
@@ -513,6 +543,8 @@
   Vietnamese -> "Không thể tìm thấy các gói phụ thuộc của " <> bt s <> "."
   Czech      -> "Nebyla nalezena závislost " <> bt s <> " z " <> bt par <> "."
   Korean     -> bt par <> "의 종속성 " <> bt s <> "을(를) 찾을 수 없습니다."
+  Hindi      -> "निर्भरता " <> bt s <> " की " <> bt par <> " नहीं मिल सकी।"
+  Chinese    -> "未能找到 " <> bt par <> " 的依赖 " <> bt s <> "。"
   _          -> "The dependency " <> bt s <> " of " <> bt par <> " couldn't be found."
 
 depError l (BrokenProvides (PkgName pkg) (Provides (PkgName pro)) (PkgName n)) = case l of
@@ -527,6 +559,8 @@
   Vietnamese -> "Gói " <> bt pkg <> " cần " <> bt n <> ", để cung cấp " <> bt pro <> "."
   Czech      -> "Balík " <> bt pkg <> " potřebuje " <> bt n <> ", který poskytuje " <> bt pro <> "."
   Korean     -> bt pkg <> " 패키지는 " <> bt pro <> "를 제공하는 " <> bt n <> "이(가) 필요합니다."
+  Hindi      -> "पैकेज " <> bt pkg <> " को " <> bt n <> " की आवश्यकता है, जो " <> bt pro <> " प्रदान करता है।"
+  Chinese    -> bt pkg <> " 需要 " <> bt n <> " 以提供 " <> bt pro <> "。"
   _          -> "The package " <> bt pkg <> " needs " <> bt n <> ", which provides " <> bt pro <> "."
 
 missingPkg_3 :: Language -> Doc AnsiStyle
@@ -541,6 +575,8 @@
   Vietnamese -> "Có lỗi trong quá trình xây dựng biểu đồ gói phụ thuộc. Nếu bạn thấy điều này, có gì đó không đúng."
   Czech      -> "Při reorganizaci grafu závislostí došlo k chybě. Pokud vidíte toto, něco je velmi špatně."
   Korean     -> "종속성 그래프를 재구성하는 동안 오류가 발생했습니다."
+  Hindi      -> "निर्भरता ग्राफ़ को पुनर्व्यवस्थित करने में एक त्रुटि हुई। यदि आप इसे देखते हैं, तो कुछ बहुत गलत है।"
+  Chinese    -> "重组依赖关系时出现错误。请注意，这是一个严重的错误。"
   _          -> "There was an error reorganizing the dependency graph. If you see this, something is very wrong."
 
 missingPkg_4 :: [NonEmpty PkgName] -> Language -> Doc AnsiStyle
@@ -555,6 +591,8 @@
   Vietnamese -> vsep $ "Phát hiện chu kỳ gói phụ thuộc: " : pns'
   Czech      -> vsep $ "Byly zjištěny následující cykly závislostí:" : pns'
   Korean     -> vsep $ "다음과 같은 종속성 주기가 발견되었습니다:" : pns'
+  Hindi      -> vsep $ "निम्नलिखित निर्भरता चक्रों का पता लगाया गया:" : pns'
+  Chinese    -> vsep $ "检测到循环依赖：" : pns'
   _          -> vsep $ "The following dependency cycles were detected:" : pns'
   where
     pns' :: [Doc ann]
@@ -572,6 +610,8 @@
   Vietnamese -> bt p <> " không tồn tại."
   Czech      -> bt p <> " neexistuje."
   Korean     -> bt p <> "은(는) 존재하지 않습니다."
+  Hindi      -> bt p <> " मौजूद नहीं है।"
+  Chinese    -> bt p <> " 不存在。"
   _          -> bt p <> " does not exist."
 
 -----------------
@@ -593,7 +633,7 @@
     Serbian    -> "Доступни су следећи језици:"
     Norwegian  -> "Følgende språk er tilgjengelig:"
     Indonesia  -> "Berikut ini adalah bahasa yang tersedia:"
-    Chinese    -> "以下语言是可用的："
+    Chinese    -> "可用语言如下："
     Esperanto  -> "La sekvaj lingvo estas disponebla:"
     Dutch      -> "De volgende talen zijn beschikbaar:"
     Ukrainian  -> "Доступні наступні мови:"
@@ -601,6 +641,7 @@
     Vietnamese -> "Ngôn ngữ khả dụng:"
     Czech      -> "K dispozici jsou následující jazyky:"
     Korean     -> "다음 언어는 이용 가능합니다:"
+    Hindi      -> "निम्नलिखित भाषाएँ उपलब्ध हैं:"
     _          -> "The following languages are available:"
 
 ----------------------------
@@ -621,7 +662,7 @@
     Russian    -> "Доступно обновление Aura. Обновить сперва её?"
     Italian    -> "È disponibile un nuovo aggiornamento per Aura. Eseguirlo subito?"
     Indonesia  -> "Pemutakhiran aura tersedia. Mutakhirkan aura dulu?"
-    Chinese    -> "Aura 可以升级。先升级 aura？"
+    Chinese    -> "Aura 有新版本可用。要先更新吗？"
     Swedish    -> "Det finns en uppdatering tillgänglig till Aura. Vill du uppdatera Aura först?"
     Esperanto  -> "Ĝisdatigo de Aura estas disponebla. Ĉu ĝisdatigas ĝin?"
     Dutch      -> "Er is een update van Aura beschikbaar. Wilt u Aura nu bijwerken?"
@@ -630,6 +671,7 @@
     Vietnamese -> "Đã có cập nhật cho Aura. Cập nhật?"
     Czech      -> "K dispozici aktualizace Aury. Nejprve ji aktualizovat?"
     Korean     -> "Aura의 최신버전이 있습니다. 업데이트를 하시겠습니까?"
+    Hindi      -> "Aura अपडेट उपलब्ध है। पहले इसे अपडेट करें?"
     _          -> "Aura update available. Update it first?"
 
 install_2 :: Language -> Doc AnsiStyle
@@ -648,7 +690,7 @@
     Serbian    -> "Ниједан исправан пакет није специфициран."
     Norwegian  -> "Ingen gyldige pakker er valgte."
     Indonesia  -> "Tidak ada paket valid yang dispesifikkan."
-    Chinese    -> "没有指定有效的包。"
+    Chinese    -> "未指定有效的包。"
     Esperanto  -> "Ne validajn pakaĵojn specifis"
     Dutch      -> "Er zijn geen geldige pakketten opgegeven."
     Ukrainian  -> "Валідні пакунки не вказані."
@@ -656,6 +698,7 @@
     Vietnamese -> "Tên của gói được yêu cầu không đúng."
     Czech      -> "Nejsou zadány žádné platné balíčky."
     Korean     -> "유효한 패키지가 지정되지 않았습니다."
+    Hindi      -> "कोई वैध पैकेज निर्दिष्ट नहीं है।"
     _          -> "No valid packages specified."
 
 install_3 :: Language -> Doc AnsiStyle
@@ -683,6 +726,7 @@
     Vietnamese -> "Tiếp tục?"
     Czech      -> "Pokračovat?"
     Korean     -> "계속하시겠습니까?"
+    Hindi      -> "जारी रखें?"
     _          -> "Continue?"
 
 install_4 :: Language -> Doc AnsiStyle
@@ -701,7 +745,7 @@
     Serbian    -> "Инсталација је ручно прекинута."
     Norwegian  -> "Installasjonen ble avbrutt manuelt."
     Indonesia  -> "Instalasi dibatalkan secara paksa."
-    Chinese    -> "手动安装已中止。"
+    Chinese    -> "安装被手动中止。"
     Esperanto  -> "Instalon ĉesigi permane"
     Dutch      -> "De installatie is handmatig afgebroken."
     Ukrainian  -> "Встановлення скасовано користувачем."
@@ -709,6 +753,7 @@
     Vietnamese -> "Quá trình cài đặt được hủy."
     Czech      -> "Instalace byla ručně přerušena."
     Korean     -> "설치가 중지되었습니다."
+    Hindi      -> "इंस्टॉलेशन मैन्युअल रूप से निरस्त किया गया।"
     _          -> "Installation manually aborted."
 
 install_5 :: Language -> Doc AnsiStyle
@@ -735,6 +780,7 @@
     Vietnamese -> "Xác định các gói phụ thuộc..."
     Czech      -> "Určování závislostí..."
     Korean     -> "종속성 확인 중..."
+    Hindi      -> "निर्भरता का निर्धारण..."
     _          -> "Determining dependencies..."
 
 -- 2014 December  7 @ 14:45 - NEEDS TRANSLATIONS
@@ -747,7 +793,7 @@
     Portuguese -> p <> " está marcado como Ignorado. Deseja instalar mesmo assim?"
     Russian    -> p <> " отмечен как игнорируемый. Всё равно установить?"
     Italian    -> p <> " è marcato come pacchetto ignorato. Installarlo comunque?"
-    Chinese    -> p <> " 已被标记为忽略。仍然安装？"
+    Chinese    -> p <> " 已被标记为忽略。仍要安装吗？"
     Swedish    -> p <> " är markerad som ignorerad. Vill du installera ändå?"
     Esperanto  -> p <> " estas markita kiel malatenta. Ĉu instali?"
     Dutch      -> p <> " is gemarkeerd als genegeerd. Wilt u het pakket toch installeren?"
@@ -755,6 +801,7 @@
     Vietnamese -> p <> " được đánh dấu là Bỏ qua. Vẫn cài đặt nó?"
     Czech      -> p <> " je označeno jako ignorováno. Přesto nainstalovat?"
     Korean     -> p <> "은(는) 무시됨으로 표시됩니다. 설치를 하시겠습니까?"
+    Hindi      -> p <> " को उपेक्षित के रूप में चिह्नित किया गया है। फिर भी इंस्टॉल करें?"
     _          -> p <> " is marked as Ignored. Install anyway?"
 
 -- NEEDS UPDATE TO REFLECT CHANGED ENGLISH
@@ -782,6 +829,7 @@
     Vietnamese -> "Các gói sau không thuộc AUR:"
     Czech      -> "Následující nejsou balíčky AUR:"
     Korean     -> "AUR 패키지가 아닙니다:"
+    Hindi      -> "निम्नलिखित AUR पैकेज नहीं हैं:"
     _          -> "The following are not AUR packages:"
 
 -- NEEDS TRANSLATION
@@ -804,6 +852,7 @@
     Vietnamese -> "Các gói sau đã sẵn sàng cài đặt:"
     Czech      -> "Následující balíčky jsou již nainstalovány:"
     Korean     -> "아래 패키지는 이미 설치되어 있습니다:"
+    Hindi      -> "निम्नलिखित पैकेज पहले से ही इंस्टॉल हैं:"
     _          -> "The following packages are already installed:"
 
 reportPkgsToInstall_1 :: Language -> Doc AnsiStyle
@@ -830,6 +879,7 @@
     Vietnamese -> "Các repo phụ thuộc:"
     Czech      -> "Závislosti úložiště:"
     Korean     -> "리포지토리 종속성:"
+    Hindi      -> "रिपोजिटरी निर्भरताएं:"
     _          -> "Repository dependencies:"
 
 -- NEEDS AN UPDATE
@@ -857,6 +907,7 @@
     Vietnamese -> "Gói AUR:"
     Czech      -> "Balíčky AUR:"
     Korean     -> "AUR 패키지:"
+    Hindi      -> "AUR पैकाग्रेस:"
     _          -> "AUR Packages:"
 
 reportPkgsToInstall_3 :: Language -> Doc AnsiStyle
@@ -881,6 +932,8 @@
     Vietnamese -> "Gói phụ thuộc của AUR:"
     Czech      -> "Závislosti AUR:"
     Korean     -> "AUR 종속성:"
+    Hindi      -> "AUR निर्भरताएं:"
+    Chinese    -> "AUR 依赖："
     _          -> "AUR dependencies:"
 
 -- NEEDS TRANSLATION
@@ -899,7 +952,7 @@
     Serbian    -> p <> " још нема похрањен PKGBUILD."
     Norwegian  -> p <> " har ingen PKGBUILD ennå."
     Indonesia  -> p <> " tidak mempunyai PKGBUILD yang tersimpan untuk saat ini."
-    Chinese    -> p <> " 还没有保存的 PKGBUILD。"
+    Chinese    -> p <> " 的 PKGBUILD 尚未保存。"
     Swedish    -> p <> " har ännu ingen PKGBUILD."
     Esperanto  -> p <> " ne havas PKGBUILD jam."
     Dutch      -> p <> " heeft nog geen opgeslagen PKGBUILD."
@@ -908,6 +961,7 @@
     Vietnamese -> p <> " không có sẵn PKGBUILD."
     Czech      -> p <> " ještě nemá uložený PKGBUILD."
     Korean     -> p <> "의 PKGBUILD는 저장되지 않았습니다."
+    Hindi      -> p <> " में अभी तक कोई PKGBUILD संग्रहीत नहीं है."
     _          -> p <> " has no stored PKGBUILD yet."
 
 -- NEEDS TRANSLATION
@@ -935,6 +989,7 @@
     Vietnamese -> "Thay đổi trong PKGBUILD của " <> p <> ":"
     Czech      -> "Změny PKGBUILD v " <> p <> ":"
     Korean     -> p <> "의 PKGBUILD 변경 사항:"
+    Hindi      -> p <> "PKGBUILD परिवर्तन:"
     _          -> p <> " PKGBUILD changes:"
 
 -- NEEDS TRANSLATION
@@ -962,6 +1017,7 @@
     Vietnamese -> "Cập nhật các gói AUR:"
     Czech      -> "Balíčky AUR k aktualizaci:"
     Korean     -> "업그레이드할 AUR 패키지:"
+    Hindi      -> "अपग्रेड करने के लिए AUR पैकेज:"
     _          -> "AUR Packages to upgrade:"
 
 -- NEEDS UPDATING
@@ -981,7 +1037,7 @@
     Serbian    -> "Следећи пакети нису ни инсталирани, те се не могу вратити на старију верзију:"
     Norwegian  -> "Følgende pakker har ingen versjoner i cache, og kan derfor ikke bli nedgradert:"
     Indonesia  -> "Berikut ini tidak mempunyai versi pada cache, sehingga tidak akan diturunkan:"
-    Chinese    -> "以下包在缓存中没有版本，所以无法被降级："
+    Chinese    -> "以下包在缓存中没有版本，无法降级："
     Esperanto  -> "La sekvaj pakaĵoj havas ne kaŝmemorigitajn versiojn, do ĝi ne povas malpromociigi:"
     Dutch      -> "De volgende pakketten zijn niet gecachet en kunnen daarom niet worden afgewaardeerd."
     Ukrainian  -> "Наступних пакунків немає в кеші. Отже, вони не можуть відкотитися до старої версії:"
@@ -989,6 +1045,7 @@
     Vietnamese -> "Những gói sau không có bản nào trong cache, vì vậy không thể hạ cấp:"
     Czech      -> "Následující nemají žádné verze v mezipaměti, a proto je nelze downgradovat:"
     Korean     -> "이 패키지는 캐시에 저장된 다른 버전이 없으므로 다운그레이드를 할 수 없습니다."
+    Hindi      -> "निम्नलिखित का कैश में कोई संस्करण नहीं है, और इसलिए इसे डाउनग्रेड नहीं किया जा सकता:"
     _          -> "The following have no versions in the cache, and thus can’t be downgraded:"
 
 reportBadDowngradePkgs_2 :: PkgName -> Language -> Doc AnsiStyle
@@ -1002,6 +1059,8 @@
   Vietnamese -> pretty p <+> "không có bản nào trong cache."
   Czech      -> pretty p <+> "nemá žádnou verzi v mezipaměti."
   Korean     -> pretty p <+> "의 캐시에는 저장된 다른 버전이 없습니다."
+  Hindi      -> pretty p <+> "का कैश में कोई संस्करण नहीं है."
+  Chinese    -> pretty p <+> "在缓存中没有版本。"
   _          -> pretty p <+> "has no version in the cache."
 
 upgradeAURPkgs_1 :: Language -> Doc AnsiStyle
@@ -1028,6 +1087,7 @@
     Vietnamese -> "Cập nhật thông tin của gói..."
     Czech      -> "Načítání informací o balíčku..."
     Korean     -> "패키지 정보 가져오는 중..."
+    Hindi      -> "पैकेज की जानकारी प्राप्त की जा रही है..."
     _          -> "Fetching package information..."
 
 upgradeAURPkgs_2 :: Language -> Doc AnsiStyle
@@ -1054,6 +1114,7 @@
     Vietnamese -> "So sánh phiên bản của gói..."
     Czech      -> "Porovnání verzí balíčků..."
     Korean     -> "패키지 버전 비교 중..."
+    Hindi      -> "पैकेज संस्करणों की तुलना करना..."
     _          -> "Comparing package versions..."
 
 upgradeAURPkgs_3 :: Language -> Doc AnsiStyle
@@ -1080,6 +1141,7 @@
     Vietnamese -> "Không có cập nhật cho các gói AUR."
     Czech      -> "Není nutné žádné aktualizace balíčku AUR."
     Korean     -> "업그레이드가 필요하지 않습니다."
+    Hindi      -> "कोई AUR पैकेज अपग्रेड आवश्यक नहीं है।"
     _          -> "No AUR package upgrades necessary."
 
 removeMakeDepsAfter_1 :: Language -> Doc AnsiStyle
@@ -1106,6 +1168,7 @@
     Vietnamese -> "Loại bỏ các gói phụ thuộc khi make không cần thiết..."
     Czech      -> "Odstranění nepotřebných make závislostí..."
     Korean     -> "필요없는 make 의존성 제거 중..."
+    Hindi      -> "अनावश्यक निर्भरताएँ हटाया जा रहा है..."
     _          -> "Removing unneeded make dependencies..."
 
 ----------------------------
@@ -1127,7 +1190,7 @@
     French     -> s <> " états des paquets vont être conservés. Supprimer le reste ?"
     Russian    -> s <> pluralRussian " состояние пакетов будет оставлено." " состояния пакетов будут оставлены." " состояний пакетов будет оставлено." n <> " Удалить оставшиеся?"
     Indonesia  -> s <> " paket akan tetap sama. Hapus yang lainnya?"
-    Chinese    -> s <> " 个包的状态将会保留。删除其它的？"
+    Chinese    -> "保留" <> s <> " 个包的状态记录，并删除其它的？"
     Swedish    -> s <> " paket kommer att bevaras. Ta bort resten?"
     Esperanto  -> s <> " statoj de pakaĵoj teniĝas. Ĉu forigi la ceteron?"
     Dutch      -> s <> " pakketstatussen worden behouden. Wilt u de rest verwijderen?"
@@ -1136,6 +1199,7 @@
     Vietnamese -> "Trạng thái của gói " <> s <> " sẽ được lưu lại. Loại bỏ phần còn lại?"
     Czech      -> s <> " stavy balíčků budou zachovány. Odstranit zbytek?"
     Korean     -> s <> " 패키지는 유지됩니다. 나머지를 제거하시겠습니까?"
+    Hindi      -> s <> " पैकेज स्थितियों को रखा जाएगा। बाकी हटा दें?"
     _          -> s <> " package states will be kept. Remove the rest?"
 
 -- NEEDS TRANSLATION
@@ -1154,7 +1218,7 @@
     French     -> "Aucun état des paquets n'a été supprimé."
     Russian    -> "Состояния пакетов отались нетронутыми."
     Indonesia  -> "Tidak ada paket yang dihapus."
-    Chinese    -> "没有删除任何包。"
+    Chinese    -> "未删除任何包的状态记录。"
     Swedish    -> "Inga paket togs bort."
     Esperanto  -> "Ne statojn de pakaĵoj forigis."
     Dutch      -> "Er zijn geen pakketstatussen verwijderd."
@@ -1163,24 +1227,27 @@
     Vietnamese -> "Không có trạng thái gói nào được lưu."
     Czech      -> "Nebyly odstraněny žádné stavy balíčku."
     Korean     -> "아무 패키지도 삭제되지 않았습니다."
+    Hindi      -> "कोई पैकेज स्थिति हटाई नहीं गई थी।"
     _          -> "No package states were removed."
 
 cleanStates_4 :: Int -> Language -> Doc AnsiStyle
 cleanStates_4 n = \case
-  Japanese  -> "現在のパッケージ状態記録：" <+> pretty n <+> "個。"
-  Arabic    -> ".محفوظة " <+> pretty n <+> " لديك حاليا حالات حزمة"
-  Polish    -> "Chwilowo posiadasz" <+> pretty n <+> "zapisanych stanów pakietów."
-  Spanish   -> "Actualmente tiene " <+> pretty n <+> "estados de paquetes guardados."
-  Russian   -> "У вас сейчас " <+> pretty n <+> pluralRussian " сохраненное состояние пакета" " сохраненных состояний пакета" " сохраненных состояний пакетов." n
-  Italian   -> "Al momento ci sono" <+> pretty n <+> "stati di pacchetti salvati."
-  Esperanto -> "Vi havas " <+> pretty n <+> " konservajn statojn de pakaĵoj."
-  Dutch     -> "U heeft momenteel" <+> pretty n <+> "opgeslagen pakketstatussen."
-  Ukrainian -> "Зараз ви маєте " <+> pretty n <+> " збережених станів пакунків."
-  Romanian  -> "Momentan aveți " <+> pretty n <+> " stări de pachet salvate."
+  Japanese   -> "現在のパッケージ状態記録：" <+> pretty n <+> "個。"
+  Arabic     -> ".محفوظة " <+> pretty n <+> " لديك حاليا حالات حزمة"
+  Polish     -> "Chwilowo posiadasz" <+> pretty n <+> "zapisanych stanów pakietów."
+  Spanish    -> "Actualmente tiene " <+> pretty n <+> "estados de paquetes guardados."
+  Russian    -> "У вас сейчас " <+> pretty n <+> pluralRussian " сохраненное состояние пакета" " сохраненных состояний пакета" " сохраненных состояний пакетов." n
+  Italian    -> "Al momento ci sono" <+> pretty n <+> "stati di pacchetti salvati."
+  Esperanto  -> "Vi havas " <+> pretty n <+> " konservajn statojn de pakaĵoj."
+  Dutch      -> "U heeft momenteel" <+> pretty n <+> "opgeslagen pakketstatussen."
+  Ukrainian  -> "Зараз ви маєте " <+> pretty n <+> " збережених станів пакунків."
+  Romanian   -> "Momentan aveți " <+> pretty n <+> " stări de pachet salvate."
   Vietnamese -> "Bạn hiện đã lưu " <+> pretty n <+> " trạng thái gói."
-  Czech     -> "V současné době máte " <+> pretty n <+> " uložených stavů balíčků."
-  Korean    -> "현재" <+> pretty n <+> "개의 패키지 상태가 저장되어 있습니다."
-  _         -> "You currently have " <+> pretty n <+> " saved package states."
+  Czech      -> "V současné době máte " <+> pretty n <+> " uložených stavů balíčků."
+  Korean     -> "현재" <+> pretty n <+> "개의 패키지 상태가 저장되어 있습니다."
+  Hindi      -> "वर्तमान में आपके पास " <+> pretty n <+> " सहेजी गई पैकेज स्थितियाँ हैं।"
+  Chinese    -> "目前已保存 " <+> pretty n <+> " 个包的状态记录。"
+  _          -> "You currently have " <+> pretty n <+> " saved package states."
 
 cleanStates_5 :: Text -> Language -> Doc AnsiStyle
 cleanStates_5 t = \case
@@ -1197,21 +1264,25 @@
   Vietnamese -> "Lần lưu gần nhất:" <+> pretty t
   Czech      -> "Naposledy uložené:" <+> pretty t
   Korean     -> "최근에 저장된 패키지:" <+> pretty t
+  Hindi      -> "हाल ही में सहेजा गया:" <+> pretty t
+  Chinese    -> "最近一次保存：" <+> pretty t
   _          -> "Most recently saved:" <+> pretty t
 
 cleanStates_6 :: Int -> Language -> Doc AnsiStyle
 cleanStates_6 n = \case
-  Polish    -> pretty n <+> "jest przypiętych i nie zostanie usuniętych."
-  Arabic    -> ".اذا كانو مثبتين ولا يمكن ازالتهم " <+> pretty n
-  Spanish   -> pretty n <+> "de estos están anclados y no se eliminarán."
-  Italian   -> pretty n <+> "di questi sono stati fissati, perciò non saranno rimossi."
-  Dutch     -> pretty n <+> "hiervan zijn vastgezet en worden daarom niet verwijderd."
-  Ukrainian -> pretty n <+> "були закріплені та залишуться недоторканими."
-  Romanian  -> pretty n <+> "dintre astea sunt fixate, și nu vor fi șterse."
+  Polish     -> pretty n <+> "jest przypiętych i nie zostanie usuniętych."
+  Arabic     -> ".اذا كانو مثبتين ولا يمكن ازالتهم " <+> pretty n
+  Spanish    -> pretty n <+> "de estos están anclados y no se eliminarán."
+  Italian    -> pretty n <+> "di questi sono stati fissati, perciò non saranno rimossi."
+  Dutch      -> pretty n <+> "hiervan zijn vastgezet en worden daarom niet verwijderd."
+  Ukrainian  -> pretty n <+> "були закріплені та залишуться недоторканими."
+  Romanian   -> pretty n <+> "dintre astea sunt fixate, și nu vor fi șterse."
   Vietnamese -> pretty n <+> "trong số chúng đã được ghim, và sẽ không bị loại bỏ."
-  Czech     -> pretty n <+> "z nich jsou připnuté a nebudou odstraněny."
-  Korean    -> pretty n <+> "은(는) 고정되어 삭제되지 않습니다."
-  _         -> pretty n <+> "of these are pinned, and won't be removed."
+  Czech      -> pretty n <+> "z nich jsou připnuté a nebudou odstraněny."
+  Korean     -> pretty n <+> "은(는) 고정되어 삭제되지 않습니다."
+  Hindi      -> "इनमें से" <+> pretty n <+> "को पिन कर दिया गया है, और हटाया नहीं जाएगा।"
+  Chinese    -> "其中 " <+> pretty n <+> " 个已被固定，不会被删除。"
+  _          -> pretty n <+> "of these are pinned, and won't be removed."
 
 readState_1 :: Language -> Doc AnsiStyle
 readState_1 = \case
@@ -1228,6 +1299,8 @@
     Vietnamese -> "Thất bại trong việc lấy dữ liệu từ tệp. Đó có đúng là tệp JSON?"
     Czech      -> "Tento stavový soubor se nepodařilo analyzovat. Je to legální JSON?"
     Korean     -> "상태 파일을 분석할 수 없습니다. 올바른 JSON 입니까?"
+    Hindi      -> "वह स्थिति फ़ाइल पार्स करने में विफल रही. क्या यह वैध JSON है?"
+    Chinese    -> "无法解析状态文件。这是否是一个合法的 JSON 文件？"
     _          -> "That state file failed to parse. Is it legal JSON?"
 
 ----------------------------
@@ -1249,7 +1322,7 @@
     Serbian    -> "Коју верзију " <> p <> "-а желите?"
     Norwegian  -> "Hvilken versjon av " <> p <> " vil du ha?"
     Indonesia  -> "Versi dari paket " <> p <> " mana yang anda inginkan?"
-    Chinese    -> "你希望安装 " <> p <> " 的哪个版本？"
+    Chinese    -> "要安装哪个版本的" <> p <> "？"
     Esperanto  -> "Kiu versio de " <> p <> " vi volas?"
     Dutch      -> "Welke versie van " <> p <> " wilt u?"
     Ukrainian  -> "Яку версію пакунку " <> p <> " ви бажаєте?"
@@ -1257,6 +1330,7 @@
     Vietnamese -> "Bạn muốn sử dụng phiên bản nào của " <> p <> "?"
     Czech      -> "Jakou verzi " <> p <> " chcete?"
     Korean     -> "어느 " <> p <> " 버전을 설치하시겠습니까?"
+    Hindi      -> "आपको " <> p <> " का कौन सा संस्करण चाहिए?"
     _          -> "What version of " <> p <> " do you want?"
 
 backupCache_3 :: Language -> Doc AnsiStyle
@@ -1283,6 +1357,7 @@
     Vietnamese -> "Đường dẫn sao lưu không tồn tại."
     Czech      -> "Umístění zálohy neexistuje."
     Korean     -> "백업 위치를 찾을 수 없습니다."
+    Hindi      -> "बैकअप स्थान मौजूद नहीं है।"
     _          -> "The backup location does not exist."
 
 backupCache_4 :: FilePath -> Language -> Doc AnsiStyle
@@ -1309,6 +1384,7 @@
     Vietnamese -> "Sao lưu cache vào " <> dir
     Czech      -> "Zálohování mezipaměti do " <> dir
     Korean     -> "캐시를 백업하는 중 " <> dir
+    Hindi      -> "कैश का बैकअप " <> dir <> " में लिया जा रहा है।"
     _          -> "Backing up cache to " <> dir
 
 backupCache_5 :: Int -> Language -> Doc AnsiStyle
@@ -1335,6 +1411,7 @@
     Vietnamese -> "Các tệp của gói sẽ được sao lưu: " <> n
     Czech      -> "Soubory k zálohování: " <> n
     Korean     -> "백업할 패키지 파일: " <> n
+    Hindi      -> "बैकअप के लिए फ़ाइलों को पैकेज करें:" <> n
     _          -> "Package files to backup: " <> n
 
 backupCache_6 :: Language -> Doc AnsiStyle
@@ -1361,6 +1438,7 @@
     Vietnamese -> "Tiến hành sao lưu?"
     Czech      -> "Pokračovat v zálohování."
     Korean     -> "백업 하시겠습니까?"
+    Hindi      -> "क्या आप बैकअप जारी रखना चाहते हैं?"
     _          -> "Proceed with backup?"
 
 backupCache_7 :: Language -> Doc AnsiStyle
@@ -1379,7 +1457,7 @@
     Serbian    -> "Бекаповање је ручно прекинуто."
     Norwegian  -> "Backup ble avbrutt manuelt."
     Indonesia  -> "Proses `backup` dibatalkan secara paksa."
-    Chinese    -> "手动备份已中止。"
+    Chinese    -> "备份被手动中止。"
     Esperanto  -> "Enarkivigadon ĉesigis permane."
     Dutch      -> "Het back-upproces is handmatig afgebroken."
     Ukrainian  -> "Створення резервної копії перервано користувачем."
@@ -1387,6 +1465,7 @@
     Vietnamese -> "Quá trình sao lưu được hủy."
     Czech      -> "Zálohování ručně přerušeno."
     Korean     -> "백업이 중지되었습니다."
+    Hindi      -> "बैकअप मैन्युअल रूप से निरस्त किया गया।"
     _          -> "Backup manually aborted."
 
 backupCache_8 :: Language -> Doc AnsiStyle
@@ -1413,6 +1492,7 @@
     Vietnamese -> "Đang sao lưu. Có thể sẽ mất vài phút..."
     Czech      -> "Zálohování. Může to trvat několik minut..."
     Korean     -> "백업 중입니다. 몇 분 정도 걸릴 수 있습니다..."
+    Hindi      -> "बैकअप लिया जा रहा है। इसमें कुछ मिनट लग सकते हैं..."
     _          -> "Backing up. This may take a few minutes..."
 
 copyAndNotify_1 :: Int -> Language -> Doc AnsiStyle
@@ -1440,6 +1520,7 @@
     Vietnamese -> "Sao chép #[" <> n <> "]"
     Czech      -> "Kopírování #[" <> n <> "]"
     Korean     -> "복사중 #[" <> n <> "]"
+    Hindi      -> "कॉपी किया जा रहा है #[" <> n <> "]"
     _          -> "Copying #[" <> n <> "]"
 
 cleanCache_2 :: Language -> Doc AnsiStyle
@@ -1458,7 +1539,7 @@
     Serbian    -> "Ово ће избрисати ЦЕО кеш пакета."
     Norwegian  -> "Dette vil slette HELE pakke-cachen."
     Indonesia  -> "Akan menghapus SEMUA `cache` paket"
-    Chinese    -> "这将会删除全部的包缓存。"
+    Chinese    -> "这将会删除所有包缓存。"
     Esperanto  -> "Ĉi tiu forigos la TUTAN kaŝmemoron de pakaĵoj."
     Dutch      -> "Hiermee wordt de GEHELE pakketcache gewist."
     Ukrainian  -> "Ця операція ПОВНІСТЮ видалить кеш пакунків."
@@ -1466,6 +1547,7 @@
     Vietnamese -> "Điều này sẽ xóa TOÀN BỘ cache của gói."
     Czech      -> "Tím smažete CELOU mezipaměť balíčku."
     Korean     -> "모든 패키지 캐시가 삭제됩니다."
+    Hindi      -> "यह संपूर्ण पैकेज कैश हटा देगा।"
     _          -> "This will delete the ENTIRE package cache."
 
 cleanCache_3 :: Word -> Language -> Doc AnsiStyle
@@ -1492,6 +1574,7 @@
     Vietnamese -> "Sẽ giữ lại " <> s <> " tệp của gói."
     Czech      -> s <> " každého souboru balíčku bude zachován."
     Korean     -> "각 패키지 파일에 대해 " <> s <> "개의 파일이 유지되어야 합니다."
+    Hindi      -> s <> "प्रत्येक पैकेज फ़ाइल को रखा जाएगा।"
     _          -> s <> " of each package file will be kept."
 
 cleanCache_4 :: Language -> Doc AnsiStyle
@@ -1510,7 +1593,7 @@
     Serbian    -> "Остатак ће бити избрисан. Да ли је то у реду?"
     Norwegian  -> "Resten vil bli slettet. Er det OK?"
     Indonesia  -> "Selainnya akan dihapus. Ikhlas kan?"
-    Chinese    -> "其余的将会被删除。确定？"
+    Chinese    -> "其余的将被删除。确定吗？"
     Esperanto  -> "La cetero foriĝos. Ĉu bone?"
     Dutch      -> "De rest wordt gewist. Weet u het zeker?"
     Ukrainian  -> "Все інше буде видалено. Гаразд?"
@@ -1518,6 +1601,7 @@
     Vietnamese -> "Xóa bỏ phần còn lại. Ok?"
     Czech      -> "Zbytek bude smazán. Ok?"
     Korean     -> "나머지는 모두 삭제됩니다. 계속하시겠습니까?"
+    Hindi      -> "बाकी हटा दिया जाएगा। ठीक है?"
     _          -> "The rest will be deleted. Okay?"
 
 cleanCache_5 :: Language -> Doc AnsiStyle
@@ -1536,7 +1620,7 @@
     Serbian    -> "Чишћење кеша је ручно прекинуто."
     Norwegian  -> "Cache-rensing ble avbrutt manuelt."
     Indonesia  -> "Pembersihan `cache` dibatalkan secara paksa."
-    Chinese    -> "手动清理缓存已中止。"
+    Chinese    -> "缓存清理被手动中止。"
     Esperanto  -> "Puriganta Kaŝmemoro ĉesis permane."
     Dutch      -> "De cache-opruiming is handmatig afgebroken."
     Ukrainian  -> "Очищення кешу було перервано користувачем."
@@ -1544,6 +1628,7 @@
     Vietnamese -> "Đã hủy xóa cache."
     Czech      -> "Čištění mezipaměti bylo ručně přerušeno"
     Korean     -> "캐시 정리가 중지되었습니다."
+    Hindi      -> "कैश की सफ़ाई मैन्युअल रूप से निरस्त कर दी गई।"
     _          -> "Cache cleaning manually aborted."
 
 cleanCache_6 :: Language -> Doc AnsiStyle
@@ -1570,6 +1655,7 @@
     Vietnamese -> "Xóa cache..."
     Czech      -> "Čištění mezipaměti balíčků"
     Korean     -> "패키지 캐시 정리 중..."
+    Hindi      -> "पैकेज कैश साफ़ किया जा रहा है..."
     _          -> "Cleaning package cache..."
 
 cleanCache_7 :: Word -> Word -> Language -> Doc AnsiStyle
@@ -1581,7 +1667,9 @@
     Romanian   -> "Cache-ul conține " <> ps <> " pachete, consumând " <> bytes <> " MB."
     Vietnamese -> "Có " <> ps <> " gói trong cache, chiếm " <> bytes <> " megabytes."
     Korean     -> ps <> "개의 패키지는 " <> bytes <> "MB 사용 중입니다."
+    Hindi      -> "कैश में " <> ps <> " पैकेज हैं, जो " <> bytes <> " मेगाबाइट का उपभोग करते हैं।"
     Dutch      -> "De cache bevat " <> ps <> " pakketten, met een totale omvang van " <> bytes <> " megabytes."
+    Chinese    -> "缓存中有 " <> ps <> " 个包，共计 " <> bytes <> " MB。"
     _          -> "The cache contains " <> ps <> " packages, consuming " <> bytes <> " megabytes."
 
 cleanCache_8 :: Word -> Language -> Doc AnsiStyle
@@ -1594,7 +1682,9 @@
     Vietnamese -> "Giải phóng " <> bytes <> "megabytes."
     Czech      -> "Uvolněno " <> bytes <> " MB."
     Korean     -> bytes <> " MB 정리되었습니다."
+    Hindi      -> bytes <> "मेगाबाइट मुक्त हो गए।"
     Dutch      -> bytes <> "megabytes vrijgemaakt."
+    Chinese    -> "已释放 " <> bytes <> " MB。"
     _          -> bytes <> " megabytes freed."
 
 cleanCache_9 :: Word -> Language -> Doc AnsiStyle
@@ -1603,7 +1693,9 @@
     Vietnamese -> "Sẽ giữ lại " <> w <> " phiên bản của các gói đã cài đặt."
     Czech      -> w <> " verze každého nainstalovaného balíčku budou zachovány."
     Korean     -> "각각의 설치된 패키지의 " <> w <> "은(는) 유지됩니다."
+    Hindi      -> w <> "प्रत्येक स्थापित पैकेज के संस्करण रखे जाएंगे।"
     Dutch      -> "Er worden " <> w <> "versies van elke geïnstalleerd pakket bewaard."
+    Chinese    -> "每个包将会保存 " <> w <> " 个版本。"
     _          -> w <> " versions of each installed package will be kept."
 
 -- NEEDS TRANSLATION
@@ -1630,6 +1722,7 @@
     Vietnamese -> "Xác định các tệp của gói không cần thiết..."
     Czech      -> "Zjišťování nepotřebných souborů balíčků..."
     Korean     -> "필요 없는 패키지 파일 확인 중..."
+    Hindi      -> "अनावश्यक पैकेज फ़ाइलों का निर्धारण..."
     _          -> "Determining unneeded package files..."
 
 -- NEEDS TRANSLATION
@@ -1656,6 +1749,7 @@
     Vietnamese -> "Tìm thấy " <> s <> " gói không cần thiết. Xóa bỏ?"
     Czech      -> "Nepotřebné soubory balíčků: " <> s <> ". Vymazat?"
     Korean     -> s <> "는 필요 없는 패키지 파일입니다. 삭제하시겠습니까?"
+    Hindi      -> s <> "अनावश्यक पैकेज फ़ाइलें मिलीं। हटाएं?"
     _          -> s <> " unneeded package files found. Delete?"
 
 ----------------------------
@@ -1691,6 +1785,7 @@
     Vietnamese -> "Nội dung sau không có trong tệp log:"
     Czech      -> "Tyto se neobjevily v souboru log:"
     Korean     -> "로그 파일에 나타나지 않음:"
+    Hindi      -> "ये लॉग फ़ाइल में दिखाई नहीं दिए हैं:"
     _          -> "These have not appeared in the log file:"
 
 -------------------------------
@@ -1703,30 +1798,36 @@
   Vietnamese -> "Không tím thấy gói."
   Czech      -> "Nebyly nalezeny žádné balíčky."
   Korean     -> "패키지를 찾을 수 없습니다."
+  Hindi      -> "कोई पैकेज नहीं मिला।"
+  Chinese    -> "未找到软件包。"
   _          -> "No packages found."
 
 -- https://github.com/fosskers/aura/issues/498
 connectFailure_1 :: Language -> Doc AnsiStyle
 connectFailure_1 = \case
-  Polish    -> "Nie udało się nawiązać połączenia z AUR. Czy jesteś połączony z internetem?"
-  Arabic    -> "هل انت متصل بالانترنت؟ .AURفشل الاتصال بـ"
-  Spanish   -> "No se pudo contactar con el AUR. ¿Tienes conexión a internet?"
-  Italian   -> "Non è stato possibile contattare l'AUR. Il computer è connesso ad internet?"
-  Dutch     -> "Er kan geen verbinding worden gemaakt met de AUR. Bent u verbonden met het internet?"
-  Ukrainian -> "Не вдалося зв'язатись з AUR. У вас є підключення до інтернету?"
-  Romanian  -> "Nu s-a putut contacta AUR. Sunteți conectat pe Internet?"
+  Polish     -> "Nie udało się nawiązać połączenia z AUR. Czy jesteś połączony z internetem?"
+  Arabic     -> "هل انت متصل بالانترنت؟ .AURفشل الاتصال بـ"
+  Spanish    -> "No se pudo contactar con el AUR. ¿Tienes conexión a internet?"
+  Italian    -> "Non è stato possibile contattare l'AUR. Il computer è connesso ad internet?"
+  Dutch      -> "Er kan geen verbinding worden gemaakt met de AUR. Bent u verbonden met het internet?"
+  Ukrainian  -> "Не вдалося зв'язатись з AUR. У вас є підключення до інтернету?"
+  Romanian   -> "Nu s-a putut contacta AUR. Sunteți conectat pe Internet?"
   Vietnamese -> "Mất kết nối tới AUR. Bạn có kết nối mạng không?"
-  Czech     -> "Nepodařilo se kontaktovat AUR server. Máte připojení k internetu?"
-  Korean    -> "AUR에 접근하지 못했습니다. 인터넷 연결 상태를 확인하십시오."
-  _         -> "Failed to contact the AUR. Do you have an internet connection?"
+  Czech      -> "Nepodařilo se kontaktovat AUR server. Máte připojení k internetu?"
+  Korean     -> "AUR에 접근하지 못했습니다. 인터넷 연결 상태를 확인하십시오."
+  Hindi      -> "AUR से संपर्क करने में असफल। क्या आपके पास इंटरनेट कनेक्शन है?"
+  Chinese    -> "无法与 AUR 通信。请检查网络。"
+  _          -> "Failed to contact the AUR. Do you have an internet connection?"
 
 dependencyLookup_1 :: Text -> Language -> Doc AnsiStyle
 dependencyLookup_1 t = \case
-  Romanian  -> vsep ["A fost o problemă cu analiza recursivă de dependențe:", pretty t]
+  Romanian   -> vsep ["A fost o problemă cu analiza recursivă de dependențe:", pretty t]
   Vietnamese -> vsep ["Có lỗi trong quá trình tìm kiếm gói phụ thuộc đệ quy:", pretty t]
-  Czech     -> vsep ["Při rekurzivním vyhledávání závislostí došlo k problému:", pretty t]
-  Korean    -> vsep ["재귀 종속성 조회 중 문제가 발생했습니다:", pretty t]
-  _         -> vsep ["There was an issue during recursive dependency lookup:", pretty t]
+  Czech      -> vsep ["Při rekurzivním vyhledávání závislostí došlo k problému:", pretty t]
+  Korean     -> vsep ["재귀 종속성 조회 중 문제가 발생했습니다:", pretty t]
+  Hindi      -> vsep ["पुनरावर्ती निर्भरता लुकअप के दौरान एक समस्या थी:", pretty t]
+  Chinese    -> vsep ["在递归依赖查找中遇到了问题：", pretty t]
+  _          -> vsep ["There was an issue during recursive dependency lookup:", pretty t]
 
 miscAURFailure_1 :: Language -> Doc AnsiStyle
 miscAURFailure_1 = \case
@@ -1740,6 +1841,8 @@
   Vietnamese -> "Bất ngờ không thể kết nối tới AUR."
   Czech      -> "Kontaktování AUR se nezdařilo neznámým způsobem."
   Korean     -> "알 수 없는 문제로 AUR에 접근하지 못했습니다."
+  Hindi      -> "AUR से संपर्क किसी अज्ञात तरीके से विफल रहा।"
+  Chinese    -> "与 AUR 通信时遇到了未知的错误。"
   _          -> "Contacting the AUR failed in some unknown way."
 
 miscAURFailure_3 :: Language -> Doc AnsiStyle
@@ -1752,7 +1855,9 @@
   Vietnamese -> "Không thể giải mã tệp JSON lấy từ máy chủ AUR."
   Czech      -> "JSON vrácený ze serveru AUR nelze dekódovat."
   Korean     -> "AUR 서버에서 받은 JSON을 디코딩할 수 없습니다."
+  Hindi      -> "AUR सर्वर से लौटाया गया JSON डिकोड नहीं किया जा सका।"
   Dutch      -> "De AUR-server stuurde JSON terug die niet kan worden ontsleuteld."
+  Chinese    -> "无法解码 AUR 服务器返回的 JSON。网络连接是否被污染？"
   _          -> "The JSON returned from the AUR server could not be decoded."
 
 infoFields :: Language -> [Text]
@@ -1795,6 +1900,7 @@
     Vietnamese -> "Đã cũ!"
     Czech      -> "Zastaralý!"
     Korean     -> "최신 버전이 아님!"
+    Hindi      -> "पुराना हो चुका है!"
     _          -> "Out of Date!"
 
 outOfDateMsg Nothing = green . \case
@@ -1820,6 +1926,7 @@
     Vietnamese -> "Mới nhất"
     Czech      -> "Aktuální"
     Korean     -> "최신 버전"
+    Hindi      -> "अप टू डेट"
     _          -> "Up to Date"
 
 -- NEEDS TRANSLATION
@@ -1838,7 +1945,7 @@
     Russian    -> "Осиротевший!"
     Italian    -> "Orfano!"
     Indonesia  -> "Tak dipelihara!"
-    Chinese    -> "孤包！"
+    Chinese    -> "孤立包！"
     Swedish    -> "Föräldralös!"
     Esperanto  -> "Orfita!"
     Dutch      -> "Onteigend!"
@@ -1847,6 +1954,7 @@
     Vietnamese -> "Gói lẻ!"
     Czech      -> "Opuštěno!"
     Korean     -> "관리되지 않는 패키지입니다!"
+    Hindi      -> "अनाथ!"
     _          -> "Orphaned!"
 
 -----------------------
@@ -1877,6 +1985,7 @@
     Vietnamese -> "Đã lưu trạng thái gói."
     Czech      -> "Stav balíčku byl uložen."
     Korean     -> "패키지 상태가 저장되었습니다."
+    Hindi      -> "सहेजे गए पैकेज की स्थिति."
     _          -> "Saved package state."
 
 -- NEEDS TRANSLATION
@@ -1895,7 +2004,7 @@
     French     -> "Version antérieure requise non disponible pour :"
     Russian    -> "Запрошенные версии для отката не доступны для:"
     Indonesia  -> "Versi yang diturunkan tidak tersedia untuk: "
-    Chinese    -> "请求的降级版本对以下包不可用："
+    Chinese    -> "不存在给定降级版本的包："
     Swedish    -> "Den begärda nedgraderingen finns inte tillgänglig för:"
     Esperanto  -> "Petitajn malpromociajn versiojn ne estas disponebla de:"
     Dutch      -> "De verzochte afwaardeerversies zijn niet beschikbaar voor:"
@@ -1904,6 +2013,7 @@
     Vietnamese -> "Không thể hạ cấp cho:"
     Czech      -> "Požadované nižší verze nejsou k dispozici pro:"
     Korean     -> "요청한 다운그레이드 버전은 다음 패키지에 사용할 수 없습니다:"
+    Hindi      -> "अनुरोधित डाउनग्रेड संस्करण इसके लिए उपलब्ध नहीं है:"
     _          -> "Requested downgrade versions not available for:"
 
 restoreState_2 :: Language -> Doc AnsiStyle
@@ -1915,7 +2025,7 @@
     Portuguese -> "Nenhum estado disponível para ser recuperado. (Utilize -B para salvar o estado atual)"
     Russian    -> "Нет сохраненных состояний для восстановления. (Используйте -B для сохранения текущего состояния)"
     Italian    -> "Nessuno stato precedente a cui tornare. (Usa -B per salvare lo stato attuale)"
-    Chinese    -> "没有要恢复的已保存状态。（使用 -B 保存当前状态）"
+    Chinese    -> "包状态未有保存。（使用 -B 保存当前状态）"
     Swedish    -> "Inga sparade tillstånd att återhämta. (Använd -B för att spara det nuvarande tillståndet)"
     Esperanto  -> "Ne konservitaj statoj restaŭros. (Uzu -B konservi la aktualan staton)"
     Dutch      -> "Er zijn geen bewaarde statussen om te herstellen. (ken -B toe om de huidige status te bewaren)"
@@ -1924,6 +2034,7 @@
     Vietnamese -> "Không có trạng thái nào có thể lưu. (Dùng -B để lưu trạng thái hiện tại)"
     Czech      -> "Žádné uložené stavy k obnovení. (Pro uložení aktuálního stavu použijte -B)"
     Korean     -> "복원할 패키지 상태가 없습니다. (-B를 사용해 현재 상태를 저장)"
+    Hindi      -> "कोई भी सहेजी गई स्थिति पुनर्स्थापित नहीं की जाएगी। (वर्तमान स्थिति को सहेजने के लिए -B का उपयोग करें)"
     _          -> "No saved states to be restored. (Use -B to save the current state)"
 
 -- NEEDS TRANSLATION
@@ -1942,7 +2053,7 @@
     French     -> "Aucun paquet n'a besoin de changement."
     Russian    -> "Пакеты не нуждаются в изменениях."
     Indonesia  -> "Tidak ada paket yang diubah."
-    Chinese    -> "没有包需要改变。"
+    Chinese    -> "没有需要变更的包。"
     Swedish    -> "Inga paket behöver ändras."
     Esperanto  -> "Ne pakaĵoj devas ŝanĝiĝi."
     Dutch      -> "Er zijn geen pakketten die aangepast moeten worden."
@@ -1951,6 +2062,7 @@
     Vietnamese -> "Không có gói nào cần thay đổi."
     Czech      -> "Žádné balíčky není třeba měnit."
     Korean     -> "패키지를 변경할 필요가 없습니다."
+    Hindi      -> "किसी पैकेज को बदलने की आवश्यकता नहीं है।"
     _          -> "No packages need changing."
 
 --------------------------------------
@@ -1971,6 +2083,8 @@
     Vietnamese -> "Không thể xác định tài khoản người dùng nào để build."
     Czech      -> "Nelze určit, se kterým uživatelským účtem se má provezt build."
     Korean     -> "사용자가 컴파일할 것인지 확일할 수 없습니다."
+    Hindi      -> "यह निर्धारित नहीं कर सकता कि किस उपयोगकर्ता खाते से निर्माण किया जाए।"
+    Chinese    -> "无法确定用于构建的用户。"
     _          -> "Can't determine which user account to build with."
 
 ------------------------
@@ -1991,6 +2105,8 @@
     Vietnamese -> "Không thể lấy dữ liệu từ tệp pacman.conf của bạn."
     Czech      -> "Nelze analyzovat soubor pacman.conf."
     Korean     -> "pacman.conf 파일 분석에 실패했습니다."
+    Hindi      -> "आपकी pacman.conf फ़ाइल को पार्स करने में असमर्थ।"
+    Chinese    -> "pacman.conf 文件无法解析。"
     _          -> "Unable to parse your pacman.conf file."
 
 provides_1 :: PkgName -> Language -> Doc AnsiStyle
@@ -2005,6 +2121,8 @@
     Vietnamese -> pro <+> "là gói phụ thuộc, được cung cấp từ nhiều gói khác. Hãy chọn một:"
     Czech      -> pro <+> "je vyžadována jako závislost, kterou poskytuje několik balíčků. Prosím vyberte jeden:"
     Korean     -> pro <+> "는 종속성으로 필요하며 여러 패키지에서 제공됩니다. 다음 중 하나를 선택하십시오:"
+    Hindi      -> pro <+> "एक निर्भरता के रूप में आवश्यक है, जो कई पैकेजों द्वारा प्रदान की जाती है। कृपया एक का चयन करें:"
+    Chinese    -> "依赖项" <+> pro <+> "可由多个包提供。请选择："
     _          -> pro <+> "is required as a dependency, which is provided by multiple packages. Please select one:"
 
 ----------------------------------
@@ -2026,7 +2144,7 @@
     Serbian    -> "Желите ли да измените PKGBUILD за " <> p <> "?"
     Norwegian  -> "Vil du endre PKGBUILD for " <> p <> "?"
     Indonesia  -> "Apakah anda ingin menyunting PKGBUILD untuk paket " <> p <> "?"
-    Chinese    -> "你希望编辑 " <> p <> " 的 PKGBUILD 文件吗？"
+    Chinese    -> "要编辑 " <> p <> " 的 PKGBUILD 文件吗？"
     Esperanto  -> "Ĉu vi volas redakti la PKGBUILD de " <> p <> "?"
     Dutch      -> "Wilt u het PKGBUILD-bestand van " <> p <> " bewerken?"
     Ukrainian  -> "Бажаєте відредагувати PKGBUILD для пакунку " <> p <> "?"
@@ -2034,6 +2152,7 @@
     Vietnamese -> "Bạn có muốn chỉnh sửa PKGBUILD của " <> p <> "?"
     Czech      -> "Chcete upravit PKGBUILD z " <> p <> "?"
     Korean     -> p <> "의 PKGBUILD를 편집하시겠습니까?"
+    Hindi      -> "क्या आप " <> p <> " के PKGBUILD को संपादित करना चाहेंगे?"
     _          -> "Would you like to edit the PKGBUILD of " <> p <> "?"
 
 hotEdit_2 :: Language -> Doc AnsiStyle
@@ -2046,7 +2165,9 @@
   Vietnamese -> "Bạn có muốn chỉnh sửa tệp .install?"
   Czech      -> "Chcete upravit soubor .install?"
   Korean     -> ".install 파일을 수정하시겠습니까?"
+  Hindi      -> "क्या आप .install फ़ाइल को संपादित करना चाहेंगे?"
   Dutch      -> "Wilt u het .install-bestand bewerken?"
+  Chinese    -> "要编辑 .install 文件吗？"
   _          -> "Would you like to edit the .install file?"
 
 hotEdit_3 :: FilePath -> Language -> Doc AnsiStyle
@@ -2059,7 +2180,9 @@
   Vietnamese -> "Bạn có muốn chỉnh sửa " <> pretty fp <> "?"
   Czech      -> "Chcete upravit " <> pretty fp <> "?"
   Korean     -> pretty fp <> "을(를) 수정하시겠습니까?"
+  Hindi      -> "क्या आप " <> pretty fp <> " को संपादित करना चाहेंगे?"
   Dutch      -> "Wilt u " <> pretty fp <> "bewerken?"
+  Chinese    -> "要编辑 " <> pretty fp <> " 吗？"
   _          -> "Would you like to edit " <> pretty fp <> "?"
 
 ------------------------------
@@ -2067,73 +2190,83 @@
 ------------------------------
 security_1 :: PkgName -> Language -> Doc AnsiStyle
 security_1 (PkgName p) = \case
-  Polish    -> "PKGBUILD dla" <+> bt p <+> "był zbyt zawiły do odczytania - może zawierać złośliwy kod."
-  Arabic    -> ".كان معقدا جدا للتحليل - يمكن أن يكون تعتيم مشوش للشفرة" <+> bt p <+> "تبع PKGBUILDاﻟ"
-  Spanish   -> "El PKGBUILD de" <+> bt p <+> "era demasiado complejo de analizar - puede estar ofuscando código malicioso."
-  Italian   -> "Il PKGBUILD di" <+> bt p <+> "è troppo complesso per essere analizzato - è possibile che stia offuscando codice malevolo."
-  Dutch     -> "Het PKGBUILD-bestand van" <+> bt p <+> " was te complex om te verwerken. Het bestand bevat mogelijk verborgen schadelijke code."
-  Ukrainian -> "PKGBUILD пакунку" <+> bt p <+> "був надто складним для аналізу - він може містити замаскований шкідливий код."
-  Romanian  -> "PKGBUILD-ul pachetului" <+> bt p <+> "este prea complicat de analizat - ar putea sa acopere cod rău intenționat."
+  Polish     -> "PKGBUILD dla" <+> bt p <+> "był zbyt zawiły do odczytania - może zawierać złośliwy kod."
+  Arabic     -> ".كان معقدا جدا للتحليل - يمكن أن يكون تعتيم مشوش للشفرة" <+> bt p <+> "تبع PKGBUILDاﻟ"
+  Spanish    -> "El PKGBUILD de" <+> bt p <+> "era demasiado complejo de analizar - puede estar ofuscando código malicioso."
+  Italian    -> "Il PKGBUILD di" <+> bt p <+> "è troppo complesso per essere analizzato - è possibile che stia offuscando codice malevolo."
+  Dutch      -> "Het PKGBUILD-bestand van" <+> bt p <+> " was te complex om te verwerken. Het bestand bevat mogelijk verborgen schadelijke code."
+  Ukrainian  -> "PKGBUILD пакунку" <+> bt p <+> "був надто складним для аналізу - він може містити замаскований шкідливий код."
+  Romanian   -> "PKGBUILD-ul pachetului" <+> bt p <+> "este prea complicat de analizat - ar putea sa acopere cod rău intenționat."
   Vietnamese -> "PKGBUILD của" <+> bt p <+> "quá khó để đọc - nó có thể chứa đoạn mã nguy hiểm."
-  Czech     -> "PKGBUILD z" <+> bt p <+> "byl příliš složitý na analýzu - může obsahovat matoucí škodlivý kód."
-  Korean    -> "이 " <+> bt p <+> " PKGBUILD는 너무 복잡하여 분석할 수 없습니다 - 난독화된 코드일 수 있습니다."
-  _         -> "The PKGBUILD of" <+> bt p <+> "was too complex to parse - it may be obfuscating malicious code."
+  Czech      -> "PKGBUILD z" <+> bt p <+> "byl příliš složitý na analýzu - může obsahovat matoucí škodlivý kód."
+  Korean     -> "이 " <+> bt p <+> " PKGBUILD는 너무 복잡하여 분석할 수 없습니다 - 난독화된 코드일 수 있습니다."
+  Hindi      -> bt p <+> "का PKGBUILD पार्स करने के लिए बहुत जटिल था - यह दुर्भावनापूर्ण कोड को अस्पष्ट कर सकता है।"
+  Chinese    -> bt p <+> "的 PKGBUILD 文件太复杂了，无法分析 - 其中可能隐藏恶意代码。"
+  _          -> "The PKGBUILD of" <+> bt p <+> "was too complex to parse - it may be obfuscating malicious code."
 
 security_2 :: Text -> Language -> Doc AnsiStyle
 security_2 (bt -> t) = \case
   Polish    -> t <+> "może zostać użyty do pobrania arbitralnych skryptów, które nie są śledzone przez ten PKGBUILD."
-  Arabic    -> ".هذه PKGBUILDيمكن ان يحمل ملفات عشروتىية ليست مسجلة باﻟ" <+> t
-  Spanish   -> t <+> "se puede usar para descargar scripts arbitrarios que este PKGBUILD no rastrea."
-  Italian   -> t <+> "può essere usato per scaricare script arbitrari non tracciati da questo PKGBUILD."
-  Dutch     -> t <+> "kan gebruikt worden om willekeurige scripts te downloaden die niet worden bijgehouden door dit PKGBUILD-bestand."
-  Ukrainian -> t <+> "може завантажувати довільні скріпти, які не відстежуються цим PKGBUILD."
-  Romanian  -> t <+> "se poate folosi pentru a descărca scripturi neurmărite de acest PKGBUILD."
+  Arabic     -> ".هذه PKGBUILDيمكن ان يحمل ملفات عشروتىية ليست مسجلة باﻟ" <+> t
+  Spanish    -> t <+> "se puede usar para descargar scripts arbitrarios que este PKGBUILD no rastrea."
+  Italian    -> t <+> "può essere usato per scaricare script arbitrari non tracciati da questo PKGBUILD."
+  Dutch      -> t <+> "kan gebruikt worden om willekeurige scripts te downloaden die niet worden bijgehouden door dit PKGBUILD-bestand."
+  Ukrainian  -> t <+> "може завантажувати довільні скріпти, які не відстежуються цим PKGBUILD."
+  Romanian   -> t <+> "se poate folosi pentru a descărca scripturi neurmărite de acest PKGBUILD."
   Vietnamese -> t <+> "có thể dùng để tải xuống các tập lệnh sẽ không được kiểm soát bởi PKGBUILD."
-  Czech     -> t <+> "lze použít ke stažení libovolných skriptů, které tento PKGBUILD nesleduje."
-  Korean    -> t <+> "은(는) PKGBUILD에서 추적되지 않는 임의 스크립트를 다운로드하는 데 사용할 수 있습니다."
-  _         -> t <+> "can be used to download arbitrary scripts that aren't tracked by this PKGBUILD."
+  Czech      -> t <+> "lze použít ke stažení libovolných skriptů, které tento PKGBUILD nesleduje."
+  Korean     -> t <+> "은(는) PKGBUILD에서 추적되지 않는 임의 스크립트를 다운로드하는 데 사용할 수 있습니다."
+  Hindi      -> t <+> "का उपयोग उन मनमानी स्क्रिप्ट को डाउनलोड करने के लिए किया जा सकता है जिन्हें इस PKGBUILD द्वारा ट्रैक नहीं किया जाता है।"
+  Chinese    -> t <+> "可用于下载任意脚本，且不被 PKGBUILD 跟踪。"
+  _          -> t <+> "can be used to download arbitrary scripts that aren't tracked by this PKGBUILD."
 
 security_3 :: Text -> Language -> Doc AnsiStyle
 security_3 (bt -> t) = \case
-  Polish    -> t <+> "może zostać użyty do wykonywania arbitralnego kodu, który nie jest śledzony przez ten PKGBUILD."
-  Arabic    -> ".هذه PKGBUILDيمكن ان يستعمل ملفات عشروتىية ليست مسجلة باﻟ" <+> t
-  Spanish   -> t <+> "se puede usar para ejecutar código arbitrario que este PKGBUILD no rastrea."
-  Italian   -> t <+> "può essere usato per eseguire codice arbitrario non tracciato da questo PKGBUILD."
-  Dutch     -> t <+> "kan gebruikt worden om willekeurige code uit te voeren die niet worden bijgehouden door dit PKGBUILD-bestand."
-  Ukrainian -> t <+> "може виконувати довільний код, який не відстежуються цим PKGBUILD."
-  Romanian  -> t <+> "se poate folosi pentru a executa cod arbitrar neurmărit de acest PKGBUILD."
+  Polish     -> t <+> "może zostać użyty do wykonywania arbitralnego kodu, który nie jest śledzony przez ten PKGBUILD."
+  Arabic     -> ".هذه PKGBUILDيمكن ان يستعمل ملفات عشروتىية ليست مسجلة باﻟ" <+> t
+  Spanish    -> t <+> "se puede usar para ejecutar código arbitrario que este PKGBUILD no rastrea."
+  Italian    -> t <+> "può essere usato per eseguire codice arbitrario non tracciato da questo PKGBUILD."
+  Dutch      -> t <+> "kan gebruikt worden om willekeurige code uit te voeren die niet worden bijgehouden door dit PKGBUILD-bestand."
+  Ukrainian  -> t <+> "може виконувати довільний код, який не відстежуються цим PKGBUILD."
+  Romanian   -> t <+> "se poate folosi pentru a executa cod arbitrar neurmărit de acest PKGBUILD."
   Vietnamese -> t <+> "có thể dùng để chạy các đoạn mã không được kiểm soát bởi PKGBUILD. "
-  Czech     -> t <+> "lze použít ke spuštění libovolného kódu, který tento PKGBUILD nesleduje."
-  Korean    -> t <+> "은(는) PKGBUILD에서 추적되지 않는 임의 스크립트를 실행하는 데 사용할 수 있습니다."
-  _         -> t <+> "can be used to execute arbitrary code not tracked by this PKGBUILD."
+  Czech      -> t <+> "lze použít ke spuštění libovolného kódu, který tento PKGBUILD nesleduje."
+  Korean     -> t <+> "은(는) PKGBUILD에서 추적되지 않는 임의 스크립트를 실행하는 데 사용할 수 있습니다."
+  Hindi      -> t <+> "इस PKGBUILD द्वारा ट्रैक नहीं किए गए मनमाने कोड को निष्पादित करने के लिए उपयोग किया जा सकता है।"
+  Chinese    -> t <+> "可用于执行任意代码，且不被 PKGBUILD 跟踪。"
+  _          -> t <+> "can be used to execute arbitrary code not tracked by this PKGBUILD."
 
 security_4 :: Text -> Language -> Doc AnsiStyle
 security_4 (bt -> t) = \case
-  Polish    -> t <+> "wskazuje na to, że ktoś może próbować uzyskać dostęp root'a do twojej maszyny."
-  Arabic    -> ".تشير ان شخصا ما يحاول الوصول الى قوت المسؤول على جهازك" <+> t
-  Spanish   -> t <+> "indica que alguien puede estar intentando obtener acceso de root a su máquina."
-  Italian   -> t <+> "indica che forse qualcuno sta cercando di ottenere accesso alla tua macchina come root."
-  Dutch     -> t <+> "geeft aan dat iemand mogelijk roottoegang tot uw apparaat probeert te krijgen."
-  Ukrainian -> t <+> "вказує на те, що хтось може спробувати отримати доступ root до вашої машини."
-  Romanian  -> t <+> "indică că cineva are putea încerca să obțină acces root asupra mașinăria dumneavoastră."
+  Polish     -> t <+> "wskazuje na to, że ktoś może próbować uzyskać dostęp root'a do twojej maszyny."
+  Arabic     -> ".تشير ان شخصا ما يحاول الوصول الى قوت المسؤول على جهازك" <+> t
+  Spanish    -> t <+> "indica que alguien puede estar intentando obtener acceso de root a su máquina."
+  Italian    -> t <+> "indica che forse qualcuno sta cercando di ottenere accesso alla tua macchina come root."
+  Dutch      -> t <+> "geeft aan dat iemand mogelijk roottoegang tot uw apparaat probeert te krijgen."
+  Ukrainian  -> t <+> "вказує на те, що хтось може спробувати отримати доступ root до вашої машини."
+  Romanian   -> t <+> "indică că cineva are putea încerca să obțină acces root asupra mașinăria dumneavoastră."
   Vietnamese -> t <+> "được xác định là có người đang có giành quyền truy cập vào root trên thiết bị của bạn."
-  Czech     -> t <+> "znamená, že se někdo možná pokouší získat přístup root k vašemu počítači."
-  Korean    -> t <+> "은(는) 누군가 컴퓨터에 대한 루트 액세스 권한을 얻으려고 할 수 있음을 나타냅니다."
-  _         -> t <+> "indicates that someone may be trying to gain root access to your machine."
+  Czech      -> t <+> "znamená, že se někdo možná pokouší získat přístup root k vašemu počítači."
+  Korean     -> t <+> "은(는) 누군가 컴퓨터에 대한 루트 액세스 권한을 얻으려고 할 수 있음을 나타냅니다."
+  Hindi      -> t <+> "यह दर्शाता है कि कोई व्यक्ति आपकी मशीन तक रूट पहुंच प्राप्त करने का प्रयास कर रहा है।"
+  Chinese    -> t <+> "可用于获取 root 访问权限。"
+  _          -> t <+> "indicates that someone may be trying to gain root access to your machine."
 
 security_5 :: PkgName -> Language -> Doc AnsiStyle
 security_5 (PkgName p) = \case
-  Polish    -> "UWAGA: PKGBUILD dla " <+> bt p <+> "zawiera wyrażenia bash znajdujące się na czarnej liście."
-  Arabic    -> ".في القائمة السودء bash في تعبيرات" <+> bt p <+> "باجل PKGBUILDتحذير: اﻟ"
-  Spanish   -> "ADVERTENCIA: El PKGBUILD de" <+> bt p <+> "contiene expresiones bash en la lista negra."
-  Italian   -> "ATTENZIONE: Il PKGBUILD di" <+> bt p <+> "contiene espressioni bash presenti nella lista nera."
-  Dutch     -> "WAARSCHUWING: De PKGBUILD van" <+> bt p <+> "bevat bash-uitdrukkingen die op de zwarte lijst staan."
-  Ukrainian -> "УВАГА! PKGBUILD пакунку" <+> bt p <+> "містить вирази bash, які занесені в чорний список."
-  Romanian  -> "ATENȚIE! PKGBUILD-ul pachetului" <+> bt p <+> "conține expresii de bash pe lista neagră."
+  Polish     -> "UWAGA: PKGBUILD dla " <+> bt p <+> "zawiera wyrażenia bash znajdujące się na czarnej liście."
+  Arabic     -> ".في القائمة السودء bash في تعبيرات" <+> bt p <+> "باجل PKGBUILDتحذير: اﻟ"
+  Spanish    -> "ADVERTENCIA: El PKGBUILD de" <+> bt p <+> "contiene expresiones bash en la lista negra."
+  Italian    -> "ATTENZIONE: Il PKGBUILD di" <+> bt p <+> "contiene espressioni bash presenti nella lista nera."
+  Dutch      -> "WAARSCHUWING: De PKGBUILD van" <+> bt p <+> "bevat bash-uitdrukkingen die op de zwarte lijst staan."
+  Ukrainian  -> "УВАГА! PKGBUILD пакунку" <+> bt p <+> "містить вирази bash, які занесені в чорний список."
+  Romanian   -> "ATENȚIE! PKGBUILD-ul pachetului" <+> bt p <+> "conține expresii de bash pe lista neagră."
   Vietnamese -> "CẢNH BÁO: PKGBUILD của" <+> bt p <+> "chứa những câu lệnh bash nguy hiểm."
-  Czech     -> "VAROVÁNÍ: PKGBUILD z" <+> bt p <+> "obsahuje zakazany bash výrazy"
-  Korean    -> "경고: " <+> bt p <+> "의 PKGBUILD에는 블랙리스트에 있는 bash 식이 포함되어 있습니다."
-  _         -> "WARNING: The PKGBUILD of" <+> bt p <+> "contains blacklisted bash expressions."
+  Czech      -> "VAROVÁNÍ: PKGBUILD z" <+> bt p <+> "obsahuje zakazany bash výrazy"
+  Korean     -> "경고: " <+> bt p <+> "의 PKGBUILD에는 블랙리스트에 있는 bash 식이 포함되어 있습니다."
+  Hindi      -> "चेतावनी: PKGBUILD" <+> bt p <+> "में ब्लैकलिस्टेड बैश एक्सप्रेशन शामिल हैं।"
+  Chinese    -> "警告：" <+> bt p <+> "的 PKGBUILD 中包含了黑名单 bash 表达式。"
+  _          -> "WARNING: The PKGBUILD of" <+> bt p <+> "contains blacklisted bash expressions."
 
 security_6 :: Language -> Doc AnsiStyle
 security_6 = \case
@@ -2147,76 +2280,88 @@
   Vietnamese -> "Bạn có muốn dừng quá trình build?"
   Czech      -> "Přejete si ukončit build?"
   Korean     -> "빌드 프로세스를 종료하시겠습니까?"
+  Hindi      -> "क्या आप निर्माण प्रक्रिया छोड़ना चाहते हैं?"
+  Chinese    -> "是否要退出构建过程?"
   _          -> "Do you wish to quit the build process?"
 
 security_7 :: Language -> Doc AnsiStyle
 security_7 = \case
-  Polish    -> "Anulowano dalsze przetwarzanie by uniknąć egzekucji potencjalnie złośliwego kodu bash"
-  Arabic    -> ".الذي يحتمل أن يكون ضارا bash تم الغاء المعالجة الاضافيه لتجنب صدور"
-  Spanish   -> "Se canceló el procesamiento posterior para evitar el código bash potencialmente malicioso."
-  Italian   -> "Non saranno eseguite altre operazioni al fine di evitare l'esecuzione di codice bash potenzialmente malevolo."
-  Dutch     -> "De verdere verwerking is afgebroken om het uitvoeren van potentieel schadelijke bash-code te voorkomen."
-  Ukrainian -> "Подальша установка скасована, щоб уникнути потенційно шкідливого коду bash."
-  Romanian  -> "S-a cancelat procesarea ulterioară pentru a evita cod de bash potențial rău intenționat."
+  Polish     -> "Anulowano dalsze przetwarzanie by uniknąć egzekucji potencjalnie złośliwego kodu bash"
+  Arabic     -> ".الذي يحتمل أن يكون ضارا bash تم الغاء المعالجة الاضافيه لتجنب صدور"
+  Spanish    -> "Se canceló el procesamiento posterior para evitar el código bash potencialmente malicioso."
+  Italian    -> "Non saranno eseguite altre operazioni al fine di evitare l'esecuzione di codice bash potenzialmente malevolo."
+  Dutch      -> "De verdere verwerking is afgebroken om het uitvoeren van potentieel schadelijke bash-code te voorkomen."
+  Ukrainian  -> "Подальша установка скасована, щоб уникнути потенційно шкідливого коду bash."
+  Romanian   -> "S-a cancelat procesarea ulterioară pentru a evita cod de bash potențial rău intenționat."
   Vietnamese -> "Hãy dừng những quá trình tiếp theo để ngắn đoạn mã bash nguy hiểm."
-  Czech     -> "Další proces byl zrušen, aby se zabránilo potenciálně škodlivému bash kódu."
-  Korean    -> "잠재적으로 악의적인 bash 코드를 방지하기 위해 추가 처리가 취소되었습니다."
-  _         -> "Cancelled further processing to avoid potentially malicious bash code."
+  Czech      -> "Další proces byl zrušen, aby se zabránilo potenciálně škodlivému bash kódu."
+  Korean     -> "잠재적으로 악의적인 bash 코드를 방지하기 위해 추가 처리가 취소되었습니다."
+  Hindi      -> "संभावित रूप से दुर्भावनापूर्ण बैश कोड से बचने के लिए आगे की प्रक्रिया रद्द कर दी गई।"
+  Chinese    -> "已取消后续处理以避免潜在的恶意 bash 代码。"
+  _          -> "Cancelled further processing to avoid potentially malicious bash code."
 
 security_8 :: Text -> Language -> Doc AnsiStyle
 security_8 (bt -> t) = \case
-  Polish    -> t <+> "jest komendą bash zawartą w polach tablicy twojego PKGBUILD."
-  Arabic    -> ".الخاص بك PKGBUILDمضمن بالحقول المصفوفة باﻟ bash امر" <+> t
-  Spanish   -> t <+> "es un comando bash integrado en los campos de la matriz del PKGBUILD."
-  Italian   -> t <+> "è un comando bash presente all'interno degli array del tuo PKGBUILD."
-  Dutch     -> t <+> "is een bash-opdracht die is opgenomen in uw PKGBUILD-reeksvelden."
-  Ukrainian -> t <+> "- це команда bash, що вбудована в ваші поля масиву PKGBUILD"
-  Romanian  -> t <+> "este o comandă bash integrată în matricele din PKGBUILD."
+  Polish     -> t <+> "jest komendą bash zawartą w polach tablicy twojego PKGBUILD."
+  Arabic     -> ".الخاص بك PKGBUILDمضمن بالحقول المصفوفة باﻟ bash امر" <+> t
+  Spanish    -> t <+> "es un comando bash integrado en los campos de la matriz del PKGBUILD."
+  Italian    -> t <+> "è un comando bash presente all'interno degli array del tuo PKGBUILD."
+  Dutch      -> t <+> "is een bash-opdracht die is opgenomen in uw PKGBUILD-reeksvelden."
+  Ukrainian  -> t <+> "- це команда bash, що вбудована в ваші поля масиву PKGBUILD"
+  Romanian   -> t <+> "este o comandă bash integrată în matricele din PKGBUILD."
   Vietnamese -> t <+> "là lệnh bash được lồng trong mảng của PKGBUILD."
-  Czech     -> t <+> "je bash příkaz vložený do polí pole PKGBUILD."
-  Korean    -> t <+> "는 PKGBUILD 배열 필드에 표시된 bash 명령입니다."
-  _         -> t <+> "is a bash command inlined in your PKGBUILD array fields."
+  Czech      -> t <+> "je bash příkaz vložený do polí pole PKGBUILD."
+  Korean     -> t <+> "는 PKGBUILD 배열 필드에 표시된 bash 명령입니다."
+  Hindi      -> t <+> "आपके PKGBUILD सरणी फ़ील्ड में इनलाइन एक बैश कमांड है।"
+  Chinese    -> t <+> "存在于 PKGBUILD 数组中，似乎是 bash 命令。"
+  _          -> t <+> "is a bash command inlined in your PKGBUILD array fields."
 
 security_9 :: Text -> Language -> Doc AnsiStyle
 security_9 (bt -> t) = \case
-  Polish    -> t <+> "jest dziwną rzeczą w polach tablicy. Czy to bezpieczne?"
-  Arabic    -> "شيء غريب ان يكون لديك في الحقول المصفوفة, هل هيا امن؟" <+> t
-  Spanish   -> t <+> "es algo extraño para tener en sus campos de matriz. ¿Es seguro?"
-  Italian   -> t <+> "è una cosa strana da trovare all'interno degli array. E' sicura?"
-  Dutch     -> t <+> "is een vreemde eend in de bijt in uw reeksvelden. Is dit wel veilig?"
-  Ukrainian -> t <+> "- дивна річ в полях масиву. Це безпечно?"
-  Romanian  -> t <+> "e ciudat să se afle în matricele dumneavoastră. Asta este sigur?"
+  Polish     -> t <+> "jest dziwną rzeczą w polach tablicy. Czy to bezpieczne?"
+  Arabic     -> "شيء غريب ان يكون لديك في الحقول المصفوفة, هل هيا امن؟" <+> t
+  Spanish    -> t <+> "es algo extraño para tener en sus campos de matriz. ¿Es seguro?"
+  Italian    -> t <+> "è una cosa strana da trovare all'interno degli array. E' sicura?"
+  Dutch      -> t <+> "is een vreemde eend in de bijt in uw reeksvelden. Is dit wel veilig?"
+  Ukrainian  -> t <+> "- дивна річ в полях масиву. Це безпечно?"
+  Romanian   -> t <+> "e ciudat să se afle în matricele dumneavoastră. Asta este sigur?"
   Vietnamese -> t <+> "là đoạn mã lạ trong mảng. Nó có an toàn không?"
-  Czech     -> t <+> "je zvláštní věc mít v polích. Je to bezpečné?"
-  Korean    -> t <+> "이것은 배열 안에서 볼 수 있는 이상한 것입니다. 안전합니까?"
-  _         -> t <+> "is a strange thing to have in your array fields. Is it safe?"
+  Czech      -> t <+> "je zvláštní věc mít v polích. Je to bezpečné?"
+  Korean     -> t <+> "이것은 배열 안에서 볼 수 있는 이상한 것입니다. 안전합니까?"
+  Hindi      -> t <+> "आपके सरणी फ़ील्ड में होना एक अजीब चीज़ है। क्या यह सुरक्षित है?"
+  Chinese    -> t <+> "存在于数组字段，很怪。这安全吗？"
+  _          -> t <+> "is a strange thing to have in your array fields. Is it safe?"
 
 security_10 :: Text -> Language -> Doc AnsiStyle
 security_10 (bt -> t) = \case
-  Polish    -> t <+> "sugeruje, że ktoś próbował być sprytny używając zmiennych do ukrycia złośliwych komend."
-  Arabic    -> ".يعني ان شخصا ما كان يحاول ان يكون ذكيا مع المتغيرات لاخفاء الاوامر الخبيثة" <+> t
-  Spanish   -> t <+> "implica que alguien estaba tratando de ser astuto con las variables para ocultar comandos maliciosos."
-  Italian   -> t <+> "implica che qualcuno stava trafficando con le variabili per nascondere comandi malevoli."
-  Dutch     -> t <+> "impliceert dat iemand op slinkse wijze probeerde om te gaan met variabelen om schadelijke opdrachten te verbergen."
-  Ukrainian -> t <+> "означає, що хтось намагається обдурити змінними, щоб сховати небеспечні команди."
-  Romanian  -> t <+> "implică că cineva încearcă să fie șmecher cu variabile pentru a ascunde comenzi rele intenționate."
-  Vietnamese -> t <+> "được xác định là có ai đó đang cố ẩn những câu lệnh nguy hiểm trong các biến."
-  Czech     -> t <+> "naznačuje že se někdo snažil být chytrý s proměnnými, aby skryl škodlivé příkazy."
-  Korean    -> t <+> "누군가 악의적인 명령을 숨기기 위해 변수를 교묘하게 다루려고 했다는 것을 암시합니다."
-  _         -> t <+> "implies that someone was trying to be clever with variables to hide malicious commands."
+  Polish     -> t <+> "sugeruje, że ktoś próbował być sprytny używając zmiennych do ukrycia złośliwych komend."
+  Arabic     -> ".يعني ان شخصا ما كان يحاول ان يكون ذكيا مع المتغيرات لاخفاء الاوامر الخبيثة" <+> t
+  Spanish    -> t <+> "implica que alguien estaba tratando de ser astuto con las variables para ocultar comandos maliciosos."
+  Italian    -> t <+> "implica che qualcuno stava trafficando con le variabili per nascondere comandi malevoli."
+  Dutch      -> t <+> "impliceert dat iemand op slinkse wijze probeerde om te gaan met variabelen om schadelijke opdrachten te verbergen."
+  Ukrainian  -> t <+> "означає, що хтось намагається обдурити змінними, щоб сховати небеспечні команди."
+  Romanian   -> t <+> "implică că cineva încearcă să fie șmecher cu variabile pentru a ascunde comenzi rele intenționate."
+  Vietnamese  -> t <+> "được xác định là có ai đó đang cố ẩn những câu lệnh nguy hiểm trong các biến."
+  Czech      -> t <+> "naznačuje že se někdo snažil být chytrý s proměnnými, aby skryl škodlivé příkazy."
+  Korean     -> t <+> "누군가 악의적인 명령을 숨기기 위해 변수를 교묘하게 다루려고 했다는 것을 암시합니다."
+  Hindi      -> t <+> "का तात्पर्य यह है कि कोई व्यक्ति दुर्भावनापूर्ण आदेशों को छिपाने के लिए वेरिएबल्स के साथ चतुराई बरतने की कोशिश कर रहा था।"
+  Chinese    -> t <+> "表明有人试图巧妙地利用变量来隐藏恶意命令。"
+  _          -> t <+> "implies that someone was trying to be clever with variables to hide malicious commands."
 
 security_11 :: Language -> Doc AnsiStyle
 security_11 = \case
-  Polish    -> "Ten PKGBUILD jest zbyt zawiły do odczytania - może ukrywać w sobie złośliwy kod."
-  Arabic    -> ".كان معقدا جدا للتحليل - يمكن ان يخفي برنامج ضار PKGBUILDذلك اﻟ"
-  Spanish   -> "Éste PKGBUILD es demasiado complejo para analizar, puede estar ofuscando código malicioso."
-  Ukrainian -> "Цей PKGBUILD був надто складним для аналізу - він може містити шкідливий код."
-  Romanian  -> "Acel PKGBUILD este prea complicat de analizat - are putea ascunde cod rău intenționat."
+  Polish     -> "Ten PKGBUILD jest zbyt zawiły do odczytania - może ukrywać w sobie złośliwy kod."
+  Arabic     -> ".كان معقدا جدا للتحليل - يمكن ان يخفي برنامج ضار PKGBUILDذلك اﻟ"
+  Spanish    -> "Éste PKGBUILD es demasiado complejo para analizar, puede estar ofuscando código malicioso."
+  Ukrainian  -> "Цей PKGBUILD був надто складним для аналізу - він може містити шкідливий код."
+  Romanian   -> "Acel PKGBUILD este prea complicat de analizat - are putea ascunde cod rău intenționat."
   Vietnamese -> "Không thể đọc PKGBUILD - nó có thể chứa đoạn mã nguy hiểm."
-  Czech     -> "Tento PKGBUILD je příliš složitý na to, aby jej bylo možné analyzovat/rezebrat – může obsahovat matoucí škodlivý kód."
-  Korean    -> "이 PKGBUILD는 분석하기에 너무 복잡합니다 - 악성코드를 난독화하고 있을 수 있습니다."
+  Czech      -> "Tento PKGBUILD je příliš složitý na to, aby jej bylo možné analyzovat/rezebrat – může obsahovat matoucí škodlivý kód."
+  Korean     -> "이 PKGBUILD는 분석하기에 너무 복잡합니다 - 악성코드를 난독화하고 있을 수 있습니다."
+  Hindi      -> "वह PKGBUILD पार्स करने के लिए बहुत जटिल है - यह दुर्भावनापूर्ण कोड को अस्पष्ट कर सकता है।"
   Dutch      -> "Deze PKGBUILD is te complex om te verwerken. Het bestand bevat mogelijk verborgen schadelijke code."
-  _         -> "That PKGBUILD is too complex to parse - it may be obfuscating malicious code."
+  Chinese    -> "PKGBUILD 文件太复杂了，无法分析 - 其中可能隐藏恶意代码。"
+  _          -> "That PKGBUILD is too complex to parse - it may be obfuscating malicious code."
 
 security_12 :: Language -> Doc AnsiStyle
 security_12 = \case
@@ -2228,21 +2373,25 @@
   Vietnamese -> "Phát hiện lỗ hổng trong PKGBUILD."
   Czech      -> "Byla zjištěna potenciální bezpečnostní chyba v PKGBUILD."
   Korean     -> "잠재적인 PKGBUILD 취약점 발견됨."
+  Hindi      -> "संभावित PKGBUILD कमजोरियों का पता चला।"
   Dutch      -> "Er zijn mogelijke kwetsbaarheden aangetroffen in het PKGBUILD-bestand."
+  Chinese    -> "在 PKGBUILD 中检测到潜在的漏洞。"
   _          -> "Potential PKGBUILD vulnerabilities detected."
 
 security_13 :: Word -> Language -> Doc AnsiStyle
 security_13 (bt -> w) = \case
-  Polish    -> "Sprawdzanie PKGBUILD" <+> w <+> "w poszukiwaniu luk w bezpieczeństwie..."
-  Arabic    -> "...بحثا عن نقاط ضعف" <+> w <+> "تبع PKGBUILDتحقق اﻟ"
-  Spanish   -> "Comprobando" <+> w <+> "PKGBUILDs por vulnerabilidades..."
-  Ukrainian -> "Перевіряємо" <+> w <+> "PKGBUILD-ів на вразливості..."
-  Romanian  -> "Se verifică PKGBUILD-uri" <+> w <+> "pentru vulnerabilități..."
+  Polish     -> "Sprawdzanie PKGBUILD" <+> w <+> "w poszukiwaniu luk w bezpieczeństwie..."
+  Arabic     -> "...بحثا عن نقاط ضعف" <+> w <+> "تبع PKGBUILDتحقق اﻟ"
+  Spanish    -> "Comprobando" <+> w <+> "PKGBUILDs por vulnerabilidades..."
+  Ukrainian  -> "Перевіряємо" <+> w <+> "PKGBUILD-ів на вразливості..."
+  Romanian   -> "Se verifică PKGBUILD-uri" <+> w <+> "pentru vulnerabilități..."
   Vietnamese -> "Tìm kiếm" <+> w <+> "lỗ hổng trong PKGBUILD..."
-  Czech     -> "Kontrola bezpečnostních chyb v" <+> w <+> "PKGBUILD"
-  Korean    -> w <+> "PKGBUILD 취약점 확인 중..."
+  Czech      -> "Kontrola bezpečnostních chyb v" <+> w <+> "PKGBUILD"
+  Korean     -> w <+> "PKGBUILD 취약점 확인 중..."
+  Hindi      -> "जांच की जा रही है" <+> w <+> "कमजोरियों के लिए PKGBUILDs..."
   Dutch      -> "Bezig met controleren van" <+> w <+> "PKGBUILDs op kwetsbaarheden…"
-  _         -> "Checking" <+> w <+> "PKGBUILDs for vulnerabilities..."
+  Chinese    -> "检查 " <+> w <+> "PKGBUILD 中是否存在漏洞..."
+  _          -> "Checking" <+> w <+> "PKGBUILDs for vulnerabilities..."
 
 security_14 :: Language -> Doc AnsiStyle
 security_14 = \case
@@ -2254,7 +2403,9 @@
   Vietnamese -> "Không tìm thấy lỗ hổng."
   Czech      -> "Nebyly nalezeny žádné bezpečnostní chyby."
   Korean     -> "발견된 취약점이 없습니다."
+  Hindi      -> "कोई कमज़ोरी नहीं पाई गई।"
   Dutch      -> "Er zijn geen kwetsbaarheden aangetroffen."
+  Chinese    -> "未发现漏洞。"
   _          -> "No vulnerabilities detected."
 
 -----------------------
@@ -2278,6 +2429,7 @@
     Ukrainian  -> "[Т/н]"
     Romanian   -> "[D/n]"
     Czech      -> "[A,n]"
+    Hindi      -> "[य/न]"
     _          -> "[Y/n]"
 
 yesPattern :: Language -> [T.Text]
@@ -2298,6 +2450,7 @@
     Ukrainian  -> ["т", "так"]
     Romanian   -> ["d", "da"]
     Czech      -> ["a", "ano"]
+    Hindi      -> ["य", "हाँ"]
     _          -> ["y", "yes"]
 
 ----------------------
diff --git a/lib/Aura/Languages/Fields.hs b/lib/Aura/Languages/Fields.hs
--- a/lib/Aura/Languages/Fields.hs
+++ b/lib/Aura/Languages/Fields.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module    : Aura.Languages.Fields
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -39,6 +39,8 @@
     Vietnamese -> "Gói"
     Czech      -> "Balíček"
     Korean     -> "패키지"
+    Hindi      -> "पैकेज"
+    Chinese    -> "包"
     _          -> "Package"
 
 firstInstall :: Language -> Text
@@ -63,6 +65,8 @@
     Vietnamese -> "Cài đặt lần đầu"
     Czech      -> "První instalace"
     Korean     -> "최초 설치"
+    Hindi      -> "प्रथम इंस्टाल"
+    Chinese    -> "初次安装"
     _          -> "First Install"
 
 upgrades :: Language -> Text
@@ -87,6 +91,8 @@
     Vietnamese -> "Cập nhật"
     Czech      -> "Aktualizace"
     Korean     -> "업그레이드 횟수"
+    Hindi      -> "अपग्रेड"
+    Chinese    -> "更新数量"
     _          -> "Upgrades"
 
 recentActions :: Language -> Text
@@ -111,6 +117,8 @@
     Vietnamese -> "Hoạt động gần nhất"
     Czech      -> "Nedávné akce"
     Korean     -> "근황"
+    Hindi      -> "हाल की कार्रवाइयां"
+    Chinese    -> "近况"
     _          -> "Recent Actions"
 
 repository :: Language -> Text
@@ -134,6 +142,8 @@
     Romanian   -> "Repertoriu"
     Czech      -> "Úložiště"
     Korean     -> "리포지토리"
+    Hindi      -> "रिपॉजिटरी"
+    Chinese    -> "仓库"
     _          -> "Repository"
 
 name :: Language -> Text
@@ -158,6 +168,8 @@
     Vietnamese -> "Tên"
     Czech      -> "Název"
     Korean     -> "이름"
+    Hindi      -> "नाम"
+    Chinese    -> "名称"
     _          -> "Name"
 
 version :: Language -> Text
@@ -182,6 +194,8 @@
     Vietnamese -> "Phiên bản"
     Czech      -> "Verze"
     Korean     -> "버전"
+    Hindi      -> "संस्करण"
+    Chinese    -> "版本"
     _          -> "Version"
 
 aurStatus :: Language -> Text
@@ -205,6 +219,8 @@
     Vietnamese -> "Trạng thái AUR"
     Czech      -> "Stav AUR"
     Korean     -> "AUR 상태"
+    Hindi      -> "AUR स्थिति"
+    Chinese    -> "AUR 状态"
     _          -> "AUR Status"
 
 -- NEEDS TRANSLATION
@@ -224,6 +240,8 @@
     Romanian   -> "Întreținător"
     Czech      -> "Udržovatel"
     Korean     -> "관리자"
+    Hindi      -> "मेंटेनर"
+    Chinese    -> "维护者"
     _          -> "Maintainer"
 
 projectUrl :: Language -> Text
@@ -248,6 +266,8 @@
     Vietnamese -> "URL của Dự án"
     Czech      -> "Adresa URL projektu"
     Korean     -> "프로젝트 URL"
+    Hindi      -> "प्रोजेक्ट URL"
+    Chinese    -> "项目 URL"
     _          -> "Project URL"
 
 aurUrl :: Language -> Text
@@ -270,6 +290,8 @@
     Vietnamese -> "URL của AUR"
     Czech      -> "URL pro AUR"
     Korean     -> "AUR URL"
+    Hindi      -> "AUR URL"
+    Chinese    -> "AUR URL"
     _          -> "AUR URL"
 
 license :: Language -> Text
@@ -294,6 +316,8 @@
     Vietnamese -> "Bản quyền"
     Czech      -> "Licence"
     Korean     -> "라이센스"
+    Hindi      -> "लाइसेंस"
+    Chinese    -> "许可"
     _          -> "License"
 
 dependsOn :: Language -> Text
@@ -316,6 +340,8 @@
     Vietnamese -> "Phụ thuộc vào"
     Czech      -> "Závisí na"
     Korean     -> "종속 패키지"
+    Hindi      -> "निर्भर करता है"
+    Chinese    -> "依赖于"
     _          -> "Depends On"
 
 buildDeps :: Language -> Text
@@ -335,6 +361,8 @@
     Romanian   -> "Dependențe de compilare"
     Czech      -> "Závislosti kompilace"
     Korean     -> "빌드 종속성"
+    Hindi      -> "बिल्ड निर्भरताएँ"
+    Chinese    -> "构建依赖"
     _          -> "Build Deps"
 
 votes :: Language -> Text
@@ -359,6 +387,8 @@
     Vietnamese -> "Bình chọn"
     Czech      -> "Hlasy"
     Korean     -> "투표"
+    Hindi      -> "वोट"
+    Chinese    -> "票数"
     _          -> "Votes"
 
 popularity :: Language -> Text
@@ -375,6 +405,8 @@
     Vietnamese -> "Phổ biến"
     Czech      -> "Popularita"
     Korean     -> "인기"
+    Hindi      -> "लोकप्रियता"
+    Chinese    -> "人气"
     _          -> "Popularity"
 
 description :: Language -> Text
@@ -399,4 +431,6 @@
     Vietnamese -> "Mô tả"
     Czech      -> "Popis"
     Korean     -> "개요"
+    Hindi      -> "विवरण"
+    Chinese    -> "简介"
     _          -> "Description"
diff --git a/lib/Aura/Logo.hs b/lib/Aura/Logo.hs
--- a/lib/Aura/Logo.hs
+++ b/lib/Aura/Logo.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Logo
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/MakePkg.hs b/lib/Aura/MakePkg.hs
--- a/lib/Aura/MakePkg.hs
+++ b/lib/Aura/MakePkg.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module    : Aura.State
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -69,7 +69,7 @@
   (ec, se) <- runIt ss pc
   -- Fetch the filenames of the built tarballs.
   (_, out, _) <- readProcess $ proc "sudo" ["-u", T.unpack usr, makepkgCmd, "--packagelist"]
-  let fs = map T.unpack . T.lines . decodeUtf8Lenient $ BL.toStrict out
+  fs <- filterM doesFileExist . map T.unpack . T.lines . decodeUtf8Lenient $ BL.toStrict out
   pure (ec, se, fs)
 
 runIt :: MonadIO m
diff --git a/lib/Aura/Packages/AUR.hs b/lib/Aura/Packages/AUR.hs
--- a/lib/Aura/Packages/AUR.hs
+++ b/lib/Aura/Packages/AUR.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Packages.AUR
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Packages/Repository.hs b/lib/Aura/Packages/Repository.hs
--- a/lib/Aura/Packages/Repository.hs
+++ b/lib/Aura/Packages/Repository.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Packages.Repository
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Pacman.hs b/lib/Aura/Pacman.hs
--- a/lib/Aura/Pacman.hs
+++ b/lib/Aura/Pacman.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module    : Aura.Pacman
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Pkgbuild/Fetch.hs b/lib/Aura/Pkgbuild/Fetch.hs
--- a/lib/Aura/Pkgbuild/Fetch.hs
+++ b/lib/Aura/Pkgbuild/Fetch.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module    : Aura.State
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Pkgbuild/Records.hs b/lib/Aura/Pkgbuild/Records.hs
--- a/lib/Aura/Pkgbuild/Records.hs
+++ b/lib/Aura/Pkgbuild/Records.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Pkgbuild.Records
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Pkgbuild/Security.hs b/lib/Aura/Pkgbuild/Security.hs
--- a/lib/Aura/Pkgbuild/Security.hs
+++ b/lib/Aura/Pkgbuild/Security.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Pkgbuild.Security
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Security.hs b/lib/Aura/Security.hs
--- a/lib/Aura/Security.hs
+++ b/lib/Aura/Security.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Security
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Settings.hs b/lib/Aura/Settings.hs
--- a/lib/Aura/Settings.hs
+++ b/lib/Aura/Settings.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Settings
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Settings/External.hs b/lib/Aura/Settings/External.hs
--- a/lib/Aura/Settings/External.hs
+++ b/lib/Aura/Settings/External.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module    : Aura.Settings.External
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Shell.hs b/lib/Aura/Shell.hs
--- a/lib/Aura/Shell.hs
+++ b/lib/Aura/Shell.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.Shell
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/State.hs b/lib/Aura/State.hs
--- a/lib/Aura/State.hs
+++ b/lib/Aura/State.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module    : Aura.State
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
diff --git a/lib/Aura/Types.hs b/lib/Aura/Types.hs
--- a/lib/Aura/Types.hs
+++ b/lib/Aura/Types.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module    : Aura.Types
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -276,6 +276,7 @@
               | Vietnamese
               | Czech
               | Korean
+              | Hindi
               deriving (Eq, Enum, Bounded, Ord, Show)
 
 -- | The various ways that dependency resolution can fail.
diff --git a/lib/Aura/Utils.hs b/lib/Aura/Utils.hs
--- a/lib/Aura/Utils.hs
+++ b/lib/Aura/Utils.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module    : Aura.Utils
--- Copyright : (c) Colin Woodbury, 2012 - 2021
+-- Copyright : (c) Colin Woodbury, 2012 - 2024
 -- License   : GPL3
 -- Maintainer: Colin Woodbury <colin@fosskers.ca>
 --
@@ -154,6 +154,11 @@
   These w x <> This y    = These (w <> y) x
   These w x <> That y    = These w (x <> y)
   These w x <> These y z = These (w <> y) (x <> z)
+
+instance Functor (These a) where
+  fmap _ (This x)    = This x
+  fmap f (That y)    = That (f y)
+  fmap f (These x y) = These x (f y)
 
 instance Bifunctor These where
   bimap f _ (This x)    = This (f x)
diff --git a/misc/aura.8 b/misc/aura.8
new file mode 100644
--- /dev/null
+++ b/misc/aura.8
@@ -0,0 +1,730 @@
+'\" t
+.\" Man page for `aura`
+.\" Written by Colin Woodbury <colin@fosskers.ca>
+.
+.TH aura 8 "2021 September" "Aura" "Aura Manual"
+.
+.de SAMPLE      \" Indented example - on its own paragraph.
+.  P
+.  RS
+.  EX
+..
+.de ESAMPLE     \" End of Indented example.
+.  EE
+.  RE
+..
+.de RSAMPLE     \" Relative sample - even more indented example.
+.  RS
+.  SAMPLE
+..
+.de ERSAMPLE    \" End of Relative sample.
+.  ESAMPLE
+.  RE
+..
+.
+.ds ellipsis \&.\|.\|.\&
+.\" Format repeatable parameter (1 or more) with ellipsis.
+.ds multi                 \fI\\$1\fP\fR\\ \\*[ellipsis]\fP
+.\" Format optional repeatable parameter (0 or more)
+.\" with ellipsis and square brackets.
+.ds multi-optional \fR[\fP\fI\\$1\fP\fR\\ \\*[ellipsis]]\fP
+.ds packages          \\*[multi          packages]
+.ds packages-optional \\*[multi-optional packages]
+.
+.SH NAME
+.
+aura \- package manager utility and AUR helper
+.
+.SH SYNOPSIS
+.
+.SY aura
+.I OPERATION
+\*[multi-optional OPTIONS]
+\*[multi-optional targets]
+.YS
+.
+.SH DESCRIPTION
+.
+.B aura
+is a secure, multilingual package manager for Arch Linux written in Haskell.
+.
+It connects to both the official Arch repositories and to the
+Arch User Repositories (AUR),
+allowing easy control of all packages on an Arch system.
+.
+Aura allows
+.I all
+pacman operations and provides
+.I new
+custom ones for dealing with AUR packages.
+.
+.SH OPERATIONS
+.
+.TP
+.BR \-A ", " \-\-aursync " \*[packages-optional]"
+.
+Perform actions involving the
+.BR A UR.
+.
+Default action installs packages from the AUR.
+.
+.IP
+During building, makepkg output is
+.I not
+shown by default.
+.
+After building, the built
+.I *.pkg.tar.xz
+file is moved to the package cache and installed from there.
+.
+This allows for easy AUR package downgrading.
+.
+.TP
+.BR -B ", " \-\-save
+.
+Manage the saving and restoring of the global package state.
+.
+Default action stores a record of all currently installed packages and their
+versions.
+.
+.TP
+.BR -C ", " \-\-downgrade " \*[packages-optional]"
+.
+Perform actions involving the package
+.BR C ache.
+.
+Default action downgrades specified
+.IR packages .
+.
+.IP
+This process is interactive, allowing the user to choose from any previous
+version they have available in the package cache.
+.
+.TP
+.BR \-L ", " \-\-viewlog
+.
+Perform actions involving the pacman
+.BR L ogfile.
+.
+Default action opens the log for read-only viewing.
+.
+.TP
+.BR \-O ", " \-\-orphans " \*[packages-optional]"
+.
+Perform actions involving
+.BR O rphan
+packages.
+.
+Default action is to list the current orphans.
+.
+.IP
+Orphan packages are packages installed as dependencies,
+but are no longer required by any other package.
+.
+.TP
+.BR \-P ", " \-\-analysis
+.
+Perform security analysis of a
+.BR P KGBUILD.
+.
+Default action reads PKGBUILD from stdin.
+.
+.IP
+Useful for package maintainers and sysadmins to verify the safety of the
+PKGBUILD files that they write.
+.
+To test any package on the AUR, try the following:
+.
+.RSAMPLE
+.BI "aura -Ap " "package" " | aura -P"
+.ERSAMPLE
+.
+.SH AUR SYNC OPTIONS (\fR\-A\fP)
+.
+.TP
+.BR \-a ", " \-\-delmakedeps
+.
+Uninstalls build dependencies that are no longer required after installing the
+main package.
+.
+This prevents the creation of orphan packages.
+.
+Also note that while the package itself will be uninstalled,
+its package file will remain in the cache.
+.
+.TP
+.BR \-c ", " \-\-clean
+.
+After a package's tarball has been built and copied to the package cache,
+delete its build directory immediately.
+.
+.TP
+.BR \-d ", " \-\-deps " \*[packages]"
+.
+View all dependencies of
+.IR packages .
+.
+This process is recursive for AUR packages,
+so all dependencies of dependencies (and so on) will also be shown.
+.
+This can aid the pre-install package research process.
+.
+.TP
+.BR \-i ", " \-\-info " \*[packages]"
+.
+View information about AUR
+.IR packages .
+.
+.TP
+.BR \-k ", " \-\-diff
+.
+Show PKGBUILD diffs.
+.
+When upgrading, using this option will compare the most and second-most recent
+PKGBUILDs and output changes in colour.
+.
+.TP
+.BR \-p ", " \-\-pkgbuild " \*[packages]"
+.
+View PKGBUILDs of AUR
+.IR packages .
+.
+Use this before installing new packages to confirm that the build scripts
+aren't doing anything fishy.
+.
+.TP
+.BR \-q ", " \-\-quiet
+.
+Display less information about certain
+.B \-A
+operations
+(this is useful when processing Aura's output in a script).
+.
+In particular, search and view dependencies will only show uncoloured package
+names.
+.
+.TP
+.BR \-s ", " \-\-search " \*[multi word]"
+.
+Search AUR for packages containing
+.IR word s
+(not regex) in their names or descriptions.
+.
+Multiple terms will narrow down the search.
+.
+Results are sorted by votes.
+.
+Suboptions:
+.
+.RS
+.
+.  TP
+.  B \-\-abc
+.
+Sorts results alphabetically.
+.
+.  TP
+.  BR \-\-head [ =\fIN\fR ]
+.
+Only show the first
+.I N
+results.
+.I N
+defaults to 10.
+.
+.  TP
+.  BR \-\-tail [ =\fIN\fR ]
+.
+Only show the last
+.I N
+results.
+.I N
+defaults to 10.
+.
+.  TP
+.  BR \-r ", " \-\-both
+.
+Show results from the official repos as well.
+.
+.RE
+.
+.TP
+.BR \-u ", " \-\-sysupgrade
+.
+Upgrade all installed AUR packages.
+.B -Au
+is like
+.B -Su
+but for AUR packages.
+.
+.TP
+.BR \-w ", " \-\-downloadonly " \*[packages]"
+.
+Retrieve AUR
+.I packages
+source tarballs,
+but do not build/install/upgrade anything.
+.
+.TP
+.BR \-x ", " \-\-unsuppress
+.
+Unsuppress
+.BR makepkg (8)
+output during building.
+.
+By default this output is suppressed for a more silent install.
+.
+Note that when this option isn't used,
+.B makepkg
+output is actually collected and printed if any errors occur.
+.
+.TP
+.B \-\-json \*[packages]
+.
+Query the AUR RPC for
+.I packages
+info as raw JSON.
+.
+Good for debugging.
+.
+.TP
+.BI \-\-build " path"
+.
+Specify build
+.I path
+when building AUR packages.
+.
+Only the
+.I full
+path of a pre-existing directory can be used.
+.
+Example:
+.
+.RSAMPLE
+aura -A foo --build=/full/path/to/build/location/
+.ERSAMPLE
+.
+.TP
+.BI \-\-builduser " user"
+.
+Specify the
+.I user
+to build packages as.
+.
+This can be useful when logged in as root and a build user is available.
+.
+.TP
+.B \-\-devel
+.
+When ran with
+.BR \-Au ,
+adds all development packages to the queue of packages to upgrade.
+.
+Devel packages are those pulled directly from online repositories,
+via git / mercurial / etc.
+.
+.TP
+.B \-\-dryrun
+.
+When ran with
+.BR \-A " or " \-Au ,
+update checks,
+PKGBUILD diffs,
+and dependency checks will be performed,
+but nothing will be built.
+.
+Also usable with
+.BR \-M .
+.
+.TP
+.B \-\-force
+.
+Always (re)build the specified packages.
+.
+Usually Aura will not rebuild packages whose versions are already available in
+the local package cache.
+.
+.TP
+.B \-\-hotedit
+.
+Before building, prompt the user if they wish to view/edit the
+.IR PKGBUILD ,
+as well as any
+.IR .install " or " .patch
+files.
+.
+However, research into packages (and by extension, their PKGBUILDs) should be
+done by the user before any building occurs.
+.
+Please use
+.BR \-Ap " and " \-Ad
+for this,
+as they will be much faster at presenting information than searching the AUR
+website manually.
+.
+Note that, since aura is run through sudo,
+your local value of
+.RB $ EDITOR
+may not be preserved.
+.
+Run as
+\(lqsudo
+.B \-E
+aura -A --hotedit \*[ellipsis]\(rq
+to preserve your environment.
+.
+To always allow environment variables to be passed,
+have a look at the
+.IR env_reset " and " env_keep
+options in
+.BR sudoers (5).
+.
+.TP
+.B \-\-skipdepcheck
+.
+Perform no dependency solving.
+.
+Consider this when using
+.B \-\-hotedit
+to avoid building annoying dependencies that aren't necessary for your special
+use-case.
+.
+.TP
+.BI \-\-vcspath " path"
+.
+Save the cloned sources of VCS packages (i.e.\& those that end in
+.IR *-git ,
+etc.) in the given
+.IR path ,
+instead of the default
+.IR /var/cache/aura/vcs/ .
+.
+.SH GLOBAL PACKAGE STATE OPTIONS (\fR\-B\fP)
+.
+.TP
+.BR \-c ", " \-\-clean \c
+.I " states-to-retain
+.
+Retains a given number of the most recently saved package states and removes the
+rest.
+.
+.TP
+.BR \-r ", " \-\-restore
+.
+Restores a record kept with
+.BR \-B .
+.
+Attempts to downgrade any packages that were upgraded since the chosen save.
+.
+Will remove any that weren't installed at the time.
+.
+.TP
+.BR \-l ", " \-\-list
+.
+Show all saved package state filenames.
+.
+.SH DOWNGRADE OPTIONS (\fR\-C\fP)
+.
+.TP
+.BR \-b ", " \-\-backup \c
+.I " path
+.
+Backup the package cache to a given directory.
+.
+The given directory must already exist.
+.
+During copying, progress will be shown.
+.
+If the copy takes too long,
+you may want to reduce the number of older versions of each package by using
+.BR \-Cc .
+.
+.TP
+.BR \-c ", " \-\-clean \c
+.I " versions-to-retain
+.
+Retains a given number of package versions for each package,
+and deletes the rest from the package cache.
+.
+Count is made from the most recent version, so using:
+.
+.RSAMPLE
+aura -Cc 3
+.ERSAMPLE
+.
+.IP
+would save the three most recent versions of each package file.
+.
+Giving the number 0 as an argument is identical to
+.BR \-Scc .
+.
+.TP
+.B \-\-notsaved
+.
+Remove only those package files which are not saved in a package record (a la
+.BR \-B ).
+.
+.TP
+.BR \-s ", " \-\-search \c
+.I " regex
+.
+Search the package cache via a
+.IR regex .
+.
+Any package name that matches the regex will be output as-is.
+.
+.SH LOGFILE OPTIONS (\fR\-L\fP)
+.
+.TP
+.BR \-i ", " \-\-info " \*[packages]"
+.
+Displays install/upgrade history for given
+.IR packages .
+.
+Under the \(lqRecent Actions\(rq section,
+only the last five entries will be displayed.
+.
+If there are less than five actions ever performed with the package,
+what is available will be printed.
+.
+.TP
+.BR \-s ", " \-\-search \c
+.I " regex
+.
+Search the pacman log file via a
+.IR regex .
+.
+Useful for singling out any and all actions performed on a package.
+.
+.SH ORPHAN PACKAGE OPTIONS (\fR\-O\fP)
+.
+.TP
+.BR \-a ", " \-\-adopt " \*[packages]"
+.
+Mark
+.I packages
+as being explicitly installed (i.e.\& it's not a dependency).
+.
+.TP
+.BR \-j ", " \-\-abandon
+.
+Uninstall all orphan packages.
+.
+.SH ANALYSIS OPTIONS (\fR\-P\fP)
+.
+.TP
+.BR \-f ", " \-\-file \c
+.I " path
+.
+Analyse a PKGBUILD at the specified
+.IR path .
+.
+.TP
+.BR \-d ", " \-\-dir \c
+.I " path
+.
+Analyse a
+.IR path /PKGBUILD
+found in the specified directory.
+.
+.TP
+.BR \-a ", " \-\-audit
+.
+Analyse the PKGBUILDs of all locally installed AUR packages.
+.
+.SH PACMAN / AURA DUAL FUNCTIONALITY OPTIONS
+.
+.TP
+.B \-\-noconfirm
+.
+Never ask for any Aura or Pacman confirmation.
+.
+Any time a prompt would appear,
+say before building or installation,
+it is assumed the user answered in whatever way would progress the program.
+.
+.TP
+.B \-\-needed
+.
+Don't rebuild/reinstall packages that are already up to date.
+.
+.TP
+.B \-\-debug
+.
+View some handy debugging information.
+.
+.TP
+.BI \-\-color " when"
+.
+Specify when to enable colouring.
+.
+Without this flag, both Aura and Pacman will attempt to colour text if the
+terminal allows it.
+.
+Otherwise, you can pass
+.BR always " or " never
+to be specific about your wants.
+.
+.TP
+.BI \-\-overwrite " glob"
+.
+If there are file conflicts during installation,
+overwrite conflicting files that match the given
+.I glob
+pattern.
+.
+.SH EXPOSED MAKEPKG OPTIONS
+.
+.TP
+.B \-\-ignorearch
+.
+Ignores processor architecture when building packages.
+.
+.TP
+.B \-\-allsource
+.
+Creates a
+.I .src
+file containing all the downloaded sources (code, etc.\&)
+and stores it at
+.IR /var/cache/aura/src/ .
+.
+To change the location where sources are stored,
+use the
+.B \-\-allsourcepath
+flag on command line or via
+.BR aura.conf (5).
+.
+.TP
+.B \-\-skipinteg
+.
+Skip package source integrity checks (hash sums).
+.
+.TP
+.B \-\-skippgpcheck
+.
+Skip all PGP checks.
+.
+.SH LANGUAGE OPTIONS
+.
+Aura is available in multiple languages.
+.
+As options, they can be used with either their English names or their real
+names written in their native characters.
+.
+The available languages are, in option form:
+.
+.TS \" Tab-separated
+l l.
+\fB\-\-english\fP	(default)
+\fB\-\-japanese\fP	\fB\-\-日本語\fP
+\fB\-\-polish\fP	\fB\-\-polski\fP
+\fB\-\-croatian\fP	\fB\-\-hrvatski\fP
+\fB\-\-swedish\fP	\fB\-\-svenska\fP
+\fB\-\-german\fP	\fB\-\-deutsch\fP
+\fB\-\-spanish\fP	\fB\-\-español\fP
+\fB\-\-portuguese\fP	\fB\-\-português\fP
+\fB\-\-french\fP	\fB\-\-français\fP
+\fB\-\-russian\fP	\fB\-\-русский\fP
+\fB\-\-italian\fP	\fB\-\-italiano\fP
+\fB\-\-serbian\fP	\fB\-\-српски\fP
+\fB\-\-norwegian\fP	\fB\-\-norsk\fP
+\fB\-\-indonesian\fP
+\fB\-\-chinese\fP	\fB\-\-中文\fP
+\fB\-\-esperanto\fP
+\fB\-\-dutch\fP	\fB\-\-nederlands\fP
+\fB\-\-romanian\fP	\fB\-\-română\fP
+\fB\-\-vietnamese\fP
+\fB\-\-czech\fP	\fB\-\-čeština\fP
+.TE
+.
+.SH PRO TIPS
+.
+.IP \(bu 2n
+.
+If you build a package and then choose not to install it,
+the built package file will still be moved to the cache.
+You can then install it whenever you want with
+.BR \-C .
+.
+.IP \(bu 2n
+.
+Research packages using
+.BR \-Ad \ ( \-\-deps ),
+.BR \-Ai \ ( \-\-info )
+and
+.BR \-Ap \ ( \-\-pkgbuild )!
+.
+.IP \(bu 2n
+.
+When upgrading, use
+.B \-Akua
+instead of just
+.BR \-Au .
+.
+This will remove make deps, as well as show PKGBUILD diffs before building.
+.
+.SH SEE ALSO
+.
+.BR aura.conf (5),
+.BR pacman (8),
+.BR pacman.conf (5),
+.BR makepkg (8)
+.
+.SH BUGS
+.
+It is not recommended to install non-AUR packages with pacman or aura.
+.
+Aura will assume they are AUR packages during a
+.B \-Au
+and attempt to upgrade them.
+.
+If a name collision occurs (that is, if there is a legitimate AUR package with
+the same name as the one you installed) previous installations could be
+overwritten.
+.
+.SH AUTHOR
+.
+Colin Woodbury <colin@fosskers.ca>
+.
+.SH CONTRIBUTORS
+.
+.TS \" Tab-separated
+l .
+Chris Warrick
+Brayden Banks
+Denis Kasak
+Edwin Marshall
+Jimmy Brisson
+Kyle Raftogianis
+Nicholas Clarke
+.TE
+.
+.SH TRANSLATORS
+.
+.TS \" Tab-separated
+c l .
+Polish	Chris Warrick and Michał Kurek
+Croatian	Denis Kasak and "stranac"
+Swedish	Fredrik Haikarainen and Daniel Beecham
+German	Lukas Niederbremer
+Spanish	Alejandro Gómez, Sergio Conde, and Max Ferrer
+Portuguese	Henry Kupty, Thiago Perrotta, and Wagner Amaral
+French	Ma Jiehong and Fabien Dubosson
+Russian	Kyrylo Silin and Alexey Kotlyarov
+Italian	Bob Valantin and Cristian Tentella
+Serbian	Filip Brcic
+Norwegian	"chinatsun"
+Indonesian	"pak tua Greg"
+Chinese	Kai Zhang
+Japanese	Onoue Takuro and Colin Woodbury
+Esperanto	Zachary Matthews
+Dutch	Joris Blanken and Heimen Stoffels
+Turkish	Cihan Alkan
+Arabic	"Array in a Matrix"
+Ukrainian	Andriy Cherniy
+Romanian	"90" and "benone"
+Vietnamese	"Kritiqual"
+Czech	Daniel Rosel
+Korean	"Nioden"
+.TE
diff --git a/misc/aura.conf b/misc/aura.conf
new file mode 100644
--- /dev/null
+++ b/misc/aura.conf
@@ -0,0 +1,68 @@
+# --- Aura Config --- #
+#
+# Template updated on: Mon 11 May 2020
+#
+# You can uncomment the various settings below in order to activate them.
+# Otherwise, Aura will use its internal defaults.
+
+# --- Language --- #
+# Aura can be used in different human languages. This field must be a 2-letter
+# language code, similar to those used in LOCALE. The available codes are:
+#
+# |------+------------|
+# | Code | Language   |
+# |------+------------|
+# | nl   | Dutch      |
+# | en   | English    |
+# | de   | German     |
+# | nb   | Norwegian  |
+# | sv   | Swedish    |
+# |------+------------|
+# | fr   | French     |
+# | it   | Italian    |
+# | pt   | Portuguese |
+# | es   | Spanish    |
+# | ro   | Romanian   |
+# |------+------------|
+# | ar   | Arabic     |
+# |------+------------|
+# | hr   | Croatian   |
+# | cs   | Czech      |
+# | pl   | Polish     |
+# | ru   | Russian    |
+# | sr   | Serbian    |
+# | uk   | Ukrainian  |
+# |------+------------|
+# | zh   | Chinese    |
+# | id   | Indonesian |
+# | ja   | Japanese   |
+# | vi   | Vietnamese |
+# |------+------------|
+# | eo   | Esperanto  |
+# |------+------------|
+
+# Uncomment to activate:
+# language = en
+
+# --- Build Settings --- #
+# Aura runs via `sudo` but builds packages as the underlying non-root user.
+# Here, you can alter who that user is, and where packages are built.
+
+# Uncomment to activate:
+# user = YOU
+# buildpath = /tmp
+# allsourcepath = /var/cache/aura/src
+# vcspath = /var/cache/aura/vcs
+
+# --- PKGBUILD Analysis --- #
+# Aura automatically scans PKGBUILDs for malicious bash usage and other "bad
+# practices". Here, you can turn those scans off.
+
+# Uncomment to activate:
+# analyse = True
+
+# --- Misc. --- #
+
+# The editor to use with `--hotedit`.
+# Uncomment to activate:
+# editor = vi
diff --git a/misc/aura.conf.5 b/misc/aura.conf.5
new file mode 100644
--- /dev/null
+++ b/misc/aura.conf.5
@@ -0,0 +1,150 @@
+'\" t
+.\" Man page for `aura.conf`
+.\" Written by Colin Woodbury <colin@fosskers.ca>
+.
+.TH aura.conf 5 "2021 January" "Aura" "Aura Manual"
+.
+.de SAMPLE      \" Indented example - on its own paragraph.
+.  P
+.  RS
+.  EX
+..
+.de ESAMPLE     \" End of Indented example.
+.  EE
+.  RE
+..
+.de RSAMPLE     \" Relative sample - even more indented example.
+.  RS
+.  SAMPLE
+..
+.de ERSAMPLE    \" End of Relative sample.
+.  ESAMPLE
+.  RE
+..
+.
+.SH NAME
+.
+aura.conf \- aura package manager configuration file
+.
+.SH SYNOPSIS
+.
+/etc/aura.conf
+.
+.SH DESCRIPTION
+.
+Aura can be configured at runtime by commandline flags,
+but for users who use the same options all the time
+(say, build paths or language flags) this can be verbose.
+.I aura.conf
+lets you make these common settings permanent.
+.
+.SH EXAMPLE
+.
+Overview of options in
+.IR aura.conf :
+.
+.SAMPLE
+#
+# aura.conf
+#
+
+#[ Language ]
+language = en
+
+#[ Build Settings ]
+user = <you>
+buildpath = /tmp
+vcspath = /var/cache/aura/vcs
+
+#[ Misc. ]
+editor = vi
+.ESAMPLE
+.
+.SH OPTIONS
+.
+.TP
+.B language
+.
+Aura can be used in different human languages.
+This field must be a 2-letter language code,
+similar to those used in LOCALE.
+The available codes are:
+.
+.TS \" Tab-separated
+box;
+l l.
+Code	Language
+
+nl	Dutch
+en	English
+de	German
+nb	Norwegian
+sv	Swedish
+
+fr	French
+it	Italian
+pt	Portuguese
+es	Spanish
+ro	Romanian
+
+hr	Croatian
+cs	Czech
+pl	Polish
+ru	Russian
+sr	Serbian
+uk	Ukrainian
+
+ar	Arabic
+
+zh	Chinese
+id	Indonesian
+ja	Japanese
+vi	Vietnamese
+
+eo	Esperanto
+.TE
+.
+.TP
+.B user
+.
+The real, non-sudo user to build packages as.
+.
+.TP
+.B buildpath
+.
+The location on the filesystem in which to build packages.
+.
+.TP
+.B allsourcepath
+.
+The location on the filesystem in which to save "source packages" built with
+.BR \-\-allsource .
+.
+.TP
+.B vcspath
+.
+The location on the filesystem in which to store the cloned repositories of
+\fI*-git\fR, etc., packages.
+.
+.TP
+.B analyse
+.
+Aura automatically scans PKGBUILDs for malicious bash usage
+and other "bad practices".
+Set this to
+.B False
+to turn off.
+.
+.TP
+.B editor
+.
+The editor to use during
+.BR \-\-hotedit .
+.
+.SH SEE ALSO
+.
+.BR aura (8)
+.
+.SH AUTHOR
+.
+Colin Woodbury <colin@fosskers.ca>
diff --git a/misc/completions/_aura b/misc/completions/_aura
new file mode 100644
--- /dev/null
+++ b/misc/completions/_aura
@@ -0,0 +1,590 @@
+#compdef aura
+
+# Zsh completion file for Aura, based on pacman's
+# copy this file to /usr/share/site-functions/_aura
+
+typeset -A opt_args
+setopt extendedglob
+
+# options for passing to _arguments: main aura commands
+_aura_opts_commands=(
+    {-A,--aursync}'[Install and manage AUR packages]'
+    {-B,--save}'[Manage the global package state]'
+    {-C,--downgrade}'[Manage the package cache]'
+    {-L,--viewlog}'[Analyse the pacman log file]'
+    {-M,--abssync}'[Build and install from the ABS tree]'
+    {-O,--orphans}'[Manage orphan packages]'
+    {-Q,--query}'[Query the package database]'
+    {-R,--remove}'[Remove a packags]'
+    {-S,--sync}'[Synchronize repo packages]'
+    {-U,--upgrade}'[Upgrade packages]'
+    {-V,--version}'[Display version information]'
+    '--viewconf[View the pacman config file read-only]'
+    '--languages[Display available output languages]'
+    '(-h --help)'{-h,--help}'[Help message]'
+)
+
+# options for passing to _arguments: options common to all commands
+_aura_opts_common=(
+    {-b,--dbpath}'[Alternate database location]:database_location:_files -/'
+    '--color[colorize the output]:color options:(always never auto)'
+    {-h,--help}'[Display syntax for the given operation]'
+    {-r,--root}'[Set alternate installation root]:installation root:_files -/'
+    {-v,--verbose}'[Be more verbose]'
+    '--cachedir[Alternate package cache location]:cache_location:_files -/'
+    '--config[An alternate configuration file]:config file:_files'
+    '--debug[Display debug messages]'
+    '--gpgdir[Set an alternate home directory for GnuPG]:_files -/'
+    '--logfile[An alternate log file]:config file:_files'
+    '--noconfirm[Do not ask for confirmation]'
+    '--no-pp[Do not use powerpill]'
+    '--noprogressbar[Do not show a progress bar when downloading files]'
+    '--noscriptlet[Do not execute the install scriptlet if one exists]'
+    '--print[Only print the targets instead of performing the operation]'
+)
+
+# options for passing to _arguments: options for --upgrade commands
+_aura_opts_pkgfile=(
+    '*-d[Skip dependency checks]'
+    '*--nodeps[Skip dependency checks]'
+    '--dbonly[Only remove database entry, do not remove files]'
+    '--force[Overwrite conflicting files]'
+    '--needed[Do not reinstall up to date packages]'
+    '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
+)
+
+# options for passing to _arguments: subactions for --query command
+_aura_opts_query_actions=(
+    '(-Q --query)'{-Q,--query}
+    {-g,--groups}'[View all members of a package group]:*:package groups:->query_group'
+    {-o,--owns}'[Query the package that owns a file]:file:_files'
+    {-p,--file}'[Package file to query]:*:package file:->query_file'
+    {-s,--search}'[Search package names and descriptions]:*:search text:->query_search'
+)
+
+# options for passing to _arguments: options for --query and subcommands
+_aura_opts_query_modifiers=(
+    {-c,--changelog}'[List package changelog]'
+    {-d,--deps}'[List packages installed as dependencies]'
+    {-e,--explicit}'[List packages explicitly installed]'
+    {\*-i,\*--info}'-i[View package information]'
+    #'-ii[View package information including backup files]'
+    {\*-k,\*--check}'[Check package files]'
+    {-l,--list}'-l[List package contents]'
+    {-m,--foreign}'-m[List installed packages not found in sync db(s)]'
+    {-n,--native}'[List installed packages found in sync db(s)]'
+    {-q,--quiet}'[Display less information for certain operations.]'
+    {-t,--unrequired}'[List packages not required by any package]'
+    {-u,--upgrades}'[List packages that can be upgraded]'
+)
+
+# options for passing to _arguments: options for --remove command
+_aura_opts_remove=(
+    {-c,--cascade}'[Remove all dependent packages]'
+    {*-d,*--nodeps}'[Skip dependency checks]'
+    {-n,--nosave}'[Remove protected configuration files]'
+    {\*-s,\*--recursive}'[Remove dependencies not required by other packages]'
+    '--dbonly[Only remove database entry, do not remove files]'
+    '*:installed package:_aura_completions_installed_packages'
+)
+
+# options for passing to _arguments: options for commands dealing with the database
+_aura_opts_database=(
+    '--asdeps[mark packages as non-explicitly installed]'
+    '--asexplicit[mark packages as explicitly installed]'
+    '*:installed package:_aura_completions_installed_packages'
+)
+
+# options for passing to _arguments: options for --sync command
+_aura_opts_sync_actions=(
+    '(-S --sync)'{-S,--sync}
+    {\*-c,\*--clean}'[Remove old packages from cache]:\*:clean:->sync_clean'
+    #'*-cc[Remove all packages from cache]:*:clean:->sync_clean'
+    {-g,--groups}'[View all members of a package group]:*:package groups:->sync_group'
+    {-s,--search}'[Search package names and descriptions]:*:search text:->sync_search'
+    '--dbonly[Only remove database entry, do not remove files]'
+    '--needed[Do not reinstall up to date packages]'
+    '--recursive[Reinstall all dependencies of target packages]'
+)
+
+# options for passing to _arguments: options for --sync command
+_aura_opts_sync_modifiers=(
+    {\*-d,\*--nodeps}'[Skip dependency checks]'
+    {\*-i,\*--info}'[View package information]'
+    {-l,--list}'[List all packages in a repository]'
+    {-p,--print}'[Print download URIs for each package to be installed]'
+    {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]'
+    {-w,--downloadonly}'[Download packages only]'
+    {\*-y,\*--refresh}'[Download fresh package databases]'
+    '*--ignore[Ignore a package upgrade]:package: _aura_completions_all_packages'
+    '*--ignoregroup[Ignore a group upgrade]:package group:_aura_completions_all_groups'
+    '--asdeps[Install packages as non-explicitly installed]'
+    '--asexplicit[Install packages as explicitly installed]'
+    '--force[Overwrite conflicting files]'
+
+    #'-q[Display less information for certain operations.]'
+)
+
+# options for passing to _arguments: options for --aursync command
+_aura_opts_aursync_actions=(
+    '(-A --aursync)'{-A,--aursync}
+    {-p,--pkgbuild}'[Display an AUR package''s PKGBUILD]'
+    {-s,--search}'[Search AUR package names and descriptions]'
+    {-w,--downloadonly}'[Download an AUR package''s source tarball]'
+)
+
+# options for passing to _arguments: options for --aursync command
+_aura_opts_aursync_modifiers=(
+    {-a,--delmakedeps}'[Uninstall unneeded build deps after installation]'
+    {-d,--deps}'[Display package dependencies. Recursive for AUR packages]'
+    {\*-i,\*--info}'[Display AUR package information]'
+    {-k,--diff}'[Show PKGBUILD diffs when upgrading]'
+    {-u,--sysupgrade}'[Upgrade all installed AUR packages]'
+    {-x,--unsuppress}'[Unsuppress makepkg output during building]'
+    '*--aurignore[Ignore AUR packages when installing]:package: _aura_completions_aur_packages'
+    '--build[Build packages in specified path]'
+    '--builduser[Use specified user to build packages]'
+    {--dev,--devel}'[With -Au, also upgrades all development packages]'
+    "--dryrun[Perform checks, but don't build]"
+    '--hotedit[Prompt user to edit PKGBUILD before dep checks]'
+    '--ignorearch[makepkg will ignore processor architecture]'
+)
+
+# options for passing to _arguments: options for --save commands
+_aura_opts_save=(
+    {-c,--clean}'[Given n, save n recent package states and remove the rest]'
+    {-r,--restore}'[Restore a previously saved package state]'
+)
+
+# options for passing to _arguments: options for --downgrade commands
+_aura_opts_downgrade=(
+    {-b,--backup}'[Backup the cache to a given directory]'
+    {-c,--clean}'[Given n, save n versions of each package file]'
+    {-s,--search}'[Search the cache via a regex]'
+    '*:installed package:_aura_completions_installed_packages'
+)
+
+# options for passing to _arguments: options for --viewlog commands
+typeset -a _aura_opts_viewlog
+_aura_opts_viewlog=(
+    '-i[View package installation history.]'
+    '-s[Search log file via a regex.]'
+)
+
+# options for passing to _arguments: options for --orphans commands
+typeset -a _aura_opts_orphans
+_aura_opts_orphans=( '-j[Uninstall all orphan packages.]' )
+
+# handles --help subcommand
+_aura_action_help() {
+    _arguments -s : \
+        "$_aura_opts_commands[@]"
+}
+
+# handles cases where no subcommand has yet been given
+_aura_action_none() {
+    _arguments -s : \
+        "$_aura_opts_commands[@]"
+}
+
+# handles --query subcommand
+_aura_action_query() {
+    local context state line
+    typeset -A opt_args
+
+    case $state in
+        query_file)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
+            ;;
+        query_group)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:groups:_aura_completions_installed_groups'
+            ;;
+        query_owner)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:file:_files'
+            ;;
+        query_search)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:search text: '
+            ;;
+        *)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_actions[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:package:_aura_completions_installed_packages'
+            ;;
+    esac
+}
+
+# handles --remove subcommand
+_aura_action_remove() {
+    _arguments -s : \
+        '(--remove -R)'{-R,--remove} \
+        "$_aura_opts_common[@]" \
+        "$_aura_opts_remove[@]"
+}
+
+# handles --database subcommand
+_aura_actions_database() {
+    _arguments -s : \
+        '(--database -D)'{-D,--database} \
+        "$_aura_opts_common[@]" \
+        "$_aura_opts_database[@]"
+}
+
+# handles --deptest subcommand
+_aura_action_deptest() {
+    _arguments -s : \
+        '(--deptest)-T' \
+        "$_aura_opts_aura_common[@]" \
+        ":packages:_aura_all_packages"
+}
+
+# handles --sync subcommand
+_aura_action_sync() {
+    local context state line
+    typeset -A opt_args
+
+    case $state in
+        sync_clean)
+            _arguments -s : \
+                {\*-c,\*--clean}'[Remove old packages from cache]'
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                ;;
+        sync_group)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '(-g --group)'{-g,--groups} \
+                '*:package group:_aura_completions_all_groups'
+            ;;
+        sync_search)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '*:search text: '
+            ;;
+        *)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_actions[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '*:package:_aura_completions_repo_packages'
+            ;;
+    esac
+}
+
+# handles --upgrade subcommand
+_aura_action_upgrade() {
+    _arguments -s : \
+        '(-U --upgrade)'{-U,--upgrade} \
+        "$_aura_opts_common[@]" \
+        "$_aura_opts_pkgfile[@]"
+}
+
+# handles --version subcommand
+_aura_action_version() {
+    # no further arguments
+    return 0
+}
+
+# provides completions for package groups
+_aura_completions_all_groups() {
+    local -a cmd groups
+    _aura_get_command
+    groups=( $(_call_program groups $cmd[@] -Sg) )
+    typeset -U groups
+    compadd "$@" -a groups
+}
+
+# provides completions for packages available from repositories
+# these can be specified as either 'package' or 'repository/package'
+_aura_completions_repo_packages() {
+    local -a cmd packages repositories packages_long
+    _aura_get_command
+
+    if compset -P '*/'; then
+        packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) )
+        typeset -U packages
+        _wanted repo_packages expl "repository/package" compadd ${(@)packages}
+    else
+        packages=( $(_call_program packages $cmd[@] -Sql) )
+        typeset -U packages
+        _wanted packages expl "packages" compadd - "${(@)packages}"
+
+        repositories=( aur ${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options} )
+        typeset -U repositories
+        _wanted repo_packages expl "repository/package" compadd -S "/" $repositories
+    fi
+}
+
+# provides completions for packages in the AUR
+_aura_completions_aur_packages() {
+    local -a cmd packages repositories packages_long
+    _aura_get_command
+
+    packages=()
+    if [[ -d /var/aur ]]; then
+        packages=( $(ls /var/aur) )
+    fi
+    typeset -U packages
+    _wanted aur_packages expl "packages" compadd - "${(@)packages}"
+}
+
+# provides completions for packages available from repositories and the AUR
+# these can be specied as either 'package' or 'repository/package'
+_aura_completions_all_packages() {
+    _alternative : \
+        'aurpkgs:aur packages:_aura_completions_aur_packages' \
+        'repopkgs:repository packages:_aura_completions_repo_packages'
+}
+
+_aura_all_packages() {
+    _alternative : \
+        'localpkgs:local packages:_aura_completions_installed_packages' \
+        'aurpkgs:aur packages:_aura_completions_aur_packages' \
+        'repopkgs:repository packages:_aura_completions_repo_packages'
+}
+
+# provides completions for package groups
+_aura_completions_installed_groups() {
+    local -a cmd groups
+    _aura_get_command
+    groups=(${(o)${(f)"$(_call_program groups $cmd[@] -Qg)"}% *})
+    typeset -U groups
+    compadd "$@" -a groups
+}
+
+# provides completions for installed packages
+_aura_completions_installed_packages() {
+    local -a cmd packages packages_long
+    packages_long=(/var/lib/pacman/local/*(/))
+    packages=( ${${packages_long#/var/lib/pacman/local/}%-*-*} )
+    compadd "$@" -a packages
+}
+
+# provides completions for repository names
+_aura_completions_repositories() {
+    local -a cmd repositories
+    repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
+    # Uniq the array
+    typeset -U repositories
+    compadd "$@" -a repositories
+}
+
+# builds command for invoking pacman in a _call_program command - extracts
+# relevant options already specified (config file, etc)
+# $cmd must be declared by calling function
+_aura_get_command() {
+    # this is mostly nicked from _perforce
+    cmd=( "aura" "2>/dev/null" )
+    integer i
+    for (( i = 2; i < CURRENT - 1; i++ )); do
+        if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then
+            cmd+=( ${words[i,i+1]} )
+        fi
+    done
+}
+
+_aura_comp() {
+    local -a args cmds
+    local tmp
+    args=( ${${${(M)words:#-*}#-}:#-*} )
+    _message 'now what'
+    for tmp in $words; do
+        cmds+=("${${_aura_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}")
+    done
+    case $args in #$words[2] in
+        h*)
+            if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then
+                _aura_action_help
+            else
+                _message "no more arguments"
+            fi
+            ;;
+        *h*)
+            _message "no more arguments"
+            ;;
+        D*)
+            _aura_action_database
+            ;;
+        Q*g*) # ipkg groups
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:groups:_aura_completions_installed_groups'
+            ;;
+        Q*o*) # file
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:package file:_files'
+            ;;
+        Q*p*) # file *.pkg.tar.*
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_query_modifiers[@]" \
+                '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"'
+            ;;
+        T*)
+            _aura_action_deptest
+            ;;
+        Q*)
+            _aura_action_query
+            ;;
+        R*)
+            _aura_action_remove
+            ;;
+        S*c*)
+            _arguments -s : \
+                '(-S --sync)'{-S,--sync} \
+                '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \
+                "$_aura_opts_common[@]"
+            ;;
+        S*l*) # repos
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '*:package repo:_aura_completions_repositories' \
+                ;;
+        S*g*) # pkg groups
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '*:package group:_aura_completions_all_groups'
+            ;;
+        S*s)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_sync_modifiers[@]" \
+                '*:search text: '
+                ;;
+        S*)
+            _aura_action_sync
+            ;;
+        U*)
+            _aura_action_upgrade
+            ;;
+        V*)
+            _aura_action_version
+            ;;
+        A*)
+            _arguments -s : \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_aursync_modifiers[@]" \
+                "$_aura_opts_aursync_actions[@]" \
+                '*:package:_aura_completions_aur_packages'
+                ;;
+        B*)
+            _arguments -s : \
+                '(-B --save)'{-B,--save} \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_save[@]"
+      ;;
+        C*)
+            _arguments -s : \
+                '(-C --downgrade)'{-C,--downgrade} \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_downgrade[@]"
+            ;;
+        L*)
+            _arguments -s : \
+                '(-L --viewlog)'{-L,--viewlog} \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_viewlog[@]"
+            ;;
+        M*)
+            _arguments -s : \
+                '(-M --abssync)'{-M,--abssync} \
+                "$_aura_opts_common[@]"
+            ;;
+        O*)
+            _arguments -s : \
+                '(-O --orphans)'{-O,--orphans} \
+                "$_aura_opts_common[@]" \
+                "$_aura_opts_orphans[@]"
+            ;;
+        *)
+            case ${(M)words:#--*} in
+                *--help*)
+                    if (( ${(W)#cmds} == 1 )); then
+                        _aura_action_help
+                    else
+                        return 0
+                    fi
+                    ;;
+                *--sync*)
+                    _aura_action_sync
+                    ;;
+                *--query*)
+                    _aura_action_query
+                    ;;
+                *--remove*)
+                    _aura_action_remove
+                    ;;
+                *--deptest*)
+                    _aura_action_deptest
+                    ;;
+                *--database*)
+                    _aura_action_database
+                    ;;
+                *--version*)
+                    _aura_action_version
+                    ;;
+                *--upgrade*)
+                    _aura_action_upgrade
+                    ;;
+
+                *--aursync*)
+                    _arguments -s : \
+                        "$_aura_opts_common[@]" \
+                        "$_aura_opts_aursync_modifiers[@]" \
+                        "$_aura_opts_aursync_actions[@]" \
+                        '*:package:_aura_completions_aur_packages'
+                    ;;
+                *--save*)
+                    _arguments -s : \
+                        '(-B --save)'{-B,--save} \
+                        "$_aura_opts_common[@]" \
+                        "$_aura_opts_save[@]"
+                    ;;
+                *--downgrade*)
+                    _arguments -s : \
+                        '(-C --downgrade)'{-C,--downgrade} \
+                        "$_aura_opts_common[@]" \
+                        "$_aura_opts_downgrade[@]"
+                    ;;
+                *--viewlog*)
+                    _arguments -s : \
+                        '(-L --viewlog)'{-L,--viewlog} \
+                        "$_aura_opts_common[@]" \
+                        "$_aura_opts_viewlog[@]"
+                    ;;
+                *--orphans*)
+                    _arguments -s : \
+                        '(-O --orphans)'{-O,--orphans} \
+                        "$_aura_opts_common[@]" \
+                        "$_aura_opts_orphans[@]"
+                    ;;
+                *)
+                    _aura_action_none
+                    ;;
+            esac
+            ;;
+    esac
+}
+
+# run the main dispatcher
+_aura_comp "$@"
diff --git a/misc/completions/bashcompletion.sh b/misc/completions/bashcompletion.sh
new file mode 100644
--- /dev/null
+++ b/misc/completions/bashcompletion.sh
@@ -0,0 +1,104 @@
+# This file is in the public domain.
+
+_aura_compgen() {
+  local i r
+  COMPREPLY=($(compgen -W '$*' -- "$cur"))
+  for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
+    for r in ${!COMPREPLY[@]}; do
+      if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
+        unset 'COMPREPLY[r]'; break
+      fi
+    done
+  done
+}
+
+_aura_ptr2comp() {
+  local list= x y
+  for x; do
+    for y in '0 --' '1 -'; do
+      eval 'set -- ${'$x'[${y% *}]}'
+      list+=\ ${@/#/${y#* }}
+    done
+  done
+  _aura_compgen $list
+}
+
+_aura_incomp() {
+  local r="[[:space:]]-(-${1#* }[[:space:]]|[[:alnum:]_]*${1% *})"; [[ $COMP_LINE =~ $r ]]
+}
+
+_aura_pkg() {
+  _aura_compgen "$(
+    if [[ $2 ]]; then
+      \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u
+    else
+      \pacman -$1 2>/dev/null
+    fi
+  )"
+}
+
+_aura_repo_list() {
+  _aura_compgen "$(pacman-conf --repo-list)"
+}
+
+_aura() {
+  compopt -o default
+  local common core database files query remove sync upgrade o
+  local cur prev words cword
+  _init_completion || return
+  database=('asdeps asexplicit')
+  files=('list machinereadable refresh regex' 'l x y')
+  query=('changelog check deps explicit file foreign groups info list native owns
+          search unrequired upgrades' 'c e g i k l m n o p s t u')
+  remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u')
+  sync=('asdeps asexplicit clean dbonly downloadonly groups ignore ignoregroup
+         info list needed nodeps assume-installed print refresh recursive search sysupgrade'
+        'c g i l p s u w y')
+  upgrade=('asdeps asexplicit needed nodeps assume-installed print recursive' 'p')
+  common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
+           noconfirm noprogressbar noscriptlet quiet root verbose' 'b d h q r v')
+  core=('aursync save downgrade database files viewlog help orphans analysis query remove sync upgrade version' 'A B C D F L O P Q R S U V h')
+
+  for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade'; do
+    _aura_incomp "$o" && break
+  done
+
+  if [[ $? != 0 ]]; then
+    _aura_ptr2comp core
+  elif [[ ! $prev =~ ^-[[:alnum:]_]*[Vbhr] &&
+    ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]
+  then
+    [[ $cur = -* ]] && _aura_ptr2comp ${o#* } common ||
+      case ${o% *} in
+      # Pacman Commands
+      D|R)
+          _aura_pkg Qq;;
+      F)
+        { _aura_incomp 'l list'   && _aura_pkg Slq ; }       ||
+          compopt +o default;;
+      Q)
+        { _aura_incomp 'g groups' && _aura_pkg Qg sort; }    ||
+        { _aura_incomp 'p file'   && _aura_file; }           ||
+        { _aura_incomp 's search' && compopt +o default; }     ||
+        { _aura_incomp 'u upgrades' && compopt +o default; }   ||
+          _aura_incomp 'o owns'   ||
+          _aura_pkg Qq;;
+      S)
+        { _aura_incomp 'g groups' && _aura_pkg Sg; }      ||
+        { _aura_incomp 'l list'   && _aura_repo_list; } ||
+        { _aura_incomp 's search' && compopt +o default; }  ||
+          _aura_pkg Slq;;
+      U)
+          _aura_file;;
+      esac
+  fi
+  true
+}
+
+_aura_file() {
+  compopt -o filenames; _filedir 'pkg.tar*'
+}
+
+complete -F _aura aura
+
+# ex:et ts=2 sw=2 ft=sh
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE TemplateHaskell #-}
 
 module Main ( main ) where
 
@@ -32,28 +33,28 @@
     , testCase "parseDep - python2-lxml>=3.1.0" $ do
         let pn = "python2-lxml>=3.1.0"
             p = parseDep pn
-        p @?= Just (Dep "python2-lxml" . AtLeast . Ideal $ SemVer 3 1 0 [] Nothing)
+        p @?= Just (Dep "python2-lxml" $ AtLeast $(versioningQ "3.1.0"))
         fmap renderedDep p @?= Just pn
     , testCase "parseDep - foobar>1.2.3" $ do
         let pn = "foobar>1.2.3"
             p = parseDep pn
-        p @?= Just (Dep "foobar" . MoreThan . Ideal $ SemVer 1 2 3 [] Nothing)
+        p @?= Just (Dep "foobar" $ MoreThan $(versioningQ "1.2.3"))
         fmap renderedDep p @?= Just pn
     , testCase "parseDep - foobar=1.2.3" $ do
         let pn = "foobar=1.2.3"
             p = parseDep pn
-        p @?= Just (Dep "foobar" . MustBe . Ideal $ SemVer 1 2 3 [] Nothing)
+        p @?= Just (Dep "foobar" $ MustBe $(versioningQ "1.2.3"))
         fmap renderedDep p @?= Just pn
     ]
   , testGroup "Aura.Types"
     [ testCase "simplepkg"
       $ simplepkg (fromJust $ packagePath "/var/cache/pacman/pkg/linux-is-cool-3.2.14-1-x86_64.pkg.tar.xz")
-      @?= Just (SimplePkg "linux-is-cool" . Ideal $ SemVer 3 2 14 [[Digits 1]] Nothing)
+      @?= Just (SimplePkg "linux-is-cool" $(versioningQ "3.2.14-1"))
     , testCase "simplepkg'"
-      $ simplepkg' "xchat 2.8.8-19" @?= Just (SimplePkg "xchat" . Ideal $ SemVer 2 8 8 [[Digits 19]] Nothing)
+      $ simplepkg' "xchat 2.8.8-19" @?= Just (SimplePkg "xchat" $(versioningQ "2.8.8-19"))
     ]
   , testGroup "Aura.Packages.Repository"
-    [ testCase "extractVersion" $ extractVersion firefox @?= Just (Ideal $ SemVer 60 0 2 [[Digits 1]] Nothing)
+    [ testCase "extractVersion" $ extractVersion firefox @?= Just $(versioningQ "60.0.2-1")
     ]
   , testGroup "Aura.Pacman"
     [ testCase "Parsing pacman.conf" $ do
