Update tmux panes

This commit is contained in:
DariusIII
2026-01-19 16:02:32 +01:00
parent 3a4b41f7a6
commit f39c0a42f1
5 changed files with 238 additions and 96 deletions
+86 -39
View File
@@ -6,6 +6,8 @@ use App\Models\Settings;
/**
* Service for building tmux window layouts based on sequential mode
*
* Uses Nerd Font icons for pane names to provide a modern visual experience.
*/
class TmuxLayoutBuilder
{
@@ -15,6 +17,43 @@ class TmuxLayoutBuilder
protected string $sessionName;
/**
* Pane name icons mapping - uses Nerd Font symbols
* Requires a Nerd Font to display properly (FiraCode NF, JetBrains Mono NF, etc.)
*/
protected array $paneIcons = [
// Core processing
'Monitor' => '󰍹 Monitor',
'update_binaries' => ' Binaries',
'backfill' => '󰑓 Backfill',
'update_releases' => ' Releases',
'sequential' => '󰒿 Sequential',
// Utilities
'fixReleaseNames' => '󰯃 Fix Names',
'removeCrapReleases' => '󰆴 Remove Crap',
// Postprocessing
'postprocessing_additional' => ' Additional',
'postprocessing_tv' => '󰟴 TV/Anime',
'postprocessing_amazon' => ' Amazon',
'postprocessing_movies' => ' Movies',
'postprocessing_xxx' => '󰞋 XXX',
// IRC
'scrapeIRC' => '󰻞 IRC Scraper',
// Monitoring tools
'htop' => ' htop',
'nmon' => '󰨇 nmon',
'vnstat' => '󰛳 vnstat',
'tcptrack' => '󱘖 tcptrack',
'bwm-ng' => '󰾆 bwm-ng',
'mytop' => ' mytop',
'redis' => ' Redis',
'bash' => ' Console',
];
public function __construct(TmuxSessionManager $sessionManager)
{
$this->sessionManager = $sessionManager;
@@ -22,6 +61,14 @@ class TmuxLayoutBuilder
$this->paneManager = new TmuxPaneManager($this->sessionName);
}
/**
* Get the display name with icon for a pane
*/
protected function getPaneDisplayName(string $name): string
{
return $this->paneIcons[$name] ?? $name;
}
/**
* Build the appropriate layout based on sequential mode
*/
@@ -40,43 +87,43 @@ class TmuxLayoutBuilder
protected function buildFullLayout(): bool
{
// Window 0: Monitor + Binaries + Backfill + Releases
if (! $this->sessionManager->createSession('Monitor')) {
if (! $this->sessionManager->createSession($this->getPaneDisplayName('Monitor'))) {
return false;
}
// Select pane 0.0, then split for binaries (right side, 67%)
$this->paneManager->selectPane('0.0');
$this->paneManager->splitHorizontal('0', '67%', 'update_binaries');
$this->paneManager->splitHorizontal('0', '67%', $this->getPaneDisplayName('update_binaries'));
// Select pane 0.1 (binaries), then split for backfill (bottom, 67%)
$this->paneManager->selectPane('0.1');
$this->paneManager->splitVertical('0', '67%', 'backfill');
$this->paneManager->splitVertical('0', '67%', $this->getPaneDisplayName('backfill'));
// Split again for releases (bottom, 50%)
$this->paneManager->splitVertical('0', '50%', 'update_releases');
$this->paneManager->splitVertical('0', '50%', $this->getPaneDisplayName('update_releases'));
// Window 1: Fix names + Remove crap
$this->paneManager->createWindow(1, 'utils');
$this->paneManager->setPaneTitle('1.0', 'fixReleaseNames');
$this->paneManager->createWindow(1, ' Utils');
$this->paneManager->setPaneTitle('1.0', $this->getPaneDisplayName('fixReleaseNames'));
$this->paneManager->selectPane('1.0');
$this->paneManager->splitHorizontal('1', '50%', 'removeCrapReleases');
$this->paneManager->splitHorizontal('1', '50%', $this->getPaneDisplayName('removeCrapReleases'));
// Window 2: Postprocessing (Left: Additional + TV + Amazon, Right: Movies + XXX)
$this->paneManager->createWindow(2, 'post');
$this->paneManager->setPaneTitle('2.0', 'postprocessing_additional');
$this->paneManager->createWindow(2, ' Post');
$this->paneManager->setPaneTitle('2.0', $this->getPaneDisplayName('postprocessing_additional'));
// Split horizontally to create left and right halves (don't set title yet)
$this->paneManager->splitHorizontal('2', '50%', '');
// Left side (2.0): split vertically for TV and Amazon
$this->paneManager->selectPane('2.0');
$this->paneManager->splitVertical('2', '67%', 'postprocessing_tv');
$this->paneManager->splitVertical('2', '50%', 'postprocessing_amazon');
$this->paneManager->splitVertical('2', '67%', $this->getPaneDisplayName('postprocessing_tv'));
$this->paneManager->splitVertical('2', '50%', $this->getPaneDisplayName('postprocessing_amazon'));
// Right side: After left splits, right side is now 2.3
$this->paneManager->selectPane('2.3');
$this->paneManager->setPaneTitle('2.3', 'postprocessing_movies');
$this->paneManager->splitVertical('2', '50%', 'postprocessing_xxx');
$this->paneManager->setPaneTitle('2.3', $this->getPaneDisplayName('postprocessing_movies'));
$this->paneManager->splitVertical('2', '50%', $this->getPaneDisplayName('postprocessing_xxx'));
// Window 3: IRC Scraper
$this->createIRCScraperWindow();
@@ -93,36 +140,36 @@ class TmuxLayoutBuilder
protected function buildBasicLayout(): bool
{
// Window 0: Monitor + Releases
if (! $this->sessionManager->createSession('Monitor')) {
if (! $this->sessionManager->createSession($this->getPaneDisplayName('Monitor'))) {
return false;
}
// Select pane 0.0, then split for releases
$this->paneManager->selectPane('0.0');
$this->paneManager->splitHorizontal('0', '67%', 'update_releases');
$this->paneManager->splitHorizontal('0', '67%', $this->getPaneDisplayName('update_releases'));
// Window 1: Utils (Fix names + Remove crap)
$this->paneManager->createWindow(1, 'utils');
$this->paneManager->setPaneTitle('1.0', 'fixReleaseNames');
$this->paneManager->createWindow(1, ' Utils');
$this->paneManager->setPaneTitle('1.0', $this->getPaneDisplayName('fixReleaseNames'));
$this->paneManager->selectPane('1.0');
$this->paneManager->splitHorizontal('1', '50%', 'removeCrapReleases');
$this->paneManager->splitHorizontal('1', '50%', $this->getPaneDisplayName('removeCrapReleases'));
// Window 2: Postprocessing (Left: Additional + TV + Amazon, Right: Movies + XXX)
$this->paneManager->createWindow(2, 'post');
$this->paneManager->setPaneTitle('2.0', 'postprocessing_additional');
$this->paneManager->createWindow(2, ' Post');
$this->paneManager->setPaneTitle('2.0', $this->getPaneDisplayName('postprocessing_additional'));
// Split horizontally to create left and right halves (don't set title yet)
$this->paneManager->splitHorizontal('2', '50%', '');
// Left side (2.0): split vertically for TV and Amazon
$this->paneManager->selectPane('2.0');
$this->paneManager->splitVertical('2', '67%', 'postprocessing_tv');
$this->paneManager->splitVertical('2', '50%', 'postprocessing_amazon');
$this->paneManager->splitVertical('2', '67%', $this->getPaneDisplayName('postprocessing_tv'));
$this->paneManager->splitVertical('2', '50%', $this->getPaneDisplayName('postprocessing_amazon'));
// Right side: After left splits, right side is now 2.3
$this->paneManager->selectPane('2.3');
$this->paneManager->setPaneTitle('2.3', 'postprocessing_movies');
$this->paneManager->splitVertical('2', '50%', 'postprocessing_xxx');
$this->paneManager->setPaneTitle('2.3', $this->getPaneDisplayName('postprocessing_movies'));
$this->paneManager->splitVertical('2', '50%', $this->getPaneDisplayName('postprocessing_xxx'));
// Window 3: IRC Scraper
$this->createIRCScraperWindow();
@@ -138,19 +185,19 @@ class TmuxLayoutBuilder
protected function buildStrippedLayout(): bool
{
// Window 0: Monitor + Sequential
if (! $this->sessionManager->createSession('Monitor')) {
if (! $this->sessionManager->createSession($this->getPaneDisplayName('Monitor'))) {
return false;
}
// Select pane 0.0, then split for sequential
$this->paneManager->selectPane('0.0');
$this->paneManager->splitHorizontal('0', '67%', 'sequential');
$this->paneManager->splitHorizontal('0', '67%', $this->getPaneDisplayName('sequential'));
// Window 1: Amazon postprocessing
$this->paneManager->createWindow(1, 'utils');
$this->paneManager->setPaneTitle('1.0', 'fixReleaseNames');
$this->paneManager->createWindow(1, ' Utils');
$this->paneManager->setPaneTitle('1.0', $this->getPaneDisplayName('fixReleaseNames'));
$this->paneManager->selectPane('1.0');
$this->paneManager->splitHorizontal('1', '50%', 'postprocessing_amazon');
$this->paneManager->splitHorizontal('1', '50%', $this->getPaneDisplayName('postprocessing_amazon'));
// Window 2: IRC Scraper
$this->createIRCScraperWindow();
@@ -165,8 +212,8 @@ class TmuxLayoutBuilder
*/
protected function createIRCScraperWindow(): bool
{
$this->paneManager->createWindow(3, 'IRCScraper');
$this->paneManager->setPaneTitle('3.0', 'scrapeIRC');
$this->paneManager->createWindow(3, '󰻞 IRC');
$this->paneManager->setPaneTitle('3.0', $this->getPaneDisplayName('scrapeIRC'));
return true;
}
@@ -190,14 +237,14 @@ class TmuxLayoutBuilder
// htop
if ((int) Settings::settingValue('htop') === 1 && $this->commandExists('htop')) {
$this->paneManager->createWindow($windowIndex, 'htop');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('htop'));
$this->paneManager->respawnPane("{$windowIndex}.0", 'htop');
$windowIndex++;
}
// nmon
if ((int) Settings::settingValue('nmon') === 1 && $this->commandExists('nmon')) {
$this->paneManager->createWindow($windowIndex, 'nmon');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('nmon'));
$this->paneManager->respawnPane("{$windowIndex}.0", 'nmon -t');
$windowIndex++;
}
@@ -205,7 +252,7 @@ class TmuxLayoutBuilder
// vnstat
if ((int) Settings::settingValue('vnstat') === 1 && $this->commandExists('vnstat')) {
$vnstatArgs = Settings::settingValue('vnstat_args') ?? '';
$this->paneManager->createWindow($windowIndex, 'vnstat');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('vnstat'));
$this->paneManager->respawnPane("{$windowIndex}.0", "watch -n10 'vnstat {$vnstatArgs}'");
$windowIndex++;
}
@@ -213,21 +260,21 @@ class TmuxLayoutBuilder
// tcptrack
if ((int) Settings::settingValue('tcptrack') === 1 && $this->commandExists('tcptrack')) {
$tcptrackArgs = Settings::settingValue('tcptrack_args') ?? '';
$this->paneManager->createWindow($windowIndex, 'tcptrack');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('tcptrack'));
$this->paneManager->respawnPane("{$windowIndex}.0", "tcptrack {$tcptrackArgs}");
$windowIndex++;
}
// bwm-ng
if ((int) Settings::settingValue('bwmng') === 1 && $this->commandExists('bwm-ng')) {
$this->paneManager->createWindow($windowIndex, 'bwm-ng');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('bwm-ng'));
$this->paneManager->respawnPane("{$windowIndex}.0", 'bwm-ng');
$windowIndex++;
}
// mytop
if ((int) Settings::settingValue('mytop') === 1 && $this->commandExists('mytop')) {
$this->paneManager->createWindow($windowIndex, 'mytop');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('mytop'));
$this->paneManager->respawnPane("{$windowIndex}.0", 'mytop -u');
$windowIndex++;
}
@@ -237,7 +284,7 @@ class TmuxLayoutBuilder
$redisArgs = Settings::settingValue('redis_args') ?? '';
$refreshInterval = 30;
$this->paneManager->createWindow($windowIndex, 'redis');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('redis'));
// Check if custom args provided for simple redis-cli output
if (! empty($redisArgs) && $redisArgs !== 'NULL' && $this->commandExists('redis-cli')) {
@@ -268,7 +315,7 @@ class TmuxLayoutBuilder
// bash console
if ((int) Settings::settingValue('console') === 1) {
$this->paneManager->createWindow($windowIndex, 'bash');
$this->paneManager->createWindow($windowIndex, $this->getPaneDisplayName('bash'));
$this->paneManager->respawnPane("{$windowIndex}.0", 'bash -i');
}
}
+14 -4
View File
@@ -21,8 +21,11 @@ class TmuxPaneManager
*/
public function createWindow(int $index, string $name): bool
{
// Escape single quotes in the name for shell
$escapedName = str_replace("'", "'\\''", $name);
$result = Process::timeout(10)->run(
"tmux new-window -t {$this->sessionName}:{$index} -n {$name} 'printf \"\\033]2;{$name}\\033\"'"
"tmux new-window -t {$this->sessionName}:{$index} -n '{$escapedName}' 'printf \"\\033]2;{$escapedName}\\033\"'"
);
return $result->successful();
@@ -33,7 +36,9 @@ class TmuxPaneManager
*/
public function splitHorizontal(string $target, string $percentage, string $title = ''): bool
{
$titleCmd = $title ? "printf \"\\033]2;{$title}\\033\"" : '';
// Escape single quotes in the title for shell
$escapedTitle = str_replace("'", "'\\''", $title);
$titleCmd = $title ? "printf \"\\033]2;{$escapedTitle}\\033\"" : '';
$result = Process::timeout(10)->run(
"tmux splitw -t {$this->sessionName}:{$target} -h -l {$percentage} '{$titleCmd}'"
@@ -47,7 +52,9 @@ class TmuxPaneManager
*/
public function splitVertical(string $target, string $percentage, string $title = ''): bool
{
$titleCmd = $title ? "printf \"\\033]2;{$title}\\033\"" : '';
// Escape single quotes in the title for shell
$escapedTitle = str_replace("'", "'\\''", $title);
$titleCmd = $title ? "printf \"\\033]2;{$escapedTitle}\\033\"" : '';
$result = Process::timeout(10)->run(
"tmux splitw -t {$this->sessionName}:{$target} -v -l {$percentage} '{$titleCmd}'"
@@ -129,8 +136,11 @@ class TmuxPaneManager
*/
public function setPaneTitle(string $target, string $title): bool
{
// Escape single quotes in the title for shell
$escapedTitle = str_replace("'", "'\\''", $title);
$result = Process::timeout(5)->run(
"tmux select-pane -t {$this->sessionName}:{$target} -T '{$title}'"
"tmux select-pane -t {$this->sessionName}:{$target} -T '{$escapedTitle}'"
);
return $result->successful();
+4 -1
View File
@@ -52,8 +52,11 @@ class TmuxSessionManager
$configOption = file_exists($this->configFile) ? "-f {$this->configFile}" : '';
// Escape single quotes in the window name for shell
$escapedWindowName = str_replace("'", "'\\''", $windowName);
$result = Process::timeout(30)->run(
"tmux {$configOption} new-session -d -s {$this->sessionName} -n {$windowName} 'printf \"\\033]2;{$windowName}\\033\"'"
"tmux {$configOption} new-session -d -s {$this->sessionName} -n '{$escapedWindowName}' 'printf \"\\033]2;{$escapedWindowName}\\033\"'"
);
return $result->successful();
+79 -32
View File
@@ -1,6 +1,8 @@
# NNTmux Tmux Configuration
# This file is now managed in the config/ directory
# Enhanced with modern styling and powerline fonts
# ╭──────────────────────────────────────────────────────────────────────────────╮
# │ NNTmux Tmux Configuration │
# │ Modern styling with Nerd Font icons and Catppuccin-inspired colors │
# │ Requires: Nerd Font (FiraCode, JetBrains Mono, etc.) │
# ╰──────────────────────────────────────────────────────────────────────────────╯
# GNU-Screen compatible prefix
set -g prefix2 C-a
@@ -20,55 +22,82 @@ set -ga terminal-overrides ",xterm-256color:Tc"
set-hook -g client-attached 'select-window -t 0; select-pane -t 0.0'
#==============================================================================
# STATUS BAR - Modern Design with Powerline Symbols
# 🎨 COLOR PALETTE - Catppuccin Mocha Inspired
#==============================================================================
# Status bar colors
set -g status-bg colour235
set -g status-fg colour250
# Base colors
# bg_dark = colour234 (crust)
# bg = colour235 (base)
# bg_light = colour237 (surface0)
# fg = colour255 (text)
# fg_dim = colour250 (subtext0)
# accent = colour75 (sapphire)
# green = colour114 (green)
# yellow = colour221 (yellow)
# red = colour210 (red)
# purple = colour141 (mauve)
# pink = colour218 (pink)
# peach = colour215 (peach)
# teal = colour116 (teal)
#==============================================================================
# 📊 STATUS BAR - Modern Glassmorphism Style
#==============================================================================
# Status bar colors - darker base for contrast
set -g status-bg colour234
set -g status-fg colour255
# Status bar positioning and update interval
set -g status-position bottom
set -g status-interval 5
set -g status-justify left
# Left status - Session name with powerline arrow
set -g status-left-length 40
set -g status-left "#[fg=colour234,bg=colour39,bold] #S #[fg=colour39,bg=colour235,nobold]"
# Left status - Session name with rounded powerline and icon
set -g status-left-length 50
set -g status-left "#[fg=colour234,bg=colour75,bold] #S #[fg=colour75,bg=colour237]#[fg=colour255,bg=colour237] #{session_windows} #[fg=colour237,bg=colour234]"
# Right status - System info with powerline style
set -g status-right-length 150
set -g status-right "#[fg=colour238,bg=colour235]#[fg=colour250,bg=colour238] #(free -h | grep 'Mem' | awk '{print \" \"$3\"/\"$2}') #[fg=colour244,bg=colour238]#[fg=colour250,bg=colour244] #(uptime | cut -d',' -f 3- | sed 's/^ *//;s/ load//')#[fg=colour39,bg=colour244]#[fg=colour234,bg=colour39,bold] %H:%M %d-%b-%y "
# Right status - System info with modern icons
# Shows: RAM | Current Load | Avg Load (5m) | Uptime | Time | Date
set -g status-right-length 200
set -g status-right "#[fg=colour237,bg=colour234]#[fg=colour116,bg=colour237] #(free -h | grep 'Mem' | awk '{print $3\"/\"$2}') #[fg=colour238,bg=colour237]│#[fg=colour221,bg=colour237] #(cat /proc/loadavg | awk '{print $1}') #[fg=colour238,bg=colour237]│#[fg=colour215,bg=colour237] 󰇙 #(cat /proc/loadavg | awk '{print $2}') #[fg=colour238,bg=colour237]│#[fg=colour114,bg=colour237] 󰥔 #(uptime -p | sed 's/up //' | sed 's/,.*//') #[fg=colour75,bg=colour237]#[fg=colour234,bg=colour75,bold] %H:%M %d %b "
# Window status format
setw -g window-status-format "#[fg=colour244,bg=colour235] #I:#W "
setw -g window-status-current-format "#[fg=colour235,bg=colour39]#[fg=colour234,bg=colour39,bold] #I:#W #[fg=colour39,bg=colour235,nobold]"
# Window status format - inactive windows
setw -g window-status-format "#[fg=colour234,bg=colour236]#[fg=colour250,bg=colour236] #I #W #[fg=colour236,bg=colour234]"
# Window status format - active window with accent color
setw -g window-status-current-format "#[fg=colour234,bg=colour75]#[fg=colour234,bg=colour75,bold] #I #W #[fg=colour75,bg=colour234]"
# Window status separator
setw -g window-status-separator ""
setw -g window-status-separator " "
#==============================================================================
# PANE BORDERS - Modern rounded style
# 🔲 PANE BORDERS - Modern Rounded Style with Icons
#==============================================================================
# Pane border colors
# Use rounded corners for pane borders (requires font with box-drawing chars)
set -g pane-border-lines heavy
# Pane border colors - subtle inactive, vibrant active
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39
set -g pane-active-border-style fg=colour75
# Pane border format (requires tmux 3.2+)
set -g pane-border-format "#{?pane_active,#[fg=colour39]#[bg=colour235],#[fg=colour238]#[bg=colour235]} #{pane_index} #{pane_title} "
# Pane border format with status indicator and icons (requires tmux 3.2+)
set -g pane-border-format "#{?pane_active,#[fg=colour75]#[bg=colour235] ,#[fg=colour245]#[bg=colour235] }#[bold]#{pane_index}#[nobold] │ #{pane_title} #{?pane_active,#[fg=colour114]●,#[fg=colour238]○} "
set -g pane-border-status top
#==============================================================================
# MESSAGE STYLING
# 💬 MESSAGE STYLING
#==============================================================================
# Command message styling
set -g message-style bg=colour39,fg=colour234,bold
set -g message-command-style bg=colour238,fg=colour250
# Command message styling - accent color with bold
set -g message-style bg=colour75,fg=colour234,bold
# Command prompt styling
set -g message-command-style bg=colour237,fg=colour255
#==============================================================================
# WINDOW OPTIONS
# 🪟 WINDOW OPTIONS
#==============================================================================
# Constrain window size to the maximum size of any client connected to that window
@@ -78,11 +107,21 @@ setw -g aggressive-resize on
setw -g monitor-activity on
set -g visual-activity off
# Window status activity styling - subtle notification
setw -g window-status-activity-style fg=colour221,bg=colour236,none
# Window status bell styling
setw -g window-status-bell-style fg=colour210,bg=colour235,bold
setw -g window-status-bell-style fg=colour210,bg=colour236,bold
#==============================================================================
# MOUSE & HISTORY
# 🔄 COPY MODE STYLING
#==============================================================================
# Copy mode colors
setw -g mode-style bg=colour75,fg=colour234,bold
#==============================================================================
# 🖱️ MOUSE & HISTORY
#==============================================================================
# Enable mouse support
@@ -95,14 +134,14 @@ set -g history-limit 6000
set -g remain-on-exit on
#==============================================================================
# KEY BINDINGS
# ⌨️ KEY BINDINGS
#==============================================================================
# Rename pane
bind t command-prompt -p "(rename-pane)" -I "#T" "select-pane -T '%%'"
bind t command-prompt -p " (rename-pane)" -I "#T" "select-pane -T '%%'"
# Reload config
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"
bind r source-file ~/.tmux.conf \; display-message " Config reloaded!"
# Split panes using | and -
bind | split-window -h
@@ -116,3 +155,11 @@ bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
#==============================================================================
# 📦 POPUP STYLING (tmux 3.2+)
#==============================================================================
# Popup border style
set -g popup-border-style fg=colour75
set -g popup-border-lines rounded
+55 -20
View File
@@ -38,16 +38,46 @@ return [
'fonts' => [
// Popular Nerd Fonts / Powerline fonts
// Install with: sudo apt-get install fonts-powerline
// Install with: ./install-tmux-fonts.sh or see TMUX_FONTS_GUIDE.md
'use_nerd_fonts' => env('TMUX_USE_NERD_FONTS', true),
'symbols' => [
'separator_left' => '', // Powerline arrow
'separator_right' => '', // Powerline arrow
'branch' => '', // Git branch
'lock' => '', // Lock symbol
// Powerline arrows (rounded style)
'separator_left' => '', // Rounded powerline arrow left
'separator_right' => '', // Rounded powerline arrow right
'separator_thin_left' => '', // Thin separator
'separator_thin_right' => '', // Thin separator
// Status icons
'session' => '', // Terminal/session icon
'window' => '', // Window icon
'pane_active' => '●', // Active pane indicator
'pane_inactive' => '○', // Inactive pane indicator
// System monitoring
'cpu' => '', // CPU symbol
'ram' => '', // RAM symbol
'disk' => '󰋊', // Disk symbol
'network' => '󰛳', // Network symbol
'clock' => '', // Clock symbol
'calendar' => '', // Calendar symbol
'uptime' => '󰥔', // Uptime symbol
// Processing icons
'download' => '', // Download/binaries
'sync' => '󰑓', // Sync/backfill
'release' => '', // Release
'fix' => '󰯃', // Fix/wrench
'trash' => '󰆴', // Trash/remove
'tv' => '󰟴', // TV
'movie' => '', // Movie
'amazon' => '', // Amazon/shopping
'irc' => '󰻞', // Chat/IRC
// Monitoring tools
'htop' => '', // Process monitor
'database' => '', // Database
'redis' => '', // Redis
'console' => '', // Console/terminal
],
],
@@ -56,24 +86,29 @@ return [
'remain_on_exit' => true,
'aggressive_resize' => true,
'monitor_activity' => true,
'border_style' => 'rounded', // rounded, heavy, double, simple
'active_border_color' => 'colour39', // Bright blue
'inactive_border_color' => 'colour238', // Dark grey
'border_style' => 'heavy', // heavy for bolder lines
'active_border_color' => 'colour75', // Sapphire blue (Catppuccin)
'inactive_border_color' => 'colour238', // Dark grey
],
'colors' => [
// Modern color scheme (Dracula-inspired)
'background' => 'colour235',
'foreground' => 'colour250',
'selection' => 'colour238',
'comment' => 'colour244',
'cyan' => 'colour117',
'green' => 'colour114',
'orange' => 'colour215',
'pink' => 'colour212',
'purple' => 'colour141',
'red' => 'colour210',
'yellow' => 'colour228',
// Modern color scheme (Catppuccin Mocha inspired)
'base' => 'colour234', // Darkest background (crust)
'background' => 'colour235', // Main background (base)
'surface' => 'colour237', // Surface for elevated elements
'foreground' => 'colour255', // Main text (text)
'subtext' => 'colour250', // Dimmed text (subtext0)
'overlay' => 'colour238', // Overlay elements
// Accent colors (Catppuccin)
'sapphire' => 'colour75', // Primary accent
'teal' => 'colour116', // Secondary accent
'green' => 'colour114', // Success
'yellow' => 'colour221', // Warning
'peach' => 'colour215', // Attention
'red' => 'colour210', // Error/danger
'pink' => 'colour218', // Special
'mauve' => 'colour141', // Purple
],
'keys' => [