ngt night

ngt (night) to dwupanelowy menedżer plików dla terminala, zbudowany w Go z wykorzystaniem biblioteki Bubble Tea. Zaprojektowany jako pierwszoklasowe narzędzie ekosystemu HackerOS — szybki, rozszerzalny i wygodny w pracy z lokalnymi, zdalnymi i kontenerowymi systemami plików.

Go 1.22+ SFTP Podman ZIP · TAR · TAR.GZ Git-aware Syntax Highlighting

Błyskawiczny

Napisany w Go, renderuje pełny UI w milisekundach. Zero opóźnień nawet na dużych katalogach.

🐳

Podman-native

Przeglądaj system plików działających kontenerów bezpośrednio z ngt — bez exec shell.

🌐

Multi-VFS

Lokalne, SFTP, ZIP, TAR, TAR.GZ — wszystkie w jednym interfejsie. Kopiowanie między VFS.

🎨

Podświetlanie składni

Podgląd plików z pełnym podświetlaniem Chroma — ponad 300 języków.

🔍

Fuzzy Search

Przeszukuj drzewa katalogów w czasie rzeczywistym przez Ctrl+P.

📁

Git-aware

Status M/A/D widoczny bezpośrednio na liście plików. Gałąź wyświetlona w pasku ścieżki.

Installation

W dystrybucji HackerOS ngt jest dostępny bezpośrednio z repozytorium systemowego:

bash
ngt jest wbuowany w HackerOS

Zależności

PakietWersjaCel
charmbracelet/bubbletea≥ 0.25TUI framework
charmbracelet/lipgloss≥ 0.9Stylowanie terminala
alecthomas/chroma/v2≥ 2.23Podświetlanie składni
pkg/sftp≥ 1.13SFTP VFS
golang.org/x/crypto≥ 0.22SSH transport
golang.org/x/sync≥ 0.7Kopiowanie równoległe
podman (system)≥ 4.0Podman VFS (opcjonalne)

Quick Start

bash
$ ngt

# Uruchom w konkretnym katalogu
$ ngt /home/user/projekty

Po uruchomieniu zobaczysz dwa panele plików. Aktywny panel ma niebieską ramkę. Przełączaj się między nimi klawiszem Tab.

💡 Pasek poleceń na dole przyjmuje komendy jak cd katalog, mkdir nowy, sftp://user@host. Naciśnij Enter, aby wykonać.

Interface

ngt — layout
ngt v0.3 │ HackerOS file manager
┌─────────────────────────────┬──────────────────────────────┐
local ~/projekty main Namelocal ~/dokumenty Name
src/ docs/
main.go 12.3 kB │ README.md 2.1 kB │
config.yaml 1.0 kB │ notes.txt 500 B │
go.mod 400 B │
│ │ │
└───────────────────────────────┴───────────────────────────────┘
_
✓ Panel refreshed
F1Help F5Copy F6Move F8Delete ^PFuzzy ^RRename QQuit

Elementy interfejsu

ElementOpis
Pasek tytułuNazwa aplikacji, wersja, nazwa dystrybucji HackerOS
Pasek ścieżkiTag VFS, bieżący katalog, gałąź Git, aktualny tryb sortowania
Panele plikówDwukolumnowa lista. Aktywny panel — niebieska ramka, nieaktywny — szara
Pasek poleceńWiersz z promptem — wpisuj polecenia jak w shellu
Pasek statusuWynik ostatniej operacji (zielony = OK, czerwony = błąd)
Pasek funkcyjnySkróty F-key widoczne na dole ekranu

Virtual File Systems

ngt obsługuje wiele wirtualnych systemów plików przez jednolity interfejs. Możesz kopiować pliki między dowolnymi dwoma VFS — np. z SFTP do lokalnego archiwum ZIP.

VFSSchemat URLTrybOpis
Local local RW Standardowy system plików hosta. Pełne wsparcie odczytu i zapisu.
SFTP sftp:// RW Zdalny serwer przez SSH/SFTP. Tworzenie, usuwanie, przenoszenie plików.
Podman podman:// RW System plików działającego kontenera Podman. Odczyt i zapis przez podman exec.
ZIP zip:// R Przeglądanie zawartości archiwum ZIP. Mount przez naciśnięcie Enter na pliku.
TAR / TAR.GZ tar:// R Przeglądanie archiwów TAR i TAR.GZ. Mount automatyczny.
Przykłady połączeń
# Połączenie SFTP
sftp://admin:haslo@192.168.1.10:22

# Otwarcie archiwum ZIP (Enter na pliku w panelu)
deploy.zip ← naciśnij Enter

# Połączenie z kontenerem Podman
podman my-container

# Lista działających kontenerów
podmanls

Podman Integration

🐳 Wymagany jest Podman 4.0+ zainstalowany w systemie i dostępny w PATH.

ngt ma natywne wsparcie dla Podmana — możesz przeglądać i edytować system plików działającego kontenera bez wychodzenia z menedżera.

Przeglądarka kontenerów

Naciśnij Ctrl+D, aby otworzyć listę działających kontenerów Podman. Naciśnij Enter na wybranym kontenerze, by podmontować jego system plików w aktywnym panelu.

Podman Browser
🐳 Podman Containers Enter: connect • Esc: cancel
┌─────────────────────────────────────────────────────────────┐
▶ a3f5c8d1 web-app Up 2 hours
b7e2a094 db-postgres Up 5 hours
c1d4f832 redis-cache Up 1 day
└─────────────────────────────────────────────────────────────┘

Operacje na plikach kontenera

OperacjaJak działa
Przeglądaniepodman exec CONTAINER ls -la DIR
Odczyt plikupodman exec CONTAINER cat FILE
Zapis plikupodman exec -i CONTAINER tee FILE
Usunięciepodman exec CONTAINER rm -rf PATH
Przeniesieniepodman exec CONTAINER mv SRC DST
Tworzenie katalogupodman exec CONTAINER mkdir -p PATH
⚠️ Operacje zapisu na systemie plików kontenera są trwałe i nie zostaną cofnięte po zatrzymaniu kontenera (o ile nie używasz overlay read-only).

Keybindings

Nawigacja

KlawiszAkcja
j / Przesuń kursor w dół
k / Przesuń kursor w górę
Enter / lOtwórz katalog / plik / archiwum
Backspace / hPrzejdź do katalogu nadrzędnego (cd ..)
TabPrzełącz aktywny panel
rOdśwież bieżący panel

Operacje na plikach

KlawiszAkcja
SpaceZaznacz / odznacz plik
F5Kopiuj zaznaczone do drugiego panelu
F6Przenieś zaznaczone do drugiego panelu
F8Usuń zaznaczone (z potwierdzeniem)
Ctrl+UDuplikuj zaznaczony plik (_copy)

Narzędzia

KlawiszAkcja
Ctrl+PFuzzy search w bieżącym drzewie
Ctrl+RBulk rename z wyrażeniami regularnymi
Ctrl+SCykl trybów sortowania (Nazwa → Rozmiar → Data → Rozszerzenie)
Ctrl+DOtwórz przeglądarkę kontenerów Podman
Ctrl+OOtwórz pod-shell w bieżącym katalogu
Ctrl+ZZawieś ngt (SIGTSTP)
F1Pokaż pomoc w pasku statusu
q / Ctrl+CWyjście z ngt

Edytor wbudowany

KlawiszAkcja
Ctrl+SZapisz plik
EscWyjdź z edytora bez zapisywania

Commands

Wpisz polecenie w pasku poleceń () i naciśnij Enter. Obsługiwane jest uzupełnianie klawiszem Tab.

PolecenieSkładniaOpis
cdcd <ścieżka>Zmień katalog (ścieżki względne i bezwzględne)
cpcp <src> <dst>Skopiuj plik (lub użyj F5 dla zaznaczonych)
mvmv <src> <dst>Przenieś plik (lub F6)
rmrmUsuń zaznaczone pliki (wymaga potwierdzenia)
mkdirmkdir <nazwa>Utwórz katalog
touchtouch <plik>Utwórz pusty plik
hedithedit <plik>Otwórz plik w wbudowanym edytorze (lub Enter na pliku)
sftpsftp://user:pass@hostPodłącz SFTP w aktywnym panelu
podmanpodman <id/nazwa>Podłącz system plików kontenera Podman
podmanlspodmanlsWyświetl przeglądarkę działających kontenerów
💡 Nieznane polecenia są przekazywane do powłoki systemowej i uruchamiane w tle. Wynik pojawia się w pasku statusu.

Built-in Editor

ngt posiada wbudowany edytor tekstu — naciśnij Enter na pliku tekstowym lub wpisz hedit <plik>.

  • Limit rozmiaru pliku: 10 MB
  • Zapis: Ctrl+S
  • Anulowanie: Esc (bez zapisywania)
  • Działa na wszystkich VFS obsługujących zapis (local, SFTP, Podman)
⚠️ Edytor na SFTP i Podman VFS zapisuje plik w całości — nie obsługuje partial writes.

Bulk Rename

Zaznacz pliki (Space), a następnie naciśnij Ctrl+R. Rename przebiega w dwóch krokach:

  1. Podaj wyrażenie regularne do dopasowania
  2. Podaj ciąg zastępczy (obsługiwane grupy $1, $2)
Przykład: zamień prefix report_ na summary_
Step 1/2: regex pattern
^report_(.+)$

Step 2/2: replacement string
summary_$1

✓ Renamed 5 file(s)

Git Status

W katalogach będących repozytoriami Git, ngt automatycznie pokazuje status plików i nazwę bieżącej gałęzi:

KolorStatus GitZnaczenie
Żółty M Plik zmodyfikowany (Modified)
Zielony A Plik dodany do staging (Added)
Czerwony D Plik usunięty (Deleted)

Gałąź widoczna jest w pasku ścieżki nad panelem jako zielony badge.

Configuration

W tej wersji ngt nie wymaga pliku konfiguracyjnego — wszystko jest dostępne przez klawiaturę. Planowane wsparcie dla ~/.config/ngt/config.yaml w v0.4.

📋 Planowane opcje: skróty klawiszowe, motyw kolorów, domyślny tryb sortowania, lista zapisanych serwerów SFTP i kontenerów Podman.

VFS Reference

Interfejs vfsHandler implementowany przez wszystkie VFS:

Go interface
type vfsHandler interface {
  // Odczyt
  ReadDir(dir string) ([]fs.DirEntry, error)
  Open(file string) (fs.File, error)
  Stat(file string) (fs.FileInfo, error)
  Chdir(dir string) error
  Getwd() (string, error)
  // Zapis
  Remove(path string) error
  Rename(src, dst string) error
  MkdirAll(path string, perm fs.FileMode) error
  Create(path string) (io.WriteCloser, error)
  // Metadata
  VFSName() string
}

FAQ

Podman nie jest dostępny — co robić?

Upewnij się, że podman jest w PATH i działa jako bieżący użytkownik (rootless Podman). Przetestuj: podman ps.

Nie widzę podświetlania składni

Podświetlanie wymaga terminala z obsługą 256 kolorów lub TrueColor. Sprawdź zmienną $TERM — powinna zawierać 256color lub truecolor.

Jak wrócić z VFS SFTP/Podman do lokalnego systemu plików?

Wpisz cd /dowolna/sciezka/lokalna — ngt automatycznie przełączy się na lokalny VFS jeśli ścieżka istnieje na hoście. (Planowane: local komenda w v0.4.)

Czy ngt działa na macOS / Windows?

ngt jest zoptymalizowany pod HackerOS (Linux). Na macOS powinien działać poprawnie z wyjątkiem integracji Podman. Windows nie jest obsługiwany.

Jak zgłosić błąd?

Użyj trackera na https://git.hackeros.local/tools/ngt/issues.