gprompt/README.md

5 KiB

GPrompt - useless gimmicky prompt for Bash on Linux

GPrompt (short for GadgetoPrompt) is a gimmicky Bash prompt generator that displays sort-of-useful information. It only works on Linux because that's what I use. It adapts to the terminal's width, showing or hiding information depending on the conditions.

Features

GPrompt prompts may consist in one or two lines. The top line is separated in three areas (left, midddle and right), while the second line (the "input" line, where the cursor is) only has a single, left-aligned area. Each area may be configured to display information from one of the generators. In addition, the script may be configured to generate a terminal title and/or terminal icon title.

Installing GPrompt

GPrompt may be installed either at the system level or on a per-user basis.

User installation

  • Copy the script and associated themes to your home directory.

    mkdir -p ~/.local/share/gprompt/themes cp gprompt.pl ~/.local/share/gprompt cp themes/* ~/.local/share/gprompt/themes

  • Add the following line to your ~/.bashrc:

export PROMPT_COMMAND='eval "$($HOME/.local/share/gprompt/gprompt.pl $?)"'

System-wide installation

  • In the case of a system-wide installation, the script and associated themes must be copied to some shared location, e.g.

    mkdir -p /usr/share/gprompt/themes cp -R gprompt.pl themes/ /usr/share/gprompt

  • Users may then use GPrompt by adding the following line to their ~/.bashrc files (it could also be added to /etc/skel/.bashrc) :

export PROMPT_COMMAND='eval "$(/usr/share/gprompt/gprompt.pl $?)"'

Configuration

GPrompt comes with a minimal (...-ish, this is a gadget after all) configuration that will work out of the box. However, it can be customised using both a system-wide configuration file and a per-user configuration file. Values set in a configuration files override values that were previously loaded, so it is possible to have a system-wide configuration that replaces most of the defaults and a per-user configuration that only overrides a few of the system-wide options. In addition, if the option is enabled from the configuration files, it is possible to override settings using environment variables.

The GPrompt configuration is a Perl hash reference, so the general syntax of the file goes something like this:

{
    'some_key' => 'some_value' ,
    'other_key' => [ 'list entry 1' , 'list entry 2' ] ,
}

In order to override a configuration entry using an environment variable, the variable must be named GPROMPT_ followed by the uppercase name of the configuration entry. If the configuration expects a list for the value in question, the value of the environment variable will be split using the comma character. If a table is expected, keys and values are expected to be separated by a colon.

export GPROMPT_LAYOUT_RIGHT=git,load
export GPROMPT_LAYOUT_THEME_OVERRIDES=bg_left:230,bg_right:230

Main configuration

The following variables control the configuration itself:

  • cfg_warn_files indicates that the script should emit warnings when a file (configuration or theme) cannot be loaded due to some error (0 or 1, default 1).
  • cfg_from_env disables or enables configuration overrides from environment variables (0 or 1, default 0).
  • cfg_sys_themes must list system-wide directories which may contain GPrompt themes (list; default /usr/share/gprompt/themes).
  • cfg_user_themes lists directories relative to the user's home which may contain GPrompt themes (list; default .local/share/gprompt/themes and .gprompt-themes).

The layout_* variables control the prompt's layout and general appearance:

  • layout_theme is the name of the theme to use. The default theme will be used if it contains an empty string.
  • layout_theme_overrides may contain local overrides to the theme's contents (table, empty by default).
  • layout_left, layout_middle, layout_right and layout_input configure the generators that will provide the contents of the top left, top center, top right and bottom left sections of the prompt. All 4 variables are lists of generator names; by default, the top bar is empty (the script does not render it) and the input prompt only uses the userhost and cwd generators, emulating a rather basic \u@\h:\w prompt.
  • layout_input_always determines whether the input line should be rendered even if no generators are specified (0 or 1, default 0).

The term_* variables control the prompt's ability to change the terminal's title and/or icon title:

  • term_set_title controls whether the title or icon title of the terminal should be changed. Possible values are 0 (no update), 1 (title), 2 (icon title), and 3 (both). By default, only the title is updated.
  • term_generators contains the list of generators that will produce the title string (unicode characters in the generators' output will be removed).
  • term_separator is a string that will be inserted between the various parts of the string.