Delivers setup and configuration for Ubuntu like a god.
hermes configures Ubuntu by installing various packages and (re-)placing configuration files. The setup is mostly unopinionated, non-intrusive, and tries to enhance the out-of-the-box experience of Ubuntu. Optionally, configuration of the GUI is supported. hermes is built for x86_64
(full support) and aarch64
(only non-GUI).
Note
While optional, I recommend running sudo apt-get --yes update && sudo apt-get --yes upgrade
before using hermes.
To download the latest version of hermes, run the following commands:
HERMES_VERSION="$(curl -sSIL -w '%{url_effective}' -o /dev/null "https://github.com/georglauterbach/hermes/releases/latest" | sed 's|.*/||')"
sudo curl --silent --show-error --fail --location --output /usr/local/bin/hermes "https://github.com/georglauterbach/hermes/releases/download/${HERMES_VERSION}/hermes-${HERMES_VERSION}-$(uname -m)-unknown-linux-musl"
sudo chmod +x /usr/local/bin/hermes
To see the help message and install hermes, run the following commands:
hermes --help
hermes
To update hermes, run the following command
hermes --version
hermes --update --non-interactive # works on >= v3.0.0-beta.14
Caution
hermes overwrites files like .bashrc
. You should make a backup of your Bash configuration files before running hermes. You can later re-introduce the code from your .bashrc
into a new file [1].
The setup of Bash is performed by ${HOME}/.bashrc
and scripts in ${HOME}/.config/bash/
. These setup files can be found here.
If you want to modify the havior of hermes, take a look at {HOME}/.config/bash/20-custom_early.sh
. This file contains variables that control the initialization of programs and their overrides as well as other configurations. The "Programs" section below referrs to these variables.
To add code that would normally go to .bashrc
, edit ${HOME}/.config/bash/99-cutom_late.sh
. These two files are not overwritten by hermes if you run hermes again.
hermes installs additional programs into ${HOME}/.local/bin/
. These programs include:
- Atuin
- "magical" shell history using SQLite rather than a file
- enbled with
HERMES_INIT_ATUIN
CTRL+e
(orup-arrow
whenHERMES_CONFIG_ATUIN_DISABLE_UP_ARROW=false
) brings up the history- setting
HERMES_CONFIG_ATUIN_DB_FILE
changes the database file
- bat
cat
with syntax highlighting and git integration- enbled with
HERMES_INIT_BAT
, overridecat
withHERMES_OVERRIDE_CAT_WITH_BAT
- ble.sh
- command line editor written in pure Bash which replaces the default GNU Readline
- enabled with
HERMES_INIT_BLE_SH
- eza
- fast, modern alternative to
ls
- override
ls
withHERMES_OVERRIDE_LS_WITH_EZA
- fast, modern alternative to
- fd
- fast, modern alternative to
find
- override
find
withHERMES_OVERRIDE_FIND_WITH_FD
- fast, modern alternative to
- fzf
- general-purpose command-line fuzzy finder
- enabled with
HERMES_INIT_FZF
- gitui
- a fast, modern TUI for
git
- a fast, modern TUI for
- ripgrep
- fast, modern alternative to
grep
- override
grep
withHERMES_OVERRIDE_GREP_WITH_RIPGREP
- fast, modern alternative to
- starship
- minimal, blazing-fast, and infinitely customizable prompt for any shell
- enbled with
HERMES_INIT_STARSHIP
- zoxide
- smarter cd command
- enbled with
HERMES_INIT_ZOXIDE
, overridecd
withHERMES_OVERRIDE_CD_WITH_ZOXIDE
To change and add APT sources (including PPAs), run hermes with the --change-apt-sources
(or -c
) flag. This option installs a new ubuntu.sources
file in /etc/apt/sources.list.d/
and adds additonal PPAs for git
, neovim
, and flatpak
.
Warning
Support for installing a GUI via Regolith Linux is experimental. I am currently working on the Sway integration but lack Wayland capabilities because of an old graphics card of mine.
To set up a GUI, run hermes with the --gui
flag. This option installs new PPAs for Regolith Linux, Alacritty, Cryptomator, and Visual Studio Code. hermes installs Regolith Linux, Alacritty and VS Code, and provides a default configuratin for Alacritty.
You can find additional setup scripts that aid in setting up machines under the ./misc/
directory.
hermes is written in the Rust programming language. As it performs a lot of network requests and disk I/O, it utilizes asynchronous programming with the tokio runtime. hermes performs four main tasks:
- Downloading and placing unversioned configuration files.
- Downloading and placing versioned configuration files.
- Setting up APT (optionally) and installing additional programs with it.
- Installing additional programs by downloading them from GitHub and unpacking them.
All of these tasks are performed asynchronously, which gives the illusion of parallelism (especially in the log). This makes hermes extremely fast.
Most configuration is stored in the data/
directory and is downloaded onto the target system.