oxker 0.13.0

A simple tui to view & control docker containers
{
	// Example JSONC config file
	// This needs to be renamed to "config.jsonc" ("config.json" will also work, even if the file is actually a jsonc) in order for oxker to automatically load
	// oxker will also read .toml and .json files which use the same key/value structure & format as this file
	// Every key is optional, with defaults that oxker will choose if missing or invalid
	// The `--config-file` cli argument can be used to load configuration files from any readable location
	// Docker update interval in ms, minimum effectively 1000
	"docker_interval": 1000,
	// Attempt to colorize the logs, conflicts with "raw"
	"color_logs": false,
	// Show raw logs, default is to remove ansi formatting, conflicts with "color"
	"raw_logs": false,
	// Show self (the oxker container) when running as a docker container
	"show_self": false,
	// Show std_err in logs
	"show_std_err": true,
	// Show a timestamp for every log entry
	"show_timestamp": true,
	// Don't draw gui - for debugging - mostly pointless
	"gui": true,
	// Docker host location. Will take priority over a DOCKER_HOST env.
	// "host": "/var/run/docker.sock",
	// Display the timestamp in a custom format, if given option is invalid, it will default to %Y-%m-%dT%H:%M:%S.%8f -> 2025-02-18T12:34:56.01234567
	// *Should* accept any valid strftime string up to 32 chars, see https://strftime.org/
	"timestamp_format": "%Y-%m-%dT%H:%M:%S.%8f",
	// Display the container logs timestamp with a given timezone, if timezone is unknown, defaults to UTC
	"timezone": "Etc/UTC",
	// Directory for saving exported logs, defaults to `$HOME`, this is automatically *correctly* calculated for Linux, Mac, and Windows
	// "save_dir": "$HOME",
	// Force use of docker cli when execing into containers, honestly mostly pointless
	"use_cli": false,
	// Show the logs section - this can be changed during operation with the log_section_toggle key
	"show_logs": true,
	// Use case-sensitive matching for logs
	"log_search_case_sensitive": true,
	//////////////////
	// Custom Keymap //
	//////////////////
	// Available keys are;
	// 1) a-z and A-Z
	// 2) 0-9
	// WARNING if using the \ key, it needs to be escaped, e.g. "log_section_toggle": ["\\"]
	// 3) / \ , . # ' [ ] ; = -
	// 3) F1-F12
	// 4) backspace, tab, backtab, delete, end, esc, home, insert, pagedown, pageup, left, right, up, down
	// Each definition can have two keys associated with it
	// WARNING "scroll_many" only accepts control, alt, shift, with no secondary option
	// If any key clashes are found, oxker will revert to it's default keymap
	"keymap": {
		// Clear any popup boxes, filter panel, or help panel
		"clear": [
			"c",
			"esc"
		],
		// Cancel delete - clear also works here
		"delete_deny": [
			"n"
		],
		// Confirm Delete
		"delete_confirm": [
			"y"
		],
		// Exec into the selected container
		"exec": [
			"e"
		],
		// Enter filter mode
		"filter_mode": [
			"/",
			"F1"
		],
		// Enter log search mode
		"log_search_mode": [
			"#"
		],
		// Quit at anytime
		"quit": [
			"q"
		],
		// Save logs of selected container to file on disk
		"save_logs": [
			"s"
		],
		// Scroll down a list by one item
		"scroll_down": [
			"down",
			"j"
		],
		// Scroll down to the end of a list
		"scroll_end": [
			"end"
		],
		// Modifier to scroll by 10 lines instead of one, used in conjunction with scroll_up/scroll_down
		"scroll_many": [
			"control"
		],
		// Scroll up to the start of a list
		"scroll_start": [
			"home"
		],
		// Scroll up a list by one item
		"scroll_up": [
			"up",
			"k"
		],
		// Horizontal scroll of the logs
		"scroll_forward": [
			"right"
		],
		"scroll_back": [
			"left"
		],
		// Select next panel
		"select_next_panel": [
			"tab"
		],
		// Select previous panel
		"select_previous_panel": [
			"backtab"
		],
		// Sort the containers based on specific column
		"sort_by_name": [
			"1"
		],
		"sort_by_state": [
			"2"
		],
		"sort_by_status": [
			"3"
		],
		"sort_by_cpu": [
			"4"
		],
		"sort_by_memory": [
			"5"
		],
		"sort_by_id": [
			"6"
		],
		"sort_by_image": [
			"7"
		],
		"sort_by_rx": [
			"8"
		],
		"sort_by_tx": [
			"9"
		],
		// Reset the sorted containers
		"sort_reset": [
			"0"
		],
		// Toggle the help panel
		"toggle_help": [
			"h"
		],
		// Toggle mouse capture
		"toggle_mouse_capture": [
			"m"
		],
		// Reduce the height of the logs list section
		"log_section_height_decrease": [
			"-"
		],
		// Increase the height of the logs list section
		"log_section_height_increase": [
			"+"
		],
		// Toggle visibility of the log section
		"log_section_toggle": [
			"\\"
		],
		// Toggle to inspect container screen
		"inspect": [
			"i"
		],
		// Force a complete clear & redraw of the screen
		"force_redraw": [
			"f"
		]
	},
	////////////////////
	// Custom Colors //
	////////////////////
	// Colors be listed as either;
	// 1) named ANSI: 'red', case insensitive, see https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
	// 2) Hex values: '#FF0000', case insensitive
	// 3) 'reset' for transparency
	// Some background/foreground combinations don't work, I *think* this is an issue/feature of ratatui - but I may have just made a mistake somewhere
	"colors": {
		// The single line bar at the uppermost of the display. Contains name/state/status headings etc
		"headers_bar": {
			// Background color of the entire line
			"background": "magenta",
			// Animated loading icon at the start of the bar
			"loading_spinner": "white",
			// Text color
			"text": "black",
			// Text color of a selected header
			"text_selected": "gray"
		},
		// The borders around the selectable panels - Containers, Commands, Logs
		"borders": {
			// Border when selected
			"selected": "lightcyan",
			// Border when not selected
			"unselected": "grey"
		},
		// The containers sections, in the future more color customization options should be made available in this section
		"containers": {
			// The icon use to illustrate which container is currently selected
			"icon": "white",
			// Background color of panel
			"background": "reset",
			// At the moment, this will only change the color of the name, id, and image columns
			"text": "blue",
			// Text color of the RX column
			"text_rx": "#FFE9C1",
			// Text color of the TX column
			"text_tx": "#CD8C8C"
		},
		// Each state of a container has a color, which is used in multiple places, i.e. chart titles, state/status/cpu/memory columns in the container section
		"container_state": {
			"dead": "red",
			"exited": "red",
			"paused": "yellow",
			"removing": "lightred",
			"restarting": "lightgreen",
			"running_healthy": "green",
			"running_unhealthy": "#FFB224",
			"unknown": "red"
		},
		// The color the of Docker commands available for each container
		"commands": {
			// Background color of panel
			"background": "reset",
			"pause": "yellow",
			"restart": "magenta",
			"stop": "red",
			"delete": "gray",
			"resume": "blue",
			"start": "green"
		},
		// The cpu chart
		"chart_cpu": {
			// Background color of panel
			"background": "reset",
			// Border color
			"border": "white",
			// Chart title
			"title": "green",
			// Maximum CPU percentage
			"max": "#FFB224",
			// Points on the chart
			"points": "magenta",
			// The charts y-axis
			"y_axis": "white"
		},
		// The memory chart
		"chart_memory": {
			// Background color of panel
			"background": "reset",
			// Border color
			"border": "white",
			// Chart title
			"title": "green",
			// Maximum memory use
			"max": "#FFB224",
			// Points on the chart
			"points": "cyan",
			// The charts y-axis
			"y_axis": "white"
		},
		// The ports chart
		"chart_ports": {
			// Background color of panel
			"background": "reset",
			// Border color
			"border": "white",
			// Chart title
			"title": "green",
			// Private/Public/IP headings
			"headings": "yellow",
			// Ports & IP listing text
			"text": "white"
		},
		// The bandwidth chart
		"chart_bandwidth": {
			//Background color of panel
			"background": "reset",
			// Border color
			"border": "white",
			// Maximum RX value - again paused & stopped colors not yet customizable
			"max_rx": "#FFE9C1",
			// # Maximum TX value - again paused & stopped colors not yet customizable
			"max_tx": "#CD8C8C",
			// RX points on the chart - again paused & stopped colors not yet customizable
			"points_rx": "#FFE9C1",
			// TX points on the chart - again paused & stopped colors not yet customizable
			"points_tx": "#CD8C8C",
			// RX title color
			"title_rx": "#FFE9C1",
			// TX title color
			"title_tx": "#CD8C8C",
			// The charts y-axis
			"y_axis": "white"
		},
		// The filter panel
		"filter": {
			// Background color of panel
			"background": "reset",
			// color of text
			"text": "gray",
			// background color of the selected filter by item (Name/Image/Status/All)
			"selected_filter_background": "gray",
			// text color of the selected filter by item (Name/Image/Status/All)
			"selected_filter_text": "black",
			// Highlighted text color
			"highlight": "magenta"
		},
		// The log search panel
		"log_search": {
			// Background color of panel
			"background": "reset",
			// color of text
			"text": "gray",
			// text color of the buttons text
			"button_text": "black",
			// Highlighted text color
			"highlight": "magenta"
		},
		// The logs panel, will only be applied if color_logs is false
		"logs": {
			// Background color of panel
			"background": "reset",
			// text color
			"text": "reset"
		},
		// The help popup
		"popup_help": {
			// Background color
			"background": "magenta",
			// Text color
			"text": "black",
			// Highlighted text color
			"text_highlight": "white"
		},
		// The info popup - used to display small messages - such as saving logs to disk, or change of mouse capture settings
		"popup_info": {
			// Background color
			"background": "blue",
			// Text color
			"text": "white"
		},
		// The delete popup - used to display a confirmation warning when about to delete a container
		"popup_delete": {
			// Background color
			"background": "white",
			// Text color
			"text": "black",
			// Highlighted text color
			"text_highlight": "red"
		},
		// The error popup - hopefully you'll never have to see this
		"popup_error": {
			// Background color
			"background": "red",
			// Text color
			"text": "white"
		}
	}
}