An open API service indexing awesome lists of open source software.

https://github.com/joachimschmidt557/nimmm

A terminal file manager for Linux
https://github.com/joachimschmidt557/nimmm

nim terminal

Last synced: 23 days ago
JSON representation

A terminal file manager for Linux

Awesome Lists containing this project

README

        

# nimmm

[![Build](https://github.com/joachimschmidt557/nimmm/actions/workflows/build.yml/badge.svg)](https://github.com/joachimschmidt557/nimmm/actions/workflows/build.yml)
![GitHub](https://img.shields.io/github/license/joachimschmidt557/nimmm.svg)

A terminal file manager for Linux

[![asciicast](https://asciinema.org/a/tGAr5PkesSBBgYBmzCQl30hE0.svg)](https://asciinema.org/a/tGAr5PkesSBBgYBmzCQl30hE0)

# Table of Contents

1. [Features](#features)
2. [Installation](#installation)
1. [From source](#source)
2. [Nix](#nix)
3. [Usage](#usage)
1. [Configuration](#configuration)
2. [Default keymap](#keymaps)
4. [ToDo](#todo)
5. [External Tools](#external-tools)

## Features

* Unlimited tab support
* Colorizing with `LS_COLORS`
* Custom keymaps (see below)
* Incremental search

## Installation

I'm not aware of any distros packaging `nimmm` apart from NixOS, so
you will probably have to compile `nimmm` from source on non-NixOS
distros.

### From source

You will need the [Nim development
toolchain](https://nim-lang.org/install_unix.html). Furthermore,
`termbox-devel` or `libtermbox-dev` is required for the terminal user
interface.

```bash
git clone https://github.com/joachimschmidt557/nimmm
cd nimmm
nimble build
```

### Nix

`nimmm` is included in nixpkgs.

```bash
nix-env -i nimmm
# or, if you prefer nix flakes
nix profile install nixpkgs#nimmm
```

## Usage

### Configuration

Some functionality of `nimmm` is controlled via environment variables
similar to other programs:

| Environment variable | Setting |
| --- | --- |
| `EDITOR` | file editor |
| `PAGER` | file viewer |
| `NIMMM_OPEN` | file opener |
| `NIMMM_256` | enable 256 color mode |

Other configuration such as keybindings are configured in
`$XDG_CONFIG_HOME/nimmm.conf` where `$XDG_CONFIG_HOME` defaults to
`~/.config` if not set.

### Default keymap

The default keymap is similar to that of `less`.

| Key | Default binding | Description |
| --- | --- | --- |
| q | `quit` | quit |
| ! | `shell` | spawn shell in current directory |
| j | `down` | next entry |
| k | `up` | previous entry |
| h | `left` | go to the parent directory |
| l | `right` | navigate to directory / open file |
| g | `first` | first entry |
| G | `last` | last entry |
| ~ | `home` | go to home directory |
| . | `toggle-hidden` | toggle display of hidden entries |
| / | `search` | start searching |
| Esc | `end-search` | stop searching |
| e | `edit` | edit file in `$EDITOR` |
| p | `pager` | view file in `$PAGER` |
| r | `rename` | rename file/directory |
| Space | `select` | select / deselect current entry |
| a | `select-all` | select all entries in current directory |
| s | `select-none` | clear selection |
| X | `delete` | delete selected entries |
| P | `copy` | copy selected entries |
| V | `move` | move selected entries |
| f | `new-file` | create (touch) a new file |
| d | `new-dir` | create a new directory |
| t | `new-tab` | new tab |
| w | `close-tab` | close tab |
| Tab | `next-tab` | next tab |
| 1..0 | `tab-x` | go to tab 1..10 |

Keybindings are customized in the configuration file. For example, if
you prefer more Emacs-oriented movement keybindings, you can do this:

``` toml
[Keybindings]

h=none
j=none
k=none
l=none

n=down
p=up
f=right
b=left
```

## ToDo

* Help page

## External programs

| Dependency | Use |
| --- | --- |
| `cp`, `mv`, `rm`, `mkdir`, `touch` | `nimmm` delegates all operations on files and directories to these utilities to save all the error-handling and permission-checking work. These utilities should (hopefully) be on your UNIX system |
| `$SHELL` or fallback `sh` | an interactive shell |
| `$EDITOR` or fallback `vi` | an editor |
| `$PAGER` or fallback `less` | a pager |
| `$NIMMM_OPEN` or fallback `xdg-open` | a file opener |

## License

`nimmm` is licensed under the GNU General Public License v3.0 only.