<p align="center">
<h1 align="center">Ducker</h1>
</p>
<p align="center">
๐ A terminal app for managing docker containers, inspired by <a href="https://k9scli.io">K9s</a>
<br/>
<a href="#installation">Installation</a> ยท <a href="#useage">Useage</a> ยท <a href="#configuration">Configuration</a>
</p>
<a href="https://github.com/robertpsoane/ducker"><img src="https://raw.githubusercontent.com/robertpsoane/ducker/master/demo.gif?raw=true" width="100%" /></a>
<p align="center">
๐ฆ Written in Rust ๐ฆ
</p>
## Installation
<p align="center">
โ Note: Ducker is currently in a "pre-release" state. โ
<br/>
Please do install and try it out - it is currently undergoing active development. There are a number of known issues and features in the pipeline (<a href="https://github.com/robertpsoane/ducker/issues/2">see the pinned issue</a>). Any feedback is welcome.
</p>
### Cargo
There isn't currently a downloadable build; to install you will need cargo installed:
```bash
cargo install --locked ducker
```
### AUR
You can install `ducker` from the [AUR](https://aur.archlinux.org/packages/ducker) with using an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers).
```sh
paru -S ducker
```
### Unstable
To install the latest unstable version of Ducker, run the following command:
```
cargo install --git https://github.com/robertpsoane/ducker
```
## Useage
Ducker is comprised of a set of **pages**, each of which display specific information about and/or allow interaction with the docker containers and images on the host system.
Top level **pages** can be navigated to with **commands**, input via the **prompt**. **Pages** can be interacted with using **actions**; these are input via hotkey inputs.
A legend for common global hotkey inputs is displayed at the bottom of the screen; one for contextual (eg different on each page) hotkey inputs are displayed in the top right.
### Commands
The following commands are supported:
| `images` | `image` | Open the `Images` top level page |
| `containers` | `container` | Open the `Containers` top level page |
| `quit` | `q` | Close the application |
### Actions
#### Global
The following global actions are available on all pages:
| `k`/`โ` | Navigate up in a list/table |
| `j`/`โ` | Navigate down in a list/table |
| `Q`/`q` | Close the application |
| `:` | Open the command prompt |
| `G` | Navigate to the bottom of a list or table |
| `g` | Navigate to the top of a list or table |
#### Containers
The following actions are available on the Containers page:
| `Ctrl+d` | Delete the currently selected container |
| `a` | Exec into the currently selected container (if container is running)* |
| `l` | View the logs for the currently selected container |
| `r` | Run the currently selected container |
| `s` | Stop the currently selected container |
***NB**: exec currently only supports containers with bash installed. The intention is that this will be updated to provide a user option.
#### Images
The following actions are available on the Images page:
| `Ctrl+d` | Delete the currently selected image |
| `d` | Toggle whether or not to show dangling images (off by default) |
#### Logs
The following actions are available on the Logs page:
| `Esc` | Return to the containers page |
## Configuration
Ducker is configured via a yaml file found in the relevant config directory for host platform. On linux this is `~/.config/ducker/config.yaml`.
The following table summarises the available config values:
| prompt | ๐ฆ | The default prompt to display in the command pane |
| default_exec | `/bin/bash` | The default prompt to display in the command pane. NB - currently uses this for all exec's; it is planned to offer a choice |
| docker_path | `unix:///var/run/docker.sock` | The location of the socket on which the docker daemon is exposed (defaults to `npipe:////./pipe/docker_engine` on windows) |
| theme | [See below] | The colour theme configuration |
If a value is unset or if the config file is unfound, Ducker will use the default values. If a value is malformed, Ducker will fail to run.
To create a fully populated default config, run ducker with the `-e/--export-default-config` flag; this will write the default config to the default location, overwriting any existing config.
### Themes
By default, ducker uses the terminal emulator's preset colours. However, it is possible to set a custom colour theme in config. This is set in the `theme` section of the config file. The following table describes the theme options. The default theme provides the colours provided in the GIF in this README.
| use_theme | `false` | When `true` uses the colour scheme defined in config, when `false` uses the default terminal colours |
| title | `#96E072` | The colour used for the Ducker font in the header |
| help | `#EE5D43` | The colour used in the help prompts in the header |
| background | `#23262E` | The colour used in the background |
| footer | `#00E8C6` | The colour used for the text in the footer |
| success | `#96E072` | The colour used for a successful result |
| error | `#EE5D43` | The colour used for an error result |
| positive_highlight | `#96E072` | The colour used for highlighting in a happy state |
| negative_highlight | `#FF00AA` | The colour used for highlighting in a sad state |
### Tmux
Some characters in ducker use italics/boldface. This doesn't work by default when running in tmux. To fix this, add the following to your add to tmux.conf
```
set -g default-terminal "tmux-256color"
set -as terminal-overrides ',xterm*:sitm=\E[3m'
```