silver 2.0.0

A cross-shell customizable powerline-like prompt with icons
# silver

[![Join the chat at https://gitter.im/reujab-silver/community](https://badges.gitter.im/reujab-silver/community.svg)](https://gitter.im/reujab-silver/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

[![Packaging status](https://repology.org/badge/vertical-allrepos/silver.svg)](https://repology.org/project/silver/versions)

A cross-shell customizable powerline-like prompt heavily inspired by [Agnoster](https://github.com/agnoster/agnoster-zsh-theme). The faster rust port of [bronze](https://github.com/reujab/bronze).<br/>
![](./sleep.png)

## How does it work?

Unlike most shell prompts, silver is not written in shell script, but entirely in Rust.

When `silver init` is run, it outputs shell code that sets your left prompt to run `silver lprompt` and right prompt to `silver rprompt`, which output the actual prompt.

## Getting started

Since silver is not written in shell script, it should theoretically be compatible with any shell, but the supported shells are Powershell, Bash, Zsh, fish, Ion and Elvish.

### Icons

To be able to use the custom icons (which are enabled by default), you must patch your font or install a pre-patched font from [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts).

### Installation

#### From source

- install and setup [Rust]https://www.rust-lang.org/
- run `cargo install --git https://github.com/reujab/silver`

#### From pre-compiled binary

- download a binary on the [releases page]https://github.com/reujab/silver/releases
- add binary to `PATH` environment variable

#### macOS

On macOS, you will have to do a bit more:

- install [Homebrew]https://brew.sh/
- run `brew install coreutils`
- run `brew install openssl`
- add `alias date="gdate"` to your shell config

### Configuration

Now that you have silver installed, you need to configure it. To have your prompt look like the one in the screenshot above, create `silver.toml` with the following content:

```toml
[[left]]
name = "dir"
color.background = "blue"
color.foreground = "black"

[[left]]
name = "git"
color.background = "green"
color.foreground = "black"

[[right]]
name = "status"
color.background = "white"
color.foreground = "black"

[[right]]
name = "cmdtime"
color.background = "magenta"
color.foreground = "black"

[[right]]
name = "shell"
color.background = "green"
color.foreground = "black"
```

Now that silver is configured, you need to evaluate its bootstrap code.

#### Bash

`~/.bashrc`:

```sh
source <(silver init)
```

#### Ion

`~/.config/ion/initrc`:

```sh
eval $(silver init)
```

#### Powershell

```ps1
Invoke-Expression -Command $(silver init | Out-String)
```

#### Zsh

See [zsh plugin](https://github.com/silver-prompt/zsh#installation)

#### Fish

See [fish plugin](https://github.com/silver-prompt/fish#installation)

#### Elvish

See [elvish plugin](https://github.com/silver-prompt/elvish#installation)

## Documentation

Documentation is available on [the wiki](https://github.com/reujab/silver/wiki).

## Project structure

- [`src/`]src
  - [`modules/`]src/modules
    - [`cmdtime.rs`]src/modules/cmdtime.rs
      - source code for the [`cmdtime`]https://github.com/reujab/silver/wiki/Command-Time module
    - [`dir.rs`]src/modules/dir.rs
      - source code for the [`dir`]https://github.com/reujab/silver/wiki/Directory module
    - [`env.rs`]src/modules/env.rs
      - source code for the [`env`]https://github.com/reujab/silver/wiki/Environment-Variable module
    - [`git.rs`]src/modules/git.rs
      - source code for the [`git`]https://github.com/reujab/silver/wiki/Git module
    - [`mod.rs`]src/modules/mod.rs
      - handles modules
    - [`os.rs`]src/modules/os.rs
      - source code for the [`os`]https://github.com/reujab/silver/wiki/OS module
    - [`status.rs`]src/modules/status.rs
      - source code for the [`status`]https://github.com/reujab/silver/wiki/Status module
    - [`time.rs`]src/modules/time.rs
      - source code for the [`time`]https://github.com/reujab/silver/wiki/Time module
    - [`user.rs`]src/modules/user.rs
      - source code for the [`user`]https://github.com/reujab/silver/wiki/User module
    - [`virtualenv.rs`]src/modules/virtualenv.rs
      - source code for the [`virtualenv`]https://github.com/reujab/silver/wiki/virtualenv module
  - [`cli.rs`]src/cli.rs
    - parses command line arguments
  - [`config.rs`]src/config.rs
    - parses TOML
  - [`icons.rs`]src/icons.rs
    - processes icons, separators, and Unicode
  - [`init.bash`]src/init.bash
    - bootstrap code for Bash
  - [`init.ion`]src/init.ion
    - bootstrap code for Ion
  - [`init.ps1`]src/init.ps1
    - bootstrap code for Powershell
  - [`main.rs`]src/main.rs
    - does all the magic
  - [`print.rs`]src/print.rs
    - prints prompt segments
  - [`sh.rs`]src/sh.rs
    - shell-specific code