Rewrite README and pin install commands to v0.1.2
This commit is contained in:
parent
fe2034bb90
commit
f6a68e1cd0
1 changed files with 96 additions and 92 deletions
188
README.md
188
README.md
|
|
@ -1,100 +1,78 @@
|
||||||
# vcom
|
# vcom
|
||||||
|
|
||||||
`vcom` is a terminal file manager inspired by Midnight Commander and built on top of Charm's TUI stack.
|
`vcom` is a terminal file manager inspired by Midnight Commander and built with Charm's TUI stack.
|
||||||
|
|
||||||
The layout is:
|
## Why vcom
|
||||||
|
|
||||||
- left browser pane
|
- Two-pane workflow focused on keyboard speed
|
||||||
- right browser pane
|
- Built-in preview/info pane for the active selection
|
||||||
|
- Asynchronous copy/move with progress and background mode
|
||||||
|
- Theme support and configurable layout/columns
|
||||||
|
|
||||||
The key difference from classic `mc` is the inspect mode on `i`. It temporarily replaces the inactive pane with a preview/info panel for the active side selection:
|
## Interface
|
||||||
|
|
||||||
- directory: child entries
|
`vcom` has two browser panes:
|
||||||
- text file: text preview
|
|
||||||
- image: metadata and dimensions
|
|
||||||
- binary or unsupported file: safe fallback preview
|
|
||||||
|
|
||||||
## Goals
|
- active pane: navigation and file operations
|
||||||
|
- passive pane: target pane for copy/move operations
|
||||||
|
|
||||||
- MC-like browsing and function-key workflow
|
The preview/info mode (`F9` / `i`) temporarily replaces the inactive pane and shows:
|
||||||
- configurable column layout
|
|
||||||
- pleasant default styling
|
|
||||||
- readable, editable config with commented-out optional features
|
|
||||||
- clean architecture for async file operations and previews
|
|
||||||
|
|
||||||
## Current feature set
|
- directory listing preview
|
||||||
|
- text file preview with syntax highlighting
|
||||||
|
- image metadata (format + dimensions)
|
||||||
|
- safe fallback for binary files
|
||||||
|
|
||||||
- MC-like two-pane layout by default
|
## Features
|
||||||
- preview/info mode on `i`
|
|
||||||
- left/right file browsers
|
|
||||||
- preview with top metadata widget
|
|
||||||
- themes with `catppuccin-mocha` as default
|
|
||||||
- runtime theme cycling with `t`
|
|
||||||
- configurable visible columns
|
|
||||||
- hidden files shown by default
|
|
||||||
- hidden files toggle with `.`
|
|
||||||
- browser sort cycling with `s`
|
|
||||||
- directory size calculation on `Space`
|
|
||||||
- overwrite confirmation before copy or move
|
|
||||||
- pager on `F3` and editor on `F4` when available
|
|
||||||
- basic `F5` copy, `F6` move, `F7` mkdir, `F8` delete, `F10` quit
|
|
||||||
|
|
||||||
## Controls
|
- Two-pane file browser
|
||||||
|
- Preview/info pane with metadata block
|
||||||
|
- Read-only view mode (`F3` / `v`)
|
||||||
|
- External editor support (`F4` / `e`)
|
||||||
|
- Rename (`F2` / `r`)
|
||||||
|
- Copy (`F5` / `c`), move (`F6` / `m`), mkdir (`F7` / `n`), delete (`F8` / `x`)
|
||||||
|
- Multi-selection and batch operations
|
||||||
|
- Copy/move progress modal with background mode
|
||||||
|
- Directory size calculation (`Space`)
|
||||||
|
- Sorting cycle (`s`) and hidden files toggle (`.`)
|
||||||
|
- Runtime theme cycle (`t`)
|
||||||
|
|
||||||
- `Tab`: switch active browser pane
|
## Default keys
|
||||||
- `Enter`: open directory
|
|
||||||
- `Backspace` or `Left`: go to parent directory
|
|
||||||
- `i`: replace inactive pane with info/preview for the active pane selection
|
|
||||||
- `Space`: calculate selected directory size
|
|
||||||
- `.`: toggle hidden entries
|
|
||||||
- `s`: cycle sort mode
|
|
||||||
- `t`: cycle theme
|
|
||||||
- `F3`: open selected file in `$PAGER` if available, otherwise stay in center preview
|
|
||||||
- `F4`: open selected file in `$EDITOR`
|
|
||||||
- `F5`: copy to passive pane path
|
|
||||||
- `F6`: move to passive pane path
|
|
||||||
- `F7`: create directory in active pane
|
|
||||||
- `F8`: delete selected entry
|
|
||||||
- `F10`: quit
|
|
||||||
|
|
||||||
## Run
|
- `Tab` / `h` / `l`: switch active pane
|
||||||
|
- `j` / `Down`: move down
|
||||||
|
- `k` / `Up`: move up
|
||||||
|
- `Shift+Down` / `J`: extend selection down
|
||||||
|
- `Shift+Up` / `K`: extend selection up
|
||||||
|
- `Enter` / `Right`: open selected entry
|
||||||
|
- `Backspace` / `Left`: go to parent directory
|
||||||
|
- `Esc`: clear marked entries / close current modal
|
||||||
|
- `Ctrl+r`: refresh both panes
|
||||||
|
- `F1` / `?`: help
|
||||||
|
- `F2` / `r`: rename selected entry
|
||||||
|
- `F3` / `v`: view selected file (read-only mode)
|
||||||
|
- `F4` / `e`: edit selected file
|
||||||
|
- `F5` / `c`: copy
|
||||||
|
- `F6` / `m`: move
|
||||||
|
- `F7` / `n`: create directory
|
||||||
|
- `F8` / `x`: delete
|
||||||
|
- `F9` / `i`: toggle info/preview pane
|
||||||
|
- `F10` / `q`: quit
|
||||||
|
|
||||||
|
## Build and run
|
||||||
|
|
||||||
|
Run directly:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
go run ./cmd/vcom
|
go run ./cmd/vcom
|
||||||
```
|
```
|
||||||
|
|
||||||
To build a local binary:
|
Build local binary:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
go build -o vcom ./cmd/vcom
|
go build -o vcom ./cmd/vcom
|
||||||
```
|
```
|
||||||
|
|
||||||
Optional config file lookup order:
|
|
||||||
|
|
||||||
1. `-config /path/to/vcom.toml`
|
|
||||||
2. `./vcom.toml`
|
|
||||||
3. `./config/vcom.toml`
|
|
||||||
4. `$XDG_CONFIG_HOME/vcom/vcom.toml`
|
|
||||||
5. `~/.config/vcom/vcom.toml`
|
|
||||||
|
|
||||||
## Themes
|
|
||||||
|
|
||||||
Built-in presets:
|
|
||||||
|
|
||||||
- `catppuccin-mocha`
|
|
||||||
- `tokyo-night`
|
|
||||||
- `gruvbox-dark`
|
|
||||||
- `nord-frost`
|
|
||||||
|
|
||||||
The sample config in [vcom.toml](/home/vrubel/projects/vcom/vcom.toml) is intentionally written so optional columns and sort variants can be uncommented by hand.
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- File creation time depends on filesystem and OS support. When unavailable the UI shows `n/a`.
|
|
||||||
- Real inline image rendering is intentionally not enabled yet because terminal support is fragmented. The current architecture keeps that as an isolated preview backend to add later.
|
|
||||||
|
|
||||||
More detail is in [docs/architecture.md](/home/vrubel/projects/vcom/docs/architecture.md).
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### NixOS / Nix
|
### NixOS / Nix
|
||||||
|
|
@ -102,45 +80,71 @@ More detail is in [docs/architecture.md](/home/vrubel/projects/vcom/docs/archite
|
||||||
Run directly from the flake:
|
Run directly from the flake:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nix run github:vrubelroman/vcom?ref=<tag>
|
nix run github:vrubelroman/vcom?ref=v0.1.2
|
||||||
```
|
```
|
||||||
|
|
||||||
Install into the current profile:
|
Install into user profile:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nix profile add github:vrubelroman/vcom?ref=<tag>
|
nix profile add github:vrubelroman/vcom?ref=v0.1.2
|
||||||
```
|
```
|
||||||
|
|
||||||
`nix profile add` installs `vcom` into the current user's Nix profile. It does not edit `configuration.nix`, does not rebuild NixOS, and does not make the package a declarative system package.
|
|
||||||
|
|
||||||
### Debian / Ubuntu
|
### Debian / Ubuntu
|
||||||
|
|
||||||
Release builds include a `.deb` artifact. Install it with:
|
Download the release `.deb` for `v0.1.2`, then install:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install ./vcom_<version>_amd64.deb
|
sudo apt install ./vcom_0.1.2_amd64.deb
|
||||||
```
|
```
|
||||||
|
|
||||||
### Arch Linux
|
### Arch Linux
|
||||||
|
|
||||||
A `PKGBUILD` is included in the repository. Build it with:
|
A `PKGBUILD` is included in the repository:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
makepkg -si
|
makepkg -si
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Optional config lookup order:
|
||||||
|
|
||||||
|
1. `-config /path/to/vcom.toml`
|
||||||
|
2. `./vcom.toml`
|
||||||
|
3. `./config/vcom.toml`
|
||||||
|
4. `$XDG_CONFIG_HOME/vcom/vcom.toml`
|
||||||
|
5. `~/.config/vcom/vcom.toml`
|
||||||
|
|
||||||
|
Reference config: [vcom.toml](/home/vrubel/projects/vcom/vcom.toml)
|
||||||
|
|
||||||
|
## Themes
|
||||||
|
|
||||||
|
Built-in themes:
|
||||||
|
|
||||||
|
- `catppuccin-mocha` (default)
|
||||||
|
- `tokyo-night`
|
||||||
|
- `gruvbox-dark`
|
||||||
|
- `nord-frost`
|
||||||
|
|
||||||
## Releases
|
## Releases
|
||||||
|
|
||||||
Tagging a version like `v0.1.0` triggers the GitHub Actions release workflow:
|
Pushing a tag like `v0.1.2` triggers GitHub Actions release workflow (`.github/workflows/release.yml`) which:
|
||||||
|
|
||||||
- runs `go test ./...`
|
- runs tests
|
||||||
- vendors Go modules for reproducible packaging
|
- vendors Go modules
|
||||||
- builds the release binary
|
- builds release binary
|
||||||
- builds the `.deb` package with `dpkg-deb`
|
- builds Debian package
|
||||||
- publishes release artifacts to GitHub Releases
|
- publishes release assets
|
||||||
|
|
||||||
Release artifacts include:
|
Release artifacts:
|
||||||
|
|
||||||
- `vcom-<tag>-x86_64-unknown-linux-gnu.tar.gz`
|
- `vcom-v0.1.2-x86_64-unknown-linux-gnu.tar.gz`
|
||||||
- `vcom_<version>_amd64.deb`
|
- `vcom_0.1.2_amd64.deb`
|
||||||
- `vcom-<tag>-checksums.txt`
|
- `vcom-v0.1.2-checksums.txt`
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- File creation time depends on filesystem/OS support; unavailable values are shown as `n/a`.
|
||||||
|
- Inline image rendering is intentionally disabled for now due to terminal compatibility differences.
|
||||||
|
|
||||||
|
Architecture notes: [docs/architecture.md](/home/vrubel/projects/vcom/docs/architecture.md)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue