{"id":18872959,"url":"https://github.com/18alantom/fex","last_synced_at":"2025-04-06T06:09:19.097Z","repository":{"id":242203734,"uuid":"777081925","full_name":"18alantom/fex","owner":"18alantom","description":"A command-line file explorer prioritizing quick navigation.","archived":false,"fork":false,"pushed_at":"2024-10-02T10:21:35.000Z","size":343,"stargazers_count":104,"open_issues_count":3,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T05:08:58.342Z","etag":null,"topics":["cli","file-explorer","tool","tui","unix","zig","zsh"],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/18alantom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-25T06:51:59.000Z","updated_at":"2025-03-25T13:30:18.000Z","dependencies_parsed_at":"2024-11-08T05:34:35.400Z","dependency_job_id":null,"html_url":"https://github.com/18alantom/fex","commit_stats":null,"previous_names":["18alantom/fex"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/18alantom%2Ffex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/18alantom%2Ffex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/18alantom%2Ffex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/18alantom%2Ffex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/18alantom","download_url":"https://codeload.github.com/18alantom/fex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247441052,"owners_count":20939239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","file-explorer","tool","tui","unix","zig","zsh"],"created_at":"2024-11-08T05:33:10.410Z","updated_at":"2025-04-06T06:09:19.073Z","avatar_url":"https://github.com/18alantom.png","language":"Zig","funding_links":[],"categories":["Zig"],"sub_categories":[],"readme":"![fex logo bar](https://github.com/18alantom/fex/assets/29507195/f8f6ece5-14bb-4361-8d79-c2d5fb145fd4)\n\n**A command-line file explorer.**\n\n---\n\n`fex` is a command-line file explorer inspired by\n[Vim](\u003chttps://en.wikipedia.org/wiki/Vim_(text_editor)\u003e),\n[exa](https://github.com/ogham/exa) and\n[fzf](https://github.com/junegunn/fzf?tab=readme-ov-file#installation), built with\nquick exploration and navigation in mind.\n\n\u003cimg width=\"949\" alt=\"fex screenshot\" src=\"https://github.com/18alantom/fex/assets/29507195/61a4b2a2-19a2-44ca-9c71-27f70415d7ca\"\u003e\n\nBy using Vim-like keybindings, `fex` ends up being a near-effortless\ntool to zip around a file system:\n\n- `j`, `k` to move to the pervious and next item\n- `h`, `l` to move up or drop down a directory\n- `/` to search for items\n- `:` to run commands on the selected item\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eShow Fex Demo\u003c/strong\u003e\u003c/summary\u003e\n \n[Fex Demo.webm](https://github.com/18alantom/fex/assets/29507195/04bb6078-c8f0-4e27-88db-79b81c1e6429)\n\n\u003c/details\u003e\n\n## Index\n\n- [Installation](#installation)\n  - [Using `install.sh`](#using-installsh)\n  - [From Source](#from-source)\n    - [macOS](#macos)\n    - [Linux](#linux)\n- [Setup](#setup)\n  - [Zsh Setup](#zsh-setup)\n  - [fex Default Command](#fex-default-command)\n- [Config](#config)\n  - [Display Config](#display-config)\n  - [Search Config](#search-config)\n  - [Other Args](#other-args)\n- [Controls](#controls)\n  - [Navigation Controls](#navigation-controls)\n  - [Action Controls](#action-controls)\n  - [File System Controls](#file-system-controls)\n  - [Search Mode Controls](#search-mode-controls)\n  - [Command Mode Controls](#command-mode-controls)\n  - [Display Toggle Controls](#display-toggle-controls)\n  - [Sort Controls](#sort-controls)\n- [Platorm Support](#platform-support)\n\n## Installation\n\nThe most convenient way is by running the following bash one-liner:\n\n```bash\ncurl -O https://raw.githubusercontent.com/18alantom/fex/master/install.sh \u0026\u0026 bash install.sh\n```\n\nGetting `fex` running involves:\n\n1. Installing the `fex` executable.\n2. Setting up the shell integration.\n\nTo get install the `fex` executable follow this section. For the shell\nintegration go to the [Setup](#setup) section.\n\n\u003e [!NOTE]\n\u003e\n\u003e 🚧 Installation using package managers (Homebrew, apt, etc) will be added.\n\n### Using `install.sh`\n\nYou can use the\n[`install.sh`](https://github.com/18alantom/fex/blob/master/install.sh) script\nto [download](https://github.com/18alantom/fex/releases) and setup the latest\nversion of fex.\n\nRun the following bash one-liner to setup fex:\n\n```bash\ncurl -O https://raw.githubusercontent.com/18alantom/fex/master/install.sh \u0026\u0026 bash install.sh\n```\n\n\u003e [!TIP]\n\u003e\n\u003e The same bash one-liner can be used to update your fex install.\n\n\u003e [!NOTE]\n\u003e\n\u003e To uninstall fex:\n\u003e\n\u003e 1. Remove the `$HOME/.fex` directory.\n\u003e 2. Delete the lines pertaining to fex from your `.bashrc` or `.zshrc` file.\n\n### From Source\n\nTo install fex from source, you will need version `zig` version 0.13.0 installed. You can get it from [here](https://ziglang.org/download/).\n\nOnce you had done that, compile the executable by using the following commands:\n\n```bash\n# Clone the fex repository\ngit clone https://github.com/18alantom/fex \u0026\u0026 cd fex\n```\n\n#### macOS\n\n```bash\n# Compile the fex executable for your system\nzig build-exe -O ReleaseSafe main.zig\n\n# Move the executable to usr bin\nmv main /usr/local/bin/fex\n```\n\n#### Linux\n\n```bash\n# To be able to open files, you will need xdg-open from xdg-utils\nsudo apt install xdg-utils\n```\n\n```bash\n# Compile the fex executable for your system\nzig build-exe -O ReleaseSafe main.zig -lc\n\n# Move the executable to usr bin\nmv main /usr/bin/fex\n```\n\n## Setup\n\nTo use `fex` to its full extent it needs to be set up as a shell widget. This\nallows fex to:\n\n- Be invoked using a key binding.\n- Execute shell commands. For example `cd` to quit and change directory.\n\nThese are shell specific so you will need to set it up separately depending on\nthe shell you use.\n\n\u003e [!NOTE]\n\u003e\n\u003e 🚧 bash shell support will be added.\n\n### Zsh Setup\n\nTo setup the Zsh widget for fex, first copy the file [`shell/.fex.zsh`](./shell/.fex.zsh) to your\nhome directory. Then copy the following lines into your `.zshrc`:\n\n```bash\n# Source .fex.zsh if it's present\n[ -f ~/.fex.zsh ] \u0026\u0026 source ~/.fex.zsh\n\n# Bind CTRL-F to invoke fex (key binds can be custom)\nbindkey '^f' fex-widget\n```\n\n\u003e [!TIP]\n\u003e\n\u003e You can change which shortcut is used to invoke `fex` by using the Zsh `bindkey` command.\n\u003e For example if you use Zsh vi mode, you can use `bindkey -a 'f' fex-widget` to\n\u003e invoke `fex` using the `'f'` key when in command mode.\n\u003e\n\u003e Reference:\n\u003e\n\u003e - ZLE manpage (`man zshzle`), the ZLE BUILTINS section.\n\u003e - [Binding Keys and handling keymaps](https://zsh.sourceforge.io/Guide/zshguide04.html#l93)\n\n### Fish Setup\n\nTo setup the fex key bind for Fish, copy [`shell/.fex.fish`](./shell/.fex.fish) into to home directory.\nThen copy the following lines below into your `$HOME/.config/fish/config.fish`.\n\n```bash\n# Source .fex.fish if it's present\n[ -f ~/.fex.fish ] \u0026\u0026 source ~/.fex.fish\n\n# Bind CTRL-F to invoke fex (key binds can be custom)\nbind \\cf fex-widget\n```\n\nOnce you're done, restart your shell to see it working!\n\n\u003e [!TIP]\n\u003e\n\u003e You can change which shortcut is used to invoke `fex` by using the Fish `bind` command.\n\u003e\n\u003e Reference: [bind - handle fish key bindings](https://fishshell.com/docs/current/cmds/bind.html)\n\n### `fex` Default Command\n\nAfter you have set up fex for your shell, you can `FEX_DEFAULT_COMMAND` to change\nwhat flags `fex` is invoked using. For example:\n\n```bash\n# Sets time displayed to access time and hides icons\nexport FEX_DEFAULT_COMMAND=\"fex --time-type accessed --no-icons\"\n```\n\n## Config\n\nYou can configure `fex` by passing it args.\n\n\u003e [!NOTE]\n\u003e\n\u003e Config is picked up from the `FEX_DEFAULT_COMMAND` envvar and CLI args\n\u003e passed when calling `fex`. CLI args take precedence.\n\n### Display Config\n\nChanges values displayed in an item line.\n\n| arg                 | description                                                                                             |\n| :------------------ | :------------------------------------------------------------------------------------------------------ |\n| `--[no-]dotfiles`   | Show or hide dotfiles (hidden by default).                                                              |\n| `--[no-]icons`      | Show or hide icons. Note: icons need a [patched font](https://github.com/ryanoasis/nerd-fonts) to work. |\n| `--[no-]size`       | Show or hide item sizes                                                                                 |\n| `--[no-]time`       | Show or hide time                                                                                       |\n| `--[no-]perm`       | Show or hide permission info                                                                            |\n| `--[no-]link`       | Show or hide link target                                                                                |\n| `--[no-]user`       | Show or hide user name                                                                                  |\n| `--[no-]group`      | Show or hide group name                                                                                 |\n| `--time-type VALUE` | Set which time is displayed. VALUE: modified, accessed, changed. Default: modified                      |\n| `--[no-]fullscreen` | Enable or disable full screen mode. Previous screen is restored on quit.                                |\n\n### Search Config\n\nThis changes search behavior.\n\n| arg              | description                                  |\n| :--------------- | :------------------------------------------- |\n| --regular-search | Uses regular search, instead of fuzzy search |\n| --match-case     | Match search query case, instead of ignoring |\n\n\u003e [!TIP]\n\u003e\n\u003e `fex` uses smart case matching by default i.e case is ignored until you\n\u003e enter an upper case character.\n\n### Other Args\n\n| arg         | description                        |\n| :---------- | :--------------------------------- |\n| `--help`    | Prints the help message and quits. |\n| `--version` | Prints the version and quits.      |\n\n## Controls\n\n`fex` has three modes:\n\n- **Default**: used to navigate around a file system and enter one of the other modes.\n- **Search**: toggled with `/`, used to accept a query and find matching items in expanded directories.\n- **Command**: toggled with `:`, used to accept a shell command that is executed on `enter`. `fex` needs to be setup as a shell widget for this to work, see [Setup](#setup).\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e Keys mentioned in angle-brackets such as `\u003center\u003e` show which key has to be\n\u003e pressed. Keys mentioned without such as `cd` are sequences that have to be\n\u003e typed.\n\n### Navigation Controls\n\n| key                  | action                                   |\n| :------------------- | :--------------------------------------- |\n| `j`, `\u003cdown-arrow\u003e`  | Cursor down                              |\n| `k`, `\u003cup-arrow\u003e`    | Cursor up                                |\n| `h`, `\u003cleft-arrow\u003e`  | Up a dir                                 |\n| `l`, `\u003cright-arrow\u003e` | Down a dir (if item is a dir)            |\n| `gg`                 | Jump to first item in the list           |\n| `G`                  | Jump to last item in the list            |\n| `{`                  | Jump to prev item with a different level |\n| `}`                  | Jump to next item with a different level |\n\n### Action Controls\n\n| key             | action                                    |\n| :-------------- | :---------------------------------------- |\n| `\u003center\u003e`       | Toggle directory or open file             |\n| `o`             | Open item                                 |\n| `E`             | Expand all directories under root         |\n| `C`             | Collapse all directories                  |\n| `R`             | Change root to item under cursor (if dir) |\n| `I`             | Toggle item stat info                     |\n| `1..9`          | Expand all directories up to $NUM depth   |\n| `q`, `\u003cctrl-d\u003e` | Quit                                      |\n| `\u003ctab\u003e`         | Toggle item selection under cursor        |\n| `/`             | Toggle search mode                        |\n| `:`             | Toggle command mode                       |\n\n### File System Controls\n\n| key  | action                                                                 |\n| :--- | :--------------------------------------------------------------------- |\n| `cd` | Quit and change directory to item under cursor (needs [setup](#setup)) |\n\n### Search Mode Controls\n\nType `/` in regular mode to initiate search mode.\n\n| key        | action                                             |\n| :--------- | :------------------------------------------------- |\n| `\u003cescape\u003e` | Quit search, restore cursor to pre-search position |\n| `\u003center\u003e`  | Quit search, cursor stays on found item            |\n\n### Command Mode Controls\n\nType `:` in regular mode to initiate command mode.\n\n| key        | action                                                                       |\n| :--------- | :--------------------------------------------------------------------------- |\n| `\u003cescape\u003e` | Quit command mode                                                            |\n| `\u003center\u003e`  | Quit fex, execute command with selected items or item under cursor as arg(s) |\n\n### Display Toggle Controls\n\nToggle displayed information.\n\n| key  | action                         |\n| :--- | :----------------------------- |\n| `.`  | Toggle dotfile display         |\n| `I`  | Toggle item stat info          |\n| `ti` | Toggle icon display            |\n| `tp` | Toggle permission info display |\n| `ts` | Toggle size display            |\n| `tt` | Toggle time display            |\n| `tl` | Toggle link target display     |\n| `tu` | Toggle user name display       |\n| `tg` | Toggle group name display      |\n| `tm` | Display modified time          |\n| `ta` | Display accessed time          |\n| `tc` | Display changed time           |\n\n### Sort Controls\n\nSort entries in a directory.\n\n| key   | action                                     |\n| :---- | :----------------------------------------- |\n| `sn`  | Sort in ascending order by name            |\n| `ss`  | Sort in ascending order by size            |\n| `st`  | Sort in ascending order by displayed time  |\n| `sdn` | Sort in descending order by name           |\n| `sds` | Sort in descending order by size           |\n| `sdt` | Sort in descending order by displayed time |\n\n## Platform Support\n\n`fex` should ideally compile and run on all macOS and Linux targets supported\nby Zig. Some features such as opening fs items work only on macOS for now.\n\nPortions of `fex` code is platform specific and Windows compatibility has not\nbeen accounted for. This may be added in later.\n\n| arch | macOS   | Linux            | Windows          |\n| ---- | ------- | ---------------- | ---------------- |\n| arm  | works   | does not compile | does not compile |\n| x86  | works\\* | works            | does not compile |\n\nCurrently fex only has shell integration for Zsh. Fish and Bash integrations will\nbe added.\n\n_works\\*: uses stat instead of lstat for macOS x86 so links may not be shown._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F18alantom%2Ffex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F18alantom%2Ffex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F18alantom%2Ffex/lists"}