2026-04-22 22:10:50 +03:00
|
|
|
# vcom
|
|
|
|
|
|
2026-04-24 13:47:18 +03:00
|
|
|
`vcom` is a two-pane terminal file manager with a fast built-in info/preview panel for the active selection.
|
2026-04-24 13:28:09 +03:00
|
|
|
|
|
|
|
|
## Why vcom
|
|
|
|
|
|
|
|
|
|
- Two-pane workflow focused on keyboard speed
|
|
|
|
|
- Built-in preview/info pane for the active selection
|
|
|
|
|
- Asynchronous copy/move with progress and background mode
|
|
|
|
|
- Theme support and configurable layout/columns
|
|
|
|
|
|
2026-04-27 16:13:47 +03:00
|
|
|
## Screenshots
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
## Build and run
|
|
|
|
|
|
|
|
|
|
Run directly:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
go run ./cmd/vcom
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Build local binary:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
go build -o vcom ./cmd/vcom
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
### NixOS / Nix
|
|
|
|
|
|
|
|
|
|
Run directly from the flake:
|
|
|
|
|
|
|
|
|
|
```bash
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
nix run github:vrubelroman/vcom?ref=v0.2.0
|
2026-04-27 16:13:47 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Install into user profile:
|
|
|
|
|
|
|
|
|
|
```bash
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
nix profile add github:vrubelroman/vcom?ref=v0.2.0
|
2026-04-27 16:13:47 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The Nix package wraps `vcom` with `ueberzugpp` in `PATH`, so image preview works in non-`kitty` terminals out of the box.
|
|
|
|
|
|
|
|
|
|
### Debian / Ubuntu
|
|
|
|
|
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
Download and install the latest release:
|
2026-04-27 16:13:47 +03:00
|
|
|
|
|
|
|
|
```bash
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
curl -sL https://github.com/vrubelroman/vcom/releases/download/v0.2.0/vcom_0.2.0_amd64.deb -o /tmp/vcom_0.2.0_amd64.deb
|
|
|
|
|
sudo apt install /tmp/vcom_0.2.0_amd64.deb
|
2026-04-27 16:13:47 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The Debian package declares `ueberzug` (or `ueberzugpp` where available) as a dependency for image preview outside `kitty`.
|
|
|
|
|
|
|
|
|
|
### Arch Linux
|
|
|
|
|
|
|
|
|
|
A `PKGBUILD` is included in the repository:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
makepkg -si
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The Arch package depends on `ueberzugpp`, so non-`kitty` image preview is installed together with `vcom`.
|
|
|
|
|
|
2026-04-24 14:44:49 +03:00
|
|
|
## Font requirement (icons)
|
|
|
|
|
|
|
|
|
|
For file icons, `vcom` expects a Nerd Font in your terminal profile.
|
|
|
|
|
|
|
|
|
|
Default behavior is `ui.icon_mode = "auto"`:
|
|
|
|
|
|
|
|
|
|
- if a Nerd Font is detected, `vcom` uses Nerd icons
|
|
|
|
|
- if not, `vcom` falls back to ASCII icons automatically
|
|
|
|
|
|
|
|
|
|
You can force behavior in config:
|
|
|
|
|
|
|
|
|
|
- `ui.icon_mode = "nerd"`: always use Nerd icons
|
|
|
|
|
- `ui.icon_mode = "ascii"`: always use ASCII icons
|
|
|
|
|
|
2026-04-27 16:09:31 +03:00
|
|
|
### Installing a Nerd Font
|
2026-04-24 15:35:11 +03:00
|
|
|
|
2026-04-27 16:09:31 +03:00
|
|
|
**Ubuntu / Debian:**
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
wget -qO /tmp/JetBrainsMono.zip https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
|
|
|
|
|
mkdir -p ~/.local/share/fonts/JetBrainsMonoNerd
|
|
|
|
|
unzip -o /tmp/JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMonoNerd
|
|
|
|
|
fc-cache -fv
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Arch Linux:**
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
sudo pacman -S ttf-jetbrains-mono-nerd
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Or via AUR helper:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
yay -S nerd-fonts-jetbrains-mono
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**NixOS / Nix:**
|
|
|
|
|
|
|
|
|
|
Add to your `/etc/nixos/configuration.nix`:
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
fonts.packages = with pkgs; [ nerd-fonts.jetbrains-mono ];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Or install imperatively:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
nix profile install nixpkgs#nerd-fonts.jetbrains-mono
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Configuring terminal to use the installed Nerd Font
|
|
|
|
|
|
|
|
|
|
After installing, set `JetBrainsMono Nerd Font` (or another Nerd Font) as the terminal font:
|
|
|
|
|
|
|
|
|
|
- **GNOME Terminal:** `Preferences → Profile → Text → Custom font` → choose `JetBrainsMono Nerd Font`
|
|
|
|
|
- **Konsole:** `Settings → Edit Current Profile → Appearance` → choose a Nerd Font profile
|
|
|
|
|
- **Alacritty:** set `font.normal.family: "JetBrainsMono Nerd Font"` in `~/.config/alacritty/alacritty.yml`
|
|
|
|
|
- **Kitty:** set `font_family JetBrainsMono Nerd Font` in `~/.config/kitty/kitty.conf`
|
|
|
|
|
- **Foot:** set `font=JetBrainsMono Nerd Font:size=11` in `~/.config/foot/foot.ini`
|
|
|
|
|
- **WezTerm:** set `font = wezterm.font("JetBrainsMono Nerd Font")` in `~/.config/wezterm/wezterm.lua`
|
|
|
|
|
- **Windows Terminal:** `Settings → Profiles → Defaults → Appearance → Font face` → choose `JetBrainsMono Nerd Font`
|
2026-04-24 15:35:11 +03:00
|
|
|
|
2026-04-24 13:47:18 +03:00
|
|
|
Preview mode (`F9` / `i`) temporarily replaces the inactive pane and shows:
|
2026-04-24 13:28:09 +03:00
|
|
|
|
|
|
|
|
- directory listing preview
|
|
|
|
|
- text file preview with syntax highlighting
|
|
|
|
|
- image metadata (format + dimensions)
|
|
|
|
|
- safe fallback for binary files
|
|
|
|
|
|
|
|
|
|
## 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)
|
|
|
|
|
|
2026-04-24 14:44:49 +03:00
|
|
|
Icon mode example:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[ui]
|
|
|
|
|
icon_mode = "auto" # auto | nerd | ascii
|
|
|
|
|
```
|
|
|
|
|
|
2026-04-24 13:28:09 +03:00
|
|
|
## Themes
|
|
|
|
|
|
2026-04-27 16:09:31 +03:00
|
|
|
Built-in themes (use `T` to cycle or set `ui.theme` in config):
|
2026-04-24 13:28:09 +03:00
|
|
|
|
|
|
|
|
- `catppuccin-mocha` (default)
|
2026-04-27 20:19:43 +03:00
|
|
|
- `catppuccin-macchiato`
|
2026-04-27 16:09:31 +03:00
|
|
|
- `catppuccin-lavender`
|
2026-04-24 13:28:09 +03:00
|
|
|
- `tokyo-night`
|
|
|
|
|
- `gruvbox-dark`
|
2026-04-27 16:09:31 +03:00
|
|
|
- `nord`
|
2026-04-27 20:19:43 +03:00
|
|
|
- `one-dark`
|
|
|
|
|
- `everforest`
|
|
|
|
|
- `github-dark`
|
2026-04-27 16:09:31 +03:00
|
|
|
- `ayu-dark`
|
|
|
|
|
- `breeze`
|
|
|
|
|
- `cyberpunk`
|
|
|
|
|
- `dracula`
|
|
|
|
|
- `eldritch`
|
|
|
|
|
- `kanagawa`
|
|
|
|
|
- `kanagawa-paper`
|
|
|
|
|
- `rose-pine`
|
|
|
|
|
- `solarized-dark`
|
|
|
|
|
- `vesper`
|
2026-04-24 13:28:09 +03:00
|
|
|
|
2026-04-23 00:21:36 +03:00
|
|
|
## Releases
|
|
|
|
|
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
Pushing a tag like `v0.2.0` triggers GitHub Actions release workflow (`.github/workflows/release.yml`) which:
|
2026-04-24 13:28:09 +03:00
|
|
|
|
|
|
|
|
- runs tests
|
|
|
|
|
- vendors Go modules
|
|
|
|
|
- builds release binary
|
|
|
|
|
- builds Debian package
|
|
|
|
|
- publishes release assets
|
|
|
|
|
|
|
|
|
|
Release artifacts:
|
2026-04-23 00:21:36 +03:00
|
|
|
|
feat: extended preview for PDF, audio, video via external utilities
Add rich preview support for three new file categories by leveraging
external CLI tools with graceful fallback when tools are missing.
- PDF: text extraction via pdftotext, page count via pdfinfo
- Audio: metadata via ffprobe (duration, bitrate, codec, sample rate, channels)
- Video: metadata via ffprobe (duration, bitrate, video/audio codec, resolution)
- New PreviewKind constants: PDF, Audio, Video
- New Metadata fields for extended preview data
- New extension maps and Category() entries for pdf/audio/video
- Icons: PDF (), audio (), video () in preview header
Closes #5
2026-04-27 19:25:03 +03:00
|
|
|
- `vcom-v0.2.0-x86_64-unknown-linux-gnu.tar.gz`
|
|
|
|
|
- `vcom_0.2.0_amd64.deb`
|
|
|
|
|
- `vcom-v0.2.0-checksums.txt`
|
2026-04-24 13:28:09 +03:00
|
|
|
|
|
|
|
|
## Notes
|
2026-04-23 00:21:36 +03:00
|
|
|
|
2026-04-24 13:28:09 +03:00
|
|
|
- File creation time depends on filesystem/OS support; unavailable values are shown as `n/a`.
|
2026-04-23 00:21:36 +03:00
|
|
|
|
2026-04-24 13:28:09 +03:00
|
|
|
Architecture notes: [docs/architecture.md](/home/vrubel/projects/vcom/docs/architecture.md)
|