summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuixi-rebirth <ruixirebirth@gmail.com>2023-05-27 20:49:55 -0600
committerGitHub <noreply@github.com>2023-05-27 22:49:55 -0400
commit20d51cf17a5e93cc20373423efeca72fd7c100d5 (patch)
treedca1d1be6cc5a31192c8a8acccef974649e1acce
parent493af3185092036cbbae81ae620b101f66cf4e9a (diff)
Add flake support (#297)
Add flake support
-rw-r--r--.github/workflows/automated-build.yml260
-rw-r--r--.github/workflows/clippy.yml2
-rw-r--r--.github/workflows/rust-linux-dev.yml2
-rw-r--r--.github/workflows/rust-linux-main.yml2
-rw-r--r--.github/workflows/rust-macos-dev.yml2
-rw-r--r--.github/workflows/rust-macos-main.yml2
-rw-r--r--.gitignore2
-rw-r--r--Cargo.toml18
-rw-r--r--README.md48
-rw-r--r--config/bookmarks.toml6
-rw-r--r--config/joshuto.toml2
-rw-r--r--config/keymap.toml304
-rw-r--r--config/mimetype.toml336
-rwxr-xr-xconfig/preview_file.sh124
-rw-r--r--config/theme.toml64
-rw-r--r--docs/README.md10
-rw-r--r--docs/command_arguments.md18
-rw-r--r--docs/configuration/README.md11
-rw-r--r--docs/configuration/joshuto.toml.md2
-rw-r--r--docs/configuration/keymap.toml.md132
-rw-r--r--docs/configuration/mimetype.toml.md37
-rw-r--r--docs/configuration/theme.toml.md6
-rw-r--r--docs/contributing.md9
-rw-r--r--docs/image_previews.md27
-rw-r--r--docs/misc.md28
-rw-r--r--flake.lock413
-rw-r--r--flake.nix80
-rw-r--r--nix/default.nix35
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 }}
diff --git a/.gitignore b/.gitignore
index c00f047..95e4312 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
*.tmp
*~
**/*.rs.bk
+/result
+/.devenv
diff --git a/Cargo.toml b/Cargo.toml
index caa1585..ebb6e9c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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"]
diff --git a/README.md b/README.md
index 90f4ac1..d38f14b 100644
--- a/README.md
+++ b/README.md
@@ -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 =