120 lines
4.1 KiB
Markdown
120 lines
4.1 KiB
Markdown
# PrettyPrompt
|
|
|
|
A pretty shell prompt, written in rust
|
|
|
|
## Current Features
|
|
|
|
- **User indicator** - Symbol with different colors for root user and normal users
|
|
- **Error indicator** - Symbol with different colors to indicate if the last comment was successful
|
|
- **Git repo indicator**
|
|
- Indicates if the current directory is a repo or a regular directory
|
|
- Branches indicated by different colors
|
|
- **SSH indicator** - Symbol to indicate if the current shell is in an SSH session
|
|
- **Current directory**
|
|
- Abbreviated if the path is too long
|
|
- Replaces the user's home directory with a `~` symbol
|
|
- Show the repo's name if currently in a git repo
|
|
|
|
## Screenshot
|
|
|
|
![screenshot](https://git.candifloss.cc/candifloss/PrettyPrompt/raw/branch/main/screenshot/BashPromptExampleScreenshoot.png "Screenshot")
|
|
|
|
## Planned Features
|
|
|
|
- Right-hand side prompt: Implementing this is a challenge on non-`zsh` shells
|
|
- Configuration file
|
|
- Choose only the components you need
|
|
- Change appearance
|
|
- symbols and texts
|
|
- colors
|
|
- order and position
|
|
- Etc.
|
|
- User-defined components
|
|
- Static symbols or strings
|
|
- Shell symbol
|
|
- Host name
|
|
- Etc.
|
|
- Dynamic components by running custom commands
|
|
- Time & date
|
|
- More `git` information
|
|
- System stats
|
|
- Basically, anything you like
|
|
|
|
## Current Limitations
|
|
|
|
- Not user-configurable, yet - any changes in the current stage require hard-coding.
|
|
- Exit code of the last command requires to be passed as a command-line argument.
|
|
|
|
## Tested on
|
|
|
|
Ubuntu 24.04
|
|
- `bash` 5.2
|
|
- `zsh` 5.9
|
|
- `ion` 1.0.0-alpha
|
|
|
|
## Installation
|
|
|
|
1. Download the pre-built binary from [releases](https://git.candifloss.cc/candifloss/PrettyPrompt/releases), or build from source:
|
|
|
|
```bash
|
|
git clone https://git.candifloss.cc/candifloss/PrettyPrompt.git
|
|
cd PrettyPrompt/
|
|
cargo build --release #Now find the `prettyprompt` binary in `target/release/`
|
|
```
|
|
2. Move the binary to a path in your `$PATH`. Eg:
|
|
```bash
|
|
sudo mv /path/to/prettyprompt /usr/bin/
|
|
```
|
|
Or add it to your `$PATH` variable by adding this to your `bashrc`, `zshrc`, or `ion/initrc`
|
|
```bash
|
|
export PATH="$PATH:/your/path"
|
|
```
|
|
|
|
## Usage
|
|
|
|
The binary needs to be in your `$PATH`. Place it somewhere like `/usr/bin/`, or add the appropriate path to the `$PATH` variable.
|
|
The configuration depends on the shell, and the file location can vary according to your distro. Please consult the documentations or forums of your shell for more accurate information.
|
|
|
|
### `bash`
|
|
|
|
- The `PS1` variable sets a fixed prompt string.
|
|
- This `PROMPT_COMMAND` variable updates the prompt every time.
|
|
|
|
System-wide: `/etc/bash.bashrc`, or User-specific: `$HOME/.bashrc`:
|
|
```bash
|
|
PS1="" # Set it to an empty string
|
|
PROMPT_COMMAND='prettyprompt $?' # Single quotes, not double quotes
|
|
```
|
|
|
|
### `ion`
|
|
|
|
The `PROMPT` function is currently the only way to customize the prompt according to the ion shell docs.
|
|
User-specific config file: `$HOME/.config/ion/initrc`:
|
|
```ion
|
|
fn PROMPT
|
|
prettyprompt $?
|
|
end
|
|
```
|
|
|
|
### `zsh`
|
|
Export the `PS1` variable with the output of `prettyprompt $?` as its value.
|
|
User-specific: `$HOME/.zshrc`, System-wide: `/etc/zsh/zshrc`:
|
|
```zsh
|
|
export PS1='$(prettyprompt $?)'
|
|
```
|
|
|
|
## Changes since the last version
|
|
- **Updated Output String Type:** Improved compatibility with other shells.
|
|
- **Revamped Indicator Symbols:** Enhanced the visual aspect of the prompt.
|
|
- **Removed Shell Symbol:** Determining the shell is practically not possible.
|
|
- **Conditional Component Inclusion:** A first step towards user-configuration expected in future versions.
|
|
- **Code Improvements:** readability and performance
|
|
- **Refactoring:** Modular structure for better readability and maintenance.
|
|
- **Modularization:** Separate modules for cleaner organization.
|
|
- **Error Handling:** Improved logic to exclude error messages from the prompt.
|
|
- **Enhanced Documentation:** Comments for better comprehension.
|
|
|
|
## Acknowledgement
|
|
|
|
The current default(and only) theme is inspired by [s1ck94](https://github.com/zimfw/s1ck94) theme from [zimfw](https://zimfw.sh/).
|