Minimal and versatile bash prompt
- Colored exit status
- Easily configurable
- Fully customizable: colors, symbols, the prompt itself, and more...
- Better history
- Better completion
- Directory colors support
- Trimming path
- Various extensions
- Git
- Kubernetes
- SSH
- IP address
- WIFI
- Package versions
- Extensions can be toggled on and off on the fly
Make sure you have the following programs installed in your system:
- GNU Make
gitnpm(for the npm installer)- General utilities like
grep,sed,awk, ... - A patched Nerd Font (optional)
$ npm install --global miniprompt.sh
If it throws an error then run the command with
sudo
$ git clone [email protected]:Pocco81/MiniPrompt.git && cd MiniPrompt
$ make installInstalls the prompt under your local bins:
~/.local/bin. Make sure this directory is in your$PATH; if it's not, paste this into your~/.bashrc:
export PATH=$PATH:"$HOME/.local/bin"👷🛑 Under devTwo things:
- Enable the prompt in your
~/.bashrc - Configure it
To enable the prompt paste this into your ~/.bashrc:
alias mp="source miniprompt"
mpAfter that, feel free to customize the prompt to your like using the conf.toml file (located under ${XDG_CONFIG_HOME}/miniprompt/conf.toml. If the $XDG_CONFIG_HOME env var is not set then it'll be assumed to be $HOME/.config/).
Here is the default config:
# MiniPrompt's config file
[behaviour]
colored_exit_status = true # prettify the exit status of the previous command
dirtrim = 2 # trim the CWD to only show x number of dirs
enhanced_autocompletion = true # completion maps, tilde expansion, mark directories, ...
enhanced_history_format = true # better format for your shell history: [%Y-%m-%d %T]
dircolors = true # color directories
[primary_prompt]
prefix = "\[\e]0;\w\a\]" # prompt prefix
ps_content = "</yellow>\w</nc> " # the actual content of your prompt
ps_suffix = "</green>➜</nc> " # after the ps_content
normal_color = "nc" # the color text is defaulted to
error_symbol = "✗" # symbol to use after the previous command failed
failed = "red" # $error_mark's color after the previous command executed successfully
[extensions]
ext_git = false # enable git extension (shows current working branch)
ext_ssh = false # enable ssh expansion (shows <user>@<machine>)
ext_package = false # enable package expansion (shows project's current version)
ext_kubernetes = false # enable kubernetes extension (shows kubernetes' current context)
ext_ip = false # enable kubernetes extension (shows kubernetes' current context)
ext_wifi = false
git_struct = "</cyan> </unit> " # structure of the integration
ssh_struct = "</magenta> </unit> " # structure of the integration
package_struct = "</white> v</unit> " # structure of the integration
ip_struct = "</gray_br> </unit> " # structure of the integration
wifi_struct = "</blue>直 </unit> " # structure of the integration
hierarchy = "ssh, git, ip, wifi, package" # order in which the extensions are displayedps_content = "</yellow_it>\w </blue_re> \@ \n</magenta> \u</nc> "
ps_content = "</magenta></magenta_re>\A </cyan_re> \w</cyan></nc> "
ps_suffix = "</blue></nc> " # after the ps_content
[primary_prompt]
ps_content = "</yellow>\w</nc> " # the actual content of your prompt
ps_suffix = "\n</green>➜</nc> " # after the ps_content
[extensions]
git_struct = "</cyan></cyan_re> </unit></cyan> " # structure of the integration
package_struct = "</white></white_re> v</unit></white> " # structure of the integrationThe prompt itself can be changed modifying the ps_content and ps_suffix variables. Apart from giving your prompt different colors using the tags, you can also modify the information displayed using the following built-in Bash options:
| Opts | Description |
|---|---|
\a |
A bell character |
\d |
Date (day/month/date) |
\D{format} |
Date but following the system's time format |
\e |
Escape character |
\h |
Hostname (short) |
\H |
Full hostname (domain name) |
\j |
Number of jobs being managed by the shell |
\l |
The basename of the shells terminal device |
\n |
New line |
\r |
Carriage return |
\s |
The name of the shell |
\t |
Time (hour:minute:second) |
\@ |
Time, 12-hour AM/PM |
\A |
Time, 24-hour, without seconds |
\u |
Current username |
\v |
BASH version |
\V |
Extra information about the BASH version |
\w |
Current working directory |
\W |
The basename of the working directory |
\! |
Lists this command’s number in the history |
\# |
This command’s command number |
\$ |
Specifies whether the user is root (#) or otherwise ($) |
\\ |
Backslash |
\[ |
Start a sequence of non-displayed characters |
\] |
Close or end a sequence of non-displayed characters |
Structs define the structure of the extensions. You can use tags to customize the structs further. However, there is an additional tag called </unit>, which is the output of the extension. Say you are using the git extension:
git_struct = "</cyan> </unit> "This will display:
devBecause </unit>, in this case, displays the current working branch.
| Tag | Description |
|---|---|
</gray> |
Makes text following it gray |
</red> |
Makes text following it red |
</green> |
Makes text following it green |
</blue> |
Makes text following it blue |
</cyan> |
Makes text following it cyan |
</yellow> |
Makes text following it yellow |
</magenta> |
Makes text following it magenta |
</white> |
Makes text following it white |
</nc> |
Removes the color of text following it |
You can also give some properties to the colors by using modifiers and appending them at the end of the color (e.g. <green_br>):
| Modifier | Description |
|---|---|
_br |
bright |
_dm |
dim |
_it |
italic |
_un |
underlined |
_bl |
blinking |
_re |
inverted |
On the previous step we created the alias mp, which we will be using to run commands for MiniPrompt. Use mp --help to see the available commands. Here is a quick example enabling the Git extension:
$ mp git enable
# you can shorten it as: mp gt eAfter changing the config file you can reload the prompt using the same alias, but without any flags:
$ mp| Extension | Dependencies |
|---|---|
| Git | git |
| SSH | openssh |
| Package | npm |
| Wifi | nmcli |
| IP | ip |
-
Q: "If I don't have a config file, will MiniPrompt create one for me?"
-
A: No, settings will simply be assumed from default values.
-
Q: "Why does the alias created for the prompt needs to be sourced?"
-
A: Because you can't export env vars from a shell script unless it's sourced, so this is the best solution.
MiniPrompt is released under the GPL v3.0 license. It grants open-source permissions for users including:
- The right to download and run the software freely
- The right to make changes to the software as desired
- The right to redistribute copies of the software
- The right to modify and distribute copies of new versions of the software
For more convoluted language, see the LICENSE file.
High Priority:
- Publish to the AUR?
Low Priority:
- None
Enjoy!