地圖 (Jido) is a lightweight Unix TUI file explorer designed for speed and simplicity.
1# 地圖 (Jido) 2 3![Jido preview](./assets/preview.gif) 4 5**Jido** is a lightweight Unix TUI file explorer designed for speed and 6simplicity. 7 8The name 地圖 (지도) translates to "map" in English, reflecting Jido's 9purpose: helping you navigate and explore your file system with ease. With 10Vim-like bindings and a minimalist interface, Jido focuses on speed and 11simplicity. 12 13Jido is built with Zig v`0.15.2`. 14 15- [Installation](#installation) 16- [Integrations](#integrations) 17- [Key manual](#key-manual) 18- [Configuration](#configuration) 19- [Contributing](#contributing) 20 21## Installation 22To install Jido, check the "Releases" page or build locally 23via `zig build --release=safe`. 24 25## Integrations 26- `pdftotext` to view PDF text previews. 27- A terminal supporting the `kitty image protocol` to view images. 28 29## Key manual 30Below are the default keybinds. Keybinds can be overwritten via the `Keybinds` 31config option. Some keybinds are unbound by default, see [Configuration](#configuration) 32for more information. 33 34``` 35Global: 36<CTRL-c> :Exit. 37<CTRL-r> :Reload config. 38 39Normal mode: 40j / <Down> :Go down. 41k / <Up> :Go up. 42h / <Left> / - :Go to the parent directory. 43l / <Right> :Open item or change directory. 44g :Go to the top. 45G :Go to the bottom. 46c :Change directory via path. Will enter input mode. 47R :Rename item. Will enter input mode. 48D :Delete item. 49u :Undo delete/rename. 50d :Create directory. Will enter input mode. 51% :Create file. Will enter input mode. 52/ :Fuzzy search directory. Will enter input mode. 53. :Toggle hidden files. 54: :Allows for Jido commands to be entered. Please refer to the 55 "Command mode" section for available commands. Will enter 56 input mode. 57v :Verbose mode. Provides more information about selected entry. 58y :Yank selected item. 59p :Past yanked item. 60 61Input mode: 62<Esc> :Cancel input. 63<CR> :Confirm input. 64 65Command mode: 66<Up> / <Down> :Cycle previous commands. 67:q :Exit. 68:h :View available keybinds. 'q' to return to app. 69:config :Navigate to config directory if it exists. 70:trash :Navigate to trash directory if it exists. 71:empty_trash :Empty trash if it exists. This action cannot be undone. 72:cd <path> :Change directory via path. Will enter input mode. 73``` 74 75## Configuration 76Configure `jido` by editing the external configuration file located at either: 77- `$HOME/.jido/config.json` 78- `$XDG_CONFIG_HOME/jido/config.json`. 79 80Jido will look for these env variables specifically. If they are not set, Jido 81will not be able to find the config file. 82 83An example config file can be found [here](https://github.com/BrookJeynes/jido/blob/main/example-config.json). 84 85Config schema: 86``` 87Config = struct { 88 .show_hidden: bool = true, 89 .sort_dirs: bool = true, 90 .show_images: bool = true, -- Images are only supported in a terminal 91 supporting the `kitty image protocol`. 92 .preview_file: bool = true, 93 .empty_trash_on_exit: bool = false, -- Emptying the trash permanently deletes 94 all files within the trash. These 95 files are not recoverable past this 96 point. 97 .true_dir_size: bool = false, -- Display size of directory including 98 all its children. This can and will 99 cause lag on deeply nested directories. 100 .keybinds: Keybinds, 101 .styles: Styles 102} 103 104Keybinds = struct { 105 .toggle_hidden_files: ?Char = '.', 106 .delete: ?Char = 'D', 107 .rename: ?Char = 'R', 108 .create_dir: ?Char = 'd', 109 .create_file: ?Char = '%', 110 .fuzzy_find: ?Char = '/', 111 .change_dir: ?Char = 'c', 112 .enter_command_mode: ?Char = ':', 113 .jump_top: ?Char = 'g', 114 .jump_bottom: ?Char = 'G', 115 .toggle_verbose_file_information: ?Char = 'v', 116 .force_delete: ?Char = null -- Files deleted this way are 117 not recoverable 118 .yank: ?Char = 'y' 119 .paste: ?Char = 'p' 120} 121 122NotificationStyles = struct { 123 .box: vaxis.Style, 124 .err: vaxis.Style, 125 .warn: vaxis.Style, 126 .info: vaxis.Style 127} 128 129Styles = struct { 130 .selected_list_item: Style, 131 .list_item: Style, 132 .file_name: Style, 133 .file_information: Style 134 .notification: NotificationStyles, 135 .git_branch: Style 136} 137 138Style = struct { 139 .fg: Color, 140 .bg: Color, 141 .ul: Color, 142 .ul_style = .{ 143 off, 144 single, 145 double, 146 curly, 147 dotted, 148 dashed 149 } 150 .bold: bool, 151 .dim: bool, 152 .italic: bool, 153 .blink: bool, 154 .reverse: bool, 155 .invisible: bool, 156 .strikethrough: bool 157} 158 159Color = enum{ 160 default, 161 index: u8, 162 rgb: [3]u8 163} 164 165Char = enum(u21) 166``` 167 168## Contributing 169Contributions, issues, and feature requests are always welcome via 170[GitHub](https://github.com/brookjeynes/jido) or 171[tangled](https://tangled.sh/@brookjeynes.dev/jido).