diff options
author | Ruixi-rebirth <ruixirebirth@gmail.com> | 2023-05-27 20:49:55 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-27 22:49:55 -0400 |
commit | 20d51cf17a5e93cc20373423efeca72fd7c100d5 (patch) | |
tree | dca1d1be6cc5a31192c8a8acccef974649e1acce | |
parent | 493af3185092036cbbae81ae620b101f66cf4e9a (diff) |
Add flake support (#297)
Add flake support
28 files changed, 1337 insertions, 645 deletions
diff --git a/.github/workflows/automated-build.yml b/.github/workflows/automated-build.yml index 6e52b81..26b284e 100644 --- a/.github/workflows/automated-build.yml +++ b/.github/workflows/automated-build.yml @@ -1,15 +1,12 @@ name: Automated build - env: CI_INTERMEDIATES_DIR: "_ci-intermediates" - on: release: types: [created] push: tags: - 'v*' - jobs: build: name: ${{ matrix.job.os }} (${{ matrix.job.target }}) @@ -18,138 +15,127 @@ jobs: fail-fast: false matrix: job: - - { os: ubuntu-20.04, target: arm-unknown-linux-gnueabihf , use-cross: true } - - { os: ubuntu-20.04, target: arm-unknown-linux-musleabihf, use-cross: true } - - { os: ubuntu-20.04, target: aarch64-unknown-linux-gnu , use-cross: true } - - { os: ubuntu-20.04, target: x86_64-unknown-linux-gnu } - - { os: ubuntu-20.04, target: x86_64-unknown-linux-musl , use-cross: true } - - { os: macos-10.15 , target: x86_64-apple-darwin } - + - {os: ubuntu-20.04, target: arm-unknown-linux-gnueabihf, use-cross: true} + - {os: ubuntu-20.04, target: arm-unknown-linux-musleabihf, use-cross: true} + - {os: ubuntu-20.04, target: aarch64-unknown-linux-gnu, use-cross: true} + - {os: ubuntu-20.04, target: x86_64-unknown-linux-gnu} + - {os: ubuntu-20.04, target: x86_64-unknown-linux-musl, use-cross: true} + - {os: macos-10.15, target: x86_64-apple-darwin} steps: - - name: Checkout source code - uses: actions/checkout@v2 - - - name: Install prerequisites - shell: bash - run: | - case ${{ matrix.job.target }} in - arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; - aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; - esac - - - name: Extract crate information - shell: bash - run: | - echo "PROJECT_NAME=joshuto" >> $GITHUB_ENV - echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV - echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV - echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV - - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - target: ${{ matrix.job.target }} - override: true - profile: minimal # minimal component installation (ie, no documentation) - - - name: Show version information (Rust, cargo, GCC) - shell: bash - run: | - gcc --version || true - rustup -V - rustup toolchain list - rustup default - cargo -V - rustc -V - - - name: Build - uses: actions-rs/cargo@v1 - with: - use-cross: ${{ matrix.job.use-cross }} - command: build - args: --locked --release --target=${{ matrix.job.target }} - - - name: Strip debug information from executable - id: strip - shell: bash - run: | - # Figure out suffix of binary - EXE_suffix="" - case ${{ matrix.job.target }} in - *-pc-windows-*) EXE_suffix=".exe" ;; - esac; - - # Figure out what strip tool to use if any - STRIP="strip" - case ${{ matrix.job.target }} in - arm-unknown-linux-*) STRIP="arm-linux-gnueabihf-strip" ;; - aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; - *-pc-windows-msvc) STRIP="" ;; - esac; - - # Setup paths - BIN_DIR="${{ env.CI_INTERMEDIATES_DIR }}/stripped-release-bin/" - mkdir -p "${BIN_DIR}" - BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}" - BIN_PATH="${BIN_DIR}/${BIN_NAME}" - - # Copy the release build binary to the result location - cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}" - - # Also strip if possible - if [ -n "${STRIP}" ]; then - "${STRIP}" "${BIN_PATH}" - fi - - # Let subsequent steps know where to find the (stripped) bin - echo ::set-output name=BIN_PATH::${BIN_PATH} - echo ::set-output name=BIN_NAME::${BIN_NAME} - - - name: Create tarball - id: package - shell: bash - run: | - PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac; - PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }} - PKG_NAME=${PKG_BASENAME}${PKG_suffix} - echo ::set-output name=PKG_NAME::${PKG_NAME} - PKG_STAGING="${{ env.CI_INTERMEDIATES_DIR }}/package" - ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/" - mkdir -p "${ARCHIVE_DIR}" - - # Binary - cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR" - - # base compressed package - pushd "${PKG_STAGING}/" >/dev/null - case ${{ matrix.job.target }} in - *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;; - *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;; - esac; - popd >/dev/null - - # Let subsequent steps know where to find the compressed package - echo ::set-output name=PKG_PATH::"${PKG_STAGING}/${PKG_NAME}" - - - name: "Artifact upload: tarball" - uses: actions/upload-artifact@master - with: - name: ${{ steps.package.outputs.PKG_NAME }} - path: ${{ steps.package.outputs.PKG_PATH }} - - - name: Check for release - id: is-release - shell: bash - run: | - unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi - echo ::set-output name=IS_RELEASE::${IS_RELEASE} - - - name: Publish archives and packages - uses: softprops/action-gh-release@v1 - if: steps.is-release.outputs.IS_RELEASE - with: - files: | - ${{ steps.package.outputs.PKG_PATH }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Checkout source code + uses: actions/checkout@v2 + - name: Install prerequisites + shell: bash + run: | + case ${{ matrix.job.target }} in + arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; + aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; + esac + - name: Extract crate information + shell: bash + run: | + echo "PROJECT_NAME=joshuto" >> $GITHUB_ENV + echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV + echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV + echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ matrix.job.target }} + override: true + profile: minimal # minimal component installation (ie, no documentation) + - name: Show version information (Rust, cargo, GCC) + shell: bash + run: | + gcc --version || true + rustup -V + rustup toolchain list + rustup default + cargo -V + rustc -V + - name: Build + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.job.use-cross }} + command: build + args: --locked --release --target=${{ matrix.job.target }} + - name: Strip debug information from executable + id: strip + shell: bash + run: | + # Figure out suffix of binary + EXE_suffix="" + case ${{ matrix.job.target }} in + *-pc-windows-*) EXE_suffix=".exe" ;; + esac; + + # Figure out what strip tool to use if any + STRIP="strip" + case ${{ matrix.job.target }} in + arm-unknown-linux-*) STRIP="arm-linux-gnueabihf-strip" ;; + aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; + *-pc-windows-msvc) STRIP="" ;; + esac; + + # Setup paths + BIN_DIR="${{ env.CI_INTERMEDIATES_DIR }}/stripped-release-bin/" + mkdir -p "${BIN_DIR}" + BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}" + BIN_PATH="${BIN_DIR}/${BIN_NAME}" + + # Copy the release build binary to the result location + cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}" + + # Also strip if possible + if [ -n "${STRIP}" ]; then + "${STRIP}" "${BIN_PATH}" + fi + + # Let subsequent steps know where to find the (stripped) bin + echo ::set-output name=BIN_PATH::${BIN_PATH} + echo ::set-output name=BIN_NAME::${BIN_NAME} + - name: Create tarball + id: package + shell: bash + run: | + PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac; + PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }} + PKG_NAME=${PKG_BASENAME}${PKG_suffix} + echo ::set-output name=PKG_NAME::${PKG_NAME} + PKG_STAGING="${{ env.CI_INTERMEDIATES_DIR }}/package" + ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/" + mkdir -p "${ARCHIVE_DIR}" + + # Binary + cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR" + + # base compressed package + pushd "${PKG_STAGING}/" >/dev/null + case ${{ matrix.job.target }} in + *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;; + *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;; + esac; + popd >/dev/null + + # Let subsequent steps know where to find the compressed package + echo ::set-output name=PKG_PATH::"${PKG_STAGING}/${PKG_NAME}" + - name: "Artifact upload: tarball" + uses: actions/upload-artifact@master + with: + name: ${{ steps.package.outputs.PKG_NAME }} + path: ${{ steps.package.outputs.PKG_PATH }} + - name: Check for release + id: is-release + shell: bash + run: | + unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi + echo ::set-output name=IS_RELEASE::${IS_RELEASE} + - name: Publish archives and packages + uses: softprops/action-gh-release@v1 + if: steps.is-release.outputs.IS_RELEASE + with: + files: | + ${{ steps.package.outputs.PKG_PATH }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml index aee7015..119528c 100644 --- a/.github/workflows/clippy.yml +++ b/.github/workflows/clippy.yml @@ -1,11 +1,9 @@ name: Clippy - Catch common mistakes and improve your Rust code - on: push: branches: [dev, main] pull_request: branches: [dev, main] - jobs: check: name: Clippy - Catch common mistakes and improve your Rust code diff --git a/.github/workflows/rust-linux-dev.yml b/.github/workflows/rust-linux-dev.yml index 5abc087..94649ef 100644 --- a/.github/workflows/rust-linux-dev.yml +++ b/.github/workflows/rust-linux-dev.yml @@ -1,11 +1,9 @@ name: Linux build dev - on: push: branches: [dev] pull_request: branches: [dev] - jobs: check: name: Rust Linux ${{ matrix.rust }} diff --git a/.github/workflows/rust-linux-main.yml b/.github/workflows/rust-linux-main.yml index ab48b78..d388e4c 100644 --- a/.github/workflows/rust-linux-main.yml +++ b/.github/workflows/rust-linux-main.yml @@ -1,11 +1,9 @@ name: Linux build - on: push: branches: [main] pull_request: branches: [main] - jobs: check: name: Rust Linux ${{ matrix.rust }} diff --git a/.github/workflows/rust-macos-dev.yml b/.github/workflows/rust-macos-dev.yml index 76a409e..982e217 100644 --- a/.github/workflows/rust-macos-dev.yml +++ b/.github/workflows/rust-macos-dev.yml @@ -1,11 +1,9 @@ name: MacOS build dev - on: push: branches: [dev] pull_request: branches: [dev] - jobs: check: name: Rust MacOS ${{ matrix.rust }} diff --git a/.github/workflows/rust-macos-main.yml b/.github/workflows/rust-macos-main.yml index bc5b1a8..38ba172 100644 --- a/.github/workflows/rust-macos-main.yml +++ b/.github/workflows/rust-macos-main.yml @@ -1,11 +1,9 @@ name: MacOS build - on: push: branches: [main] pull_request: branches: [main] - jobs: check: name: Rust MacOS ${{ matrix.rust }} @@ -4,3 +4,5 @@ *.tmp *~ **/*.rs.bk +/result +/.devenv @@ -33,7 +33,9 @@ structopt = "^0" termion = "^1" toml = "^0" trash = { version = "^2", optional = true } -tui = { version = "0.20", default-features = false, features = ["termion"], package = "ratatui" } +tui = { version = "0.20", default-features = false, features = [ + "termion", +], package = "ratatui" } unicode-segmentation = "^1" unicode-width = "^0" users = "^0" @@ -43,16 +45,12 @@ walkdir = "^2" [dependencies.uuid] version = "^1" -features = [ - "v4", - "fast-rng", - "macro-diagnostics", -] +features = ["v4", "fast-rng", "macro-diagnostics"] [features] -devicons = [ "phf" ] +devicons = ["phf"] file_mimetype = [] mouse = [] -recycle_bin = [ "trash" ] -syntax_highlight = [ "ansi-to-tui" ] -default = [ "devicons", "recycle_bin", "syntax_highlight" ] +recycle_bin = ["trash"] +syntax_highlight = ["ansi-to-tui"] +default = ["devicons", "recycle_bin", "syntax_highlight"] @@ -31,6 +31,7 @@ Also see [Cargo.toml](Cargo.toml) ``` ~$ cargo install --path=. --force ``` + #### For single user with cargo ``` @@ -54,12 +55,14 @@ sudo dnf install joshuto ##### Arch ([AUR](https://aur.archlinux.org)) -* [release](https://aur.archlinux.org/packages/joshuto) +- [release](https://aur.archlinux.org/packages/joshuto) + ``` [yay/paru] -S joshuto ``` -* [build from source](https://aur.archlinux.org/packages/joshuto-git) +- [build from source](https://aur.archlinux.org/packages/joshuto-git) + ``` [yay/paru] -S joshuto-git ``` @@ -70,6 +73,38 @@ sudo dnf install joshuto sudo eselect repository enable gentoo-zh sudo emerge -av app-misc/joshuto ``` +##### NixOS + +Here's an example of using it in a nixos configuration + +```nix +{ + description = "My configuration"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + joshuto.url = "github:kamiyaa/joshuto"; + }; + + outputs = { nixpkgs, joshuto, ... }: + { + nixosConfigurations = { + hostname = nixpkgs.lib.nixosSystem + { + system = "x86_64-linux"; + modules = [ + { + nixpkgs.overlays = [ joshuto.overlays.default ]; + environment.systemPackages = with pkgs;[ + joshuto + ]; + } + ]; + }; + }; + }; +} +``` ##### MacOS ([MacPorts](https://ports.macports.org/port/joshuto/details/)) @@ -78,9 +113,11 @@ sudo port install joshuto ``` ## Usage + ``` ~ $ joshuto ``` + See [docs#quit](/docs/configuration/keymap.toml.md#quit-quit-joshuto) for exiting into current directory and other usages @@ -89,21 +126,27 @@ and other usages Check out [docs](/docs) for details and [config](/config) for examples #### [joshuto.toml](/config/joshuto.toml) + - general configurations #### [keymap.toml](/config/keymap.toml) + - for keybindings #### [mimetype.toml](/config/mimetype.toml) + - for opening files with applications #### [theme.toml](/config/theme.toml) + - color customizations #### [bookmarks.toml](/config/bookmarks.toml) + - bookmarks ## Contributing + See [docs](/docs) ## Bugs/Feature Request @@ -111,6 +154,7 @@ See [docs](/docs) Please create an issue :) ## Features + - Tabs - Devicons - Fuzzy search via [fzf](https://github.com/junegunn/fzf) diff --git a/config/bookmarks.toml b/config/bookmarks.toml index 662f39e..a0764e2 100644 --- a/config/bookmarks.toml +++ b/config/bookmarks.toml @@ -1,6 +1,6 @@ bookmark = [ - { key = "r", path = "/" }, - { key = "e", path = "/etc" }, + { key = "r", path = "/" }, + { key = "e", path = "/etc" }, - { key = "h", path = "~/" }, + { key = "h", path = "~/" }, ] diff --git a/config/joshuto.toml b/config/joshuto.toml index 7fa9006..d1f2439 100644 --- a/config/joshuto.toml +++ b/config/joshuto.toml @@ -30,7 +30,7 @@ directories_first = true reverse = false [preview] -max_preview_size = 2097152 # 2MB +max_preview_size = 2097152 # 2MB preview_script = "~/.config/joshuto/preview_file.sh" [tab] diff --git a/config/keymap.toml b/config/keymap.toml index 7076cf9..2d522c2 100644 --- a/config/keymap.toml +++ b/config/keymap.toml @@ -1,166 +1,166 @@ [default_view] keymap = [ - { keys = [ "escape" ], command = "escape" }, - { keys = [ "ctrl+t" ], command = "new_tab" }, - { keys = [ "alt+t" ], command = "new_tab --cursor" }, - { keys = [ "T" ], command = "new_tab --current" }, - { keys = [ "W" ], command = "close_tab" }, - { keys = [ "ctrl+w" ], command = "close_tab" }, - { keys = [ "q" ], command = "close_tab" }, - { keys = [ "ctrl+c" ], command = "quit" }, - { keys = [ "Q" ], command = "quit --output-current-directory" }, - - { keys = [ "R" ], command = "reload_dirlist" }, - { keys = [ "z", "h" ], command = "toggle_hidden" }, - { keys = [ "ctrl+h" ], command = "toggle_hidden" }, - { keys = [ "\t" ], command = "tab_switch 1" }, - { keys = [ "backtab" ], command = "tab_switch -1" }, - - { keys = [ "alt+1" ], command = "tab_switch_index 1" }, - { keys = [ "alt+2" ], command = "tab_switch_index 2" }, - { keys = [ "alt+3" ], command = "tab_switch_index 3" }, - { keys = [ "alt+4" ], command = "tab_switch_index 4" }, - { keys = [ "alt+5" ], command = "tab_switch_index 5" }, - - { keys = [ "1" ], command = "numbered_command 1" }, - { keys = [ "2" ], command = "numbered_command 2" }, - { keys = [ "3" ], command = "numbered_command 3" }, - { keys = [ "4" ], command = "numbered_command 4" }, - { keys = [ "5" ], command = "numbered_command 5" }, - { keys = [ "6" ], command = "numbered_command 6" }, - { keys = [ "7" ], command = "numbered_command 7" }, - { keys = [ "8" ], command = "numbered_command 8" }, - { keys = [ "9" ], command = "numbered_command 9" }, - - # arrow keys - { keys = [ "arrow_up" ], command = "cursor_move_up" }, - { keys = [ "arrow_down" ], command = "cursor_move_down" }, - { keys = [ "arrow_left" ], command = "cd .." }, - { keys = [ "arrow_right" ], command = "open" }, - { keys = [ "\n" ], command = "open" }, - { keys = [ "home" ], command = "cursor_move_home" }, - { keys = [ "end" ], command = "cursor_move_end" }, - { keys = [ "page_up" ], command = "cursor_move_page_up" }, - { keys = [ "page_down" ], command = "cursor_move_page_down" }, - { keys = [ "ctrl+u" ], command = "cursor_move_page_up 0.5" }, - { keys = [ "ctrl+d" ], command = "cursor_move_page_down 0.5" }, - - # vim-like keybindings - { keys = [ "j" ], command = "cursor_move_down" }, - { keys = [ "k" ], command = "cursor_move_up" }, - { keys = [ "h" ], command = "cd .." }, - { keys = [ "l" ], command = "open" }, - { keys = [ "g", "g" ], command = "cursor_move_home" }, - { keys = [ "G" ], command = "cursor_move_end" }, - { keys = [ "r" ], command = "open_with" }, - - { keys = [ "H" ], command = "cursor_move_page_home" }, - { keys = [ "L" ], command = "cursor_move_page_middle" }, - { keys = [ "M" ], command = "cursor_move_page_end" }, - - { keys = [ "[" ], command = "parent_cursor_move_up" }, - { keys = [ "]" ], command = "parent_cursor_move_down" }, - - { keys = [ "c", "d" ], command = ":cd " }, - { keys = [ "d", "d" ], command = "cut_files" }, - { keys = [ "y", "y" ], command = "copy_files" }, - { keys = [ "y", "n" ], command = "copy_filename" }, - { keys = [ "y", "." ], command = "copy_filename_without_extension" }, - { keys = [ "y", "p" ], command = "copy_filepath" }, - { keys = [ "y", "d" ], command = "copy_dirpath" }, - - { keys = [ "p", "l" ], command = "symlink_files --relative=false" }, - { keys = [ "p", "L" ], command = "symlink_files --relative=true" }, - - { keys = [ "delete" ], command = "delete_files" }, - { keys = [ "d", "D" ], command = "delete_files" }, - - { keys = [ "p", "p" ], command = "paste_files" }, - { keys = [ "p", "o" ], command = "paste_files --overwrite=true" }, - - { keys = [ "a" ], command = "rename_append" }, - { keys = [ "A" ], command = "rename_prepend" }, - - { keys = [ "f", "t" ], command = ":touch " }, - - { keys = [ " " ], command = "select --toggle=true" }, - { keys = [ "t" ], command = "select --all=true --toggle=true" }, - { keys = [ "V" ], command = "toggle_visual"}, - - { keys = [ "w" ], command = "show_tasks --exit-key=w" }, - { keys = [ "b", "b" ], command = "bulk_rename" }, - { keys = [ "=" ], command = "set_mode" }, - - { keys = [ ":" ], command = ":" }, - { keys = [ ";" ], command = ":" }, - - { keys = [ "'" ], command = ":shell " }, - { keys = [ "m", "k" ], command = ":mkdir " }, - { keys = [ "c", "w" ], command = ":rename " }, - - { keys = [ "/" ], command = ":search " }, - { keys = [ "|" ], command = ":search_inc " }, - { keys = [ "\\" ], command = ":search_glob " }, - { keys = [ "S" ], command = "search_fzf" }, - { keys = [ "C" ], command = "subdir_fzf" }, - - { keys = [ "n" ], command = "search_next" }, - { keys = [ "N" ], command = "search_prev" }, - - { keys = [ "s", "r" ], command = "sort reverse" }, - { keys = [ "s", "l" ], command = "sort lexical" }, - { keys = [ "s", "m" ], command = "sort mtime" }, - { keys = [ "s", "n" ], command = "sort natural" }, - { keys = [ "s", "s" ], command = "sort size" }, - { keys = [ "s", "e" ], command = "sort ext" }, - - { keys = [ "m", "s" ], command = "linemode size" }, - { keys = [ "m", "m" ], command = "linemode mtime" }, - { keys = [ "m", "M" ], command = "linemode sizemtime" }, - - { keys = [ "g", "r" ], command = "cd /" }, - { keys = [ "g", "c" ], command = "cd ~/.config" }, - { keys = [ "g", "d" ], command = "cd ~/Downloads" }, - { keys = [ "g", "e" ], command = "cd /etc" }, - { keys = [ "g", "h" ], command = "cd ~/" }, - { keys = [ "?" ], command = "help" } + { keys = ["escape"], command = "escape" }, + { keys = ["ctrl+t"], command = "new_tab" }, + { keys = ["alt+t"], command = "new_tab --cursor" }, + { keys = ["T"], command = "new_tab --current" }, + { keys = ["W"], command = "close_tab" }, + { keys = ["ctrl+w"], command = "close_tab" }, + { keys = ["q"], command = "close_tab" }, + { keys = ["ctrl+c"], command = "quit" }, + { keys = ["Q"], command = "quit --output-current-directory" }, + + { keys = ["R"], command = "reload_dirlist" }, + { keys = ["z", "h"], command = "toggle_hidden" }, + { keys = ["ctrl+h"], command = "toggle_hidden" }, + { keys = ["\t"], command = "tab_switch 1" }, + { keys = ["backtab"], command = "tab_switch -1" }, + + { keys = ["alt+1"], command = "tab_switch_index 1" }, + { keys = ["alt+2"], command = "tab_switch_index 2" }, + { keys = ["alt+3"], command = "tab_switch_index 3" }, + { keys = ["alt+4"], command = "tab_switch_index 4" }, + { keys = ["alt+5"], command = "tab_switch_index 5" }, + + { keys = ["1"], command = "numbered_command 1" }, + { keys = ["2"], command = "numbered_command 2" }, + { keys = ["3"], command = "numbered_command 3" }, + { keys = ["4"], command = "numbered_command 4" }, + { keys = ["5"], command = "numbered_command 5" }, + { keys = ["6"], command = "numbered_command 6" }, + { keys = ["7"], command = "numbered_command 7" }, + { keys = ["8"], command = "numbered_command 8" }, + { keys = ["9"], command = "numbered_command 9" }, + + # arrow keys + { keys = ["arrow_up"], command = "cursor_move_up" }, + { keys = ["arrow_down"], command = "cursor_move_down" }, + { keys = ["arrow_left"], command = "cd .." }, + { keys = ["arrow_right"], command = "open" }, + { keys = ["\n"], command = "open" }, + { keys = ["home"], command = "cursor_move_home" }, + { keys = ["end"], command = "cursor_move_end" }, + { keys = ["page_up"], command = "cursor_move_page_up" }, + { keys = ["page_down"], command = "cursor_move_page_down" }, + { keys = ["ctrl+u"], command = "cursor_move_page_up 0.5" }, + { keys = ["ctrl+d"], command = "cursor_move_page_down 0.5" }, + + # vim-like keybindings + { keys = ["j"], command = "cursor_move_down" }, + { keys = ["k"], command = "cursor_move_up" }, + { keys = ["h"], command = "cd .." }, + { keys = ["l"], command = "open" }, + { keys = ["g", "g"], command = "cursor_move_home" }, + { keys = ["G"], command = "cursor_move_end" }, + { keys = ["r"], command = "open_with" }, + + { keys = ["H"], command = "cursor_move_page_home" }, + { keys = ["L"], command = "cursor_move_page_middle" }, + { keys = ["M"], command = "cursor_move_page_end" }, + + { keys = ["["], command = "parent_cursor_move_up" }, + { keys = ["]"], command = "parent_cursor_move_down" }, + + { keys = ["c", "d"], command = ":cd " }, + { keys = ["d", "d"], command = "cut_files" }, + { keys = ["y", "y"], command = "copy_files" }, + { keys = ["y", "n"], command = "copy_filename" }, + { keys = ["y", "."], command = "copy_filename_without_extension" }, + { keys = ["y", "p"], command = "copy_filepath" }, + { keys = ["y", "d"], command = "copy_dirpath" }, + + { keys = ["p", "l"], command = "symlink_files --relative=false" }, + { keys = ["p", "L"], command = "symlink_files --relative=true" }, + + { keys = ["delete"], command = "delete_files" }, + { keys = ["d", "D"], command = "delete_files" }, + + { keys = ["p", "p"], command = "paste_files" }, + { keys = ["p", "o"], command = "paste_files --overwrite=true" }, + + { keys = ["a"], command = "rename_append" }, + { keys = ["A"], command = "rename_prepend" }, + + { keys = ["f", "t"], command = ":touch " }, + + { keys = [" "], command = "select --toggle=true" }, + { keys = ["t"], command = "select --all=true --toggle=true" }, + { keys = ["V"], command = "toggle_visual" }, + + { keys = ["w"], command = "show_tasks --exit-key=w" }, + { keys = ["b", "b"], command = "bulk_rename" }, + { keys = ["="], command = "set_mode" }, + + { keys = [":"], command = ":" }, + { keys = [";"], command = ":" }, + + { keys = ["'"], command = ":shell " }, + { keys = ["m", "k"], command = ":mkdir " }, + { keys = ["c", "w"], command = ":rename " }, + + { keys = ["/"], command = ":search " }, + { keys = ["|"], command = ":search_inc " }, + { keys = ["\\"], command = ":search_glob " }, + { keys = ["S"], command = "search_fzf" }, + { keys = ["C"], command = "subdir_fzf" }, + + { keys = ["n"], command = "search_next" }, + { keys = ["N"], command = "search_prev" }, + + { keys = ["s", "r"], command = "sort reverse" }, + { keys = ["s", "l"], command = "sort lexical" }, + { keys = ["s", "m"], command = "sort mtime" }, + { keys = ["s", "n"], command = "sort natural" }, + { keys = ["s", "s"], command = "sort size" }, + { keys = ["s", "e"], command = "sort ext" }, + + { keys = |