Dokumentacja · HackerOS Terminal

Hacker Term

Nowoczesny terminal dla HackerOS — płynne animacje, pełne truecolor, obsługa zakładek i rozbudowana konfiguracja.

v0.6.0 Slint UI Rust xterm-256color Sixel HackerOS wbudowany

Co to jest Hacker Term?

Hacker Term jest domyślnym, wbudowanym emulatorem terminala systemu HackerOS. Działa obok Alacritty i jest zoptymalizowany pod kątem estetyki hakerskiej — neonowe poświaty, animowane tło, efekt CRT i płynny kursor interpolowany w czasie rzeczywistym.

🎨

Glassmorphism UI

Pasek tytułowy i zakładki ze szklanym efektem. Animowane neony w tle reagują na czas.

60 fps rendering

Differential rendering rysuje tylko zmienione komórki. Motion blur wygładza szybkie zmiany.

🖼️

Sixel & Truecolor

Pełna obsługa 24-bit RGB i protokołu Sixel — wyświetlaj obrazy bezpośrednio w terminalu.

🗂️

Zakładki z przeciąganiem

Nieskończona liczba zakładek, przeciąganie, sesje — stan zapisywany automatycznie.

🔧

Rozbudowana konfiguracja

Plik config.hk pozwala dostosować każdy szczegół — kolory, efekty, skróty, czcionki.

🖱️

Zaznaczanie myszą

Prostokątne zaznaczanie tekstu, automatyczne kopiowanie do schowka po puszczeniu przycisku.

Plik konfiguracyjny

Konfiguracja znajduje się w: ~/.config/hacker-term/config.hk Jeśli plik nie istnieje, zostanie użyta konfiguracja domyślna. Format .hk obsługuje komentarze, interpolacje zmiennych i sekcje.

~/.config/hacker-term/config.hk
# ── Hacker Term — plik konfiguracyjny ────────────────────────────────────

general {
  font_size            = 14.5
  shell                = "/bin/zsh"
  padding              = 12
  window_transparency  = 255     # 0-255, 255 = nieprzezroczyste
  motion_blur_strength = 0.18    # 0.0 = wyłączone, 1.0 = maksymalne
  throttle_keyboard_ms = 8
  scrollback_lines     = 10000
  tab_bar_style        = "glass"  # glass | flat
}

font {
  path       = ""       # pusta = auto-detect; np. "/usr/share/fonts/TTF/Hack-Regular.ttf"
  size       = 14.5
  bold_size  = 14.5
  italic     = true
}

colors {
  bg               = "#0F0F1A"
  fg               = "#E2E8FF"
  cursor           = "#00FFD9"
  glow1            = "#00FFD9"   # kolor neonu nr 1 (tło + ramka)
  glow2            = "#AA66FF"   # kolor neonu nr 2
  selection        = "#3366FF"
  selection_alpha  = 90         # 0-255
  tab_active       = "#00FFD9"
  tab_inactive     = "#3D3D5C"

  ansi = [
    # normalne 0-7
    "#0F0F1A", "#FF3D5C", "#00FF88", "#FFD700",
    "#3399FF", "#D94FFF", "#00E5FF", "#CCD6FF",
    # jasne 8-15
    "#3D3D5C", "#FF6680", "#33FFAA", "#FFE033",
    "#66BBFF", "#E580FF", "#33EEFF", "#FFFFFF",
  ]
}

effects {
  scanlines             = true
  scanline_opacity      = 28      # 0-255, intensywność linii CRT
  border_glow           = true
  border_glow_strength  = 90      # 0-255
  vignette              = true
  vignette_strength     = 140     # 0-255, ciemnienie rogów
  bg_animation_speed    = 0.3     # prędkość animacji tła (0 = zatrzymane)
  bg_glow_intensity     = 60      # intensywność poświaty tła
  glow_pulse_freq       = 0.6     # Hz pulsowania ramki
  cursor_style          = "block" # block | beam | underline
  cursor_blink_freq     = 0.75    # Hz mrugania kursora
  cursor_lerp_speed     = 0.35    # płynność ruchu kursora (0.1 slow – 1.0 instant)
}

keybindings {
  scroll_up        = ["Ctrl+Up", "Shift+Up"]
  scroll_down      = ["Ctrl+Down", "Shift+Down"]
  scroll_page_up   = ["Shift+PageUp"]
  scroll_page_down = ["Shift+PageDown"]
  scroll_to_top    = ["Shift+Home"]
  scroll_to_bottom = ["Shift+End"]
  new_tab          = ["Ctrl+t"]
  close_tab        = ["Ctrl+w"]
  next_tab         = ["Ctrl+Tab"]
  prev_tab         = ["Ctrl+Shift+Tab"]
  copy             = ["Ctrl+Shift+c"]
  paste            = ["Ctrl+Shift+v"]
  zoom_in          = ["Ctrl++"]
  zoom_out         = ["Ctrl+-"]
  zoom_reset       = ["Ctrl+0"]
}

sixel {
  enabled    = true
  max_width  = 1920
  max_height = 1080
}

Sekcja general

KluczOpisDomyślnie
font_sizeRozmiar czcionki w punktach14.5
shellPowłoka do uruchomienia (zsh, bash, fish…)$SHELL
paddingWewnętrzny margines w pikselach12
window_transparencyPrzezroczystość okna 0-255255
motion_blur_strengthSiła motion blur 0.0–1.00.18
throttle_keyboard_msDebounce klawiatury w ms8
scrollback_linesPojemność bufora przewijania10000
tab_bar_styleglass lub flat"glass"

Sekcja effects

KluczOpisDomyślnie
scanlinesLinie CRT co drugi wiersz pikselitrue
scanline_opacityPrzyciemnienie linii CRT (0-255)28
border_glowNeonowa poświata wokół oknatrue
border_glow_strengthIntensywność poświaty krawędzi90
vignetteCiemne rogi (efekt winiety)true
vignette_strengthSiła winiety (0-255)140
bg_animation_speedPrędkość animacji tła (0 = stop)0.3
bg_glow_intensityJasność neonowych obszarów tła60
glow_pulse_freqCzęstotliwość pulsowania ramki (Hz)0.6
cursor_styleblock, beam, underline"block"
cursor_blink_freqCzęstotliwość mrugania kursora (Hz)0.75
cursor_lerp_speedPłynność ruchu kursora (0.1–1.0)0.35

Domyślne skróty

Wszystkie skróty można nadpisać w sekcji keybindings pliku konfiguracyjnego. Każda akcja przyjmuje listę kombinacji.

Akcja Domyślny skrót Opis
Nowa zakładkaCtrl+TOtwiera nową zakładkę z powłoką
Zamknij zakładkęCtrl+WZamyka bieżącą zakładkę
Następna zakładkaCtrl+TabPrzełącza na kolejną zakładkę
Poprzednia zakładkaCtrl+Shift+TabPrzełącza na poprzednią zakładkę
KopiujCtrl+Shift+CKopiuje zaznaczenie do schowka
WklejCtrl+Shift+VWkleja ze schowka systemowego
Przewiń w góręCtrl+ lub Shift+Przewija bufor o 5 linii
Przewiń w dółCtrl+ lub Shift+Przewija bufor o 5 linii
Strona w góręShift+Page UpPrzewija o jedną stronę
Strona w dółShift+Page DownPrzewija o jedną stronę
Skocz na góręShift+HomePrzeskakuje na początek bufora
Skocz na dółShift+EndWraca na koniec (bieżące wyjście)
PowiększCtrl++Zwiększa rozmiar czcionki
PomniejszCtrl+-Zmniejsza rozmiar czcionki
Resetuj zoomCtrl+0Przywraca domyślny rozmiar

💡 Mysz

Przytrzymaj lewy przycisk myszy i przeciągnij, aby zaznaczyć tekst prostokątnie. Puszczenie przycisku automatycznie kopiuje tekst do schowka systemowego. Kółko myszy przewija bufor historii.

System efektów

🌌

Animowane tło

Dwa punkty neonowej poświaty powoli dryfują po tle, tworząc efekt żywej nebuli. Kontrolowane przez bg_animation_speed i bg_glow_intensity.

📺

Efekt CRT

Co drugi rząd pikseli jest lekko przyciemniony, symulując linie skanowania starego monitora. Intensywność: scanline_opacity.

💫

Neonowa ramka

Krawędź okna pulsuje neonowym kolorem (glow1). Częstotliwość i intensywność w pełni konfigurowalna.

🎯

Winieta

Rogi ekranu stopniowo ciemnieją, skupiając wzrok na centrum terminala. Siła kontrolowana przez vignette_strength.

🚀

Płynny kursor

Kursor płynnie interpoluje między pozycjami (lerp). Prędkość interpolacji oraz styl (block, beam, underline) są konfigurowalne.

💨

Motion blur

Klatki mieszają się ze sobą, łagodząc gwałtowne zmiany zawartości (np. szybki scroll). Przy 0.0 efekt jest wyłączony.

Gotowe profile efektów

Skopiuj jeden z poniższych bloków do sekcji effects:

profil: Minimalistyczny (wydajność)
effects {
  scanlines          = false
  border_glow        = false
  vignette           = false
  bg_animation_speed = 0.0
  bg_glow_intensity  = 20
  cursor_style       = "beam"
  cursor_lerp_speed  = 1.0
}
profil: Cyber-max (pełne efekty)
effects {
  scanlines             = true
  scanline_opacity      = 45
  border_glow           = true
  border_glow_strength  = 140
  vignette              = true
  vignette_strength     = 200
  bg_animation_speed    = 0.6
  bg_glow_intensity     = 100
  glow_pulse_freq       = 1.2
  cursor_style          = "block"
  cursor_blink_freq     = 1.5
  cursor_lerp_speed     = 0.2
}

Predefiniowane motywy

Zamień sekcję colors na jeden z poniższych motywów.

motyw: Cyber Neon (domyślny)
colors {
  bg     = "#0F0F1A"
  fg     = "#E2E8FF"
  cursor = "#00FFD9"
  glow1  = "#00FFD9"
  glow2  = "#AA66FF"
}
motyw: Hackerman (zielony fosfor)
colors {
  bg     = "#020A02"
  fg     = "#33FF44"
  cursor = "#55FF66"
  glow1  = "#00FF44"
  glow2  = "#004400"
}
motyw: Midnight Synthwave
colors {
  bg     = "#13001F"
  fg     = "#F0D0FF"
  cursor = "#FF00AA"
  glow1  = "#FF00AA"
  glow2  = "#00BBFF"
}
motyw: Solar Storm (pomarańcz)
colors {
  bg     = "#15080A"
  fg     = "#FFE0CC"
  cursor = "#FF8833"
  glow1  = "#FF6600"
  glow2  = "#FF0055"
}

Obsługa protokołu Sixel

Hacker Term obsługuje wyświetlanie obrazów bezpośrednio w terminalu poprzez protokół Sixel (DEC). Działa z aplikacjami takimi jak img2sixel, gnuplot, ranger z odpowiednimi wtyczkami i wieloma innymi.

Przykłady użycia Sixel
# Instalacja img2sixel (libsixel)
$ sudo apt install libsixel-bin

# Wyświetl obraz w terminalu
$ img2sixel zdjecie.png

# Skaluj do konkretnej szerokości
$ img2sixel -w 400 zdjecie.jpg

# Wykresy w gnuplot
$ gnuplot -e "set terminal sixel; plot sin(x)"
⚠️ Maksymalne wymiary obrazu kontroluje sixel.max_width i sixel.max_height. Obrazy większe niż limit będą ignorowane (nie skalowane). Ustaw wyższe wartości dla monitorów 4K.

FAQ

Jak uruchomić Hacker Term?

Hacker Term jest wbudowany w każdą edycję HackerOS. Uruchom go z doku, menu aplikacji lub poleceniem hacker-term z innego terminala (np. Alacritty).

Czy mogę używać własnej czcionki?

Tak. W sekcji font ustaw path na pełną ścieżkę do pliku .ttf lub .otf. Działa każda czcionka monospace. Jeśli ścieżka jest pusta, Hacker Term wykrywa czcionkę automatycznie (Hack → FiraCode → JetBrains Mono → DejaVu).

Czym Hacker Term różni się od Alacritty?

Alacritty jest terminalem GPU-accelerated, minimalistycznym i konfigurowanym przez YAML. Hacker Term skupia się na estetyce hakerskiej z animowanym tłem, CRT scanlines, glassmorphism UI i zintegrowaną obsługą Sixel. Oba terminale mogą działać jednocześnie.

Terminal jest wolny – jak poprawić wydajność?

Wyłącz efekty: ustaw motion_blur_strength = 0.0, bg_animation_speed = 0.0, scanlines = false, vignette = false. Zwiększ throttle_keyboard_ms do 16. Differential rendering jest domyślnie aktywny.

Gdzie zapisywane są sesje?

Stan zakładek jest zapisywany automatycznie przy zamknięciu do ~/.config/hacker-term/session.hk i przywracany przy następnym uruchomieniu.

Obsługiwane sekwencje escape?

Hacker Term emuluje xterm-256color z obsługą CSI, OSC (tytuł okna), DCS (Sixel), truecolor (38;2;r;g;b), alt-screen, bracketed paste, mouse reporting (podstawowy) i większości standardowych sekwencji VT100/VT220.