├── .config ├── borders │ └── bordersrc ├── btop │ └── btop.conf ├── colors.sh ├── icons.sh ├── neovide │ └── config.toml ├── nvim │ ├── .gitignore │ ├── .neoconf.json │ ├── init.lua │ ├── lazy-lock.json │ ├── lazyvim.json │ ├── lua │ │ ├── config │ │ │ ├── autocmds.lua │ │ │ ├── keymaps.lua │ │ │ ├── lazy.lua │ │ │ └── options.lua │ │ └── plugins │ │ │ ├── example.lua │ │ │ └── tweaks.lua │ └── stylua.toml ├── ranger │ ├── commands.py │ ├── commands_full.py │ ├── plugins │ │ ├── __init__.py │ │ └── __pycache__ │ │ │ └── __init__.cpython-311.pyc │ ├── rc.conf │ ├── rifle.conf │ └── scope.sh ├── sketchybar │ ├── plugins │ │ ├── app_icon.sh │ │ ├── app_space.sh │ │ ├── battery.sh │ │ ├── cpu.sh │ │ ├── date.sh │ │ ├── disk.sh │ │ ├── ip_address.sh │ │ ├── noti_mail.sh │ │ ├── noti_slack.sh │ │ ├── noti_task.sh │ │ ├── noti_timew.sh │ │ ├── ram.sh │ │ ├── swap.sh │ │ ├── time.sh │ │ └── volume.sh │ └── sketchybarrc ├── skhd │ └── skhdrc ├── yabai │ └── yabairc └── zed │ └── settings.json ├── .gitmodules ├── .p10k.zsh ├── .task └── hooks │ └── on-modify.timewarrior ├── .taskrc ├── .timewarrior └── timewarrior.cfg ├── .warp └── themes │ └── gruvbox-dark-hard.yaml ├── .zprofile ├── .zshrc ├── LICENSE ├── README.md ├── manual-application ├── Alfred │ └── Gruvbox Dark (Hard).alfredappearance ├── VSCode │ └── settings.json └── iTerm │ ├── Default.json │ └── Gruvbox Dark (Hard).itermcolors └── screenshots ├── __screenshot1.png ├── __screenshot2.png ├── __screenshot3.png ├── arc_newtab.png ├── arc_splitscreen.png ├── arc_webpage.png ├── finder_code.png ├── finder_image.png ├── neovim_commandpalette.png ├── neovim_filesearch.png ├── neovim_intellisense.png ├── neovim_sourcecontrol.png ├── neovim_terminal.png ├── ranger_code.png ├── ranger_image.png ├── zed_commandpalette.png ├── zed_filesearch.png ├── zed_intellisense.png ├── zed_sourcecontrol.png ├── zed_terminal.png ├── zenbrowser_newtab.png ├── zenbrowser_splitscreen.png └── zenbrowser_webpage.png /.config/borders/bordersrc: -------------------------------------------------------------------------------- 1 | source "$HOME/.config/colors.sh" 2 | 3 | borders active_color=$COLOR_ACCENT_BRIGHT inactive_color=$COLOR_BACKGROUND width=4.0 -------------------------------------------------------------------------------- /.config/btop/btop.conf: -------------------------------------------------------------------------------- 1 | #? Config file for btop v. 1.2.13 2 | 3 | #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. 4 | #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" 5 | color_theme = "/opt/homebrew/Cellar/btop/1.2.13/share/btop/themes/gruvbox_dark.theme" 6 | 7 | #* If the theme set background should be shown, set to False if you want terminal background transparency. 8 | theme_background = False 9 | 10 | #* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. 11 | truecolor = True 12 | 13 | #* Set to true to force tty mode regardless if a real tty has been detected or not. 14 | #* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. 15 | force_tty = False 16 | 17 | #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. 18 | #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. 19 | #* Use whitespace " " as separator between different presets. 20 | #* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" 21 | presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" 22 | 23 | #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. 24 | #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. 25 | vim_keys = False 26 | 27 | #* Rounded corners on boxes, is ignored if TTY mode is ON. 28 | rounded_corners = True 29 | 30 | #* Default symbols to use for graph creation, "braille", "block" or "tty". 31 | #* "braille" offers the highest resolution but might not be included in all fonts. 32 | #* "block" has half the resolution of braille but uses more common characters. 33 | #* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. 34 | #* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. 35 | graph_symbol = "braille" 36 | 37 | # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". 38 | graph_symbol_cpu = "default" 39 | 40 | # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". 41 | graph_symbol_mem = "default" 42 | 43 | # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". 44 | graph_symbol_net = "default" 45 | 46 | # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". 47 | graph_symbol_proc = "default" 48 | 49 | #* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace. 50 | shown_boxes = "cpu mem net proc" 51 | 52 | #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. 53 | update_ms = 2000 54 | 55 | #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", 56 | #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. 57 | proc_sorting = "cpu lazy" 58 | 59 | #* Reverse sorting order, True or False. 60 | proc_reversed = False 61 | 62 | #* Show processes as a tree. 63 | proc_tree = True 64 | 65 | #* Use the cpu graph colors in the process list. 66 | proc_colors = True 67 | 68 | #* Use a darkening gradient in the process list. 69 | proc_gradient = False 70 | 71 | #* If process cpu usage should be of the core it's running on or usage of the total available cpu power. 72 | proc_per_core = False 73 | 74 | #* Show process memory as bytes instead of percent. 75 | proc_mem_bytes = True 76 | 77 | #* Show cpu graph for each process. 78 | proc_cpu_graphs = True 79 | 80 | #* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) 81 | proc_info_smaps = False 82 | 83 | #* Show proc box on left side of screen instead of right. 84 | proc_left = False 85 | 86 | #* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). 87 | proc_filter_kernel = False 88 | 89 | #* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. 90 | #* Select from a list of detected attributes from the options menu. 91 | cpu_graph_upper = "total" 92 | 93 | #* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. 94 | #* Select from a list of detected attributes from the options menu. 95 | cpu_graph_lower = "total" 96 | 97 | #* Toggles if the lower CPU graph should be inverted. 98 | cpu_invert_lower = True 99 | 100 | #* Set to True to completely disable the lower CPU graph. 101 | cpu_single_graph = False 102 | 103 | #* Show cpu box at bottom of screen instead of top. 104 | cpu_bottom = False 105 | 106 | #* Shows the system uptime in the CPU box. 107 | show_uptime = True 108 | 109 | #* Show cpu temperature. 110 | check_temp = True 111 | 112 | #* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. 113 | cpu_sensor = "Auto" 114 | 115 | #* Show temperatures for cpu cores also if check_temp is True and sensors has been found. 116 | show_coretemp = True 117 | 118 | #* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. 119 | #* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. 120 | #* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. 121 | #* Example: "4:0 5:1 6:3" 122 | cpu_core_map = "" 123 | 124 | #* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". 125 | temp_scale = "fahrenheit" 126 | 127 | #* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. 128 | base_10_sizes = False 129 | 130 | #* Show CPU frequency. 131 | show_cpu_freq = True 132 | 133 | #* Draw a clock at top of screen, formatting according to strftime, empty string to disable. 134 | #* Special formatting: /host = hostname | /user = username | /uptime = system uptime 135 | clock_format = "%X" 136 | 137 | #* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. 138 | background_update = True 139 | 140 | #* Custom cpu model name, empty string to disable. 141 | custom_cpu_name = "" 142 | 143 | #* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". 144 | #* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". 145 | disks_filter = "" 146 | 147 | #* Show graphs instead of meters for memory values. 148 | mem_graphs = True 149 | 150 | #* Show mem box below net box instead of above. 151 | mem_below_net = False 152 | 153 | #* Count ZFS ARC in cached and available memory. 154 | zfs_arc_cached = True 155 | 156 | #* If swap memory should be shown in memory box. 157 | show_swap = True 158 | 159 | #* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. 160 | swap_disk = True 161 | 162 | #* If mem box should be split to also show disks info. 163 | show_disks = True 164 | 165 | #* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. 166 | only_physical = True 167 | 168 | #* Read disks list from /etc/fstab. This also disables only_physical. 169 | use_fstab = True 170 | 171 | #* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) 172 | zfs_hide_datasets = False 173 | 174 | #* Set to true to show available disk space for privileged users. 175 | disk_free_priv = False 176 | 177 | #* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. 178 | show_io_stat = True 179 | 180 | #* Toggles io mode for disks, showing big graphs for disk read/write speeds. 181 | io_mode = False 182 | 183 | #* Set to True to show combined read/write io graphs in io mode. 184 | io_graph_combined = False 185 | 186 | #* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". 187 | #* Example: "/mnt/media:100 /:20 /boot:1". 188 | io_graph_speeds = "" 189 | 190 | #* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. 191 | net_download = 100 192 | 193 | net_upload = 100 194 | 195 | #* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. 196 | net_auto = True 197 | 198 | #* Sync the auto scaling for download and upload to whichever currently has the highest scale. 199 | net_sync = True 200 | 201 | #* Starts with the Network Interface specified here. 202 | net_iface = "" 203 | 204 | #* Show battery stats in top right if battery is present. 205 | show_battery = True 206 | 207 | #* Which battery to use if multiple are present. "Auto" for auto detection. 208 | selected_battery = "Auto" 209 | 210 | #* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". 211 | #* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. 212 | log_level = "WARNING" -------------------------------------------------------------------------------- /.config/colors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Gruvbox Dark (Hard) Color Palette 4 | 5 | export COLOR_BACKGROUND=0xe01d2021 6 | export COLOR_FOREGROUND=0xe0fbf1c7 7 | 8 | export COLOR_ACCENT=0xe0d65d0e 9 | export COLOR_ACCENT_BRIGHT=0xe0fe8019 10 | 11 | export COLOR_BLACK=0xe0282828 12 | export COLOR_RED=0xe0cc241d 13 | export COLOR_GREEN=0xe098971a 14 | export COLOR_YELLOW=0xe0d79921 15 | export COLOR_BLUE=0xe0458588 16 | export COLOR_MAGENTA=0xe0b16286 17 | export COLOR_CYAN=0xe0689d6a 18 | export COLOR_WHITE=0xe0a89984 19 | 20 | export COLOR_BLACK_BRIGHT=0xe0928374 21 | export COLOR_RED_BRIGHT=0xe0fb4934 22 | export COLOR_GREEN_BRIGHT=0xe0b8bb26 23 | export COLOR_YELLOW_BRIGHT=0xe0fabd2f 24 | export COLOR_BLUE_BRIGHT=0xe083a598 25 | export COLOR_MAGENTA_BRIGHT=0xe0d3869b 26 | export COLOR_CYAN_BRIGHT=0xe08ec07c 27 | export COLOR_WHITE_BRIGHT=0xe0ebdbb2 28 | -------------------------------------------------------------------------------- /.config/icons.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Material Design Icons 4 | 5 | export ICON_CMD=󰘳 6 | export ICON_COG=󰒓 # system settings, system information, tinkertool 7 | export ICON_CHART=󱕍 # activity monitor, btop 8 | export ICON_LOCK=󰌾 9 | 10 | export ICONS_SPACE=(󰎤 󰎧 󰎪 󰎭 󰎱 󰎳 󰎶) 11 | 12 | export ICON_APP=󰣆 # fallback app 13 | export ICON_TERM=󰆍 # fallback terminal app, terminal, warp, iterm2 14 | export ICON_PACKAGE=󰏓 # brew 15 | export ICON_DEV=󰅨 # nvim, neovide, xcode, vscode, intellij 16 | export ICON_FILE=󰉋 # ranger, finder 17 | export ICON_GIT=󰊢 # lazygit 18 | export ICON_LIST=󱃔 # taskwarrior, taskwarrior-tui, reminders, onenote 19 | export ICON_SCREENSAVOR=󱄄 # unimatrix, pipe.sh 20 | 21 | export ICON_WEATHER=󰖕 # weather 22 | export ICON_MAIL=󰇮 # mail, outlook 23 | export ICON_CALC=󰪚 # calculator, numi 24 | export ICON_MAP=󰆋 # maps, find my 25 | export ICON_MICROPHONE=󰍬 # voice memos 26 | export ICON_CHAT=󰍩 # messages, slack, teams, discord, telegram 27 | export ICON_VIDEOCHAT=󰍫 # facetime, zoom, webex 28 | export ICON_NOTE=󱞎 # notes, textedit, stickies, word, bat 29 | export ICON_CAMERA=󰄀 # photo booth 30 | export ICON_WEB=󰇧 # safari, beam, duckduckgo, arc, edge, chrome, firefox, zen 31 | export ICON_HOMEAUTOMATION=󱉑 # home 32 | export ICON_MUSIC=󰎄 # music, spotify 33 | export ICON_PODCAST=󰦔 # podcasts 34 | export ICON_PLAY=󱉺 # tv, quicktime, vlc 35 | export ICON_BOOK=󰂿 # books 36 | export ICON_BOOKINFO=󱁯 # font book, dictionary 37 | export ICON_PREVIEW=󰋲 # screenshot, preview 38 | export ICON_PASSKEY=󰷡 # 1password 39 | export ICON_DOWNLOAD=󱑢 # progressive downloader, transmission 40 | export ICON_CAST=󱒃 # airflow 41 | export ICON_TABLE=󰓫 # excel 42 | export ICON_PRESENT=󰈩 # powerpoint 43 | export ICON_CLOUD=󰅧 # onedrive 44 | export ICON_PEN=󰏬 # curve 45 | export ICON_REMOTEDESKTOP=󰢹 # remote desktop, vmware, utm 46 | 47 | export ICON_CLOCK=󰥔 # clock, timewarrior, tty-clock 48 | export ICON_CALENDAR=󰃭 # calendar 49 | 50 | export ICON_WIFI=󰖩 51 | export ICON_WIFI_OFF=󰖪 52 | export ICON_VPN=󰦝 # vpn, nordvpn 53 | 54 | export ICONS_VOLUME=(󰸈 󰕿 󰖀 󰕾) 55 | 56 | export ICONS_BATTERY=(󰂎 󰁺 󰁻 󰁼 󰁽 󰁾 󰁿 󰂀 󰂁 󰂂 󰁹) 57 | export ICONS_BATTERY_CHARGING=(󰢟 󰢜 󰂆 󰂇 󰂈 󰢝 󰂉 󰢞 󰂊 󰂋 󰂅) 58 | 59 | export ICON_SWAP=󰁯 60 | export ICON_RAM=󰓅 61 | export ICON_DISK=󰋊 # disk utility 62 | export ICON_CPU=󰘚 63 | -------------------------------------------------------------------------------- /.config/neovide/config.toml: -------------------------------------------------------------------------------- 1 | multigrid = true 2 | srgb = true 3 | frame = "Buttonless" 4 | -------------------------------------------------------------------------------- /.config/nvim/.gitignore: -------------------------------------------------------------------------------- 1 | tt.* 2 | .tests 3 | doc/tags 4 | debug 5 | .repro 6 | foo.* 7 | *.log 8 | data 9 | -------------------------------------------------------------------------------- /.config/nvim/.neoconf.json: -------------------------------------------------------------------------------- 1 | { 2 | "neodev": { 3 | "library": { 4 | "enabled": true, 5 | "plugins": true 6 | } 7 | }, 8 | "neoconf": { 9 | "plugins": { 10 | "lua_ls": { 11 | "enabled": true 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.config/nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- bootstrap lazy.nvim, LazyVim and your plugins 2 | require("config.lazy") 3 | -------------------------------------------------------------------------------- /.config/nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "LazyVim": { "branch": "main", "commit": "e996eed750aabdfaa976357450f9ccbcd333a785" }, 3 | "LuaSnip": { "branch": "master", "commit": "80a8528f084a97b624ae443a6f50ff8074ba486b" }, 4 | "SchemaStore.nvim": { "branch": "main", "commit": "e0268efbb748bc12c024311540acb91d7ed1148e" }, 5 | "bufferline.nvim": { "branch": "main", "commit": "357cc8f8eeb64702e6fcf2995e3b9becee99a5d3" }, 6 | "catppuccin": { "branch": "main", "commit": "dcef0a062de380885193fb0f919217d58b979753" }, 7 | "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, 8 | "cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" }, 9 | "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, 10 | "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, 11 | "conform.nvim": { "branch": "master", "commit": "55abaaa9ed4684cd9ba8f0c062379be6cf41b8f3" }, 12 | "dashboard-nvim": { "branch": "master", "commit": "c71cab740e2add248c54c458b5ca9d6e77c30fa6" }, 13 | "dressing.nvim": { "branch": "master", "commit": "1f2d1206a03bd3add8aedf6251e4534611de577f" }, 14 | "edgy.nvim": { "branch": "main", "commit": "8355be45610afdf79a0bab32b91ee297997455b4" }, 15 | "flash.nvim": { "branch": "main", "commit": "48817af25f51c0590653bbc290866e4890fe1cbe" }, 16 | "friendly-snippets": { "branch": "main", "commit": "43727c2ff84240e55d4069ec3e6158d74cb534b6" }, 17 | "gitsigns.nvim": { "branch": "main", "commit": "5a9a6ac29a7805c4783cda21b80a1e361964b3f2" }, 18 | "gruvbox.nvim": { "branch": "main", "commit": "477c62493c82684ed510c4f70eaf83802e398898" }, 19 | "indent-blankline.nvim": { "branch": "master", "commit": "8a7b48f5823cc924f815129192288ec2e2b9288f" }, 20 | "lazy.nvim": { "branch": "main", "commit": "4c75c8eeb957a99aa44ce8e526c04340ab358c5e" }, 21 | "lualine.nvim": { "branch": "master", "commit": "7533b0ead663d80452210c0c089e5105089697e5" }, 22 | "mason-lspconfig.nvim": { "branch": "main", "commit": "e7b64c11035aa924f87385b72145e0ccf68a7e0a" }, 23 | "mason.nvim": { "branch": "main", "commit": "cd7835b15f5a4204fc37e0aa739347472121a54c" }, 24 | "mini.ai": { "branch": "main", "commit": "10ad2ed049fb681a829b44aeb23443c0a9c910ae" }, 25 | "mini.animate": { "branch": "main", "commit": "6e6f2ee99fec91985d3817bfc74fbb4a0aff1c44" }, 26 | "mini.bufremove": { "branch": "main", "commit": "75be0b153b0cd2499c031e57d44cde8dad4766e4" }, 27 | "mini.comment": { "branch": "main", "commit": "a27b9115e40519ef23991af9564f43ec14a41fe2" }, 28 | "mini.indentscope": { "branch": "main", "commit": "cbc07203ca8faae952ca373c1f6cc5881ce97af0" }, 29 | "mini.pairs": { "branch": "main", "commit": "6f6bd7ed5757b40bc29c73dac0d743e4e6978124" }, 30 | "mini.surround": { "branch": "main", "commit": "68ce058ef9716d7d955b79363845d2dd003d6500" }, 31 | "neo-tree.nvim": { "branch": "v3.x", "commit": "63ebe879ad4798b66d29c0b2c8d04942389d438e" }, 32 | "neoconf.nvim": { "branch": "main", "commit": "0e6b0a9fd9030ec6f13bf98c4b0ed87230e42928" }, 33 | "neodev.nvim": { "branch": "main", "commit": "b094a663ccb71733543d8254b988e6bebdbdaca4" }, 34 | "noice.nvim": { "branch": "main", "commit": "8f1b53ab85f83e0687d0f267085ad781ec240432" }, 35 | "nui.nvim": { "branch": "main", "commit": "c0c8e347ceac53030f5c1ece1c5a5b6a17a25b32" }, 36 | "nvim-cmp": { "branch": "main", "commit": "d3a3056204e1a9dbb7c7fe36c114dc43b681768c" }, 37 | "nvim-lint": { "branch": "master", "commit": "e366dc5ed4002d3489d03200c0b132ce2b1ba532" }, 38 | "nvim-lspconfig": { "branch": "master", "commit": "e49b1e90c1781ce372013de3fa93a91ea29fc34a" }, 39 | "nvim-notify": { "branch": "master", "commit": "e4a2022f4fec2d5ebc79afa612f96d8b11c627b3" }, 40 | "nvim-spectre": { "branch": "master", "commit": "696cff781a4a7ecc91549736835e2acbd00fe859" }, 41 | "nvim-treesitter": { "branch": "master", "commit": "eb3faef3a44641e5875581e901b0a8df8da2bde4" }, 42 | "nvim-treesitter-context": { "branch": "master", "commit": "7227dca17316384e9b62bd6fc6b4d892572d6d4e" }, 43 | "nvim-treesitter-textobjects": { "branch": "master", "commit": "23f3840b7520e009121b3175f528178136dd9834" }, 44 | "nvim-ts-autotag": { "branch": "main", "commit": "6be1192965df35f94b8ea6d323354f7dc7a557e4" }, 45 | "nvim-ts-context-commentstring": { "branch": "main", "commit": "92e688f013c69f90c9bbd596019ec10235bc51de" }, 46 | "nvim-web-devicons": { "branch": "master", "commit": "3af745113ea537f58c4b1573b64a429fefad9e07" }, 47 | "persistence.nvim": { "branch": "main", "commit": "ad538bfd5336f1335cdb6fd4e0b0eebfa6e12f32" }, 48 | "plenary.nvim": { "branch": "master", "commit": "50012918b2fc8357b87cff2a7f7f0446e47da174" }, 49 | "telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" }, 50 | "telescope.nvim": { "branch": "master", "commit": "74ce793a60759e3db0d265174f137fb627430355" }, 51 | "todo-comments.nvim": { "branch": "main", "commit": "3094ead8edfa9040de2421deddec55d3762f64d1" }, 52 | "tokyonight.nvim": { "branch": "main", "commit": "531b04704fc9ff994d8b9c0720428fdc3c7d49d1" }, 53 | "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" }, 54 | "vim-illuminate": { "branch": "master", "commit": "3bd2ab64b5d63b29e05691e624927e5ebbf0fb86" }, 55 | "vim-startuptime": { "branch": "master", "commit": "454b3de856b7bd298700de33d79774ca9b9e3875" }, 56 | "which-key.nvim": { "branch": "main", "commit": "ce741eb559c924d72e3a67d2189ad3771a231414" } 57 | } -------------------------------------------------------------------------------- /.config/nvim/lazyvim.json: -------------------------------------------------------------------------------- 1 | { 2 | "extras": [ 3 | 4 | ], 5 | "news": { 6 | "NEWS.md": "2123" 7 | }, 8 | "version": 2 9 | } -------------------------------------------------------------------------------- /.config/nvim/lua/config/autocmds.lua: -------------------------------------------------------------------------------- 1 | -- Autocmds are automatically loaded on the VeryLazy event 2 | -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 | -- Add any additional autocmds here 4 | -------------------------------------------------------------------------------- /.config/nvim/lua/config/keymaps.lua: -------------------------------------------------------------------------------- 1 | -- Keymaps are automatically loaded on the VeryLazy event 2 | -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua 3 | -- Add any additional keymaps here 4 | -------------------------------------------------------------------------------- /.config/nvim/lua/config/lazy.lua: -------------------------------------------------------------------------------- 1 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 | if not vim.loop.fs_stat(lazypath) then 3 | -- bootstrap lazy.nvim 4 | -- stylua: ignore 5 | vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) 6 | end 7 | vim.opt.rtp:prepend(vim.env.LAZY or lazypath) 8 | 9 | require("lazy").setup({ 10 | spec = { 11 | -- add LazyVim and import its plugins 12 | { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 13 | -- import any extras modules here 14 | { import = "lazyvim.plugins.extras.ui.edgy" }, 15 | { import = "lazyvim.plugins.extras.lang.typescript" }, 16 | { import = "lazyvim.plugins.extras.lang.json" }, 17 | { import = "lazyvim.plugins.extras.ui.mini-animate" }, 18 | -- import/override with your plugins 19 | { import = "plugins" }, 20 | }, 21 | defaults = { 22 | -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. 23 | -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. 24 | lazy = false, 25 | -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, 26 | -- have outdated releases, which may break your Neovim install. 27 | version = false, -- always use the latest git commit 28 | -- version = "*", -- try installing the latest stable version for plugins that support semver 29 | }, 30 | ui = { 31 | border = "rounded", 32 | }, 33 | checker = { enabled = true }, -- automatically check for plugin updates 34 | performance = { 35 | rtp = { 36 | -- disable some rtp plugins 37 | disabled_plugins = { 38 | "gzip", 39 | -- "matchit", 40 | -- "matchparen", 41 | -- "netrwPlugin", 42 | "tarPlugin", 43 | "tohtml", 44 | "tutor", 45 | "zipPlugin", 46 | }, 47 | }, 48 | }, 49 | }) 50 | 51 | -- neovide settings 52 | vim.o.guifont = "CaskaydiaCove Nerd Font:h12" 53 | 54 | -- Helper function for transparency formatting 55 | local alpha = function() 56 | return string.format("%x", math.floor(255 * (vim.g.transparency or 0.875))) 57 | end 58 | -- g:neovide_transparency should be 0 if you want to unify transparency of content and title bar. 59 | vim.g.neovide_transparency = 0.0 60 | vim.g.transparency = 0.875 61 | vim.g.neovide_background_color = "#1d2021" .. alpha() 62 | 63 | vim.g.neovide_floating_blur_amount_x = 16.0 64 | vim.g.neovide_floating_blur_amount_y = 16.0 65 | -------------------------------------------------------------------------------- /.config/nvim/lua/config/options.lua: -------------------------------------------------------------------------------- 1 | -- Options are automatically loaded before lazy.nvim startup 2 | -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 | -- Add any additional options here 4 | -------------------------------------------------------------------------------- /.config/nvim/lua/plugins/example.lua: -------------------------------------------------------------------------------- 1 | 2 | -- since this is just an example spec, don't actually load anything here and return an empty spec 3 | -- stylua: ignore 4 | if true then return {} end 5 | 6 | -- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim 7 | -- 8 | -- In your plugin files, you can: 9 | -- * add extra plugins 10 | -- * disable/enabled LazyVim plugins 11 | -- * override the configuration of LazyVim plugins 12 | return { 13 | -- add gruvbox 14 | { "ellisonleao/gruvbox.nvim" }, 15 | 16 | -- Configure LazyVim to load gruvbox 17 | { 18 | "LazyVim/LazyVim", 19 | opts = { 20 | colorscheme = "gruvbox", 21 | }, 22 | }, 23 | 24 | -- change trouble config 25 | { 26 | "folke/trouble.nvim", 27 | -- opts will be merged with the parent spec 28 | opts = { use_diagnostic_signs = true }, 29 | }, 30 | 31 | -- disable trouble 32 | { "folke/trouble.nvim", enabled = false }, 33 | 34 | -- add symbols-outline 35 | { 36 | "simrat39/symbols-outline.nvim", 37 | cmd = "SymbolsOutline", 38 | keys = { { "cs", "SymbolsOutline", desc = "Symbols Outline" } }, 39 | config = true, 40 | }, 41 | 42 | -- override nvim-cmp and add cmp-emoji 43 | { 44 | "hrsh7th/nvim-cmp", 45 | dependencies = { "hrsh7th/cmp-emoji" }, 46 | ---@param opts cmp.ConfigSchema 47 | opts = function(_, opts) 48 | local cmp = require("cmp") 49 | opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } })) 50 | end, 51 | }, 52 | 53 | -- change some telescope options and a keymap to browse plugin files 54 | { 55 | "nvim-telescope/telescope.nvim", 56 | keys = { 57 | -- add a keymap to browse plugin files 58 | -- stylua: ignore 59 | { 60 | "fp", 61 | function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, 62 | desc = "Find Plugin File", 63 | }, 64 | }, 65 | -- change some options 66 | opts = { 67 | defaults = { 68 | layout_strategy = "horizontal", 69 | layout_config = { prompt_position = "top" }, 70 | sorting_strategy = "ascending", 71 | winblend = 0, 72 | }, 73 | }, 74 | }, 75 | 76 | -- add telescope-fzf-native 77 | { 78 | "telescope.nvim", 79 | dependencies = { 80 | "nvim-telescope/telescope-fzf-native.nvim", 81 | build = "make", 82 | config = function() 83 | require("telescope").load_extension("fzf") 84 | end, 85 | }, 86 | }, 87 | 88 | -- add pyright to lspconfig 89 | { 90 | "neovim/nvim-lspconfig", 91 | ---@class PluginLspOpts 92 | opts = { 93 | ---@type lspconfig.options 94 | servers = { 95 | -- pyright will be automatically installed with mason and loaded with lspconfig 96 | pyright = {}, 97 | }, 98 | }, 99 | }, 100 | 101 | -- add tsserver and setup with typescript.nvim instead of lspconfig 102 | { 103 | "neovim/nvim-lspconfig", 104 | dependencies = { 105 | "jose-elias-alvarez/typescript.nvim", 106 | init = function() 107 | require("lazyvim.util").on_attach(function(_, buffer) 108 | -- stylua: ignore 109 | vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) 110 | vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) 111 | end) 112 | end, 113 | }, 114 | ---@class PluginLspOpts 115 | opts = { 116 | ---@type lspconfig.options 117 | servers = { 118 | -- tsserver will be automatically installed with mason and loaded with lspconfig 119 | tsserver = {}, 120 | }, 121 | -- you can do any additional lsp server setup here 122 | -- return true if you don't want this server to be setup with lspconfig 123 | ---@type table 124 | setup = { 125 | -- example to setup with typescript.nvim 126 | tsserver = function(_, opts) 127 | require("typescript").setup({ server = opts }) 128 | return true 129 | end, 130 | -- Specify * to use this function as a fallback for any server 131 | -- ["*"] = function(server, opts) end, 132 | }, 133 | }, 134 | }, 135 | 136 | -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, 137 | -- treesitter, mason and typescript.nvim. So instead of the above, you can use: 138 | { import = "lazyvim.plugins.extras.lang.typescript" }, 139 | 140 | -- add more treesitter parsers 141 | { 142 | "nvim-treesitter/nvim-treesitter", 143 | opts = { 144 | ensure_installed = { 145 | "bash", 146 | "html", 147 | "javascript", 148 | "json", 149 | "lua", 150 | "markdown", 151 | "markdown_inline", 152 | "python", 153 | "query", 154 | "regex", 155 | "tsx", 156 | "typescript", 157 | "vim", 158 | "yaml", 159 | }, 160 | }, 161 | }, 162 | 163 | -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above 164 | -- would overwrite `ensure_installed` with the new value. 165 | -- If you'd rather extend the default config, use the code below instead: 166 | { 167 | "nvim-treesitter/nvim-treesitter", 168 | opts = function(_, opts) 169 | -- add tsx and treesitter 170 | vim.list_extend(opts.ensure_installed, { 171 | "tsx", 172 | "typescript", 173 | }) 174 | end, 175 | }, 176 | 177 | -- the opts function can also be used to change the default opts: 178 | { 179 | "nvim-lualine/lualine.nvim", 180 | event = "VeryLazy", 181 | opts = function(_, opts) 182 | table.insert(opts.sections.lualine_x, "😄") 183 | end, 184 | }, 185 | 186 | -- or you can return new options to override all the defaults 187 | { 188 | "nvim-lualine/lualine.nvim", 189 | event = "VeryLazy", 190 | opts = function() 191 | return { 192 | --[[add your custom lualine config here]] 193 | } 194 | end, 195 | }, 196 | 197 | -- use mini.starter instead of alpha 198 | { import = "lazyvim.plugins.extras.ui.mini-starter" }, 199 | 200 | -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc 201 | { import = "lazyvim.plugins.extras.lang.json" }, 202 | 203 | -- add any tools you want to have installed below 204 | { 205 | "williamboman/mason.nvim", 206 | opts = { 207 | ensure_installed = { 208 | "stylua", 209 | "shellcheck", 210 | "shfmt", 211 | "flake8", 212 | }, 213 | }, 214 | }, 215 | 216 | -- Use for completion and snippets (supertab) 217 | -- first: disable default and behavior in LuaSnip 218 | { 219 | "L3MON4D3/LuaSnip", 220 | keys = function() 221 | return {} 222 | end, 223 | }, 224 | -- then: setup supertab in cmp 225 | { 226 | "hrsh7th/nvim-cmp", 227 | dependencies = { 228 | "hrsh7th/cmp-emoji", 229 | }, 230 | ---@param opts cmp.ConfigSchema 231 | opts = function(_, opts) 232 | local has_words_before = function() 233 | unpack = unpack or table.unpack 234 | local line, col = unpack(vim.api.nvim_win_get_cursor(0)) 235 | return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil 236 | end 237 | 238 | local luasnip = require("luasnip") 239 | local cmp = require("cmp") 240 | 241 | opts.mapping = vim.tbl_extend("force", opts.mapping, { 242 | [""] = cmp.mapping(function(fallback) 243 | if cmp.visible() then 244 | cmp.select_next_item() 245 | -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() 246 | -- this way you will only jump inside the snippet region 247 | elseif luasnip.expand_or_jumpable() then 248 | luasnip.expand_or_jump() 249 | elseif has_words_before() then 250 | cmp.complete() 251 | else 252 | fallback() 253 | end 254 | end, { "i", "s" }), 255 | [""] = cmp.mapping(function(fallback) 256 | if cmp.visible() then 257 | cmp.select_prev_item() 258 | elseif luasnip.jumpable(-1) then 259 | luasnip.jump(-1) 260 | else 261 | fallback() 262 | end 263 | end, { "i", "s" }), 264 | }) 265 | end, 266 | }, 267 | } 268 | -------------------------------------------------------------------------------- /.config/nvim/lua/plugins/tweaks.lua: -------------------------------------------------------------------------------- 1 | return { 2 | -- add gruvbox 3 | { 4 | "ellisonleao/gruvbox.nvim", 5 | lazy = false, -- make sure we load this during startup if it is your main colorscheme 6 | priority = 1000, -- make sure to load this before all the other start plugins 7 | config = function() 8 | require("gruvbox").setup({ 9 | contrast = "hard", 10 | transparent_mode = true, 11 | }) 12 | end, 13 | }, 14 | -- Configure LazyVim to load gruvbox 15 | { 16 | "LazyVim/LazyVim", 17 | opts = { 18 | colorscheme = "gruvbox", 19 | }, 20 | }, 21 | -- Turn hidden files on 22 | { 23 | "nvim-neo-tree/neo-tree.nvim", 24 | opts = { 25 | filesystem = { 26 | filtered_items = { 27 | hide_dotfiles = false, 28 | }, 29 | }, 30 | }, 31 | }, 32 | } 33 | -------------------------------------------------------------------------------- /.config/nvim/stylua.toml: -------------------------------------------------------------------------------- 1 | indent_type = "Spaces" 2 | indent_width = 2 3 | column_width = 120 -------------------------------------------------------------------------------- /.config/ranger/commands.py: -------------------------------------------------------------------------------- 1 | # This is a sample commands.py. You can add your own commands here. 2 | # 3 | # Please refer to commands_full.py for all the default commands and a complete 4 | # documentation. Do NOT add them all here, or you may end up with defunct 5 | # commands when upgrading ranger. 6 | 7 | # A simple command for demonstration purposes follows. 8 | # ----------------------------------------------------------------------------- 9 | 10 | from __future__ import (absolute_import, division, print_function) 11 | 12 | # You can import any python module as needed. 13 | import os 14 | 15 | # You always need to import ranger.api.commands here to get the Command class: 16 | from ranger.api.commands import Command 17 | 18 | 19 | # Any class that is a subclass of "Command" will be integrated into ranger as a 20 | # command. Try typing ":my_edit" in ranger! 21 | class my_edit(Command): 22 | # The so-called doc-string of the class will be visible in the built-in 23 | # help that is accessible by typing "?c" inside ranger. 24 | """:my_edit 25 | 26 | A sample command for demonstration purposes that opens a file in an editor. 27 | """ 28 | 29 | # The execute method is called when you run this command in ranger. 30 | def execute(self): 31 | # self.arg(1) is the first (space-separated) argument to the function. 32 | # This way you can write ":my_edit somefilename". 33 | if self.arg(1): 34 | # self.rest(1) contains self.arg(1) and everything that follows 35 | target_filename = self.rest(1) 36 | else: 37 | # self.fm is a ranger.core.filemanager.FileManager object and gives 38 | # you access to internals of ranger. 39 | # self.fm.thisfile is a ranger.container.file.File object and is a 40 | # reference to the currently selected file. 41 | target_filename = self.fm.thisfile.path 42 | 43 | # This is a generic function to print text in ranger. 44 | self.fm.notify("Let's edit the file " + target_filename + "!") 45 | 46 | # Using bad=True in fm.notify allows you to print error messages: 47 | if not os.path.exists(target_filename): 48 | self.fm.notify("The given file does not exist!", bad=True) 49 | return 50 | 51 | # This executes a function from ranger.core.actions, a module with a 52 | # variety of subroutines that can help you construct commands. 53 | # Check out the source, or run "pydoc ranger.core.actions" for a list. 54 | self.fm.edit_file(target_filename) 55 | 56 | # The tab method is called when you press tab, and should return a list of 57 | # suggestions that the user will tab through. 58 | # tabnum is 1 for and -1 for by default 59 | def tab(self, tabnum): 60 | # This is a generic tab-completion function that iterates through the 61 | # content of the current directory. 62 | return self._tab_directory_content() 63 | -------------------------------------------------------------------------------- /.config/ranger/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hbthen3rd/dotfiles/20f28707a995fe25954e8fd84c9e9cab5007131f/.config/ranger/plugins/__init__.py -------------------------------------------------------------------------------- /.config/ranger/plugins/__pycache__/__init__.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hbthen3rd/dotfiles/20f28707a995fe25954e8fd84c9e9cab5007131f/.config/ranger/plugins/__pycache__/__init__.cpython-311.pyc -------------------------------------------------------------------------------- /.config/ranger/rc.conf: -------------------------------------------------------------------------------- 1 | # =================================================================== 2 | # This file contains the default startup commands for ranger. 3 | # To change them, it is recommended to create either /etc/ranger/rc.conf 4 | # (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom 5 | # commands there. 6 | # 7 | # If you copy this whole file there, you may want to set the environment 8 | # variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. 9 | # 10 | # The purpose of this file is mainly to define keybindings and settings. 11 | # For running more complex python code, please create a plugin in "plugins/" or 12 | # a command in "commands.py". 13 | # 14 | # Each line is a command that will be run before the user interface 15 | # is initialized. As a result, you can not use commands which rely 16 | # on the UI such as :delete or :mark. 17 | # =================================================================== 18 | 19 | # =================================================================== 20 | # == Options 21 | # =================================================================== 22 | 23 | # Which viewmode should be used? Possible values are: 24 | # miller: Use miller columns which show multiple levels of the hierarchy 25 | # multipane: Midnight-commander like multipane view showing all tabs next 26 | # to each other 27 | set viewmode miller 28 | 29 | # How many columns are there, and what are their relative widths? 30 | set column_ratios 1,3,4 31 | 32 | # Which files should be hidden? (regular expression) 33 | set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ 34 | 35 | # Show hidden files? You can toggle this by typing 'zh' 36 | set show_hidden true 37 | 38 | # Ask for a confirmation when running the "delete" command? 39 | # Valid values are "always", "never", "multiple" (default) 40 | # With "multiple", ranger will ask only if you delete multiple files at once. 41 | set confirm_on_delete multiple 42 | 43 | # Use non-default path for file preview script? 44 | # ranger ships with scope.sh, a script that calls external programs (see 45 | # README.md for dependencies) to preview images, archives, etc. 46 | set preview_script ~/.config/ranger/scope.sh 47 | 48 | # Use the external preview script or display simple plain text or image previews? 49 | set use_preview_script true 50 | 51 | # Automatically count files in the directory, even before entering them? 52 | set automatically_count_files true 53 | 54 | # Open all images in this directory when running certain image viewers 55 | # like feh or sxiv? You can still open selected files by marking them. 56 | set open_all_images true 57 | 58 | # Be aware of version control systems and display information. 59 | set vcs_aware true 60 | 61 | # State of the four backends git, hg, bzr, svn. The possible states are 62 | # disabled, local (only show local info), enabled (show local and remote 63 | # information). 64 | set vcs_backend_git enabled 65 | set vcs_backend_hg disabled 66 | set vcs_backend_bzr disabled 67 | set vcs_backend_svn disabled 68 | 69 | # Truncate the long commit messages to this length when shown in the statusbar. 70 | set vcs_msg_length 50 71 | 72 | # Use one of the supported image preview protocols 73 | set preview_images true 74 | 75 | # Set the preview image method. Supported methods: 76 | # 77 | # * w3m (default): 78 | # Preview images in full color with the external command "w3mimgpreview"? 79 | # This requires the console web browser "w3m" and a supported terminal. 80 | # It has been successfully tested with "xterm" and "urxvt" without tmux. 81 | # 82 | # * iterm2: 83 | # Preview images in full color using iTerm2 image previews 84 | # (http://iterm2.com/images.html). This requires using iTerm2 compiled 85 | # with image preview support. 86 | # 87 | # This feature relies on the dimensions of the terminal's font. By default, a 88 | # width of 8 and height of 11 are used. To use other values, set the options 89 | # iterm2_font_width and iterm2_font_height to the desired values. 90 | # 91 | # * terminology: 92 | # Previews images in full color in the terminology terminal emulator. 93 | # Supports a wide variety of formats, even vector graphics like svg. 94 | # 95 | # * sixel: 96 | # Previews images using the SIXEL protocol. This requires "imagemagick". 97 | # 98 | # * urxvt: 99 | # Preview images in full color using urxvt image backgrounds. This 100 | # requires using urxvt compiled with pixbuf support. 101 | # 102 | # * urxvt-full: 103 | # The same as urxvt but utilizing not only the preview pane but the 104 | # whole terminal window. 105 | # 106 | # * kitty: 107 | # Preview images in full color using kitty image protocol. 108 | # Requires python PIL or pillow library. 109 | # If ranger does not share the local filesystem with kitty 110 | # the transfer method is changed to encode the whole image; 111 | # while slower, this allows remote previews, 112 | # for example during an ssh session. 113 | # Tmux is unsupported. 114 | # 115 | # * ueberzug: 116 | # Preview images in full color with the external command "ueberzug". 117 | # Images are shown by using a child window. 118 | # Only for users who run X11 in GNU/Linux. 119 | set preview_images_method sixel 120 | 121 | # Delay in seconds before displaying an image with the w3m method. 122 | # Increase it in case of experiencing display corruption. 123 | set w3m_delay 0.02 124 | 125 | # Manually adjust the w3mimg offset when using a terminal which needs this 126 | set w3m_offset 0 127 | 128 | # Default iTerm2 font size (see: preview_images_method: iterm2) 129 | set iterm2_font_width 8 130 | set iterm2_font_height 11 131 | 132 | # Dithering mode for SIXEL previews. One of: 133 | # None, Riemersma, FloydSteinberg 134 | # (see: preview_images_method: sixel) 135 | set sixel_dithering FloydSteinberg 136 | 137 | # Use a unicode "..." character to mark cut-off filenames? 138 | set unicode_ellipsis false 139 | 140 | # BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic). 141 | # Requires the python-bidi pip package 142 | set bidi_support false 143 | 144 | # Show dotfiles in the bookmark preview box? 145 | set show_hidden_bookmarks true 146 | 147 | # Which colorscheme to use? These colorschemes are available by default: 148 | # default, jungle, snow, solarized 149 | set colorscheme default 150 | 151 | # Preview files on the rightmost column? 152 | # And collapse (shrink) the last column if there is nothing to preview? 153 | set preview_files true 154 | set preview_directories true 155 | set collapse_preview true 156 | 157 | # Wrap long lines in plain text previews? 158 | set wrap_plaintext_previews false 159 | 160 | # Save the console history on exit? 161 | set save_console_history true 162 | 163 | # Draw the status bar on top of the browser window (default: bottom) 164 | set status_bar_on_top false 165 | 166 | # Draw a progress bar in the status bar which displays the average state of all 167 | # currently running tasks which support progress bars? 168 | set draw_progress_bar_in_status_bar true 169 | 170 | # Draw borders around columns? (separators, outline, both, or none) 171 | # Separators are vertical lines between columns. 172 | # Outline draws a box around all the columns. 173 | # Both combines the two. 174 | set draw_borders both 175 | 176 | # Display the directory name in tabs? 177 | set dirname_in_tabs false 178 | 179 | # Enable the mouse support? 180 | set mouse_enabled true 181 | 182 | # Display the file size in the main column or status bar? 183 | set display_size_in_main_column true 184 | set display_size_in_status_bar true 185 | 186 | # Display the free disk space in the status bar? 187 | set display_free_space_in_status_bar true 188 | 189 | # Display files tags in all columns or only in main column? 190 | set display_tags_in_all_columns true 191 | 192 | # Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME` 193 | set update_title false 194 | 195 | # Set the tmux/screen window-name to "ranger"? 196 | set update_tmux_title true 197 | 198 | # Shorten the title if it gets long? The number defines how many 199 | # directories are displayed at once, 0 turns off this feature. 200 | set shorten_title 3 201 | 202 | # Show hostname in titlebar? 203 | set hostname_in_titlebar true 204 | 205 | # Abbreviate $HOME with ~ in the titlebar (first line) of ranger? 206 | set tilde_in_titlebar true 207 | 208 | # How many directory-changes or console-commands should be kept in history? 209 | set max_history_size 20 210 | set max_console_history_size 50 211 | 212 | # Try to keep so much space between the top/bottom border when scrolling: 213 | set scroll_offset 8 214 | 215 | # Flush the input after each key hit? (Noticeable when ranger lags) 216 | set flushinput true 217 | 218 | # Padding on the right when there's no preview? 219 | # This allows you to click into the space to run the file. 220 | set padding_right true 221 | 222 | # Save bookmarks (used with mX and `X) instantly? 223 | # This helps to synchronize bookmarks between multiple ranger 224 | # instances but leads to *slight* performance loss. 225 | # When false, bookmarks are saved when ranger is exited. 226 | set autosave_bookmarks true 227 | 228 | # Save the "`" bookmark to disk. This can be used to switch to the last 229 | # directory by typing "``". 230 | set save_backtick_bookmark true 231 | 232 | # You can display the "real" cumulative size of directories by using the 233 | # command :get_cumulative_size or typing "dc". The size is expensive to 234 | # calculate and will not be updated automatically. You can choose 235 | # to update it automatically though by turning on this option: 236 | set autoupdate_cumulative_size false 237 | 238 | # Turning this on makes sense for screen readers: 239 | set show_cursor false 240 | 241 | # One of: size, natural, basename, atime, ctime, mtime, type, random 242 | set sort natural 243 | 244 | # Additional sorting options 245 | set sort_reverse false 246 | set sort_case_insensitive true 247 | set sort_directories_first true 248 | set sort_unicode false 249 | 250 | # Enable this if key combinations with the Alt Key don't work for you. 251 | # (Especially on xterm) 252 | set xterm_alt_key false 253 | 254 | # Whether to include bookmarks in cd command 255 | set cd_bookmarks true 256 | 257 | # Changes case sensitivity for the cd command tab completion 258 | set cd_tab_case sensitive 259 | 260 | # Use fuzzy tab completion with the "cd" command. For example, 261 | # ":cd /u/lo/b" expands to ":cd /usr/local/bin". 262 | set cd_tab_fuzzy false 263 | 264 | # Avoid previewing files larger than this size, in bytes. Use a value of 0 to 265 | # disable this feature. 266 | set preview_max_size 0 267 | 268 | # The key hint lists up to this size have their sublists expanded. 269 | # Otherwise the submaps are replaced with "...". 270 | set hint_collapse_threshold 10 271 | 272 | # Add the highlighted file to the path in the titlebar 273 | set show_selection_in_titlebar true 274 | 275 | # The delay that ranger idly waits for user input, in milliseconds, with a 276 | # resolution of 100ms. Lower delay reduces lag between directory updates but 277 | # increases CPU load. 278 | set idle_delay 2000 279 | 280 | # When the metadata manager module looks for metadata, should it only look for 281 | # a ".metadata.json" file in the current directory, or do a deep search and 282 | # check all directories above the current one as well? 283 | set metadata_deep_search false 284 | 285 | # Clear all existing filters when leaving a directory 286 | set clear_filters_on_dir_change false 287 | 288 | # Disable displaying line numbers in main column. 289 | # Possible values: false, absolute, relative. 290 | set line_numbers false 291 | 292 | # When line_numbers=relative show the absolute line number in the 293 | # current line. 294 | set relative_current_zero false 295 | 296 | # Start line numbers from 1 instead of 0 297 | set one_indexed false 298 | 299 | # Save tabs on exit 300 | set save_tabs_on_exit false 301 | 302 | # Remove tabs with unavailable paths on startup 303 | set filter_dead_tabs_on_startup false 304 | 305 | # Enable scroll wrapping - moving down while on the last item will wrap around to 306 | # the top and vice versa. 307 | set wrap_scroll false 308 | 309 | # Set the global_inode_type_filter to nothing. Possible options: d, f and l for 310 | # directories, files and symlinks respectively. 311 | set global_inode_type_filter 312 | 313 | # This setting allows to freeze the list of files to save I/O bandwidth. It 314 | # should be 'false' during start-up, but you can toggle it by pressing F. 315 | set freeze_files false 316 | 317 | # Print file sizes in bytes instead of the default human-readable format. 318 | set size_in_bytes false 319 | 320 | # Shows large filesizes with binary unit prefixes - kibibytes=Ki, mebibytes=Mi etc. 321 | # instead of the default decimal prefixes - kilobytes=k, megabytes=M etc. 322 | # Each binary unit prefix signifies 1024=2^10 of the preceding unit prefix (there are 323 | # 1024 KiB in 1 MiB) as opposed to decimal unit prefixes which signify a 324 | # 1000 of the preceding unit prefix (there are 1000 kB in 1 MB) 325 | # https://en.wikipedia.org/wiki/Binary_prefix 326 | set binary_size_prefix false 327 | 328 | # Warn at startup if RANGER_LEVEL env var is greater than 0, in other words 329 | # give a warning when you nest ranger in a subshell started by ranger. 330 | # Special value "error" makes the warning more visible. 331 | set nested_ranger_warning true 332 | 333 | # =================================================================== 334 | # == Local Options 335 | # =================================================================== 336 | # You can set local options that only affect a single directory. 337 | 338 | # Examples: 339 | # setlocal path=~/downloads sort mtime 340 | 341 | # =================================================================== 342 | # == Command Aliases in the Console 343 | # =================================================================== 344 | 345 | alias e edit 346 | alias q quit 347 | alias q! quit! 348 | alias qa quitall 349 | alias qa! quitall! 350 | alias qall quitall 351 | alias qall! quitall! 352 | alias setl setlocal 353 | 354 | alias filter scout -prts 355 | alias hide scout -prtsv 356 | alias find scout -aets 357 | alias mark scout -mr 358 | alias unmark scout -Mr 359 | alias search scout -rs 360 | alias search_inc scout -rts 361 | alias travel scout -aefklst 362 | 363 | # =================================================================== 364 | # == Define keys for the browser 365 | # =================================================================== 366 | 367 | # Basic 368 | map Q quitall 369 | map q quit 370 | copymap q ZZ ZQ 371 | 372 | map R reload_cwd 373 | map F set freeze_files! 374 | map reset 375 | map redraw_window 376 | map abort 377 | map change_mode normal 378 | map ~ set viewmode! 379 | 380 | map i display_file 381 | map scroll_preview 1 382 | map scroll_preview -1 383 | map ? help 384 | map W display_log 385 | map w taskview_open 386 | map S shell $SHELL 387 | 388 | map : console 389 | map ; console 390 | map ! console shell%space 391 | map @ console -p6 shell %%s 392 | map # console shell -p%space 393 | map s console shell%space 394 | map r chain draw_possible_programs; console open_with%space 395 | map f console find%space 396 | map cd console cd%space 397 | 398 | map chain console; eval fm.ui.console.history_move(-1) 399 | 400 | # Change the line mode 401 | map Mf linemode filename 402 | map Mi linemode fileinfo 403 | map Mm linemode mtime 404 | map Mh linemode humanreadablemtime 405 | map Mp linemode permissions 406 | map Ms linemode sizemtime 407 | map MH linemode sizehumanreadablemtime 408 | map Mt linemode metatitle 409 | 410 | # Tagging / Marking 411 | map t tag_toggle 412 | map ut tag_remove 413 | map " tag_toggle tag=%any 414 | map mark_files toggle=True 415 | map v mark_files all=True toggle=True 416 | map uv mark_files all=True val=False 417 | map V toggle_visual_mode 418 | map uV toggle_visual_mode reverse=True 419 | 420 | # For the nostalgics: Midnight Commander bindings 421 | map help 422 | map rename_append 423 | map display_file 424 | map edit 425 | map copy 426 | map cut 427 | map console mkdir%space 428 | map console delete 429 | #map console trash 430 | map exit 431 | 432 | # In case you work on a keyboard with dvorak layout 433 | map move up=1 434 | map move down=1 435 | map move left=1 436 | map move right=1 437 | map move to=0 438 | map move to=-1 439 | map move down=1 pages=True 440 | map move up=1 pages=True 441 | map move right=1 442 | #map console delete 443 | map console touch%space 444 | 445 | # VIM-like 446 | copymap k 447 | copymap j 448 | copymap h 449 | copymap l 450 | copymap gg 451 | copymap G 452 | copymap 453 | copymap 454 | 455 | map J move down=0.5 pages=True 456 | map K move up=0.5 pages=True 457 | copymap J 458 | copymap K 459 | 460 | # Jumping around 461 | map H history_go -1 462 | map L history_go 1 463 | map ] move_parent 1 464 | map [ move_parent -1 465 | map } traverse 466 | map { traverse_backwards 467 | map ) jump_non 468 | 469 | map gh cd ~ 470 | map ge cd /etc 471 | map gu cd /usr 472 | map gd cd /dev 473 | map gl cd -r . 474 | map gL cd -r %f 475 | map go cd /opt 476 | map gv cd /var 477 | map gm cd /media 478 | map gi eval fm.cd('/run/media/' + os.getenv('USER')) 479 | map gM cd /mnt 480 | map gs cd /srv 481 | map gp cd /tmp 482 | map gr cd / 483 | map gR eval fm.cd(ranger.RANGERDIR) 484 | map g/ cd / 485 | map g? cd /usr/share/doc/ranger 486 | 487 | # External Programs 488 | map E edit 489 | map du shell -p du -d 1 -h "$(2>/dev/null >&2 du --apparent-size /dev/null && printf '%s\n' --apparent-size || printf '%s\n' --)" 490 | map dU shell -p du -d 1 -h "$(2>/dev/null >&2 du --apparent-size /dev/null && printf '%s\n' --apparent-size || printf '%s\n' --)" | sort -rh 491 | map yp yank path 492 | map yd yank dir 493 | map yn yank name 494 | map y. yank name_without_extension 495 | 496 | # Filesystem Operations 497 | map = chmod 498 | 499 | # Enhanced "cw" 500 | map cw eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console("rename ") 501 | map a rename_append 502 | map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) 503 | map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) 504 | 505 | map pp paste 506 | map po paste overwrite=True 507 | map pP paste append=True 508 | map pO paste overwrite=True append=True 509 | map pl paste_symlink relative=False 510 | map pL paste_symlink relative=True 511 | map phl paste_hardlink 512 | map pht paste_hardlinked_subtree 513 | map pd console paste dest= 514 | map p` paste dest=%any_path 515 | map p' paste dest=%any_path 516 | 517 | # Send selected file(s) to trash (macOS) 518 | map DD shell mv -i %s ~/.local/share/Trash/files/ && echo "trashed %s from_dir $(pwd)" >> ~/.config/ranger/trash_history 519 | map uD shell fileToRestore=$(cat ~/.config/ranger/trash_history | grep "^trashed" | tail -n 1 | cut -c10- | awk -F"from_dir " '{print $1}' | rev | cut -c10- | rev) && mv -i ~/.local/share/Trash/files/"$fileToRestore" "$fileToRestore"1. 1. && echo " untrashed $(pwd)/"$fileToRestore"" >> ~/.config/ranger/trash_history && unset fileToRestore 520 | map Dh shell less ~/.config/ranger/trash_history 521 | 522 | map dD console delete 523 | map dT console trash 524 | 525 | map dd cut 526 | map ud uncut 527 | map da cut mode=add 528 | map dr cut mode=remove 529 | map dt cut mode=toggle 530 | 531 | map yy copy 532 | map uy uncut 533 | map ya copy mode=add 534 | map yr copy mode=remove 535 | map yt copy mode=toggle 536 | 537 | # Temporary workarounds 538 | map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) 539 | map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) 540 | map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) 541 | map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) 542 | map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) 543 | map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) 544 | map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) 545 | map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) 546 | 547 | # Searching 548 | map / console search%space 549 | map n search_next 550 | map N search_next forward=False 551 | map ct search_next order=tag 552 | map cs search_next order=size 553 | map ci search_next order=mimetype 554 | map cc search_next order=ctime 555 | map cm search_next order=mtime 556 | map ca search_next order=atime 557 | 558 | # Tabs 559 | map tab_new 560 | map tab_close 561 | map tab_move 1 562 | map tab_move -1 563 | map tab_move 1 564 | map tab_move -1 565 | map gt tab_move 1 566 | map gT tab_move -1 567 | map gn tab_new 568 | map gc tab_close 569 | map uq tab_restore 570 | map tab_open 1 571 | map tab_open 2 572 | map tab_open 3 573 | map tab_open 4 574 | map tab_open 5 575 | map tab_open 6 576 | map tab_open 7 577 | map tab_open 8 578 | map tab_open 9 579 | map tab_shift 1 580 | map tab_shift -1 581 | 582 | # Sorting 583 | map or set sort_reverse! 584 | map oz set sort=random 585 | map os chain set sort=size; set sort_reverse=False 586 | map ob chain set sort=basename; set sort_reverse=False 587 | map on chain set sort=natural; set sort_reverse=False 588 | map om chain set sort=mtime; set sort_reverse=False 589 | map oc chain set sort=ctime; set sort_reverse=False 590 | map oa chain set sort=atime; set sort_reverse=False 591 | map ot chain set sort=type; set sort_reverse=False 592 | map oe chain set sort=extension; set sort_reverse=False 593 | 594 | map oS chain set sort=size; set sort_reverse=True 595 | map oB chain set sort=basename; set sort_reverse=True 596 | map oN chain set sort=natural; set sort_reverse=True 597 | map oM chain set sort=mtime; set sort_reverse=True 598 | map oC chain set sort=ctime; set sort_reverse=True 599 | map oA chain set sort=atime; set sort_reverse=True 600 | map oT chain set sort=type; set sort_reverse=True 601 | map oE chain set sort=extension; set sort_reverse=True 602 | 603 | map dc get_cumulative_size 604 | 605 | # Settings 606 | map zc set collapse_preview! 607 | map zd set sort_directories_first! 608 | map zh set show_hidden! 609 | map set show_hidden! 610 | copymap 611 | copymap 612 | map zI set flushinput! 613 | map zi set preview_images! 614 | map zm set mouse_enabled! 615 | map zp set preview_files! 616 | map zP set preview_directories! 617 | map zs set sort_case_insensitive! 618 | map zu set autoupdate_cumulative_size! 619 | map zv set use_preview_script! 620 | map zf console filter%space 621 | copymap zf zz 622 | 623 | # Filter stack 624 | map .d filter_stack add type d 625 | map .f filter_stack add type f 626 | map .l filter_stack add type l 627 | map .m console filter_stack add mime%space 628 | map .n console filter_stack add name%space 629 | map .# console filter_stack add hash%space 630 | map ." filter_stack add duplicate 631 | map .' filter_stack add unique 632 | map .| filter_stack add or 633 | map .& filter_stack add and 634 | map .! filter_stack add not 635 | map .r filter_stack rotate 636 | map .c filter_stack clear 637 | map .* filter_stack decompose 638 | map .p filter_stack pop 639 | map .. filter_stack show 640 | 641 | # Bookmarks 642 | map ` enter_bookmark %any 643 | map ' enter_bookmark %any 644 | map m set_bookmark %any 645 | map um unset_bookmark %any 646 | 647 | map m draw_bookmarks 648 | copymap m um ` ' p` p' 649 | 650 | # Generate all the chmod bindings with some python help: 651 | eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) 652 | eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) 653 | eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) 654 | eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) 655 | eval for arg in "rwxXst": cmd("map +{0} shell -f chmod +{0} %s".format(arg)) 656 | 657 | eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) 658 | eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) 659 | eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) 660 | eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) 661 | eval for arg in "rwxXst": cmd("map -{0} shell -f chmod -{0} %s".format(arg)) 662 | 663 | # =================================================================== 664 | # == Define keys for the console 665 | # =================================================================== 666 | # Note: Unmapped keys are passed directly to the console. 667 | 668 | # Basic 669 | cmap eval fm.ui.console.tab() 670 | cmap eval fm.ui.console.tab(-1) 671 | cmap eval fm.ui.console.close() 672 | cmap eval fm.ui.console.execute() 673 | cmap redraw_window 674 | 675 | copycmap 676 | copycmap 677 | 678 | # Move around 679 | cmap eval fm.ui.console.history_move(-1) 680 | cmap eval fm.ui.console.history_move(1) 681 | cmap eval fm.ui.console.move(left=1) 682 | cmap eval fm.ui.console.move(right=1) 683 | cmap eval fm.ui.console.move(right=0, absolute=True) 684 | cmap eval fm.ui.console.move(right=-1, absolute=True) 685 | cmap eval fm.ui.console.move_word(left=1) 686 | cmap eval fm.ui.console.move_word(right=1) 687 | 688 | copycmap 689 | copycmap 690 | 691 | # Line Editing 692 | cmap eval fm.ui.console.delete(-1) 693 | cmap eval fm.ui.console.delete(0) 694 | cmap eval fm.ui.console.delete_word() 695 | cmap eval fm.ui.console.delete_word(backward=False) 696 | cmap eval fm.ui.console.delete_rest(1) 697 | cmap eval fm.ui.console.delete_rest(-1) 698 | cmap eval fm.ui.console.paste() 699 | cmap eval fm.ui.console.transpose_chars() 700 | cmap eval fm.ui.console.transpose_words() 701 | 702 | # And of course the emacs way 703 | copycmap 704 | copycmap 705 | copycmap 706 | copycmap 707 | copycmap 708 | copycmap 709 | copycmap 710 | copycmap 711 | copycmap 712 | 713 | # Note: There are multiple ways to express backspaces. (code 263) 714 | # and (code 127). To be sure, use both. 715 | copycmap 716 | 717 | # This special expression allows typing in numerals: 718 | cmap false 719 | 720 | # =================================================================== 721 | # == Pager Keybindings 722 | # =================================================================== 723 | 724 | # Movement 725 | pmap pager_move down=1 726 | pmap pager_move up=1 727 | pmap pager_move left=4 728 | pmap pager_move right=4 729 | pmap pager_move to=0 730 | pmap pager_move to=-1 731 | pmap pager_move down=1.0 pages=True 732 | pmap pager_move up=1.0 pages=True 733 | pmap pager_move down=0.5 pages=True 734 | pmap pager_move up=0.5 pages=True 735 | 736 | copypmap k 737 | copypmap j 738 | copypmap h 739 | copypmap l 740 | copypmap g 741 | copypmap G 742 | copypmap d 743 | copypmap u 744 | copypmap n f 745 | copypmap p b 746 | 747 | # Basic 748 | pmap redraw_window 749 | pmap pager_close 750 | copypmap q Q i 751 | pmap E edit_file 752 | 753 | # =================================================================== 754 | # == Taskview Keybindings 755 | # =================================================================== 756 | 757 | # Movement 758 | tmap taskview_move up=1 759 | tmap taskview_move down=1 760 | tmap taskview_move to=0 761 | tmap taskview_move to=-1 762 | tmap taskview_move down=1.0 pages=True 763 | tmap taskview_move up=1.0 pages=True 764 | tmap taskview_move down=0.5 pages=True 765 | tmap taskview_move up=0.5 pages=True 766 | 767 | copytmap k 768 | copytmap j 769 | copytmap g 770 | copytmap G 771 | copytmap u 772 | copytmap n f 773 | copytmap p b 774 | 775 | # Changing priority and deleting tasks 776 | tmap J eval -q fm.ui.taskview.task_move(-1) 777 | tmap K eval -q fm.ui.taskview.task_move(0) 778 | tmap dd eval -q fm.ui.taskview.task_remove() 779 | tmap eval -q fm.ui.taskview.task_move(-1) 780 | tmap eval -q fm.ui.taskview.task_move(0) 781 | tmap eval -q fm.ui.taskview.task_remove() 782 | 783 | # Basic 784 | tmap redraw_window 785 | tmap taskview_close 786 | copytmap q Q w 787 | 788 | # Unmount and power-off devices 789 | map xp shell for selection in %p; do path=$(findmnt -o SOURCE -n $selection); udisksctl unmount -b "$path" && udisksctl power-off -b "$path"; done 790 | 791 | # Quick editing rc.conf 792 | map X chain shell nvim ~/.config/ranger/rc.conf; source ~/.config/ranger/rc.conf 793 | 794 | # Plugins 795 | default_linemode devicons 796 | -------------------------------------------------------------------------------- /.config/ranger/rifle.conf: -------------------------------------------------------------------------------- 1 | # vim: ft=cfg 2 | # 3 | # This is the configuration file of "rifle", ranger's file executor/opener. 4 | # Each line consists of conditions and a command. For each line the conditions 5 | # are checked and if they are met, the respective command is run. 6 | # 7 | # Syntax: 8 | # , , ... = command 9 | # 10 | # The command can contain these environment variables: 11 | # $1-$9 | The n-th selected file 12 | # $@ | All selected files 13 | # 14 | # If you use the special command "ask", rifle will ask you what program to run. 15 | # 16 | # Prefixing a condition with "!" will negate its result. 17 | # These conditions are currently supported: 18 | # match | The regexp matches $1 19 | # ext | The regexp matches the extension of $1 20 | # mime | The regexp matches the mime type of $1 21 | # name | The regexp matches the basename of $1 22 | # path | The regexp matches the absolute path of $1 23 | # has | The program is installed (i.e. located in $PATH) 24 | # env | The environment variable "variable" is non-empty 25 | # file | $1 is a file 26 | # directory | $1 is a directory 27 | # number | change the number of this command to n 28 | # terminal | stdin, stderr and stdout are connected to a terminal 29 | # X | A graphical environment is available (darwin, Xorg, or Wayland) 30 | # 31 | # There are also pseudo-conditions which have a "side effect": 32 | # flag | Change how the program is run. See below. 33 | # label