├── .gitignore ├── sketchybar ├── plugins │ ├── window_title.sh │ ├── space.sh │ ├── clock.sh │ ├── darkmode_click.sh │ ├── darkmode.sh │ ├── vpn.sh │ ├── wifi_click.sh │ ├── yabai_mode.sh │ ├── wifi.sh │ ├── yabai_mode_click.sh │ ├── battery.sh │ └── cpu.sh ├── items │ ├── clock.sh │ ├── vpn.sh │ ├── battery.sh │ ├── darkside.sh │ ├── yabai.sh │ ├── window_title.sh │ ├── apple.sh │ ├── spaces.sh │ ├── wifi.sh │ └── cpu.sh ├── colors.sh ├── icons.sh ├── README.org └── sketchybarrc ├── yabai ├── fix-yabai.sh └── yabairc ├── README.md ├── kitty ├── current-theme.conf ├── kitty.conf.bak └── kitty.conf ├── karabiner ├── assets │ └── complex_modifications │ │ └── 1660927081.json ├── automatic_backups │ ├── karabiner_20220819.json │ └── karabiner_20220817.json └── karabiner.json └── skhd └── skhdrc /.gitignore: -------------------------------------------------------------------------------- 1 | git/ 2 | nvm/ 3 | -------------------------------------------------------------------------------- /sketchybar/plugins/window_title.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | sketchybar --set $NAME label="$INFO" 4 | -------------------------------------------------------------------------------- /sketchybar/plugins/space.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | sketchybar --set $NAME background.drawing=$SELECTED -------------------------------------------------------------------------------- /sketchybar/plugins/clock.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | sketchybar --set $NAME label="$(date '+%h %d - %H:%M')" 4 | -------------------------------------------------------------------------------- /sketchybar/items/clock.sh: -------------------------------------------------------------------------------- 1 | sketchybar --add item clock right \ 2 | --set clock update_freq=1 \ 3 | script="$PLUGIN_DIR/clock.sh" \ -------------------------------------------------------------------------------- /yabai/fix-yabai.sh: -------------------------------------------------------------------------------- 1 | pkill Dock 2 | sudo nvram boot-args=-arm64e_preview_abi 3 | # reboot 4 | sudo yabai --uninstall-sa 5 | sudo yabai --install-sa 6 | sudo yabai --load-sa 7 | -------------------------------------------------------------------------------- /sketchybar/plugins/darkmode_click.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | osascript -e 'tell app "System Events" to tell appearance preferences to set dark mode to not dark mode' 4 | 5 | ./darkmode.sh 6 | -------------------------------------------------------------------------------- /sketchybar/items/vpn.sh: -------------------------------------------------------------------------------- 1 | sketchybar -m --add item vpn right \ 2 | --set vpn icon= \ 3 | update_freq=5 \ 4 | script="~/.config/sketchybar/plugins/vpn.sh" 5 | -------------------------------------------------------------------------------- /sketchybar/items/battery.sh: -------------------------------------------------------------------------------- 1 | sketchybar --add item battery right \ 2 | --set battery script="$PLUGIN_DIR/battery.sh" \ 3 | update_freq=10 \ 4 | --subscribe battery system_woke 5 | -------------------------------------------------------------------------------- /sketchybar/items/darkside.sh: -------------------------------------------------------------------------------- 1 | sketchybar --add item appearance right \ 2 | --set appearance script="$PLUGIN_DIR/darkmode.sh" \ 3 | click_script="$PLUGIN_DIR/darkmode_click.sh" \ 4 | update_freq=1 -------------------------------------------------------------------------------- /sketchybar/colors.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Color Palette 4 | BLACK=0xff181926 5 | WHITE=0xffcad3f5 6 | RED=0xffed8796 7 | GREEN=0xffa6da95 8 | BLUE=0xff8aadf4 9 | YELLOW=0xffeed49f 10 | ORANGE=0xfff5a97f 11 | MAGENTA=0xffc6a0f6 12 | GREY=0xff939ab7 13 | TRANSPARENT=0x00000000 14 | -------------------------------------------------------------------------------- /sketchybar/icons.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Uses SF Symbols. 4 | 5 | APPLE_ICN=􀣺 6 | SUN_ICN=􀆫 7 | MOON_ICN=􀆹 8 | WIFI_ICN=􀙇 9 | NETWORK_ICN=􀤆 10 | SPEED_ICN=􀍾 11 | BATTERY_100=􀛨 12 | BATTERY_75=􀺸 13 | BATTERY_50=􀺶 14 | BATTERY_25=􀛩 15 | BATTERY_0=􀛪 16 | BATTERY_CHARGING=􀢋 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Some dotfiles that let you configure your macbook as follows: 2 | 3 | https://www.youtube.com/watch?v=Vj6Pz_WUMR0 4 | 5 | This effectively lets you have an i3wm workflow on a macbook. 6 | Very nice for linux users who are required to use mac or mac users curious about tiling window managers available on linux 7 | -------------------------------------------------------------------------------- /sketchybar/items/yabai.sh: -------------------------------------------------------------------------------- 1 | sketchybar -m --add item yabai_mode left \ 2 | --set yabai_mode update_freq=3 \ 3 | --set yabai_mode script="$PLUGIN_DIR/yabai_mode.sh" \ 4 | --set yabai_mode click_script="$PLUGIN_DIR/yabai_mode_click.sh" \ 5 | --subscribe yabai_mode space_change 6 | -------------------------------------------------------------------------------- /sketchybar/plugins/darkmode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | source $HOME/.config/sketchybar/icons.sh 4 | 5 | if [[ $(defaults read -g AppleInterfaceStyle 2>/dev/null) == "Dark" ]] 6 | then 7 | sketchybar -m --set appearance icon="$SUN_ICN" 8 | 9 | else 10 | sketchybar -m --set appearance icon="$MOON_ICN" 11 | fi 12 | 13 | -------------------------------------------------------------------------------- /sketchybar/plugins/vpn.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VPN=$(scutil --nc list | grep Connected | sed -E 's/.*"(.*)".*/\1/') 4 | 5 | if [[ $VPN != "" ]]; then 6 | sketchybar -m --set vpn icon= \ 7 | label="$VPN" \ 8 | drawing=on 9 | else 10 | sketchybar -m --set vpn drawing=off 11 | fi 12 | -------------------------------------------------------------------------------- /sketchybar/items/window_title.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | sketchybar --add item space_separator left \ 4 | --add item window_title left \ 5 | --set window_title script="$PLUGIN_DIR/window_title.sh" \ 6 | icon.drawing=off \ 7 | label.font="$FONT:Semibold:15.0" \ 8 | --subscribe window_title front_app_switched -------------------------------------------------------------------------------- /sketchybar/plugins/wifi_click.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | export CURRENT_WIFI="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I)" 4 | export SSID="$(echo "$CURRENT_WIFI" | grep -o "SSID: .*" | sed 's/^SSID: //')" 5 | export CURR_TX="$(echo "$CURRENT_WIFI" | grep -o "lastTxRate: .*" | sed 's/^lastTxRate: //')" 6 | 7 | sketchybar --set $NAME label="${CURR_TX}Mbps" 8 | -------------------------------------------------------------------------------- /sketchybar/items/apple.sh: -------------------------------------------------------------------------------- 1 | # ===Apple Logo=== 2 | sketchybar -m \ 3 | --add item apple.logo left \ 4 | --set apple.logo icon=$APPLE_ICN \ 5 | icon.font="$FONT:Heavy:16.0" \ 6 | label.drawing=off \ 7 | icon.padding_right=17 \ 8 | 9 | -------------------------------------------------------------------------------- /sketchybar/plugins/yabai_mode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | space_number=$(yabai -m query --spaces --space | jq -r .index) 4 | yabai_mode=$(yabai -m query --spaces --space | jq -r .type) 5 | 6 | case "$yabai_mode" in 7 | bsp) 8 | sketchybar -m --set yabai_mode label="􀏝" 9 | ;; 10 | stack) 11 | sketchybar -m --set yabai_mode label="􀏭" 12 | ;; 13 | float) 14 | sketchybar -m --set yabai_mode label="􀢌" 15 | ;; 16 | esac 17 | -------------------------------------------------------------------------------- /kitty/current-theme.conf: -------------------------------------------------------------------------------- 1 | background #1c262b 2 | foreground #c1c8d6 3 | cursor #b2b8c3 4 | selection_background #6dc1b8 5 | color0 #000000 6 | color8 #767676 7 | color1 #ee2a29 8 | color9 #dc5b60 9 | color2 #3fa33f 10 | color10 #70be71 11 | color3 #fee92e 12 | color11 #fef063 13 | color4 #1d80ef 14 | color12 #53a4f3 15 | color5 #8800a0 16 | color13 #a94dbb 17 | color6 #16aec9 18 | color14 #42c6d9 19 | color7 #a4a4a4 20 | color15 #fffefe 21 | selection_foreground #1c262b 22 | -------------------------------------------------------------------------------- /sketchybar/README.org: -------------------------------------------------------------------------------- 1 | #+title: Sketchybar config 2 | 3 | This is my very basic [[https://felixkratz.github.io/SketchyBar/][SketchyBar]] configuration. 4 | It is minimal and close to the default while still being pretty and functional. 5 | 6 | ** Features 7 | - Toggle appearance using ~osascript~ 8 | - Wifi dropdown with SSID and speed 9 | - Battery level 10 | - Date and time 11 | - Spaces 12 | - Window title 13 | - Native look using SF Symbols and the SF Mono font. 14 | -------------------------------------------------------------------------------- /sketchybar/plugins/wifi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | CURRENT_WIFI="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I)" 4 | SSID="$(echo "$CURRENT_WIFI" | grep -o "SSID: .*" | sed 's/^SSID: //')" 5 | CURR_TX="$(echo "$CURRENT_WIFI" | grep -o "lastTxRate: .*" | sed 's/^lastTxRate: //')" 6 | 7 | POPUP_OFF="sketchybar --set wifi.control popup.drawing=off" 8 | POPUP_CLICK_SCRIPT="sketchybar --set \$NAME popup.drawing=toggle" 9 | 10 | -------------------------------------------------------------------------------- /sketchybar/plugins/yabai_mode_click.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | space_number=$(yabai -m query --spaces --space | jq -r .index) 4 | yabai_mode=$(yabai -m query --spaces --space | jq -r .type) 5 | 6 | case "$yabai_mode" in 7 | bsp) 8 | yabai -m space --layout stack && sketchybar -m --set yabai_mode label="􀢌" 9 | ;; 10 | stack) 11 | yabai -m space --layout float && sketchybar -m --set yabai_mode label="􀏭" 12 | ;; 13 | float) 14 | yabai -m space --layout bsp && sketchybar -m --set yabai_mode label="􀏝" 15 | ;; 16 | esac 17 | -------------------------------------------------------------------------------- /karabiner/assets/complex_modifications/1660927081.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Right Option Key → Hyper Key (⌃⌥⇧⌘)", 3 | "rules": [ 4 | { 5 | "description": "Right Option Key → Hyper Key (⌃⌥⇧⌘)", 6 | "manipulators": [ 7 | { 8 | "from": { 9 | "key_code": "right_option", 10 | "modifiers": { 11 | "optional": ["any"] 12 | } 13 | }, 14 | "to": [ 15 | { 16 | "key_code": "left_shift", 17 | "modifiers": [ 18 | "left_command", 19 | "left_control", 20 | "left_option" 21 | ] 22 | } 23 | ], 24 | "type": "basic" 25 | } 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /sketchybar/plugins/battery.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | source $HOME/.config/sketchybar/icons.sh 4 | 5 | PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1) 6 | CHARGING=$(pmset -g batt | grep 'AC Power') 7 | 8 | if [ $PERCENTAGE = "" ]; then 9 | exit 0 10 | fi 11 | 12 | case ${PERCENTAGE} in 13 | 9[0-9]|100) ICON=$BATTERY_100 14 | ;; 15 | [6-8][0-9]) ICON=$BATTERY_75 16 | ;; 17 | [3-5][0-9]) ICON=$BATTERY_50 18 | ;; 19 | [1-2][0-9]) ICON=$BATTERY_25 20 | ;; 21 | *) ICON="$BATTERY_10" 22 | esac 23 | 24 | if [[ $CHARGING != "" ]]; then 25 | ICON=$BATTERY_CHARGING 26 | fi 27 | 28 | sketchybar --set $NAME icon="$ICON" label="${PERCENTAGE}%" 29 | -------------------------------------------------------------------------------- /sketchybar/plugins/cpu.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | source "$HOME/.config/sketchybar/colors.sh" 4 | 5 | CORE_COUNT=$(sysctl -n machdep.cpu.thread_count) 6 | CPU_INFO=$(ps -eo pcpu,user) 7 | CPU_SYS=$(echo "$CPU_INFO" | grep -v $(whoami) | sed "s/[^ 0-9\.]//g" | awk "{sum+=\$1} END {print sum/(100.0 * $CORE_COUNT)}") 8 | CPU_USER=$(echo "$CPU_INFO" | grep $(whoami) | sed "s/[^ 0-9\.]//g" | awk "{sum+=\$1} END {print sum/(100.0 * $CORE_COUNT)}") 9 | 10 | TOPPROC=$(ps axo "%cpu,ucomm" | sort -nr | tail +1 | head -n1 | awk '{printf "%.0f%% %s\n", $1, $2}' | sed -e 's/com.apple.//g') 11 | CPUP=$(echo $TOPPROC | sed -nr 's/([^\%]+).*/\1/p') 12 | 13 | CPU_PERCENT="$(echo "$CPU_SYS $CPU_USER" | awk '{printf "%.0f\n", ($1 + $2)*100}')" 14 | 15 | COLOR=$WHITE 16 | case "$CPU_PERCENT" in 17 | [1-2][0-9]) COLOR=$YELLOW 18 | ;; 19 | [3-6][0-9]) COLOR=$ORANGE 20 | ;; 21 | [7-9][0-9]|100) COLOR=$RED 22 | ;; 23 | esac 24 | 25 | sketchybar --set cpu.percent label=$CPU_PERCENT% \ 26 | label.color=$COLOR \ 27 | --set cpu.top label="$TOPPROC" \ 28 | --push cpu.sys $CPU_SYS \ 29 | --push cpu.user $CPU_USER 30 | -------------------------------------------------------------------------------- /sketchybar/items/spaces.sh: -------------------------------------------------------------------------------- 1 | SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10") 2 | 3 | for i in "${!SPACE_ICONS[@]}" 4 | do 5 | sid=$(($i+1)) 6 | sketchybar --add space space.$sid left \ 7 | --set space.$sid associated_space=$sid \ 8 | icon=${SPACE_ICONS[i]} \ 9 | icon.padding_left=8 \ 10 | icon.padding_right=8 \ 11 | background.padding_left=5 \ 12 | background.padding_right=5 \ 13 | background.color=0x44ffffff \ 14 | background.corner_radius=5 \ 15 | background.height=22 \ 16 | background.drawing=off \ 17 | label.drawing=off \ 18 | script="$PLUGIN_DIR/space.sh" \ 19 | click_script="yabai -m space --focus $sid" \ 20 | icon.font="$FONT:Light:15.0" 21 | done 22 | -------------------------------------------------------------------------------- /sketchybar/items/wifi.sh: -------------------------------------------------------------------------------- 1 | source "$PLUGIN_DIR/wifi.sh" 2 | 3 | sketchybar --add item wifi.control right \ 4 | \ 5 | --set wifi.control icon=$WIFI_ICN \ 6 | label.drawing=off \ 7 | click_script="$POPUP_CLICK_SCRIPT" \ 8 | popup.background.color=0x70000000 \ 9 | popup.blur_radius=50 \ 10 | popup.background.corner_radius=5 \ 11 | \ 12 | --add item wifi.ssid popup.wifi.control \ 13 | --set wifi.ssid icon=$NETWORK_ICN \ 14 | label="${SSID}" \ 15 | \ 16 | --add item wifi.speed popup.wifi.control \ 17 | --set wifi.speed icon=$SPEED_ICN \ 18 | script="$PLUGIN_DIR/wifi_click.sh" \ 19 | update_freq=10 \ 20 | -------------------------------------------------------------------------------- /sketchybar/sketchybarrc: -------------------------------------------------------------------------------- 1 | PLUGIN_DIR="$HOME/.config/sketchybar/plugins" 2 | ITEM_DIR="$HOME/.config/sketchybar/items" 3 | 4 | source $HOME/.config/sketchybar/colors.sh 5 | source $HOME/.config/sketchybar/icons.sh 6 | 7 | export FONT="Hasklug Nerd Font Mono" 8 | export NERD_FONT="Hasklug Nerd Font Mono" 9 | 10 | sketchybar --bar height=30 \ 11 | blur_radius=100 \ 12 | position=top \ 13 | padding_left=10 \ 14 | padding_right=10 \ 15 | color=0x15ffffff \ 16 | shadow=on 17 | 18 | sketchybar --default updates=when_shown \ 19 | drawing=on \ 20 | icon.font="$NERD_FONT:Regular:14.0" \ 21 | icon.color=0xffffffff \ 22 | label.font="$FONT:Light:14.0" \ 23 | label.color=0xffffffff \ 24 | label.padding_left=4 \ 25 | label.padding_right=4 \ 26 | icon.padding_left=4 \ 27 | icon.padding_right=4 28 | 29 | source $ITEM_DIR/apple.sh 30 | source $ITEM_DIR/spaces.sh 31 | source $ITEM_DIR/window_title.sh 32 | source $ITEM_DIR/clock.sh 33 | source $ITEM_DIR/battery.sh 34 | source $ITEM_DIR/cpu.sh 35 | source $ITEM_DIR/vpn.sh 36 | source $ITEM_DIR/wifi.sh 37 | source $ITEM_DIR/darkside.sh 38 | 39 | 40 | sketchybar --update 41 | 42 | echo "sketchybar configuration loaded.." 43 | -------------------------------------------------------------------------------- /sketchybar/items/cpu.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | sketchybar --add item cpu.top right \ 4 | --set cpu.top label.font="$FONT:Medium:7" \ 5 | label=CPU \ 6 | icon.drawing=off \ 7 | width=0 \ 8 | y_offset=6 \ 9 | background.padding_right=10 \ 10 | \ 11 | --add item cpu.percent right \ 12 | --set cpu.percent label.font="$FONT:Bold:12" \ 13 | label=CPU \ 14 | y_offset=-4 \ 15 | width=40 \ 16 | icon.drawing=off \ 17 | update_freq=2 \ 18 | background.padding_right=10 \ 19 | \ 20 | --add graph cpu.sys right 100 \ 21 | --set cpu.sys width=0 \ 22 | graph.color=$RED \ 23 | graph.fill_color=$RED \ 24 | label.drawing=off \ 25 | icon.drawing=off \ 26 | background.padding_right=10 \ 27 | \ 28 | --add graph cpu.user right 100 \ 29 | --set cpu.user graph.color=$BLUE \ 30 | update_freq=2 \ 31 | label.drawing=off \ 32 | icon.drawing=off \ 33 | background.padding_right=10 \ 34 | script="$PLUGIN_DIR/cpu.sh" 35 | -------------------------------------------------------------------------------- /yabai/yabairc: -------------------------------------------------------------------------------- 1 | # === Load Scripting Additions === 2 | 3 | sudo nvram boot-args=-arm64e_preview_abi 4 | sudo yabai --uninstall-sa 5 | sudo yabai --install-sa 6 | sudo yabai --load-sa 7 | 8 | yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa" 9 | 10 | # === Tiling setting === 11 | 12 | yabai -m config layout bsp 13 | 14 | yabai -m config top_padding 10 15 | yabai -m config bottom_padding 10 16 | yabai -m config left_padding 10 17 | yabai -m config right_padding 10 18 | yabai -m config window_gap 10 19 | 20 | yabai -m config mouse_follows_focus off 21 | yabai -m config focus_follows_mouse off 22 | 23 | yabai -m config window_topmost off 24 | yabai -m config window_opacity off 25 | yabai -m config window_shadow float 26 | 27 | yabai -m config window_border on 28 | yabai -m config window_border_width 4 29 | yabai -m config active_window_border_color 0xE032CD32 30 | yabai -m config insert_feedback_color 0x00010101 31 | yabai -m config normal_window_border_color 0xE02d74da 32 | yabai -m config active_window_opacity 1.0 33 | yabai -m config normal_window_opacity 0.90 34 | yabai -m config split_ratio 0.50 35 | 36 | yabai -m config auto_balance off 37 | 38 | yabai -m config mouse_modifier fn 39 | yabai -m config mouse_action1 move 40 | yabai -m config mouse_action2 resize 41 | yabai -m config external_bar all:30:0 42 | # ===== Rules ================================== 43 | 44 | yabai -m rule --add label="Finder" app="^Finder$" title="(Co(py|nnect)|Move|Info|Pref)" manage=off 45 | yabai -m rule --add label="Safari" app="^Safari$" title="^(General|(Tab|Password|Website|Extension)s|AutoFill|Se(arch|curity)|Privacy|Advance)$" manage=off 46 | yabai -m rule --add label="macfeh" app="^macfeh$" manage=off 47 | yabai -m rule --add label="System Preferences" app="^System Preferences$" title=".*" manage=off 48 | yabai -m rule --add label="App Store" app="^App Store$" manage=off 49 | yabai -m rule --add label="Activity Monitor" app="^Activity Monitor$" manage=off 50 | yabai -m rule --add label="KeePassXC" app="^KeePassXC$" manage=off 51 | yabai -m rule --add label="Calculator" app="^Calculator$" manage=off 52 | yabai -m rule --add label="Dictionary" app="^Dictionary$" manage=off 53 | yabai -m rule --add label="mpv" app="^mpv$" manage=off 54 | yabai -m rule --add label="Software Update" title="Software Update" manage=off 55 | yabai -m rule --add label="About This Mac" app="System Information" title="About This Mac" manage=off 56 | yabai -m rule --add label="HHKB" app="HHKB Keymap Tool" title="About This Mac" manage=off 57 | 58 | # ===== Signals ================================ 59 | 60 | ## Sample signal trigger that runs a command 61 | # yabai -m signal --add event=window_title_changed action="${ubersicht_spaces_refresh_command}" 62 | # ubersicht_spaces_refresh_command="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh dwidget id \"simple-bar\"'" 63 | 64 | echo "yabai: configuration loaded...\\n" 65 | 66 | -------------------------------------------------------------------------------- /skhd/skhdrc: -------------------------------------------------------------------------------- 1 | # === Session defaults === 2 | # reset border color in default mode 3 | :: default : yabai -m config active_window_border_color 0xE032CD32 4 | # kickstart yabai 5 | hyper - y : launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai" 6 | # lock screen immediately 7 | cmd - escape : pmset displaysleepnow 8 | # logout 9 | cmd + shift - e : osascript -e 'tell app "System Events" to log out' 10 | # power down 11 | cmd + shift - p : osascript -e 'tell app "System Events" to shut down' 12 | # reboot 13 | cmd + shift - b : osascript -e 'tell app "System Events" to restart' 14 | # sleep 15 | cmd + shift - s : osascript -e 'tell application "System Events" to sleep' 16 | 17 | # === launch commands === 18 | # open kitty terminal, blazingly fast compared to iTerm/Hyper 19 | cmd - return : /Applications/kitty.app/Contents/MacOS/kitty --single-instance -d ~ 20 | # open firefox 21 | cmd + shift - return : open -na /Applications/Firefox.app 22 | # open vscode 23 | cmd + ctrl - return : open -na /Applications/Visual\ Studio\ Code.app/ 24 | # open finder 25 | cmd - n : open `pwd` 26 | # open system preferences 27 | hyper - c : open "x-apple.systempreferences:" 28 | # === Resize Mode === 29 | # Set resize border color 30 | :: resize @ : yabai -m config active_window_border_color 0xFFFF00FF 31 | # toggle resize mode 32 | resize < hyper - r ; default 33 | default < hyper - r ; resize 34 | # resize commands 35 | resize < left : yabai -m window --resize left:-50:0; \ 36 | yabai -m window --resize right:-50:0 37 | resize < down : yabai -m window --resize bottom:0:50; \ 38 | yabai -m window --resize top:0:50 39 | resize < up : yabai -m window --resize top:0:-50; \ 40 | yabai -m window --resize bottom:0:-50 41 | resize < right : yabai -m window --resize right:50:0; \ 42 | yabai -m window --resize left:50:0 43 | 44 | # === Navigation === 45 | # window focus 46 | cmd - h : yabai -m window --focus west 47 | cmd - j : yabai -m window --focus south 48 | cmd - k : yabai -m window --focus north 49 | cmd - l : yabai -m window --focus east 50 | 51 | cmd - left : yabai -m window --focus west 52 | cmd - down : yabai -m window --focus south 53 | cmd - up : yabai -m window --focus north 54 | cmd - right : yabai -m window --focus east 55 | 56 | # space focus and creation 57 | cmd - tab : yabai -m space --focus next || yabai -m space --focus first 58 | cmd + shift - tab : yabai -m space --focus prev || yabai -m space --focus last 59 | cmd - x : yabai -m space --focus recent 60 | cmd - 1 : yabai -m space --focus 1 61 | cmd - 2 : yabai -m space --focus 2 62 | cmd - 3 : yabai -m space --focus 3 63 | cmd - 4 : yabai -m space --focus 4 64 | cmd - 5 : yabai -m space --focus 5 65 | cmd - 6 : yabai -m space --focus 6 66 | cmd - 7 : yabai -m space --focus 7 67 | cmd - 8 : yabai -m space --focus 8 68 | cmd - 9 : yabai -m space --focus 9 69 | 70 | # create a space 71 | hyper - n : yabai -m space --create; \ 72 | sketchybar --update 73 | 74 | # destroy current space 75 | hyper - d : yabai -m space --destroy 76 | 77 | # === Modification === 78 | # Move window relatively 79 | cmd + shift - h : yabai -m window --warp west 80 | cmd + shift - j : yabai -m window --warp south 81 | cmd + shift - k : yabai -m window --warp north 82 | cmd + shift - l : yabai -m window --warp east 83 | 84 | cmd + shift - left : yabai -m window --warp west 85 | cmd + shift - down : yabai -m window --warp south 86 | cmd + shift - up : yabai -m window --warp north 87 | cmd + shift - right : yabai -m window --warp east 88 | 89 | # send window to space 90 | cmd + shift - x : yabai -m window --space recent 91 | cmd + shift - 1 : yabai -m window --space 1 92 | cmd + shift - 2 : yabai -m window --space 2 93 | cmd + shift - 3 : yabai -m window --space 3 94 | cmd + shift - 4 : yabai -m window --space 4 95 | cmd + shift - 5 : yabai -m window --space 5 96 | cmd + shift - 6 : yabai -m window --space 6 97 | cmd + shift - 7 : yabai -m window --space 7 98 | cmd + shift - 8 : yabai -m window --space 8 99 | 100 | # Move focus + window to space 101 | cmd + ctrl - m : yabai -m window --space last; yabai -m space --focus last 102 | cmd + ctrl - p : yabai -m window --space prev; yabai -m space --focus prev 103 | cmd + ctrl - n : yabai -m window --space next; yabai -m space --focus next 104 | cmd + ctrl - 1 : yabai -m window --space 1; yabai -m space --focus 1 105 | cmd + ctrl - 2 : yabai -m window --space 2; yabai -m space --focus 2 106 | cmd + ctrl - 3 : yabai -m window --space 3; yabai -m space --focus 3 107 | cmd + ctrl - 4 : yabai -m window --space 4; yabai -m space --focus 4 108 | 109 | # Equalize size of windows 110 | hyper - e : yabai -m space --balance 111 | 112 | # Enable / Disable gaps in current workspace 113 | lcmd - i : yabai -m space --toggle padding; \ 114 | yabai -m space --toggle gap; \ 115 | yabai -m config external_bar off:0:0; \ 116 | sketchybar --bar hidden=true; 117 | 118 | rcmd - i : yabai -m space --toggle padding; \ 119 | yabai -m space --toggle gap; \ 120 | yabai -m config external_bar all:30:0;\ 121 | sketchybar --bar hidden=false; 122 | 123 | # Rotate windows clockwise and anticlockwise 124 | alt - r : yabai -m space --rotate 270 125 | shift + alt - r : yabai -m space --rotate 90 126 | 127 | # Rotate on X and Y Axis 128 | shift + alt - x : yabai -m space --mirror x-axis 129 | shift + alt - y : yabai -m space --mirror y-axis 130 | 131 | # Set insertion point for focused container 132 | shift + lctrl + alt - h : yabai -m window --insert west 133 | shift + lctrl + alt - j : yabai -m window --insert south 134 | shift + lctrl + alt - k : yabai -m window --insert north 135 | shift + lctrl + alt - l : yabai -m window --insert east 136 | 137 | # Float / Unfloat window 138 | shift + alt - space : \ 139 | yabai -m window --toggle float; \ 140 | yabai -m window --toggle border 141 | 142 | # Make window native fullscreen 143 | alt - f : yabai -m window --toggle zoom-fullscreen 144 | shift + alt - f : yabai -m window --toggle native-fullscreen 145 | -------------------------------------------------------------------------------- /karabiner/automatic_backups/karabiner_20220819.json: -------------------------------------------------------------------------------- 1 | { 2 | "global": { 3 | "check_for_updates_on_startup": true, 4 | "show_in_menu_bar": true, 5 | "show_profile_name_in_menu_bar": false, 6 | "unsafe_ui": false 7 | }, 8 | "profiles": [ 9 | { 10 | "complex_modifications": { 11 | "parameters": { 12 | "basic.simultaneous_threshold_milliseconds": 50, 13 | "basic.to_delayed_action_delay_milliseconds": 500, 14 | "basic.to_if_alone_timeout_milliseconds": 1000, 15 | "basic.to_if_held_down_threshold_milliseconds": 500, 16 | "mouse_motion_to_scroll.speed": 100 17 | }, 18 | "rules": [] 19 | }, 20 | "devices": [ 21 | { 22 | "disable_built_in_keyboard_if_exists": false, 23 | "fn_function_keys": [], 24 | "identifiers": { 25 | "is_keyboard": true, 26 | "is_pointing_device": false, 27 | "product_id": 641, 28 | "vendor_id": 1452 29 | }, 30 | "ignore": false, 31 | "manipulate_caps_lock_led": true, 32 | "simple_modifications": [], 33 | "treat_as_built_in_keyboard": false 34 | }, 35 | { 36 | "disable_built_in_keyboard_if_exists": false, 37 | "fn_function_keys": [], 38 | "identifiers": { 39 | "is_keyboard": false, 40 | "is_pointing_device": true, 41 | "product_id": 641, 42 | "vendor_id": 1452 43 | }, 44 | "ignore": true, 45 | "manipulate_caps_lock_led": false, 46 | "simple_modifications": [], 47 | "treat_as_built_in_keyboard": false 48 | }, 49 | { 50 | "disable_built_in_keyboard_if_exists": false, 51 | "fn_function_keys": [], 52 | "identifiers": { 53 | "is_keyboard": true, 54 | "is_pointing_device": false, 55 | "product_id": 33, 56 | "vendor_id": 1278 57 | }, 58 | "ignore": false, 59 | "manipulate_caps_lock_led": true, 60 | "simple_modifications": [], 61 | "treat_as_built_in_keyboard": false 62 | }, 63 | { 64 | "disable_built_in_keyboard_if_exists": false, 65 | "fn_function_keys": [], 66 | "identifiers": { 67 | "is_keyboard": true, 68 | "is_pointing_device": true, 69 | "product_id": 45091, 70 | "vendor_id": 1133 71 | }, 72 | "ignore": true, 73 | "manipulate_caps_lock_led": true, 74 | "simple_modifications": [], 75 | "treat_as_built_in_keyboard": false 76 | } 77 | ], 78 | "fn_function_keys": [ 79 | { 80 | "from": { 81 | "key_code": "f1" 82 | }, 83 | "to": [ 84 | { 85 | "consumer_key_code": "display_brightness_decrement" 86 | } 87 | ] 88 | }, 89 | { 90 | "from": { 91 | "key_code": "f2" 92 | }, 93 | "to": [ 94 | { 95 | "consumer_key_code": "display_brightness_increment" 96 | } 97 | ] 98 | }, 99 | { 100 | "from": { 101 | "key_code": "f3" 102 | }, 103 | "to": [ 104 | { 105 | "apple_vendor_keyboard_key_code": "mission_control" 106 | } 107 | ] 108 | }, 109 | { 110 | "from": { 111 | "key_code": "f4" 112 | }, 113 | "to": [ 114 | { 115 | "apple_vendor_keyboard_key_code": "spotlight" 116 | } 117 | ] 118 | }, 119 | { 120 | "from": { 121 | "key_code": "f5" 122 | }, 123 | "to": [ 124 | { 125 | "consumer_key_code": "dictation" 126 | } 127 | ] 128 | }, 129 | { 130 | "from": { 131 | "key_code": "f6" 132 | }, 133 | "to": [ 134 | { 135 | "key_code": "f6" 136 | } 137 | ] 138 | }, 139 | { 140 | "from": { 141 | "key_code": "f7" 142 | }, 143 | "to": [ 144 | { 145 | "consumer_key_code": "rewind" 146 | } 147 | ] 148 | }, 149 | { 150 | "from": { 151 | "key_code": "f8" 152 | }, 153 | "to": [ 154 | { 155 | "consumer_key_code": "play_or_pause" 156 | } 157 | ] 158 | }, 159 | { 160 | "from": { 161 | "key_code": "f9" 162 | }, 163 | "to": [ 164 | { 165 | "consumer_key_code": "fast_forward" 166 | } 167 | ] 168 | }, 169 | { 170 | "from": { 171 | "key_code": "f10" 172 | }, 173 | "to": [ 174 | { 175 | "consumer_key_code": "mute" 176 | } 177 | ] 178 | }, 179 | { 180 | "from": { 181 | "key_code": "f11" 182 | }, 183 | "to": [ 184 | { 185 | "consumer_key_code": "volume_decrement" 186 | } 187 | ] 188 | }, 189 | { 190 | "from": { 191 | "key_code": "f12" 192 | }, 193 | "to": [ 194 | { 195 | "consumer_key_code": "volume_increment" 196 | } 197 | ] 198 | } 199 | ], 200 | "name": "Default profile", 201 | "parameters": { 202 | "delay_milliseconds_before_open_device": 1000 203 | }, 204 | "selected": true, 205 | "simple_modifications": [], 206 | "virtual_hid_keyboard": { 207 | "country_code": 0, 208 | "indicate_sticky_modifier_keys_state": true, 209 | "mouse_key_xy_scale": 100 210 | } 211 | } 212 | ] 213 | } -------------------------------------------------------------------------------- /karabiner/automatic_backups/karabiner_20220817.json: -------------------------------------------------------------------------------- 1 | { 2 | "global": { 3 | "check_for_updates_on_startup": true, 4 | "show_in_menu_bar": true, 5 | "show_profile_name_in_menu_bar": false, 6 | "unsafe_ui": false 7 | }, 8 | "profiles": [ 9 | { 10 | "complex_modifications": { 11 | "parameters": { 12 | "basic.simultaneous_threshold_milliseconds": 50, 13 | "basic.to_delayed_action_delay_milliseconds": 500, 14 | "basic.to_if_alone_timeout_milliseconds": 1000, 15 | "basic.to_if_held_down_threshold_milliseconds": 500, 16 | "mouse_motion_to_scroll.speed": 100 17 | }, 18 | "rules": [] 19 | }, 20 | "devices": [ 21 | { 22 | "disable_built_in_keyboard_if_exists": false, 23 | "fn_function_keys": [], 24 | "identifiers": { 25 | "is_keyboard": true, 26 | "is_pointing_device": false, 27 | "product_id": 641, 28 | "vendor_id": 1452 29 | }, 30 | "ignore": false, 31 | "manipulate_caps_lock_led": true, 32 | "simple_modifications": [], 33 | "treat_as_built_in_keyboard": false 34 | }, 35 | { 36 | "disable_built_in_keyboard_if_exists": false, 37 | "fn_function_keys": [], 38 | "identifiers": { 39 | "is_keyboard": false, 40 | "is_pointing_device": true, 41 | "product_id": 641, 42 | "vendor_id": 1452 43 | }, 44 | "ignore": true, 45 | "manipulate_caps_lock_led": false, 46 | "simple_modifications": [], 47 | "treat_as_built_in_keyboard": false 48 | }, 49 | { 50 | "disable_built_in_keyboard_if_exists": false, 51 | "fn_function_keys": [], 52 | "identifiers": { 53 | "is_keyboard": true, 54 | "is_pointing_device": false, 55 | "product_id": 33, 56 | "vendor_id": 1278 57 | }, 58 | "ignore": false, 59 | "manipulate_caps_lock_led": false, 60 | "simple_modifications": [], 61 | "treat_as_built_in_keyboard": false 62 | }, 63 | { 64 | "disable_built_in_keyboard_if_exists": false, 65 | "fn_function_keys": [], 66 | "identifiers": { 67 | "is_keyboard": true, 68 | "is_pointing_device": true, 69 | "product_id": 45091, 70 | "vendor_id": 1133 71 | }, 72 | "ignore": true, 73 | "manipulate_caps_lock_led": true, 74 | "simple_modifications": [], 75 | "treat_as_built_in_keyboard": false 76 | } 77 | ], 78 | "fn_function_keys": [ 79 | { 80 | "from": { 81 | "key_code": "f1" 82 | }, 83 | "to": [ 84 | { 85 | "consumer_key_code": "display_brightness_decrement" 86 | } 87 | ] 88 | }, 89 | { 90 | "from": { 91 | "key_code": "f2" 92 | }, 93 | "to": [ 94 | { 95 | "consumer_key_code": "display_brightness_increment" 96 | } 97 | ] 98 | }, 99 | { 100 | "from": { 101 | "key_code": "f3" 102 | }, 103 | "to": [ 104 | { 105 | "apple_vendor_keyboard_key_code": "mission_control" 106 | } 107 | ] 108 | }, 109 | { 110 | "from": { 111 | "key_code": "f4" 112 | }, 113 | "to": [ 114 | { 115 | "apple_vendor_keyboard_key_code": "spotlight" 116 | } 117 | ] 118 | }, 119 | { 120 | "from": { 121 | "key_code": "f5" 122 | }, 123 | "to": [ 124 | { 125 | "consumer_key_code": "dictation" 126 | } 127 | ] 128 | }, 129 | { 130 | "from": { 131 | "key_code": "f6" 132 | }, 133 | "to": [ 134 | { 135 | "key_code": "f6" 136 | } 137 | ] 138 | }, 139 | { 140 | "from": { 141 | "key_code": "f7" 142 | }, 143 | "to": [ 144 | { 145 | "consumer_key_code": "rewind" 146 | } 147 | ] 148 | }, 149 | { 150 | "from": { 151 | "key_code": "f8" 152 | }, 153 | "to": [ 154 | { 155 | "consumer_key_code": "play_or_pause" 156 | } 157 | ] 158 | }, 159 | { 160 | "from": { 161 | "key_code": "f9" 162 | }, 163 | "to": [ 164 | { 165 | "consumer_key_code": "fast_forward" 166 | } 167 | ] 168 | }, 169 | { 170 | "from": { 171 | "key_code": "f10" 172 | }, 173 | "to": [ 174 | { 175 | "consumer_key_code": "mute" 176 | } 177 | ] 178 | }, 179 | { 180 | "from": { 181 | "key_code": "f11" 182 | }, 183 | "to": [ 184 | { 185 | "consumer_key_code": "volume_decrement" 186 | } 187 | ] 188 | }, 189 | { 190 | "from": { 191 | "key_code": "f12" 192 | }, 193 | "to": [ 194 | { 195 | "consumer_key_code": "volume_increment" 196 | } 197 | ] 198 | } 199 | ], 200 | "name": "Default profile", 201 | "parameters": { 202 | "delay_milliseconds_before_open_device": 1000 203 | }, 204 | "selected": true, 205 | "simple_modifications": [], 206 | "virtual_hid_keyboard": { 207 | "country_code": 0, 208 | "indicate_sticky_modifier_keys_state": true, 209 | "mouse_key_xy_scale": 100 210 | } 211 | } 212 | ] 213 | } -------------------------------------------------------------------------------- /karabiner/karabiner.json: -------------------------------------------------------------------------------- 1 | { 2 | "global": { 3 | "check_for_updates_on_startup": true, 4 | "show_in_menu_bar": true, 5 | "show_profile_name_in_menu_bar": false, 6 | "unsafe_ui": false 7 | }, 8 | "profiles": [ 9 | { 10 | "complex_modifications": { 11 | "parameters": { 12 | "basic.simultaneous_threshold_milliseconds": 50, 13 | "basic.to_delayed_action_delay_milliseconds": 500, 14 | "basic.to_if_alone_timeout_milliseconds": 1000, 15 | "basic.to_if_held_down_threshold_milliseconds": 500, 16 | "mouse_motion_to_scroll.speed": 100 17 | }, 18 | "rules": [ 19 | { 20 | "description": "Right Option Key → Hyper Key (⌃⌥⇧⌘)", 21 | "manipulators": [ 22 | { 23 | "from": { 24 | "key_code": "right_option", 25 | "modifiers": { 26 | "optional": [ 27 | "any" 28 | ] 29 | } 30 | }, 31 | "to": [ 32 | { 33 | "key_code": "left_shift", 34 | "modifiers": [ 35 | "left_command", 36 | "left_control", 37 | "left_option" 38 | ] 39 | } 40 | ], 41 | "type": "basic" 42 | } 43 | ] 44 | } 45 | ] 46 | }, 47 | "devices": [ 48 | { 49 | "disable_built_in_keyboard_if_exists": false, 50 | "fn_function_keys": [], 51 | "identifiers": { 52 | "is_keyboard": true, 53 | "is_pointing_device": false, 54 | "product_id": 641, 55 | "vendor_id": 1452 56 | }, 57 | "ignore": false, 58 | "manipulate_caps_lock_led": true, 59 | "simple_modifications": [], 60 | "treat_as_built_in_keyboard": false 61 | }, 62 | { 63 | "disable_built_in_keyboard_if_exists": false, 64 | "fn_function_keys": [], 65 | "identifiers": { 66 | "is_keyboard": false, 67 | "is_pointing_device": true, 68 | "product_id": 641, 69 | "vendor_id": 1452 70 | }, 71 | "ignore": true, 72 | "manipulate_caps_lock_led": false, 73 | "simple_modifications": [], 74 | "treat_as_built_in_keyboard": false 75 | }, 76 | { 77 | "disable_built_in_keyboard_if_exists": false, 78 | "fn_function_keys": [], 79 | "identifiers": { 80 | "is_keyboard": true, 81 | "is_pointing_device": false, 82 | "product_id": 33, 83 | "vendor_id": 1278 84 | }, 85 | "ignore": false, 86 | "manipulate_caps_lock_led": true, 87 | "simple_modifications": [], 88 | "treat_as_built_in_keyboard": false 89 | }, 90 | { 91 | "disable_built_in_keyboard_if_exists": false, 92 | "fn_function_keys": [], 93 | "identifiers": { 94 | "is_keyboard": true, 95 | "is_pointing_device": true, 96 | "product_id": 45091, 97 | "vendor_id": 1133 98 | }, 99 | "ignore": true, 100 | "manipulate_caps_lock_led": true, 101 | "simple_modifications": [], 102 | "treat_as_built_in_keyboard": false 103 | } 104 | ], 105 | "fn_function_keys": [ 106 | { 107 | "from": { 108 | "key_code": "f1" 109 | }, 110 | "to": [ 111 | { 112 | "consumer_key_code": "display_brightness_decrement" 113 | } 114 | ] 115 | }, 116 | { 117 | "from": { 118 | "key_code": "f2" 119 | }, 120 | "to": [ 121 | { 122 | "consumer_key_code": "display_brightness_increment" 123 | } 124 | ] 125 | }, 126 | { 127 | "from": { 128 | "key_code": "f3" 129 | }, 130 | "to": [ 131 | { 132 | "apple_vendor_keyboard_key_code": "mission_control" 133 | } 134 | ] 135 | }, 136 | { 137 | "from": { 138 | "key_code": "f4" 139 | }, 140 | "to": [ 141 | { 142 | "apple_vendor_keyboard_key_code": "spotlight" 143 | } 144 | ] 145 | }, 146 | { 147 | "from": { 148 | "key_code": "f5" 149 | }, 150 | "to": [ 151 | { 152 | "consumer_key_code": "dictation" 153 | } 154 | ] 155 | }, 156 | { 157 | "from": { 158 | "key_code": "f6" 159 | }, 160 | "to": [ 161 | { 162 | "key_code": "f6" 163 | } 164 | ] 165 | }, 166 | { 167 | "from": { 168 | "key_code": "f7" 169 | }, 170 | "to": [ 171 | { 172 | "consumer_key_code": "rewind" 173 | } 174 | ] 175 | }, 176 | { 177 | "from": { 178 | "key_code": "f8" 179 | }, 180 | "to": [ 181 | { 182 | "consumer_key_code": "play_or_pause" 183 | } 184 | ] 185 | }, 186 | { 187 | "from": { 188 | "key_code": "f9" 189 | }, 190 | "to": [ 191 | { 192 | "consumer_key_code": "fast_forward" 193 | } 194 | ] 195 | }, 196 | { 197 | "from": { 198 | "key_code": "f10" 199 | }, 200 | "to": [ 201 | { 202 | "consumer_key_code": "mute" 203 | } 204 | ] 205 | }, 206 | { 207 | "from": { 208 | "key_code": "f11" 209 | }, 210 | "to": [ 211 | { 212 | "consumer_key_code": "volume_decrement" 213 | } 214 | ] 215 | }, 216 | { 217 | "from": { 218 | "key_code": "f12" 219 | }, 220 | "to": [ 221 | { 222 | "consumer_key_code": "volume_increment" 223 | } 224 | ] 225 | } 226 | ], 227 | "name": "Default profile", 228 | "parameters": { 229 | "delay_milliseconds_before_open_device": 1000 230 | }, 231 | "selected": true, 232 | "simple_modifications": [], 233 | "virtual_hid_keyboard": { 234 | "country_code": 0, 235 | "indicate_sticky_modifier_keys_state": true, 236 | "mouse_key_xy_scale": 100 237 | } 238 | } 239 | ] 240 | } -------------------------------------------------------------------------------- /kitty/kitty.conf.bak: -------------------------------------------------------------------------------- 1 | # vim:fileencoding=utf-8:foldmethod=marker 2 | 3 | #: Fonts {{{ 4 | 5 | #: kitty has very powerful font management. You can configure 6 | #: individual font faces and even specify special fonts for particular 7 | #: characters. 8 | 9 | # font_family Hasklug Nerd Font Mono 10 | # bold_font Hasklug Nerd Font Mono 11 | # italic_font Hasklug Nerd Font Mono 12 | # bold_italic_font Hasklug Nerd Font Mono 13 | 14 | #: You can specify different fonts for the bold/italic/bold-italic 15 | #: variants. To get a full list of supported fonts use the `kitty 16 | #: +list-fonts` command. By default they are derived automatically, by 17 | #: the OSes font system. When bold_font or bold_italic_font is set to 18 | #: auto on macOS, the priority of bold fonts is semi-bold, bold, 19 | #: heavy. Setting them manually is useful for font families that have 20 | #: many weight variants like Book, Medium, Thick, etc. For example:: 21 | 22 | #: font_family Operator Mono Book 23 | #: bold_font Operator Mono Medium 24 | #: italic_font Operator Mono Book Italic 25 | #: bold_italic_font Operator Mono Medium Italic 26 | 27 | # font_size 11.0 28 | 29 | #: Font size (in pts) 30 | 31 | # force_ltr no 32 | 33 | #: kitty does not support BIDI (bidirectional text), however, for RTL 34 | #: scripts, words are automatically displayed in RTL. That is to say, 35 | #: in an RTL script, the words "HELLO WORLD" display in kitty as 36 | #: "WORLD HELLO", and if you try to select a substring of an RTL- 37 | #: shaped string, you will get the character that would be there had 38 | #: the the string been LTR. For example, assuming the Hebrew word 39 | #: ירושלים, selecting the character that on the screen appears to be ם 40 | #: actually writes into the selection buffer the character י. kitty's 41 | #: default behavior is useful in conjunction with a filter to reverse 42 | #: the word order, however, if you wish to manipulate RTL glyphs, it 43 | #: can be very challenging to work with, so this option is provided to 44 | #: turn it off. Furthermore, this option can be used with the command 45 | #: line program GNU FriBidi 46 | #: to get BIDI 47 | #: support, because it will force kitty to always treat the text as 48 | #: LTR, which FriBidi expects for terminals. 49 | 50 | # adjust_line_height 0 51 | # adjust_column_width 0 52 | 53 | #: Change the size of each character cell kitty renders. You can use 54 | #: either numbers, which are interpreted as pixels or percentages 55 | #: (number followed by %), which are interpreted as percentages of the 56 | #: unmodified values. You can use negative pixels or percentages less 57 | #: than 100% to reduce sizes (but this might cause rendering 58 | #: artifacts). 59 | 60 | # adjust_baseline 0 61 | 62 | #: Adjust the vertical alignment of text (the height in the cell at 63 | #: which text is positioned). You can use either numbers, which are 64 | #: interpreted as pixels or percentages (number followed by %), which 65 | #: are interpreted as the percentage of the line height. A positive 66 | #: value moves the baseline up, and a negative value moves them down. 67 | #: The underline and strikethrough positions are adjusted accordingly. 68 | 69 | # symbol_map 70 | 71 | #: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols 72 | 73 | #: Map the specified Unicode codepoints to a particular font. Useful 74 | #: if you need special rendering for some symbols, such as for 75 | #: Powerline. Avoids the need for patched fonts. Each Unicode code 76 | #: point is specified in the form `U+`. You 77 | #: can specify multiple code points, separated by commas and ranges 78 | #: separated by hyphens. This option can be specified multiple times. 79 | #: The syntax is:: 80 | 81 | #: symbol_map codepoints Font Family Name 82 | 83 | # narrow_symbols 84 | 85 | #: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1 86 | 87 | #: Usually, for Private Use Unicode characters and some symbol/dingbat 88 | #: characters, if the character is followed by one or more spaces, 89 | #: kitty will use those extra cells to render the character larger, if 90 | #: the character in the font has a wide aspect ratio. Using this 91 | #: option you can force kitty to restrict the specified code points to 92 | #: render in the specified number of cells (defaulting to one cell). 93 | #: This option can be specified multiple times. The syntax is:: 94 | 95 | #: narrow_symbols codepoints [optionally the number of cells] 96 | 97 | # disable_ligatures never 98 | 99 | #: Choose how you want to handle multi-character ligatures. The 100 | #: default is to always render them. You can tell kitty to not render 101 | #: them when the cursor is over them by using cursor to make editing 102 | #: easier, or have kitty never render them at all by using always, if 103 | #: you don't like them. The ligature strategy can be set per-window 104 | #: either using the kitty remote control facility or by defining 105 | #: shortcuts for it in kitty.conf, for example:: 106 | 107 | #: map alt+1 disable_ligatures_in active always 108 | #: map alt+2 disable_ligatures_in all never 109 | #: map alt+3 disable_ligatures_in tab cursor 110 | 111 | #: Note that this refers to programming ligatures, typically 112 | #: implemented using the calt OpenType feature. For disabling general 113 | #: ligatures, use the font_features option. 114 | 115 | # font_features 116 | 117 | #: E.g. font_features none 118 | 119 | #: Choose exactly which OpenType features to enable or disable. This 120 | #: is useful as some fonts might have features worthwhile in a 121 | #: terminal. For example, Fira Code includes a discretionary feature, 122 | #: zero, which in that font changes the appearance of the zero (0), to 123 | #: make it more easily distinguishable from Ø. Fira Code also includes 124 | #: other discretionary features known as Stylistic Sets which have the 125 | #: tags ss01 through ss20. 126 | 127 | #: For the exact syntax to use for individual features, see the 128 | #: HarfBuzz documentation . 130 | 131 | #: Note that this code is indexed by PostScript name, and not the font 132 | #: family. This allows you to define very precise feature settings; 133 | #: e.g. you can disable a feature in the italic font but not in the 134 | #: regular font. 135 | 136 | #: On Linux, font features are first read from the FontConfig database 137 | #: and then this option is applied, so they can be configured in a 138 | #: single, central place. 139 | 140 | #: To get the PostScript name for a font, use `kitty +list-fonts 141 | #: --psnames`: 142 | 143 | #: .. code-block:: sh 144 | 145 | #: $ kitty +list-fonts --psnames | grep Fira 146 | #: Fira Code 147 | #: Fira Code Bold (FiraCode-Bold) 148 | #: Fira Code Light (FiraCode-Light) 149 | #: Fira Code Medium (FiraCode-Medium) 150 | #: Fira Code Regular (FiraCode-Regular) 151 | #: Fira Code Retina (FiraCode-Retina) 152 | 153 | #: The part in brackets is the PostScript name. 154 | 155 | #: Enable alternate zero and oldstyle numerals:: 156 | 157 | #: font_features FiraCode-Retina +zero +onum 158 | 159 | #: Enable only alternate zero in the bold font:: 160 | 161 | #: font_features FiraCode-Bold +zero 162 | 163 | #: Disable the normal ligatures, but keep the calt feature which (in 164 | #: this font) breaks up monotony:: 165 | 166 | #: font_features TT2020StyleB-Regular -liga +calt 167 | 168 | #: In conjunction with force_ltr, you may want to disable Arabic 169 | #: shaping entirely, and only look at their isolated forms if they 170 | #: show up in a document. You can do this with e.g.:: 171 | 172 | #: font_features UnifontMedium +isol -medi -fina -init 173 | 174 | # box_drawing_scale 0.001, 1, 1.5, 2 175 | 176 | #: The sizes of the lines used for the box drawing Unicode characters. 177 | #: These values are in pts. They will be scaled by the monitor DPI to 178 | #: arrive at a pixel value. There must be four values corresponding to 179 | #: thin, normal, thick, and very thick lines. 180 | 181 | #: }}} 182 | 183 | #: Cursor customization {{{ 184 | 185 | # cursor #cccccc 186 | 187 | #: Default cursor color. If set to the special value none the cursor 188 | #: will be rendered with a "reverse video" effect. It's color will be 189 | #: the color of the text in the cell it is over and the text will be 190 | #: rendered with the background color of the cell. Note that if the 191 | #: program running in the terminal sets a cursor color, this takes 192 | #: precedence. Also, the cursor colors are modified if the cell 193 | #: background and foreground colors have very low contrast. 194 | 195 | # cursor_text_color #111111 196 | 197 | #: The color of text under the cursor. If you want it rendered with 198 | #: the background color of the cell underneath instead, use the 199 | #: special keyword: background. Note that if cursor is set to none 200 | #: then this option is ignored. 201 | 202 | # cursor_shape block 203 | 204 | #: The cursor shape can be one of block, beam, underline. Note that 205 | #: when reloading the config this will be changed only if the cursor 206 | #: shape has not been set by the program running in the terminal. This 207 | #: sets the default cursor shape, applications running in the terminal 208 | #: can override it. In particular, shell integration 209 | #: in kitty sets 210 | #: the cursor shape to beam at shell prompts. You can avoid this by 211 | #: setting shell_integration to no-cursor. 212 | 213 | # cursor_beam_thickness 1.5 214 | 215 | #: The thickness of the beam cursor (in pts). 216 | 217 | # cursor_underline_thickness 2.0 218 | 219 | #: The thickness of the underline cursor (in pts). 220 | 221 | # cursor_blink_interval -1 222 | 223 | #: The interval to blink the cursor (in seconds). Set to zero to 224 | #: disable blinking. Negative values mean use system default. Note 225 | #: that the minimum interval will be limited to repaint_delay. 226 | 227 | # cursor_stop_blinking_after 15.0 228 | 229 | #: Stop blinking cursor after the specified number of seconds of 230 | #: keyboard inactivity. Set to zero to never stop blinking. 231 | 232 | #: }}} 233 | 234 | #: Scrollback {{{ 235 | 236 | # scrollback_lines 2000 237 | 238 | #: Number of lines of history to keep in memory for scrolling back. 239 | #: Memory is allocated on demand. Negative numbers are (effectively) 240 | #: infinite scrollback. Note that using very large scrollback is not 241 | #: recommended as it can slow down performance of the terminal and 242 | #: also use large amounts of RAM. Instead, consider using 243 | #: scrollback_pager_history_size. Note that on config reload if this 244 | #: is changed it will only affect newly created windows, not existing 245 | #: ones. 246 | 247 | # scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 248 | 249 | #: Program with which to view scrollback in a new window. The 250 | #: scrollback buffer is passed as STDIN to this program. If you change 251 | #: it, make sure the program you use can handle ANSI escape sequences 252 | #: for colors and text formatting. INPUT_LINE_NUMBER in the command 253 | #: line above will be replaced by an integer representing which line 254 | #: should be at the top of the screen. Similarly CURSOR_LINE and 255 | #: CURSOR_COLUMN will be replaced by the current cursor position or 256 | #: set to 0 if there is no cursor, for example, when showing the last 257 | #: command output. 258 | 259 | # scrollback_pager_history_size 0 260 | 261 | #: Separate scrollback history size (in MB), used only for browsing 262 | #: the scrollback buffer with pager. This separate buffer is not 263 | #: available for interactive scrolling but will be piped to the pager 264 | #: program when viewing scrollback buffer in a separate window. The 265 | #: current implementation stores the data in UTF-8, so approximatively 266 | #: 10000 lines per megabyte at 100 chars per line, for pure ASCII, 267 | #: unformatted text. A value of zero or less disables this feature. 268 | #: The maximum allowed size is 4GB. Note that on config reload if this 269 | #: is changed it will only affect newly created windows, not existing 270 | #: ones. 271 | 272 | # scrollback_fill_enlarged_window no 273 | 274 | #: Fill new space with lines from the scrollback buffer after 275 | #: enlarging a window. 276 | 277 | # wheel_scroll_multiplier 5.0 278 | 279 | #: Multiplier for the number of lines scrolled by the mouse wheel. 280 | #: Note that this is only used for low precision scrolling devices, 281 | #: not for high precision scrolling devices on platforms such as macOS 282 | #: and Wayland. Use negative numbers to change scroll direction. See 283 | #: also wheel_scroll_min_lines. 284 | 285 | # wheel_scroll_min_lines 1 286 | 287 | #: The minimum number of lines scrolled by the mouse wheel. The scroll 288 | #: multiplier only takes effect after it 289 | #: reaches this number. Note that this is only used for low precision 290 | #: scrolling devices like wheel mice that scroll by very small amounts 291 | #: when using the wheel. With a negative number, the minimum number of 292 | #: lines will always be added. 293 | 294 | # touch_scroll_multiplier 1.0 295 | 296 | #: Multiplier for the number of lines scrolled by a touchpad. Note 297 | #: that this is only used for high precision scrolling devices on 298 | #: platforms such as macOS and Wayland. Use negative numbers to change 299 | #: scroll direction. 300 | 301 | #: }}} 302 | 303 | #: Mouse {{{ 304 | 305 | # mouse_hide_wait 3.0 306 | 307 | #: Hide mouse cursor after the specified number of seconds of the 308 | #: mouse not being used. Set to zero to disable mouse cursor hiding. 309 | #: Set to a negative value to hide the mouse cursor immediately when 310 | #: typing text. Disabled by default on macOS as getting it to work 311 | #: robustly with the ever-changing sea of bugs that is Cocoa is too 312 | #: much effort. 313 | 314 | # url_color #0087bd 315 | # url_style curly 316 | 317 | #: The color and style for highlighting URLs on mouse-over. url_style 318 | #: can be one of: none, straight, double, curly, dotted, dashed. 319 | 320 | # open_url_with default 321 | 322 | #: The program to open clicked URLs. The special value default means 323 | #: to use the operating system's default URL handler (open on macOS 324 | #: and xdg-open on Linux). 325 | 326 | # url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh 327 | 328 | #: The set of URL prefixes to look for when detecting a URL under the 329 | #: mouse cursor. 330 | 331 | # detect_urls yes 332 | 333 | #: Detect URLs under the mouse. Detected URLs are highlighted with an 334 | #: underline and the mouse cursor becomes a hand over them. Even if 335 | #: this option is disabled, URLs are still clickable. 336 | 337 | # url_excluded_characters 338 | 339 | #: Additional characters to be disallowed from URLs, when detecting 340 | #: URLs under the mouse cursor. By default, all characters that are 341 | #: legal in URLs are allowed. 342 | 343 | # copy_on_select no 344 | 345 | #: Copy to clipboard or a private buffer on select. With this set to 346 | #: clipboard, selecting text with the mouse will cause the text to be 347 | #: copied to clipboard. Useful on platforms such as macOS that do not 348 | #: have the concept of primary selection. You can instead specify a 349 | #: name such as a1 to copy to a private kitty buffer. Map a shortcut 350 | #: with the paste_from_buffer action to paste from this private 351 | #: buffer. For example:: 352 | 353 | #: copy_on_select a1 354 | #: map shift+cmd+v paste_from_buffer a1 355 | 356 | #: Note that copying to the clipboard is a security risk, as all 357 | #: programs, including websites open in your browser can read the 358 | #: contents of the system clipboard. 359 | 360 | # paste_actions quote-urls-at-prompt 361 | 362 | #: A comma separated list of actions to take when pasting text into 363 | #: the terminal. The supported paste actions are: 364 | 365 | #: quote-urls-at-prompt: 366 | #: If the text being pasted is a URL and the cursor is at a shell prompt, 367 | #: automatically quote the URL (needs shell_integration). 368 | #: confirm: 369 | #: Confirm the paste if bracketed paste mode is not active or there is more 370 | #: a large amount of text being pasted. 371 | #: filter: 372 | #: Run the filter_paste() function from the file paste-actions.py in 373 | #: the kitty config directory on the pasted text. The text returned by the 374 | #: function will be actually pasted. 375 | 376 | # strip_trailing_spaces never 377 | 378 | #: Remove spaces at the end of lines when copying to clipboard. A 379 | #: value of smart will do it when using normal selections, but not 380 | #: rectangle selections. A value of always will always do it. 381 | 382 | # select_by_word_characters @-./_~?&=%+# 383 | 384 | #: Characters considered part of a word when double clicking. In 385 | #: addition to these characters any character that is marked as an 386 | #: alphanumeric character in the Unicode database will be matched. 387 | 388 | # select_by_word_characters_forward 389 | 390 | #: Characters considered part of a word when extending the selection 391 | #: forward on double clicking. In addition to these characters any 392 | #: character that is marked as an alphanumeric character in the 393 | #: Unicode database will be matched. 394 | 395 | #: If empty (default) select_by_word_characters will be used for both 396 | #: directions. 397 | 398 | # click_interval -1.0 399 | 400 | #: The interval between successive clicks to detect double/triple 401 | #: clicks (in seconds). Negative numbers will use the system default 402 | #: instead, if available, or fallback to 0.5. 403 | 404 | # focus_follows_mouse no 405 | 406 | #: Set the active window to the window under the mouse when moving the 407 | #: mouse around. 408 | 409 | # pointer_shape_when_grabbed arrow 410 | 411 | #: The shape of the mouse pointer when the program running in the 412 | #: terminal grabs the mouse. Valid values are: arrow, beam and hand. 413 | 414 | # default_pointer_shape beam 415 | 416 | #: The default shape of the mouse pointer. Valid values are: arrow, 417 | #: beam and hand. 418 | 419 | # pointer_shape_when_dragging beam 420 | 421 | #: The default shape of the mouse pointer when dragging across text. 422 | #: Valid values are: arrow, beam and hand. 423 | 424 | #: Mouse actions {{{ 425 | 426 | #: Mouse buttons can be mapped to perform arbitrary actions. The 427 | #: syntax is: 428 | 429 | #: .. code-block:: none 430 | 431 | #: mouse_map button-name event-type modes action 432 | 433 | #: Where button-name is one of left, middle, right, b1 ... b8 with 434 | #: added keyboard modifiers. For example: ctrl+shift+left refers to 435 | #: holding the Ctrl+Shift keys while clicking with the left mouse 436 | #: button. The value b1 ... b8 can be used to refer to up to eight 437 | #: buttons on a mouse. 438 | 439 | #: event-type is one of press, release, doublepress, triplepress, 440 | #: click, doubleclick. modes indicates whether the action is performed 441 | #: when the mouse is grabbed by the program running in the terminal, 442 | #: or not. The values are grabbed or ungrabbed or a comma separated 443 | #: combination of them. grabbed refers to when the program running in 444 | #: the terminal has requested mouse events. Note that the click and 445 | #: double click events have a delay of click_interval to disambiguate 446 | #: from double and triple presses. 447 | 448 | #: You can run kitty with the kitty --debug-input command line option 449 | #: to see mouse events. See the builtin actions below to get a sense 450 | #: of what is possible. 451 | 452 | #: If you want to unmap an action, map it to no_op. For example, to 453 | #: disable opening of URLs with a plain click:: 454 | 455 | #: mouse_map left click ungrabbed no_op 456 | 457 | #: See all the mappable actions including mouse actions here 458 | #: . 459 | 460 | #: .. note:: 461 | #: Once a selection is started, releasing the button that started it will 462 | #: automatically end it and no release event will be dispatched. 463 | 464 | # clear_all_mouse_actions no 465 | 466 | #: Remove all mouse action definitions up to this point. Useful, for 467 | #: instance, to remove the default mouse actions. 468 | 469 | #: Click the link under the mouse or move the cursor 470 | 471 | # mouse_map left click ungrabbed mouse_handle_click selection link prompt 472 | 473 | #:: First check for a selection and if one exists do nothing. Then 474 | #:: check for a link under the mouse cursor and if one exists, click 475 | #:: it. Finally check if the click happened at the current shell 476 | #:: prompt and if so, move the cursor to the click location. Note 477 | #:: that this requires shell integration 478 | #:: to work. 479 | 480 | #: Click the link under the mouse or move the cursor even when grabbed 481 | 482 | # mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt 483 | 484 | #:: Same as above, except that the action is performed even when the 485 | #:: mouse is grabbed by the program running in the terminal. 486 | 487 | #: Click the link under the mouse cursor 488 | 489 | # mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link 490 | 491 | #:: Variant with Ctrl+Shift is present because the simple click based 492 | #:: version has an unavoidable delay of click_interval, to 493 | #:: disambiguate clicks from double clicks. 494 | 495 | #: Discard press event for link click 496 | 497 | # mouse_map ctrl+shift+left press grabbed discard_event 498 | 499 | #:: Prevent this press event from being sent to the program that has 500 | #:: grabbed the mouse, as the corresponding release event is used to 501 | #:: open a URL. 502 | 503 | #: Paste from the primary selection 504 | 505 | # mouse_map middle release ungrabbed paste_from_selection 506 | 507 | #: Start selecting text 508 | 509 | # mouse_map left press ungrabbed mouse_selection normal 510 | 511 | #: Start selecting text in a rectangle 512 | 513 | # mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle 514 | 515 | #: Select a word 516 | 517 | # mouse_map left doublepress ungrabbed mouse_selection word 518 | 519 | #: Select a line 520 | 521 | # mouse_map left triplepress ungrabbed mouse_selection line 522 | 523 | #: Select line from point 524 | 525 | # mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point 526 | 527 | #:: Select from the clicked point to the end of the line. 528 | 529 | #: Extend the current selection 530 | 531 | # mouse_map right press ungrabbed mouse_selection extend 532 | 533 | #:: If you want only the end of the selection to be moved instead of 534 | #:: the nearest boundary, use move-end instead of extend. 535 | 536 | #: Paste from the primary selection even when grabbed 537 | 538 | # mouse_map shift+middle release ungrabbed,grabbed paste_selection 539 | # mouse_map shift+middle press grabbed discard_event 540 | 541 | #: Start selecting text even when grabbed 542 | 543 | # mouse_map shift+left press ungrabbed,grabbed mouse_selection normal 544 | 545 | #: Start selecting text in a rectangle even when grabbed 546 | 547 | # mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle 548 | 549 | #: Select a word even when grabbed 550 | 551 | # mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word 552 | 553 | #: Select a line even when grabbed 554 | 555 | # mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line 556 | 557 | #: Select line from point even when grabbed 558 | 559 | # mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point 560 | 561 | #:: Select from the clicked point to the end of the line even when 562 | #:: grabbed. 563 | 564 | #: Extend the current selection even when grabbed 565 | 566 | # mouse_map shift+right press ungrabbed,grabbed mouse_selection extend 567 | 568 | #: Show clicked command output in pager 569 | 570 | # mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output 571 | 572 | #:: Requires shell integration 573 | #:: to work. 574 | 575 | #: }}} 576 | 577 | #: }}} 578 | 579 | #: Performance tuning {{{ 580 | 581 | # repaint_delay 10 582 | 583 | #: Delay between screen updates (in milliseconds). Decreasing it, 584 | #: increases frames-per-second (FPS) at the cost of more CPU usage. 585 | #: The default value yields ~100 FPS which is more than sufficient for 586 | #: most uses. Note that to actually achieve 100 FPS, you have to 587 | #: either set sync_to_monitor to no or use a monitor with a high 588 | #: refresh rate. Also, to minimize latency when there is pending input 589 | #: to be processed, this option is ignored. 590 | 591 | # input_delay 3 592 | 593 | #: Delay before input from the program running in the terminal is 594 | #: processed (in milliseconds). Note that decreasing it will increase 595 | #: responsiveness, but also increase CPU usage and might cause flicker 596 | #: in full screen programs that redraw the entire screen on each loop, 597 | #: because kitty is so fast that partial screen updates will be drawn. 598 | 599 | # sync_to_monitor yes 600 | 601 | #: Sync screen updates to the refresh rate of the monitor. This 602 | #: prevents screen tearing 603 | #: when scrolling. 604 | #: However, it limits the rendering speed to the refresh rate of your 605 | #: monitor. With a very high speed mouse/high keyboard repeat rate, 606 | #: you may notice some slight input latency. If so, set this to no. 607 | 608 | #: }}} 609 | 610 | #: Terminal bell {{{ 611 | 612 | # enable_audio_bell yes 613 | 614 | #: The audio bell. Useful to disable it in environments that require 615 | #: silence. 616 | 617 | # visual_bell_duration 0.0 618 | 619 | #: The visual bell duration (in seconds). Flash the screen when a bell 620 | #: occurs for the specified number of seconds. Set to zero to disable. 621 | 622 | # visual_bell_color none 623 | 624 | #: The color used by visual bell. Set to none will fall back to 625 | #: selection background color. If you feel that the visual bell is too 626 | #: bright, you can set it to a darker color. 627 | 628 | # window_alert_on_bell yes 629 | 630 | #: Request window attention on bell. Makes the dock icon bounce on 631 | #: macOS or the taskbar flash on linux. 632 | 633 | # bell_on_tab "🔔 " 634 | 635 | #: Some text or a Unicode symbol to show on the tab if a window in the 636 | #: tab that does not have focus has a bell. If you want to use leading 637 | #: or trailing spaces, surround the text with quotes. See 638 | #: tab_title_template for how this is rendered. 639 | 640 | #: For backwards compatibility, values of yes, y and true are 641 | #: converted to the default bell symbol and no, n, false and none are 642 | #: converted to the empty string. 643 | 644 | # command_on_bell none 645 | 646 | #: Program to run when a bell occurs. The environment variable 647 | #: KITTY_CHILD_CMDLINE can be used to get the program running in the 648 | #: window in which the bell occurred. 649 | 650 | # bell_path none 651 | 652 | #: Path to a sound file to play as the bell sound. If set to none, the 653 | #: system default bell sound is used. Must be in a format supported by 654 | #: the operating systems sound API, such as WAV or OGA on Linux 655 | #: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound) 656 | 657 | #: }}} 658 | 659 | #: Window layout {{{ 660 | 661 | # remember_window_size yes 662 | # initial_window_width 640 663 | # initial_window_height 400 664 | 665 | #: If enabled, the window size will be remembered so that new 666 | #: instances of kitty will have the same size as the previous 667 | #: instance. If disabled, the window will initially have size 668 | #: configured by initial_window_width/height, in pixels. You can use a 669 | #: suffix of "c" on the width/height values to have them interpreted 670 | #: as number of cells instead of pixels. 671 | 672 | # enabled_layouts * 673 | 674 | #: The enabled window layouts. A comma separated list of layout names. 675 | #: The special value all means all layouts. The first listed layout 676 | #: will be used as the startup layout. Default configuration is all 677 | #: layouts in alphabetical order. For a list of available layouts, see 678 | #: the layouts . 679 | 680 | # window_resize_step_cells 2 681 | # window_resize_step_lines 2 682 | 683 | #: The step size (in units of cell width/cell height) to use when 684 | #: resizing kitty windows in a layout with the shortcut 685 | #: start_resizing_window. The cells value is used for horizontal 686 | #: resizing, and the lines value is used for vertical resizing. 687 | 688 | # window_border_width 0.5pt 689 | 690 | #: The width of window borders. Can be either in pixels (px) or pts 691 | #: (pt). Values in pts will be rounded to the nearest number of pixels 692 | #: based on screen resolution. If not specified, the unit is assumed 693 | #: to be pts. Note that borders are displayed only when more than one 694 | #: window is visible. They are meant to separate multiple windows. 695 | 696 | # draw_minimal_borders yes 697 | 698 | #: Draw only the minimum borders needed. This means that only the 699 | #: borders that separate the inactive window from a neighbor are 700 | #: drawn. Note that setting a non-zero window_margin_width overrides 701 | #: this and causes all borders to be drawn. 702 | 703 | # window_margin_width 0 704 | 705 | #: The window margin (in pts) (blank area outside the border). A 706 | #: single value sets all four sides. Two values set the vertical and 707 | #: horizontal sides. Three values set top, horizontal and bottom. Four 708 | #: values set top, right, bottom and left. 709 | 710 | # single_window_margin_width -1 711 | 712 | #: The window margin to use when only a single window is visible (in 713 | #: pts). Negative values will cause the value of window_margin_width 714 | #: to be used instead. A single value sets all four sides. Two values 715 | #: set the vertical and horizontal sides. Three values set top, 716 | #: horizontal and bottom. Four values set top, right, bottom and left. 717 | 718 | # window_padding_width 0 719 | 720 | #: The window padding (in pts) (blank area between the text and the 721 | #: window border). A single value sets all four sides. Two values set 722 | #: the vertical and horizontal sides. Three values set top, horizontal 723 | #: and bottom. Four values set top, right, bottom and left. 724 | 725 | # placement_strategy center 726 | 727 | #: When the window size is not an exact multiple of the cell size, the 728 | #: cell area of the terminal window will have some extra padding on 729 | #: the sides. You can control how that padding is distributed with 730 | #: this option. Using a value of center means the cell area will be 731 | #: placed centrally. A value of top-left means the padding will be 732 | #: only at the bottom and right edges. 733 | 734 | # active_border_color #00ff00 735 | 736 | #: The color for the border of the active window. Set this to none to 737 | #: not draw borders around the active window. 738 | 739 | # inactive_border_color #cccccc 740 | 741 | #: The color for the border of inactive windows. 742 | 743 | # bell_border_color #ff5a00 744 | 745 | #: The color for the border of inactive windows in which a bell has 746 | #: occurred. 747 | 748 | # inactive_text_alpha 1.0 749 | 750 | #: Fade the text in inactive windows by the specified amount (a number 751 | #: between zero and one, with zero being fully faded). 752 | 753 | # hide_window_decorations no 754 | # titlebar-only yes 755 | 756 | #: Hide the window decorations (title-bar and window borders) with 757 | #: yes. On macOS, titlebar-only can be used to only hide the titlebar. 758 | #: Whether this works and exactly what effect it has depends on the 759 | #: window manager/operating system. Note that the effects of changing 760 | #: this option when reloading config are undefined. 761 | 762 | # window_logo_path none 763 | 764 | #: Path to a logo image. Must be in PNG format. Relative paths are 765 | #: interpreted relative to the kitty config directory. The logo is 766 | #: displayed in a corner of every kitty window. The position is 767 | #: controlled by window_logo_position. Individual windows can be 768 | #: configured to have different logos either using the launch action 769 | #: or the remote control facility. 771 | 772 | # window_logo_position bottom-right 773 | 774 | #: Where to position the window logo in the window. The value can be 775 | #: one of: top-left, top, top-right, left, center, right, bottom-left, 776 | #: bottom, bottom-right. 777 | 778 | # window_logo_alpha 0.5 779 | 780 | #: The amount the logo should be faded into the background. With zero 781 | #: being fully faded and one being fully opaque. 782 | 783 | # resize_debounce_time 0.1 784 | 785 | #: The time to wait before redrawing the screen when a resize event is 786 | #: received (in seconds). On platforms such as macOS, where the 787 | #: operating system sends events corresponding to the start and end of 788 | #: a resize, this number is ignored. 789 | 790 | # resize_draw_strategy static 791 | 792 | #: Choose how kitty draws a window while a resize is in progress. A 793 | #: value of static means draw the current window contents, mostly 794 | #: unchanged. A value of scale means draw the current window contents 795 | #: scaled. A value of blank means draw a blank window. A value of size 796 | #: means show the window size in cells. 797 | 798 | # resize_in_steps no 799 | 800 | #: Resize the OS window in steps as large as the cells, instead of 801 | #: with the usual pixel accuracy. Combined with initial_window_width 802 | #: and initial_window_height in number of cells, this option can be 803 | #: used to keep the margins as small as possible when resizing the OS 804 | #: window. Note that this does not currently work on Wayland. 805 | 806 | # visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 807 | 808 | #: The list of characters for visual window selection. For example, 809 | #: for selecting a window to focus on with focus_visible_window. The 810 | #: value should be a series of unique numbers or alphabets, case 811 | #: insensitive, from the set [0-9A-Z]. Specify your preference as a 812 | #: string of characters. 813 | 814 | # confirm_os_window_close -1 815 | 816 | #: Ask for confirmation when closing an OS window or a tab with at 817 | #: least this number of kitty windows in it by window manager (e.g. 818 | #: clicking the window close button or pressing the operating system 819 | #: shortcut to close windows) or by the close_tab action. A value of 820 | #: zero disables confirmation. This confirmation also applies to 821 | #: requests to quit the entire application (all OS windows, via the 822 | #: quit action). Negative values are converted to positive ones, 823 | #: however, with shell_integration enabled, using negative values 824 | #: means windows sitting at a shell prompt are not counted, only 825 | #: windows where some command is currently running. Note that if you 826 | #: want confirmation when closing individual windows, you can map the 827 | #: close_window_with_confirmation action. 828 | 829 | #: }}} 830 | 831 | #: Tab bar {{{ 832 | 833 | # tab_bar_edge bottom 834 | 835 | #: The edge to show the tab bar on, top or bottom. 836 | 837 | # tab_bar_margin_width 0.0 838 | 839 | #: The margin to the left and right of the tab bar (in pts). 840 | 841 | # tab_bar_margin_height 0.0 0.0 842 | 843 | #: The margin above and below the tab bar (in pts). The first number 844 | #: is the margin between the edge of the OS Window and the tab bar. 845 | #: The second number is the margin between the tab bar and the 846 | #: contents of the current tab. 847 | 848 | # tab_bar_style fade 849 | 850 | #: The tab bar style, can be one of: 851 | 852 | #: fade 853 | #: Each tab's edges fade into the background color. (See also tab_fade) 854 | #: slant 855 | #: Tabs look like the tabs in a physical file. 856 | #: separator 857 | #: Tabs are separated by a configurable separator. (See also 858 | #: tab_separator) 859 | #: powerline 860 | #: Tabs are shown as a continuous line with "fancy" separators. 861 | #: (See also tab_powerline_style) 862 | #: custom 863 | #: A user-supplied Python function called draw_tab is loaded from the file 864 | #: tab_bar.py in the kitty config directory. For examples of how to 865 | #: write such a function, see the functions named draw_tab_with_* in 866 | #: kitty's source code: kitty/tab_bar.py. See also 867 | #: this discussion https://github.com/kovidgoyal/kitty/discussions/4447 868 | #: for examples from kitty users. 869 | #: hidden 870 | #: The tab bar is hidden. If you use this, you might want to create a mapping 871 | #: for the select_tab action which presents you with a list of tabs and 872 | #: allows for easy switching to a tab. 873 | 874 | # tab_bar_align left 875 | 876 | #: The horizontal alignment of the tab bar, can be one of: left, 877 | #: center, right. 878 | 879 | # tab_bar_min_tabs 2 880 | 881 | #: The minimum number of tabs that must exist before the tab bar is 882 | #: shown. 883 | 884 | # tab_switch_strategy previous 885 | 886 | #: The algorithm to use when switching to a tab when the current tab 887 | #: is closed. The default of previous will switch to the last used 888 | #: tab. A value of left will switch to the tab to the left of the 889 | #: closed tab. A value of right will switch to the tab to the right of 890 | #: the closed tab. A value of last will switch to the right-most tab. 891 | 892 | # tab_fade 0.25 0.5 0.75 1 893 | 894 | #: Control how each tab fades into the background when using fade for 895 | #: the tab_bar_style. Each number is an alpha (between zero and one) 896 | #: that controls how much the corresponding cell fades into the 897 | #: background, with zero being no fade and one being full fade. You 898 | #: can change the number of cells used by adding/removing entries to 899 | #: this list. 900 | 901 | # tab_separator " ┇" 902 | 903 | #: The separator between tabs in the tab bar when using separator as 904 | #: the tab_bar_style. 905 | 906 | # tab_powerline_style angled 907 | 908 | #: The powerline separator style between tabs in the tab bar when 909 | #: using powerline as the tab_bar_style, can be one of: angled, 910 | #: slanted, round. 911 | 912 | # tab_activity_symbol none 913 | 914 | #: Some text or a Unicode symbol to show on the tab if a window in the 915 | #: tab that does not have focus has some activity. If you want to use 916 | #: leading or trailing spaces, surround the text with quotes. See 917 | #: tab_title_template for how this is rendered. 918 | 919 | # tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}" 920 | 921 | #: A template to render the tab title. The default just renders the 922 | #: title with optional symbols for bell and activity. If you wish to 923 | #: include the tab-index as well, use something like: {index}:{title}. 924 | #: Useful if you have shortcuts mapped for goto_tab N. If you prefer 925 | #: to see the index as a superscript, use {sup.index}. In addition you 926 | #: can use {layout_name} for the current layout name, {num_windows} 927 | #: for the number of windows in the tab and {num_window_groups} for 928 | #: the number of window groups (not counting overlay windows) in the 929 | #: tab. Note that formatting is done by Python's string formatting 930 | #: machinery, so you can use, for instance, {layout_name[:2].upper()} 931 | #: to show only the first two letters of the layout name, upper-cased. 932 | #: If you want to style the text, you can use styling directives, for 933 | #: example: 934 | #: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`. 935 | #: Similarly, for bold and italic: 936 | #: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`. 937 | #: Note that for backward compatibility, if {bell_symbol} or 938 | #: {activity_symbol} are not present in the template, they are 939 | #: prepended to it. 940 | 941 | # active_tab_title_template none 942 | 943 | #: Template to use for active tabs. If not specified falls back to 944 | #: tab_title_template. 945 | 946 | # active_tab_foreground #000 947 | # active_tab_background #eee 948 | # active_tab_font_style bold-italic 949 | # inactive_tab_foreground #444 950 | # inactive_tab_background #999 951 | # inactive_tab_font_style normal 952 | 953 | #: Tab bar colors and styles. 954 | 955 | # tab_bar_background none 956 | 957 | #: Background color for the tab bar. Defaults to using the terminal 958 | #: background color. 959 | 960 | # tab_bar_margin_color none 961 | 962 | #: Color for the tab bar margin area. Defaults to using the terminal 963 | #: background color. 964 | 965 | #: }}} 966 | 967 | #: Color scheme {{{ 968 | 969 | # foreground #dddddd 970 | # background #000000 971 | 972 | #: The foreground and background colors. 973 | 974 | # background_opacity 1.0 975 | 976 | #: The opacity of the background. A number between zero and one, where 977 | #: one is opaque and zero is fully transparent. This will only work if 978 | #: supported by the OS (for instance, when using a compositor under 979 | #: X11). Note that it only sets the background color's opacity in 980 | #: cells that have the same background color as the default terminal 981 | #: background, so that things like the status bar in vim, powerline 982 | #: prompts, etc. still look good. But it means that if you use a color 983 | #: theme with a background color in your editor, it will not be 984 | #: rendered as transparent. Instead you should change the default 985 | #: background color in your kitty config and not use a background 986 | #: color in the editor color scheme. Or use the escape codes to set 987 | #: the terminals default colors in a shell script to launch your 988 | #: editor. Be aware that using a value less than 1.0 is a (possibly 989 | #: significant) performance hit. If you want to dynamically change 990 | #: transparency of windows, set dynamic_background_opacity to yes 991 | #: (this is off by default as it has a performance cost). Changing 992 | #: this option when reloading the config will only work if 993 | #: dynamic_background_opacity was enabled in the original config. 994 | 995 | # background_image none 996 | 997 | #: Path to a background image. Must be in PNG format. 998 | 999 | # background_image_layout tiled 1000 | 1001 | #: Whether to tile, scale or clamp the background image. The value can 1002 | #: be one of tiled, mirror-tiled, scaled, clamped. 1003 | 1004 | # background_image_linear no 1005 | 1006 | #: When background image is scaled, whether linear interpolation 1007 | #: should be used. 1008 | 1009 | # dynamic_background_opacity no 1010 | 1011 | #: Allow changing of the background_opacity dynamically, using either 1012 | #: keyboard shortcuts (increase_background_opacity and 1013 | #: decrease_background_opacity) or the remote control facility. 1014 | #: Changing this option by reloading the config is not supported. 1015 | 1016 | # background_tint 0.0 1017 | 1018 | #: How much to tint the background image by the background color. The 1019 | #: tint is applied only under the text area, not margin/borders. This 1020 | #: option makes it easier to read the text. Tinting is done using the 1021 | #: current background color for each window. This option applies only 1022 | #: if background_opacity is set and transparent windows are supported 1023 | #: or background_image is set. 1024 | 1025 | # dim_opacity 0.75 1026 | 1027 | #: How much to dim text that has the DIM/FAINT attribute set. One 1028 | #: means no dimming and zero means fully dimmed (i.e. invisible). 1029 | 1030 | # selection_foreground #000000 1031 | # selection_background #fffacd 1032 | 1033 | #: The foreground and background colors for text selected with the 1034 | #: mouse. Setting both of these to none will cause a "reverse video" 1035 | #: effect for selections, where the selection will be the cell text 1036 | #: color and the text will become the cell background color. Setting 1037 | #: only selection_foreground to none will cause the foreground color 1038 | #: to be used unchanged. Note that these colors can be overridden by 1039 | #: the program running in the terminal. 1040 | 1041 | #: The color table {{{ 1042 | 1043 | #: The 256 terminal colors. There are 8 basic colors, each color has a 1044 | #: dull and bright version, for the first 16 colors. You can set the 1045 | #: remaining 240 colors as color16 to color255. 1046 | 1047 | # color0 #000000 1048 | # color8 #767676 1049 | 1050 | #: black 1051 | 1052 | # color1 #cc0403 1053 | # color9 #f2201f 1054 | 1055 | #: red 1056 | 1057 | # color2 #19cb00 1058 | # color10 #23fd00 1059 | 1060 | #: green 1061 | 1062 | # color3 #cecb00 1063 | # color11 #fffd00 1064 | 1065 | #: yellow 1066 | 1067 | # color4 #0d73cc 1068 | # color12 #1a8fff 1069 | 1070 | #: blue 1071 | 1072 | # color5 #cb1ed1 1073 | # color13 #fd28ff 1074 | 1075 | #: magenta 1076 | 1077 | # color6 #0dcdcd 1078 | # color14 #14ffff 1079 | 1080 | #: cyan 1081 | 1082 | # color7 #dddddd 1083 | # color15 #ffffff 1084 | 1085 | #: white 1086 | 1087 | # mark1_foreground black 1088 | 1089 | #: Color for marks of type 1 1090 | 1091 | # mark1_background #98d3cb 1092 | 1093 | #: Color for marks of type 1 (light steel blue) 1094 | 1095 | # mark2_foreground black 1096 | 1097 | #: Color for marks of type 2 1098 | 1099 | # mark2_background #f2dcd3 1100 | 1101 | #: Color for marks of type 1 (beige) 1102 | 1103 | # mark3_foreground black 1104 | 1105 | #: Color for marks of type 3 1106 | 1107 | # mark3_background #f274bc 1108 | 1109 | #: Color for marks of type 3 (violet) 1110 | 1111 | #: }}} 1112 | 1113 | #: }}} 1114 | 1115 | #: Advanced {{{ 1116 | 1117 | # shell . 1118 | 1119 | #: The shell program to execute. The default value of . means to use 1120 | #: whatever shell is set as the default shell for the current user. 1121 | #: Note that on macOS if you change this, you might need to add 1122 | #: --login and --interactive to ensure that the shell starts in 1123 | #: interactive mode and reads its startup rc files. 1124 | 1125 | # editor . 1126 | 1127 | #: The terminal based text editor (such as vim or nano) to use when 1128 | #: editing the kitty config file or similar tasks. 1129 | 1130 | #: The default value of . means to use the environment variables 1131 | #: VISUAL and EDITOR in that order. If these variables aren't set, 1132 | #: kitty will run your shell ($SHELL -l -i -c env) to see if your 1133 | #: shell startup rc files set VISUAL or EDITOR. If that doesn't work, 1134 | #: kitty will cycle through various known editors (vim, emacs, etc.) 1135 | #: and take the first one that exists on your system. 1136 | 1137 | # close_on_child_death no 1138 | 1139 | #: Close the window when the child process (shell) exits. With the 1140 | #: default value no, the terminal will remain open when the child 1141 | #: exits as long as there are still processes outputting to the 1142 | #: terminal (for example disowned or backgrounded processes). When 1143 | #: enabled with yes, the window will close as soon as the child 1144 | #: process exits. Note that setting it to yes means that any 1145 | #: background processes still using the terminal can fail silently 1146 | #: because their stdout/stderr/stdin no longer work. 1147 | 1148 | # allow_remote_control no 1149 | 1150 | #: Allow other programs to control kitty. If you turn this on, other 1151 | #: programs can control all aspects of kitty, including sending text 1152 | #: to kitty windows, opening new windows, closing windows, reading the 1153 | #: content of windows, etc. Note that this even works over SSH 1154 | #: connections. You can choose to either allow any program running 1155 | #: within kitty to control it with yes, or only allow programs that 1156 | #: connect to the socket (specified with the listen_on config option 1157 | #: or kitty --listen-on command line option) with the value socket- 1158 | #: only. The latter is useful if you want to prevent programs running 1159 | #: on a remote computer over SSH from controlling kitty. Reloading the 1160 | #: config will not affect this option. 1161 | 1162 | # listen_on none 1163 | 1164 | #: Listen to the specified UNIX socket for remote control connections. 1165 | #: Note that this will apply to all kitty instances. It can be 1166 | #: overridden by the kitty --listen-on command line option, which 1167 | #: supports listening on TCP socket. This option accepts only UNIX 1168 | #: sockets, such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux). 1169 | #: Environment variables are expanded and relative paths are resolved 1170 | #: with respect to the temporary directory. If {kitty_pid} is present, 1171 | #: then it is replaced by the PID of the kitty process, otherwise the 1172 | #: PID of the kitty process is appended to the value, with a hyphen. 1173 | #: This option is ignored unless you also set allow_remote_control to 1174 | #: enable remote control. See the help for kitty --listen-on for more 1175 | #: details. Changing this option by reloading the config is not 1176 | #: supported. 1177 | 1178 | # env 1179 | 1180 | #: Specify the environment variables to be set in all child processes. 1181 | #: Using the name with an equal sign (e.g. env VAR=) will set it to 1182 | #: the empty string. Specifying only the name (e.g. env VAR) will 1183 | #: remove the variable from the child process' environment. Note that 1184 | #: environment variables are expanded recursively, for example:: 1185 | 1186 | #: env VAR1=a 1187 | #: env VAR2=${HOME}/${VAR1}/b 1188 | 1189 | #: The value of VAR2 will be /a/b. 1190 | 1191 | # watcher 1192 | 1193 | #: Path to python file which will be loaded for watchers 1194 | #: . Can be 1195 | #: specified more than once to load multiple watchers. The watchers 1196 | #: will be added to every kitty window. Relative paths are resolved 1197 | #: relative to the kitty config directory. Note that reloading the 1198 | #: config will only affect windows created after the reload. 1199 | 1200 | # exe_search_path 1201 | 1202 | #: Control where kitty finds the programs to run. The default search 1203 | #: order is: First search the system wide PATH, then ~/.local/bin and 1204 | #: ~/bin. If still not found, the PATH defined in the login shell 1205 | #: after sourcing all its startup files is tried. Finally, if present, 1206 | #: the PATH specified by the env option is tried. 1207 | 1208 | #: This option allows you to prepend, append, or remove paths from 1209 | #: this search order. It can be specified multiple times for multiple 1210 | #: paths. A simple path will be prepended to the search order. A path 1211 | #: that starts with the + sign will be append to the search order, 1212 | #: after ~/bin above. A path that starts with the - sign will be 1213 | #: removed from the entire search order. For example:: 1214 | 1215 | #: exe_search_path /some/prepended/path 1216 | #: exe_search_path +/some/appended/path 1217 | #: exe_search_path -/some/excluded/path 1218 | 1219 | # update_check_interval 24 1220 | 1221 | #: The interval to periodically check if an update to kitty is 1222 | #: available (in hours). If an update is found, a system notification 1223 | #: is displayed informing you of the available update. The default is 1224 | #: to check every 24 hours, set to zero to disable. Update checking is 1225 | #: only done by the official binary builds. Distro packages or source 1226 | #: builds do not do update checking. Changing this option by reloading 1227 | #: the config is not supported. 1228 | 1229 | # startup_session none 1230 | 1231 | #: Path to a session file to use for all kitty instances. Can be 1232 | #: overridden by using the kitty --session command line option for 1233 | #: individual instances. See sessions 1234 | #: in the 1235 | #: kitty documentation for details. Note that relative paths are 1236 | #: interpreted with respect to the kitty config directory. Environment 1237 | #: variables in the path are expanded. Changing this option by 1238 | #: reloading the config is not supported. 1239 | 1240 | # clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask 1241 | 1242 | #: Allow programs running in kitty to read and write from the 1243 | #: clipboard. You can control exactly which actions are allowed. The 1244 | #: possible actions are: write-clipboard, read-clipboard, write- 1245 | #: primary, read-primary, read-clipboard-ask, read-primary-ask. The 1246 | #: default is to allow writing to the clipboard and primary selection 1247 | #: and to ask for permission when a program tries to read from the 1248 | #: clipboard. Note that disabling the read confirmation is a security 1249 | #: risk as it means that any program, even the ones running on a 1250 | #: remote server via SSH can read your clipboard. See also 1251 | #: clipboard_max_size. 1252 | 1253 | # clipboard_max_size 64 1254 | 1255 | #: The maximum size (in MB) of data from programs running in kitty 1256 | #: that will be stored for writing to the system clipboard. A value of 1257 | #: zero means no size limit is applied. See also clipboard_control. 1258 | 1259 | # file_transfer_confirmation_bypass 1260 | 1261 | #: The password that can be supplied to the file transfer kitten 1262 | #: to skip the 1263 | #: transfer confirmation prompt. This should only be used when 1264 | #: initiating transfers from trusted computers, over trusted networks 1265 | #: or encrypted transports, as it allows any programs running on the 1266 | #: remote machine to read/write to the local filesystem, without 1267 | #: permission. 1268 | 1269 | # allow_hyperlinks yes 1270 | 1271 | #: Process hyperlink escape sequences (OSC 8). If disabled OSC 8 1272 | #: escape sequences are ignored. Otherwise they become clickable 1273 | #: links, that you can click with the mouse or by using the hints 1274 | #: kitten . The 1275 | #: special value of ask means that kitty will ask before opening the 1276 | #: link when clicked. 1277 | 1278 | # shell_integration enabled 1279 | 1280 | #: Enable shell integration on supported shells. This enables features 1281 | #: such as jumping to previous prompts, browsing the output of the 1282 | #: previous command in a pager, etc. on supported shells. Set to 1283 | #: disabled to turn off shell integration, completely. It is also 1284 | #: possible to disable individual features, set to a space separated 1285 | #: list of these values: no-rc, no-cursor, no-title, no-cwd, no- 1286 | #: prompt-mark, no-complete. See Shell integration 1287 | #: for details. 1288 | 1289 | # allow_cloning ask 1290 | 1291 | #: Control whether programs running in the terminal can request new 1292 | #: windows to be created. The canonical example is clone-in-kitty 1293 | #: . 1294 | #: By default, kitty will ask for permission for each clone request. 1295 | #: Allowing cloning unconditionally gives programs running in the 1296 | #: terminal (including over SSH) permission to execute arbitrary code, 1297 | #: as the user who is running the terminal, on the computer that the 1298 | #: terminal is running on. 1299 | 1300 | # clone_source_strategies venv,conda,env_var,path 1301 | 1302 | #: Control what shell code is sourced when running clone-in-kitty in 1303 | #: the newly cloned window. The supported strategies are: 1304 | 1305 | #: venv 1306 | #: Source the file $VIRTUAL_ENV/bin/activate. This is used by the 1307 | #: Python stdlib venv module and allows cloning venvs automatically. 1308 | #: conda 1309 | #: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual 1310 | #: environments created by conda. 1311 | #: env_var 1312 | #: Execute the contents of the environment variable 1313 | #: KITTY_CLONE_SOURCE_CODE with eval. 1314 | #: path 1315 | #: Source the file pointed to by the environment variable 1316 | #: KITTY_CLONE_SOURCE_PATH. 1317 | 1318 | #: This option must be a comma separated list of the above values. 1319 | #: This only source the first valid one in the above order. 1320 | 1321 | # term xterm-kitty 1322 | 1323 | #: The value of the TERM environment variable to set. Changing this 1324 | #: can break many terminal programs, only change it if you know what 1325 | #: you are doing, not because you read some advice on "Stack Overflow" 1326 | #: to change it. The TERM variable is used by various programs to get 1327 | #: information about the capabilities and behavior of the terminal. If 1328 | #: you change it, depending on what programs you run, and how 1329 | #: different the terminal you are changing it to is, various things 1330 | #: from key-presses, to colors, to various advanced features may not 1331 | #: work. Changing this option by reloading the config will only affect 1332 | #: newly created windows. 1333 | 1334 | #: }}} 1335 | 1336 | #: OS specific tweaks {{{ 1337 | 1338 | # wayland_titlebar_color system 1339 | 1340 | #: The color of the kitty window's titlebar on Wayland systems with 1341 | #: client side window decorations such as GNOME. A value of system 1342 | #: means to use the default system color, a value of background means 1343 | #: to use the background color of the currently active window and 1344 | #: finally you can use an arbitrary color, such as #12af59 or red. 1345 | 1346 | # macos_titlebar_color system 1347 | 1348 | #: The color of the kitty window's titlebar on macOS. A value of 1349 | #: system means to use the default system color, light or dark can 1350 | #: also be used to set it explicitly. A value of background means to 1351 | #: use the background color of the currently active window and finally 1352 | #: you can use an arbitrary color, such as #12af59 or red. WARNING: 1353 | #: This option works by using a hack when arbitrary color (or 1354 | #: background) is configured, as there is no proper Cocoa API for it. 1355 | #: It sets the background color of the entire window and makes the 1356 | #: titlebar transparent. As such it is incompatible with 1357 | #: background_opacity. If you want to use both, you are probably 1358 | #: better off just hiding the titlebar with hide_window_decorations. 1359 | 1360 | # macos_option_as_alt no 1361 | 1362 | #: Use the Option key as an Alt key on macOS. With this set to no, 1363 | #: kitty will use the macOS native Option+Key to enter Unicode 1364 | #: character behavior. This will break any Alt+Key keyboard shortcuts 1365 | #: in your terminal programs, but you can use the macOS Unicode input 1366 | #: technique. You can use the values: left, right or both to use only 1367 | #: the left, right or both Option keys as Alt, instead. Note that 1368 | #: kitty itself always treats Option the same as Alt. This means you 1369 | #: cannot use this option to configure different kitty shortcuts for 1370 | #: Option+Key vs. Alt+Key. Also, any kitty shortcuts using 1371 | #: Option/Alt+Key will take priority, so that any such key presses 1372 | #: will not be passed to terminal programs running inside kitty. 1373 | #: Changing this option by reloading the config is not supported. 1374 | 1375 | # macos_hide_from_tasks no 1376 | 1377 | #: Hide the kitty window from running tasks on macOS (⌘+Tab and the 1378 | #: Dock). Changing this option by reloading the config is not 1379 | #: supported. 1380 | 1381 | # macos_quit_when_last_window_closed no 1382 | 1383 | #: Have kitty quit when all the top-level windows are closed on macOS. 1384 | #: By default, kitty will stay running, even with no open windows, as 1385 | #: is the expected behavior on macOS. 1386 | 1387 | # macos_window_resizable yes 1388 | 1389 | #: Disable this if you want kitty top-level OS windows to not be 1390 | #: resizable on macOS. Changing this option by reloading the config 1391 | #: will only affect newly created OS windows. 1392 | 1393 | # macos_thicken_font 0 1394 | 1395 | #: Draw an extra border around the font with the given width, to 1396 | #: increase legibility at small font sizes on macOS. For example, a 1397 | #: value of 0.75 will result in rendering that looks similar to sub- 1398 | #: pixel antialiasing at common font sizes. 1399 | 1400 | # macos_traditional_fullscreen no 1401 | 1402 | #: Use the macOS traditional full-screen transition, that is faster, 1403 | #: but less pretty. 1404 | 1405 | # macos_show_window_title_in all 1406 | 1407 | #: Control where the window title is displayed on macOS. A value of 1408 | #: window will show the title of the currently active window at the 1409 | #: top of the macOS window. A value of menubar will show the title of 1410 | #: the currently active window in the macOS global menu bar, making 1411 | #: use of otherwise wasted space. A value of all will show the title 1412 | #: in both places, and none hides the title. See 1413 | #: macos_menubar_title_max_length for how to control the length of the 1414 | #: title in the menu bar. 1415 | 1416 | # macos_menubar_title_max_length 0 1417 | 1418 | #: The maximum number of characters from the window title to show in 1419 | #: the macOS global menu bar. Values less than one means that there is 1420 | #: no maximum limit. 1421 | 1422 | # macos_custom_beam_cursor no 1423 | 1424 | #: Use a custom mouse cursor for macOS that is easier to see on both 1425 | #: light and dark backgrounds. Nowadays, the default macOS cursor 1426 | #: already comes with a white border. WARNING: this might make your 1427 | #: mouse cursor invisible on dual GPU machines. Changing this option 1428 | #: by reloading the config is not supported. 1429 | 1430 | # macos_colorspace srgb 1431 | 1432 | #: The colorspace in which to interpret terminal colors. The default 1433 | #: of srgb will cause colors to match those seen in web browsers. The 1434 | #: value of default will use whatever the native colorspace of the 1435 | #: display is. The value of displayp3 will use Apple's special 1436 | #: snowflake display P3 color space, which will result in over 1437 | #: saturated (brighter) colors with some color shift. Reloading 1438 | #: configuration will change this value only for newly created OS 1439 | #: windows. 1440 | 1441 | # linux_display_server auto 1442 | 1443 | #: Choose between Wayland and X11 backends. By default, an appropriate 1444 | #: backend based on the system state is chosen automatically. Set it 1445 | #: to x11 or wayland to force the choice. Changing this option by 1446 | #: reloading the config is not supported. 1447 | 1448 | #: }}} 1449 | 1450 | #: Keyboard shortcuts {{{ 1451 | 1452 | #: Keys are identified simply by their lowercase Unicode characters. 1453 | #: For example: a for the A key, [ for the left square bracket key, 1454 | #: etc. For functional keys, such as Enter or Escape, the names are 1455 | #: present at Functional key definitions 1456 | #: . For modifier keys, the names are ctrl (control, ⌃), 1458 | #: shift (⇧), alt (opt, option, ⌥), super (cmd, command, ⌘). See also: 1459 | #: GLFW mods 1460 | 1461 | #: On Linux you can also use XKB key names to bind keys that are not 1462 | #: supported by GLFW. See XKB keys 1463 | #: for a list of key names. The name to use is the part 1465 | #: after the XKB_KEY_ prefix. Note that you can only use an XKB key 1466 | #: name for keys that are not known as GLFW keys. 1467 | 1468 | #: Finally, you can use raw system key codes to map keys, again only 1469 | #: for keys that are not known as GLFW keys. To see the system key 1470 | #: code for a key, start kitty with the kitty --debug-input option, 1471 | #: kitty will output some debug text for every key event. In that text 1472 | #: look for native_code, the value of that becomes the key name in the 1473 | #: shortcut. For example: 1474 | 1475 | #: .. code-block:: none 1476 | 1477 | #: on_key_input: glfw key: 0x61 native_code: 0x61 action: PRESS mods: none text: 'a' 1478 | 1479 | #: Here, the key name for the A key is 0x61 and you can use it with:: 1480 | 1481 | #: map ctrl+0x61 something 1482 | 1483 | #: to map Ctrl+A to something. 1484 | 1485 | #: You can use the special action no_op to unmap a keyboard shortcut 1486 | #: that is assigned in the default configuration:: 1487 | 1488 | #: map kitty_mod+space no_op 1489 | 1490 | #: If you would like kitty to completely ignore a key event, not even 1491 | #: sending it to the program running in the terminal, map it to 1492 | #: discard_event:: 1493 | 1494 | #: map kitty_mod+f1 discard_event 1495 | 1496 | #: You can combine multiple actions to be triggered by a single 1497 | #: shortcut with combine action, using the syntax below:: 1498 | 1499 | #: map key combine action1 action2 action3 ... 1500 | 1501 | #: For example:: 1502 | 1503 | #: map kitty_mod+e combine : new_window : next_layout 1504 | 1505 | #: This will create a new window and switch to the next available 1506 | #: layout. 1507 | 1508 | #: You can use multi-key shortcuts with the syntax shown below:: 1509 | 1510 | #: map key1>key2>key3 action 1511 | 1512 | #: For example:: 1513 | 1514 | #: map ctrl+f>2 set_font_size 20 1515 | 1516 | #: The full list of actions that can be mapped to key presses is 1517 | #: available here . 1518 | 1519 | # kitty_mod ctrl+shift 1520 | 1521 | #: Special modifier key alias for default shortcuts. You can change 1522 | #: the value of this option to alter all default shortcuts that use 1523 | #: kitty_mod. 1524 | 1525 | # clear_all_shortcuts no 1526 | 1527 | #: Remove all shortcut definitions up to this point. Useful, for 1528 | #: instance, to remove the default shortcuts. 1529 | 1530 | # action_alias 1531 | 1532 | #: E.g. action_alias launch_tab launch --type=tab --cwd=current 1533 | 1534 | #: Define action aliases to avoid repeating the same options in 1535 | #: multiple mappings. Aliases can be defined for any action and will 1536 | #: be expanded recursively. For example, the above alias allows you to 1537 | #: create mappings to launch a new tab in the current working 1538 | #: directory without duplication:: 1539 | 1540 | #: map f1 launch_tab vim 1541 | #: map f2 launch_tab emacs 1542 | 1543 | #: Similarly, to alias kitten invocation:: 1544 | 1545 | #: action_alias hints kitten hints --hints-offset=0 1546 | 1547 | # kitten_alias 1548 | 1549 | #: E.g. kitten_alias hints hints --hints-offset=0 1550 | 1551 | #: Like action_alias above, but specifically for kittens. Generally, 1552 | #: prefer to use action_alias. This option is a legacy version, 1553 | #: present for backwards compatibility. It causes all invocations of 1554 | #: the aliased kitten to be substituted. So the example above will 1555 | #: cause all invocations of the hints kitten to have the --hints- 1556 | #: offset=0 option applied. 1557 | 1558 | #: Clipboard {{{ 1559 | 1560 | #: Copy to clipboard 1561 | 1562 | # map kitty_mod+c copy_to_clipboard 1563 | # map cmd+c copy_to_clipboard 1564 | 1565 | #:: There is also a copy_or_interrupt action that can be optionally 1566 | #:: mapped to Ctrl+C. It will copy only if there is a selection and 1567 | #:: send an interrupt otherwise. Similarly, 1568 | #:: copy_and_clear_or_interrupt will copy and clear the selection or 1569 | #:: send an interrupt if there is no selection. 1570 | 1571 | #: Paste from clipboard 1572 | 1573 | # map kitty_mod+v paste_from_clipboard 1574 | # map cmd+v paste_from_clipboard 1575 | 1576 | #: Paste from selection 1577 | 1578 | # map kitty_mod+s paste_from_selection 1579 | # map shift+insert paste_from_selection 1580 | 1581 | #: Pass selection to program 1582 | 1583 | # map kitty_mod+o pass_selection_to_program 1584 | 1585 | #:: You can also pass the contents of the current selection to any 1586 | #:: program with pass_selection_to_program. By default, the system's 1587 | #:: open program is used, but you can specify your own, the selection 1588 | #:: will be passed as a command line argument to the program. For 1589 | #:: example:: 1590 | 1591 | #:: map kitty_mod+o pass_selection_to_program firefox 1592 | 1593 | #:: You can pass the current selection to a terminal program running 1594 | #:: in a new kitty window, by using the @selection placeholder:: 1595 | 1596 | #:: map kitty_mod+y new_window less @selection 1597 | 1598 | #: }}} 1599 | 1600 | #: Scrolling {{{ 1601 | 1602 | #: Scroll line up 1603 | 1604 | # map kitty_mod+up scroll_line_up 1605 | # map kitty_mod+k scroll_line_up 1606 | # map opt+cmd+page_up scroll_line_up 1607 | # map cmd+up scroll_line_up 1608 | 1609 | #: Scroll line down 1610 | 1611 | # map kitty_mod+down scroll_line_down 1612 | # map kitty_mod+j scroll_line_down 1613 | # map opt+cmd+page_down scroll_line_down 1614 | # map cmd+down scroll_line_down 1615 | 1616 | #: Scroll page up 1617 | 1618 | # map kitty_mod+page_up scroll_page_up 1619 | # map cmd+page_up scroll_page_up 1620 | 1621 | #: Scroll page down 1622 | 1623 | # map kitty_mod+page_down scroll_page_down 1624 | # map cmd+page_down scroll_page_down 1625 | 1626 | #: Scroll to top 1627 | 1628 | # map kitty_mod+home scroll_home 1629 | # map cmd+home scroll_home 1630 | 1631 | #: Scroll to bottom 1632 | 1633 | # map kitty_mod+end scroll_end 1634 | # map cmd+end scroll_end 1635 | 1636 | #: Scroll to previous shell prompt 1637 | 1638 | # map kitty_mod+z scroll_to_prompt -1 1639 | 1640 | #:: Use a parameter of 0 for scroll_to_prompt to scroll to the last 1641 | #:: jumped to or the last clicked position. Requires shell 1642 | #:: integration 1643 | #:: to work. 1644 | 1645 | #: Scroll to next shell prompt 1646 | 1647 | # map kitty_mod+x scroll_to_prompt 1 1648 | 1649 | #: Browse scrollback buffer in pager 1650 | 1651 | # map kitty_mod+h show_scrollback 1652 | 1653 | #:: You can pipe the contents of the current screen and history 1654 | #:: buffer as STDIN to an arbitrary program using launch --stdin- 1655 | #:: source. For example, the following opens the scrollback buffer in 1656 | #:: less in an overlay window:: 1657 | 1658 | #:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R 1659 | 1660 | #:: For more details on piping screen and buffer contents to external 1661 | #:: programs, see launch . 1662 | 1663 | #: Browse output of the last shell command in pager 1664 | 1665 | # map kitty_mod+g show_last_command_output 1666 | 1667 | #:: You can also define additional shortcuts to get the command 1668 | #:: output. For example, to get the first command output on screen:: 1669 | 1670 | #:: map f1 show_first_command_output_on_screen 1671 | 1672 | #:: To get the command output that was last accessed by a keyboard 1673 | #:: action or mouse action:: 1674 | 1675 | #:: map f1 show_last_visited_command_output 1676 | 1677 | #:: You can pipe the output of the last command run in the shell 1678 | #:: using the launch action. For example, the following opens the 1679 | #:: output in less in an overlay window:: 1680 | 1681 | #:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R 1682 | 1683 | #:: To get the output of the first command on the screen, use 1684 | #:: @first_cmd_output_on_screen. To get the output of the last jumped 1685 | #:: to command, use @last_visited_cmd_output. 1686 | 1687 | #:: Requires shell integration 1688 | #:: to work. 1689 | 1690 | #: }}} 1691 | 1692 | #: Window management {{{ 1693 | 1694 | #: New window 1695 | 1696 | # map kitty_mod+enter new_window 1697 | # map cmd+enter new_window 1698 | 1699 | #:: You can open a new kitty window running an arbitrary program, for 1700 | #:: example:: 1701 | 1702 | #:: map kitty_mod+y launch mutt 1703 | 1704 | #:: You can open a new window with the current working directory set 1705 | #:: to the working directory of the current window using:: 1706 | 1707 | #:: map ctrl+alt+enter launch --cwd=current 1708 | 1709 | #:: You can open a new window that is allowed to control kitty via 1710 | #:: the kitty remote control facility with launch --allow-remote- 1711 | #:: control. Any programs running in that window will be allowed to 1712 | #:: control kitty. For example:: 1713 | 1714 | #:: map ctrl+enter launch --allow-remote-control some_program 1715 | 1716 | #:: You can open a new window next to the currently active window or 1717 | #:: as the first window, with:: 1718 | 1719 | #:: map ctrl+n launch --location=neighbor 1720 | #:: map ctrl+f launch --location=first 1721 | 1722 | #:: For more details, see launch 1723 | #:: . 1724 | 1725 | #: New OS window 1726 | 1727 | # map kitty_mod+n new_os_window 1728 | # map cmd+n new_os_window 1729 | 1730 | #:: Works like new_window above, except that it opens a top-level OS 1731 | #:: window. In particular you can use new_os_window_with_cwd to open 1732 | #:: a window with the current working directory. 1733 | 1734 | #: Close window 1735 | 1736 | # map kitty_mod+w close_window 1737 | # map shift+cmd+d close_window 1738 | 1739 | #: Next window 1740 | 1741 | # map kitty_mod+] next_window 1742 | 1743 | #: Previous window 1744 | 1745 | # map kitty_mod+[ previous_window 1746 | 1747 | #: Move window forward 1748 | 1749 | # map kitty_mod+f move_window_forward 1750 | 1751 | #: Move window backward 1752 | 1753 | # map kitty_mod+b move_window_backward 1754 | 1755 | #: Move window to top 1756 | 1757 | # map kitty_mod+` move_window_to_top 1758 | 1759 | #: Start resizing window 1760 | 1761 | # map kitty_mod+r start_resizing_window 1762 | # map cmd+r start_resizing_window 1763 | 1764 | #: First window 1765 | 1766 | # map kitty_mod+1 first_window 1767 | # map cmd+1 first_window 1768 | 1769 | #: Second window 1770 | 1771 | # map kitty_mod+2 second_window 1772 | # map cmd+2 second_window 1773 | 1774 | #: Third window 1775 | 1776 | # map kitty_mod+3 third_window 1777 | # map cmd+3 third_window 1778 | 1779 | #: Fourth window 1780 | 1781 | # map kitty_mod+4 fourth_window 1782 | # map cmd+4 fourth_window 1783 | 1784 | #: Fifth window 1785 | 1786 | # map kitty_mod+5 fifth_window 1787 | # map cmd+5 fifth_window 1788 | 1789 | #: Sixth window 1790 | 1791 | # map kitty_mod+6 sixth_window 1792 | # map cmd+6 sixth_window 1793 | 1794 | #: Seventh window 1795 | 1796 | # map kitty_mod+7 seventh_window 1797 | # map cmd+7 seventh_window 1798 | 1799 | #: Eight window 1800 | 1801 | # map kitty_mod+8 eighth_window 1802 | # map cmd+8 eighth_window 1803 | 1804 | #: Ninth window 1805 | 1806 | # map kitty_mod+9 ninth_window 1807 | # map cmd+9 ninth_window 1808 | 1809 | #: Tenth window 1810 | 1811 | # map kitty_mod+0 tenth_window 1812 | 1813 | #: Visually select and focus window 1814 | 1815 | # map kitty_mod+f7 focus_visible_window 1816 | 1817 | #:: Display overlay numbers and alphabets on the window, and switch 1818 | #:: the focus to the window when you press the key. When there are 1819 | #:: only two windows, the focus will be switched directly without 1820 | #:: displaying the overlay. You can change the overlay characters and 1821 | #:: their order with option visual_window_select_characters. 1822 | 1823 | #: Visually swap window with another 1824 | 1825 | # map kitty_mod+f8 swap_with_window 1826 | 1827 | #:: Works like focus_visible_window above, but swaps the window. 1828 | 1829 | #: }}} 1830 | 1831 | #: Tab management {{{ 1832 | 1833 | #: Next tab 1834 | 1835 | # map kitty_mod+right next_tab 1836 | # map shift+cmd+] next_tab 1837 | # map ctrl+tab next_tab 1838 | 1839 | #: Previous tab 1840 | 1841 | # map kitty_mod+left previous_tab 1842 | # map shift+cmd+[ previous_tab 1843 | # map ctrl+shift+tab previous_tab 1844 | 1845 | #: New tab 1846 | 1847 | # map kitty_mod+t new_tab 1848 | # map cmd+t new_tab 1849 | 1850 | #: Close tab 1851 | 1852 | # map kitty_mod+q close_tab 1853 | # map cmd+w close_tab 1854 | 1855 | #: Close OS window 1856 | 1857 | # map shift+cmd+w close_os_window 1858 | 1859 | #: Move tab forward 1860 | 1861 | # map kitty_mod+. move_tab_forward 1862 | 1863 | #: Move tab backward 1864 | 1865 | # map kitty_mod+, move_tab_backward 1866 | 1867 | #: Set tab title 1868 | 1869 | # map kitty_mod+alt+t set_tab_title 1870 | # map shift+cmd+i set_tab_title 1871 | 1872 | 1873 | #: You can also create shortcuts to go to specific tabs, with 1 being 1874 | #: the first tab, 2 the second tab and -1 being the previously active 1875 | #: tab, and any number larger than the last tab being the last tab:: 1876 | 1877 | #: map ctrl+alt+1 goto_tab 1 1878 | #: map ctrl+alt+2 goto_tab 2 1879 | 1880 | #: Just as with new_window above, you can also pass the name of 1881 | #: arbitrary commands to run when using new_tab and new_tab_with_cwd. 1882 | #: Finally, if you want the new tab to open next to the current tab 1883 | #: rather than at the end of the tabs list, use:: 1884 | 1885 | #: map ctrl+t new_tab !neighbor [optional cmd to run] 1886 | #: }}} 1887 | 1888 | #: Layout management {{{ 1889 | 1890 | #: Next layout 1891 | 1892 | # map kitty_mod+l next_layout 1893 | 1894 | 1895 | #: You can also create shortcuts to switch to specific layouts:: 1896 | 1897 | #: map ctrl+alt+t goto_layout tall 1898 | #: map ctrl+alt+s goto_layout stack 1899 | 1900 | #: Similarly, to switch back to the previous layout:: 1901 | 1902 | #: map ctrl+alt+p last_used_layout 1903 | 1904 | #: There is also a toggle_layout action that switches to the named 1905 | #: layout or back to the previous layout if in the named layout. 1906 | #: Useful to temporarily "zoom" the active window by switching to the 1907 | #: stack layout:: 1908 | 1909 | #: map ctrl+alt+z toggle_layout stack 1910 | #: }}} 1911 | 1912 | #: Font sizes {{{ 1913 | 1914 | #: You can change the font size for all top-level kitty OS windows at 1915 | #: a time or only the current one. 1916 | 1917 | #: Increase font size 1918 | 1919 | # map kitty_mod+equal change_font_size all +2.0 1920 | # map kitty_mod+plus change_font_size all +2.0 1921 | # map kitty_mod+kp_add change_font_size all +2.0 1922 | # map cmd+plus change_font_size all +2.0 1923 | # map cmd+equal change_font_size all +2.0 1924 | # map shift+cmd+equal change_font_size all +2.0 1925 | 1926 | #: Decrease font size 1927 | 1928 | # map kitty_mod+minus change_font_size all -2.0 1929 | # map kitty_mod+kp_subtract change_font_size all -2.0 1930 | # map cmd+minus change_font_size all -2.0 1931 | # map shift+cmd+minus change_font_size all -2.0 1932 | 1933 | #: Reset font size 1934 | 1935 | # map kitty_mod+backspace change_font_size all 0 1936 | # map cmd+0 change_font_size all 0 1937 | 1938 | 1939 | #: To setup shortcuts for specific font sizes:: 1940 | 1941 | #: map kitty_mod+f6 change_font_size all 10.0 1942 | 1943 | #: To setup shortcuts to change only the current OS window's font 1944 | #: size:: 1945 | 1946 | #: map kitty_mod+f6 change_font_size current 10.0 1947 | #: }}} 1948 | 1949 | #: Select and act on visible text {{{ 1950 | 1951 | #: Use the hints kitten to select text and either pass it to an 1952 | #: external program or insert it into the terminal or copy it to the 1953 | #: clipboard. 1954 | 1955 | #: Open URL 1956 | 1957 | # map kitty_mod+e open_url_with_hints 1958 | 1959 | #:: Open a currently visible URL using the keyboard. The program used 1960 | #:: to open the URL is specified in open_url_with. 1961 | 1962 | #: Insert selected path 1963 | 1964 | # map kitty_mod+p>f kitten hints --type path --program - 1965 | 1966 | #:: Select a path/filename and insert it into the terminal. Useful, 1967 | #:: for instance to run git commands on a filename output from a 1968 | #:: previous git command. 1969 | 1970 | #: Open selected path 1971 | 1972 | # map kitty_mod+p>shift+f kitten hints --type path 1973 | 1974 | #:: Select a path/filename and open it with the default open program. 1975 | 1976 | #: Insert selected line 1977 | 1978 | # map kitty_mod+p>l kitten hints --type line --program - 1979 | 1980 | #:: Select a line of text and insert it into the terminal. Useful for 1981 | #:: the output of things like: `ls -1`. 1982 | 1983 | #: Insert selected word 1984 | 1985 | # map kitty_mod+p>w kitten hints --type word --program - 1986 | 1987 | #:: Select words and insert into terminal. 1988 | 1989 | #: Insert selected hash 1990 | 1991 | # map kitty_mod+p>h kitten hints --type hash --program - 1992 | 1993 | #:: Select something that looks like a hash and insert it into the 1994 | #:: terminal. Useful with git, which uses SHA1 hashes to identify 1995 | #:: commits. 1996 | 1997 | #: Open the selected file at the selected line 1998 | 1999 | # map kitty_mod+p>n kitten hints --type linenum 2000 | 2001 | #:: Select something that looks like filename:linenum and open it in 2002 | #:: vim at the specified line number. 2003 | 2004 | #: Open the selected hyperlink 2005 | 2006 | # map kitty_mod+p>y kitten hints --type hyperlink 2007 | 2008 | #:: Select a hyperlink (i.e. a URL that has been marked as such by 2009 | #:: the terminal program, for example, by `ls --hyperlink=auto`). 2010 | 2011 | 2012 | #: The hints kitten has many more modes of operation that you can map 2013 | #: to different shortcuts. For a full description see hints kitten 2014 | #: . 2015 | #: }}} 2016 | 2017 | #: Miscellaneous {{{ 2018 | 2019 | #: Toggle fullscreen 2020 | 2021 | # map kitty_mod+f11 toggle_fullscreen 2022 | # map ctrl+cmd+f toggle_fullscreen 2023 | 2024 | #: Toggle maximized 2025 | 2026 | # map kitty_mod+f10 toggle_maximized 2027 | 2028 | #: Toggle macOS secure keyboard entry 2029 | 2030 | # map opt+cmd+s toggle_macos_secure_keyboard_entry 2031 | 2032 | #: Unicode input 2033 | 2034 | # map kitty_mod+u kitten unicode_input 2035 | # map ctrl+cmd+space kitten unicode_input 2036 | 2037 | #: Edit config file 2038 | 2039 | # map kitty_mod+f2 edit_config_file 2040 | # map cmd+, edit_config_file 2041 | 2042 | #: Open the kitty command shell 2043 | 2044 | # map kitty_mod+escape kitty_shell window 2045 | 2046 | #:: Open the kitty shell in a new window / tab / overlay / os_window 2047 | #:: to control kitty using commands. 2048 | 2049 | #: Increase background opacity 2050 | 2051 | # map kitty_mod+a>m set_background_opacity +0.1 2052 | 2053 | #: Decrease background opacity 2054 | 2055 | # map kitty_mod+a>l set_background_opacity -0.1 2056 | 2057 | #: Make background fully opaque 2058 | 2059 | # map kitty_mod+a>1 set_background_opacity 1 2060 | 2061 | #: Reset background opacity 2062 | 2063 | # map kitty_mod+a>d set_background_opacity default 2064 | 2065 | #: Reset the terminal 2066 | 2067 | # map kitty_mod+delete clear_terminal reset active 2068 | # map opt+cmd+r clear_terminal reset active 2069 | 2070 | #:: You can create shortcuts to clear/reset the terminal. For 2071 | #:: example:: 2072 | 2073 | #:: # Reset the terminal 2074 | #:: map f1 clear_terminal reset active 2075 | #:: # Clear the terminal screen by erasing all contents 2076 | #:: map f1 clear_terminal clear active 2077 | #:: # Clear the terminal scrollback by erasing it 2078 | #:: map f1 clear_terminal scrollback active 2079 | #:: # Scroll the contents of the screen into the scrollback 2080 | #:: map f1 clear_terminal scroll active 2081 | #:: # Clear everything up to the line with the cursor 2082 | #:: map f1 clear_terminal to_cursor active 2083 | 2084 | #:: If you want to operate on all kitty windows instead of just the 2085 | #:: current one, use all instead of active. 2086 | 2087 | #:: It is also possible to remap Ctrl+L to both scroll the current 2088 | #:: screen contents into the scrollback buffer and clear the screen, 2089 | #:: instead of just clearing the screen, for example, for ZSH add the 2090 | #:: following to ~/.zshrc: 2091 | 2092 | #:: .. code-block:: zsh 2093 | 2094 | #:: scroll-and-clear-screen() { 2095 | #:: printf '\n%.0s' {1..$LINES} 2096 | #:: zle clear-screen 2097 | #:: } 2098 | #:: zle -N scroll-and-clear-screen 2099 | #:: bindkey '^l' scroll-and-clear-screen 2100 | 2101 | #: Clear up to cursor line 2102 | 2103 | # map cmd+k clear_terminal to_cursor active 2104 | 2105 | #: Reload kitty.conf 2106 | 2107 | # map kitty_mod+f5 load_config_file 2108 | # map ctrl+cmd+, load_config_file 2109 | 2110 | #:: Reload kitty.conf, applying any changes since the last time it 2111 | #:: was loaded. Note that a handful of options cannot be dynamically 2112 | #:: changed and require a full restart of kitty. Particularly, when 2113 | #:: changing shortcuts for actions located on the macOS global menu 2114 | #:: bar, a full restart is needed. You can also map a keybinding to 2115 | #:: load a different config file, for example:: 2116 | 2117 | #:: map f5 load_config /path/to/alternative/kitty.conf 2118 | 2119 | #:: Note that all options from the original kitty.conf are discarded, 2120 | #:: in other words the new configuration *replace* the old ones. 2121 | 2122 | #: Debug kitty configuration 2123 | 2124 | # map kitty_mod+f6 debug_config 2125 | # map opt+cmd+, debug_config 2126 | 2127 | #:: Show details about exactly what configuration kitty is running 2128 | #:: with and its host environment. Useful for debugging issues. 2129 | 2130 | #: Send arbitrary text on key presses 2131 | 2132 | #:: E.g. map ctrl+shift+alt+h send_text all Hello World 2133 | 2134 | #:: You can tell kitty to send arbitrary (UTF-8) encoded text to the 2135 | #:: client program when pressing specified shortcut keys. For 2136 | #:: example:: 2137 | 2138 | #:: map ctrl+alt+a send_text all Special text 2139 | 2140 | #:: This will send "Special text" when you press the Ctrl+Alt+A key 2141 | #:: combination. The text to be sent is a python string literal so 2142 | #:: you can use escapes like \x1b to send control codes or \u21fb to 2143 | #:: send Unicode characters (or you can just input the Unicode 2144 | #:: characters directly as UTF-8 text). You can use `kitty +kitten 2145 | #:: show_key` to get the key escape codes you want to emulate. 2146 | 2147 | #:: The first argument to send_text is the keyboard modes in which to 2148 | #:: activate the shortcut. The possible values are normal, 2149 | #:: application, kitty or a comma separated combination of them. The 2150 | #:: modes normal and application refer to the DECCKM cursor key mode 2151 | #:: for terminals, and kitty refers to the kitty extended keyboard 2152 | #:: protocol. The special value all means all of them. 2153 | 2154 | #:: Some more examples:: 2155 | 2156 | #:: # Output a word and move the cursor to the start of the line (like typing and pressing Home) 2157 | #:: map ctrl+alt+a send_text normal Word\x1b[H 2158 | #:: map ctrl+alt+a send_text application Word\x1bOH 2159 | #:: # Run a command at a shell prompt (like typing the command and pressing Enter) 2160 | #:: map ctrl+alt+a send_text normal,application some command with arguments\r 2161 | 2162 | #: Open kitty Website 2163 | 2164 | # map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/ 2165 | 2166 | #: }}} 2167 | 2168 | #: }}} 2169 | -------------------------------------------------------------------------------- /kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | # vim:fileencoding=utf-8:foldmethod=marker 2 | 3 | #: Fonts {{{ 4 | 5 | #: kitty has very powerful font management. You can configure 6 | #: individual font faces and even specify special fonts for particular 7 | #: characters. 8 | 9 | font_family Hasklug Nerd Font Mono 10 | bold_font Hasklug Nerd Font Mono 11 | italic_font Hasklug Nerd Font Mono 12 | bold_italic_font Hasklug Nerd Font Mono 13 | 14 | #: You can specify different fonts for the bold/italic/bold-italic 15 | #: variants. To get a full list of supported fonts use the `kitty 16 | #: +list-fonts` command. By default they are derived automatically, by 17 | #: the OSes font system. When bold_font or bold_italic_font is set to 18 | #: auto on macOS, the priority of bold fonts is semi-bold, bold, 19 | #: heavy. Setting them manually is useful for font families that have 20 | #: many weight variants like Book, Medium, Thick, etc. For example:: 21 | 22 | #: font_family Operator Mono Book 23 | #: bold_font Operator Mono Medium 24 | #: italic_font Operator Mono Book Italic 25 | #: bold_italic_font Operator Mono Medium Italic 26 | 27 | # font_size 11.0 28 | 29 | #: Font size (in pts) 30 | 31 | # force_ltr no 32 | 33 | #: kitty does not support BIDI (bidirectional text), however, for RTL 34 | #: scripts, words are automatically displayed in RTL. That is to say, 35 | #: in an RTL script, the words "HELLO WORLD" display in kitty as 36 | #: "WORLD HELLO", and if you try to select a substring of an RTL- 37 | #: shaped string, you will get the character that would be there had 38 | #: the the string been LTR. For example, assuming the Hebrew word 39 | #: ירושלים, selecting the character that on the screen appears to be ם 40 | #: actually writes into the selection buffer the character י. kitty's 41 | #: default behavior is useful in conjunction with a filter to reverse 42 | #: the word order, however, if you wish to manipulate RTL glyphs, it 43 | #: can be very challenging to work with, so this option is provided to 44 | #: turn it off. Furthermore, this option can be used with the command 45 | #: line program GNU FriBidi 46 | #: to get BIDI 47 | #: support, because it will force kitty to always treat the text as 48 | #: LTR, which FriBidi expects for terminals. 49 | 50 | # adjust_line_height 0 51 | # adjust_column_width 0 52 | 53 | #: Change the size of each character cell kitty renders. You can use 54 | #: either numbers, which are interpreted as pixels or percentages 55 | #: (number followed by %), which are interpreted as percentages of the 56 | #: unmodified values. You can use negative pixels or percentages less 57 | #: than 100% to reduce sizes (but this might cause rendering 58 | #: artifacts). 59 | 60 | # adjust_baseline 0 61 | 62 | #: Adjust the vertical alignment of text (the height in the cell at 63 | #: which text is positioned). You can use either numbers, which are 64 | #: interpreted as pixels or percentages (number followed by %), which 65 | #: are interpreted as the percentage of the line height. A positive 66 | #: value moves the baseline up, and a negative value moves them down. 67 | #: The underline and strikethrough positions are adjusted accordingly. 68 | 69 | # symbol_map 70 | 71 | #: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols 72 | 73 | #: Map the specified Unicode codepoints to a particular font. Useful 74 | #: if you need special rendering for some symbols, such as for 75 | #: Powerline. Avoids the need for patched fonts. Each Unicode code 76 | #: point is specified in the form `U+`. You 77 | #: can specify multiple code points, separated by commas and ranges 78 | #: separated by hyphens. This option can be specified multiple times. 79 | #: The syntax is:: 80 | 81 | #: symbol_map codepoints Font Family Name 82 | 83 | # narrow_symbols 84 | 85 | #: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1 86 | 87 | #: Usually, for Private Use Unicode characters and some symbol/dingbat 88 | #: characters, if the character is followed by one or more spaces, 89 | #: kitty will use those extra cells to render the character larger, if 90 | #: the character in the font has a wide aspect ratio. Using this 91 | #: option you can force kitty to restrict the specified code points to 92 | #: render in the specified number of cells (defaulting to one cell). 93 | #: This option can be specified multiple times. The syntax is:: 94 | 95 | #: narrow_symbols codepoints [optionally the number of cells] 96 | 97 | # disable_ligatures never 98 | 99 | #: Choose how you want to handle multi-character ligatures. The 100 | #: default is to always render them. You can tell kitty to not render 101 | #: them when the cursor is over them by using cursor to make editing 102 | #: easier, or have kitty never render them at all by using always, if 103 | #: you don't like them. The ligature strategy can be set per-window 104 | #: either using the kitty remote control facility or by defining 105 | #: shortcuts for it in kitty.conf, for example:: 106 | 107 | #: map alt+1 disable_ligatures_in active always 108 | #: map alt+2 disable_ligatures_in all never 109 | #: map alt+3 disable_ligatures_in tab cursor 110 | 111 | #: Note that this refers to programming ligatures, typically 112 | #: implemented using the calt OpenType feature. For disabling general 113 | #: ligatures, use the font_features option. 114 | 115 | # font_features 116 | 117 | #: E.g. font_features none 118 | 119 | #: Choose exactly which OpenType features to enable or disable. This 120 | #: is useful as some fonts might have features worthwhile in a 121 | #: terminal. For example, Fira Code includes a discretionary feature, 122 | #: zero, which in that font changes the appearance of the zero (0), to 123 | #: make it more easily distinguishable from Ø. Fira Code also includes 124 | #: other discretionary features known as Stylistic Sets which have the 125 | #: tags ss01 through ss20. 126 | 127 | #: For the exact syntax to use for individual features, see the 128 | #: HarfBuzz documentation . 130 | 131 | #: Note that this code is indexed by PostScript name, and not the font 132 | #: family. This allows you to define very precise feature settings; 133 | #: e.g. you can disable a feature in the italic font but not in the 134 | #: regular font. 135 | 136 | #: On Linux, font features are first read from the FontConfig database 137 | #: and then this option is applied, so they can be configured in a 138 | #: single, central place. 139 | 140 | #: To get the PostScript name for a font, use `kitty +list-fonts 141 | #: --psnames`: 142 | 143 | #: .. code-block:: sh 144 | 145 | #: $ kitty +list-fonts --psnames | grep Fira 146 | #: Fira Code 147 | #: Fira Code Bold (FiraCode-Bold) 148 | #: Fira Code Light (FiraCode-Light) 149 | #: Fira Code Medium (FiraCode-Medium) 150 | #: Fira Code Regular (FiraCode-Regular) 151 | #: Fira Code Retina (FiraCode-Retina) 152 | 153 | #: The part in brackets is the PostScript name. 154 | 155 | #: Enable alternate zero and oldstyle numerals:: 156 | 157 | #: font_features FiraCode-Retina +zero +onum 158 | 159 | #: Enable only alternate zero in the bold font:: 160 | 161 | #: font_features FiraCode-Bold +zero 162 | 163 | #: Disable the normal ligatures, but keep the calt feature which (in 164 | #: this font) breaks up monotony:: 165 | 166 | #: font_features TT2020StyleB-Regular -liga +calt 167 | 168 | #: In conjunction with force_ltr, you may want to disable Arabic 169 | #: shaping entirely, and only look at their isolated forms if they 170 | #: show up in a document. You can do this with e.g.:: 171 | 172 | #: font_features UnifontMedium +isol -medi -fina -init 173 | 174 | # box_drawing_scale 0.001, 1, 1.5, 2 175 | 176 | #: The sizes of the lines used for the box drawing Unicode characters. 177 | #: These values are in pts. They will be scaled by the monitor DPI to 178 | #: arrive at a pixel value. There must be four values corresponding to 179 | #: thin, normal, thick, and very thick lines. 180 | 181 | #: }}} 182 | 183 | #: Cursor customization {{{ 184 | 185 | # cursor #cccccc 186 | 187 | #: Default cursor color. If set to the special value none the cursor 188 | #: will be rendered with a "reverse video" effect. It's color will be 189 | #: the color of the text in the cell it is over and the text will be 190 | #: rendered with the background color of the cell. Note that if the 191 | #: program running in the terminal sets a cursor color, this takes 192 | #: precedence. Also, the cursor colors are modified if the cell 193 | #: background and foreground colors have very low contrast. 194 | 195 | # cursor_text_color #111111 196 | 197 | #: The color of text under the cursor. If you want it rendered with 198 | #: the background color of the cell underneath instead, use the 199 | #: special keyword: background. Note that if cursor is set to none 200 | #: then this option is ignored. 201 | 202 | # cursor_shape block 203 | 204 | #: The cursor shape can be one of block, beam, underline. Note that 205 | #: when reloading the config this will be changed only if the cursor 206 | #: shape has not been set by the program running in the terminal. This 207 | #: sets the default cursor shape, applications running in the terminal 208 | #: can override it. In particular, shell integration 209 | #: in kitty sets 210 | #: the cursor shape to beam at shell prompts. You can avoid this by 211 | #: setting shell_integration to no-cursor. 212 | 213 | # cursor_beam_thickness 1.5 214 | 215 | #: The thickness of the beam cursor (in pts). 216 | 217 | # cursor_underline_thickness 2.0 218 | 219 | #: The thickness of the underline cursor (in pts). 220 | 221 | # cursor_blink_interval -1 222 | 223 | #: The interval to blink the cursor (in seconds). Set to zero to 224 | #: disable blinking. Negative values mean use system default. Note 225 | #: that the minimum interval will be limited to repaint_delay. 226 | 227 | # cursor_stop_blinking_after 15.0 228 | 229 | #: Stop blinking cursor after the specified number of seconds of 230 | #: keyboard inactivity. Set to zero to never stop blinking. 231 | 232 | #: }}} 233 | 234 | #: Scrollback {{{ 235 | 236 | # scrollback_lines 2000 237 | 238 | #: Number of lines of history to keep in memory for scrolling back. 239 | #: Memory is allocated on demand. Negative numbers are (effectively) 240 | #: infinite scrollback. Note that using very large scrollback is not 241 | #: recommended as it can slow down performance of the terminal and 242 | #: also use large amounts of RAM. Instead, consider using 243 | #: scrollback_pager_history_size. Note that on config reload if this 244 | #: is changed it will only affect newly created windows, not existing 245 | #: ones. 246 | 247 | # scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 248 | 249 | #: Program with which to view scrollback in a new window. The 250 | #: scrollback buffer is passed as STDIN to this program. If you change 251 | #: it, make sure the program you use can handle ANSI escape sequences 252 | #: for colors and text formatting. INPUT_LINE_NUMBER in the command 253 | #: line above will be replaced by an integer representing which line 254 | #: should be at the top of the screen. Similarly CURSOR_LINE and 255 | #: CURSOR_COLUMN will be replaced by the current cursor position or 256 | #: set to 0 if there is no cursor, for example, when showing the last 257 | #: command output. 258 | 259 | # scrollback_pager_history_size 0 260 | 261 | #: Separate scrollback history size (in MB), used only for browsing 262 | #: the scrollback buffer with pager. This separate buffer is not 263 | #: available for interactive scrolling but will be piped to the pager 264 | #: program when viewing scrollback buffer in a separate window. The 265 | #: current implementation stores the data in UTF-8, so approximatively 266 | #: 10000 lines per megabyte at 100 chars per line, for pure ASCII, 267 | #: unformatted text. A value of zero or less disables this feature. 268 | #: The maximum allowed size is 4GB. Note that on config reload if this 269 | #: is changed it will only affect newly created windows, not existing 270 | #: ones. 271 | 272 | # scrollback_fill_enlarged_window no 273 | 274 | #: Fill new space with lines from the scrollback buffer after 275 | #: enlarging a window. 276 | 277 | # wheel_scroll_multiplier 5.0 278 | 279 | #: Multiplier for the number of lines scrolled by the mouse wheel. 280 | #: Note that this is only used for low precision scrolling devices, 281 | #: not for high precision scrolling devices on platforms such as macOS 282 | #: and Wayland. Use negative numbers to change scroll direction. See 283 | #: also wheel_scroll_min_lines. 284 | 285 | # wheel_scroll_min_lines 1 286 | 287 | #: The minimum number of lines scrolled by the mouse wheel. The scroll 288 | #: multiplier only takes effect after it 289 | #: reaches this number. Note that this is only used for low precision 290 | #: scrolling devices like wheel mice that scroll by very small amounts 291 | #: when using the wheel. With a negative number, the minimum number of 292 | #: lines will always be added. 293 | 294 | # touch_scroll_multiplier 1.0 295 | 296 | #: Multiplier for the number of lines scrolled by a touchpad. Note 297 | #: that this is only used for high precision scrolling devices on 298 | #: platforms such as macOS and Wayland. Use negative numbers to change 299 | #: scroll direction. 300 | 301 | #: }}} 302 | 303 | #: Mouse {{{ 304 | 305 | # mouse_hide_wait 3.0 306 | 307 | #: Hide mouse cursor after the specified number of seconds of the 308 | #: mouse not being used. Set to zero to disable mouse cursor hiding. 309 | #: Set to a negative value to hide the mouse cursor immediately when 310 | #: typing text. Disabled by default on macOS as getting it to work 311 | #: robustly with the ever-changing sea of bugs that is Cocoa is too 312 | #: much effort. 313 | 314 | # url_color #0087bd 315 | # url_style curly 316 | 317 | #: The color and style for highlighting URLs on mouse-over. url_style 318 | #: can be one of: none, straight, double, curly, dotted, dashed. 319 | 320 | # open_url_with default 321 | 322 | #: The program to open clicked URLs. The special value default means 323 | #: to use the operating system's default URL handler (open on macOS 324 | #: and xdg-open on Linux). 325 | 326 | # url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh 327 | 328 | #: The set of URL prefixes to look for when detecting a URL under the 329 | #: mouse cursor. 330 | 331 | # detect_urls yes 332 | 333 | #: Detect URLs under the mouse. Detected URLs are highlighted with an 334 | #: underline and the mouse cursor becomes a hand over them. Even if 335 | #: this option is disabled, URLs are still clickable. 336 | 337 | # url_excluded_characters 338 | 339 | #: Additional characters to be disallowed from URLs, when detecting 340 | #: URLs under the mouse cursor. By default, all characters that are 341 | #: legal in URLs are allowed. 342 | 343 | # copy_on_select no 344 | 345 | #: Copy to clipboard or a private buffer on select. With this set to 346 | #: clipboard, selecting text with the mouse will cause the text to be 347 | #: copied to clipboard. Useful on platforms such as macOS that do not 348 | #: have the concept of primary selection. You can instead specify a 349 | #: name such as a1 to copy to a private kitty buffer. Map a shortcut 350 | #: with the paste_from_buffer action to paste from this private 351 | #: buffer. For example:: 352 | 353 | #: copy_on_select a1 354 | #: map shift+cmd+v paste_from_buffer a1 355 | 356 | #: Note that copying to the clipboard is a security risk, as all 357 | #: programs, including websites open in your browser can read the 358 | #: contents of the system clipboard. 359 | 360 | # paste_actions quote-urls-at-prompt 361 | 362 | #: A comma separated list of actions to take when pasting text into 363 | #: the terminal. The supported paste actions are: 364 | 365 | #: quote-urls-at-prompt: 366 | #: If the text being pasted is a URL and the cursor is at a shell prompt, 367 | #: automatically quote the URL (needs shell_integration). 368 | #: confirm: 369 | #: Confirm the paste if bracketed paste mode is not active or there is more 370 | #: a large amount of text being pasted. 371 | #: filter: 372 | #: Run the filter_paste() function from the file paste-actions.py in 373 | #: the kitty config directory on the pasted text. The text returned by the 374 | #: function will be actually pasted. 375 | 376 | # strip_trailing_spaces never 377 | 378 | #: Remove spaces at the end of lines when copying to clipboard. A 379 | #: value of smart will do it when using normal selections, but not 380 | #: rectangle selections. A value of always will always do it. 381 | 382 | # select_by_word_characters @-./_~?&=%+# 383 | 384 | #: Characters considered part of a word when double clicking. In 385 | #: addition to these characters any character that is marked as an 386 | #: alphanumeric character in the Unicode database will be matched. 387 | 388 | # select_by_word_characters_forward 389 | 390 | #: Characters considered part of a word when extending the selection 391 | #: forward on double clicking. In addition to these characters any 392 | #: character that is marked as an alphanumeric character in the 393 | #: Unicode database will be matched. 394 | 395 | #: If empty (default) select_by_word_characters will be used for both 396 | #: directions. 397 | 398 | # click_interval -1.0 399 | 400 | #: The interval between successive clicks to detect double/triple 401 | #: clicks (in seconds). Negative numbers will use the system default 402 | #: instead, if available, or fallback to 0.5. 403 | 404 | # focus_follows_mouse no 405 | 406 | #: Set the active window to the window under the mouse when moving the 407 | #: mouse around. 408 | 409 | # pointer_shape_when_grabbed arrow 410 | 411 | #: The shape of the mouse pointer when the program running in the 412 | #: terminal grabs the mouse. Valid values are: arrow, beam and hand. 413 | 414 | # default_pointer_shape beam 415 | 416 | #: The default shape of the mouse pointer. Valid values are: arrow, 417 | #: beam and hand. 418 | 419 | # pointer_shape_when_dragging beam 420 | 421 | #: The default shape of the mouse pointer when dragging across text. 422 | #: Valid values are: arrow, beam and hand. 423 | 424 | #: Mouse actions {{{ 425 | 426 | #: Mouse buttons can be mapped to perform arbitrary actions. The 427 | #: syntax is: 428 | 429 | #: .. code-block:: none 430 | 431 | #: mouse_map button-name event-type modes action 432 | 433 | #: Where button-name is one of left, middle, right, b1 ... b8 with 434 | #: added keyboard modifiers. For example: ctrl+shift+left refers to 435 | #: holding the Ctrl+Shift keys while clicking with the left mouse 436 | #: button. The value b1 ... b8 can be used to refer to up to eight 437 | #: buttons on a mouse. 438 | 439 | #: event-type is one of press, release, doublepress, triplepress, 440 | #: click, doubleclick. modes indicates whether the action is performed 441 | #: when the mouse is grabbed by the program running in the terminal, 442 | #: or not. The values are grabbed or ungrabbed or a comma separated 443 | #: combination of them. grabbed refers to when the program running in 444 | #: the terminal has requested mouse events. Note that the click and 445 | #: double click events have a delay of click_interval to disambiguate 446 | #: from double and triple presses. 447 | 448 | #: You can run kitty with the kitty --debug-input command line option 449 | #: to see mouse events. See the builtin actions below to get a sense 450 | #: of what is possible. 451 | 452 | #: If you want to unmap an action, map it to no_op. For example, to 453 | #: disable opening of URLs with a plain click:: 454 | 455 | #: mouse_map left click ungrabbed no_op 456 | 457 | #: See all the mappable actions including mouse actions here 458 | #: . 459 | 460 | #: .. note:: 461 | #: Once a selection is started, releasing the button that started it will 462 | #: automatically end it and no release event will be dispatched. 463 | 464 | # clear_all_mouse_actions no 465 | 466 | #: Remove all mouse action definitions up to this point. Useful, for 467 | #: instance, to remove the default mouse actions. 468 | 469 | #: Click the link under the mouse or move the cursor 470 | 471 | # mouse_map left click ungrabbed mouse_handle_click selection link prompt 472 | 473 | #:: First check for a selection and if one exists do nothing. Then 474 | #:: check for a link under the mouse cursor and if one exists, click 475 | #:: it. Finally check if the click happened at the current shell 476 | #:: prompt and if so, move the cursor to the click location. Note 477 | #:: that this requires shell integration 478 | #:: to work. 479 | 480 | #: Click the link under the mouse or move the cursor even when grabbed 481 | 482 | # mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt 483 | 484 | #:: Same as above, except that the action is performed even when the 485 | #:: mouse is grabbed by the program running in the terminal. 486 | 487 | #: Click the link under the mouse cursor 488 | 489 | # mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link 490 | 491 | #:: Variant with Ctrl+Shift is present because the simple click based 492 | #:: version has an unavoidable delay of click_interval, to 493 | #:: disambiguate clicks from double clicks. 494 | 495 | #: Discard press event for link click 496 | 497 | # mouse_map ctrl+shift+left press grabbed discard_event 498 | 499 | #:: Prevent this press event from being sent to the program that has 500 | #:: grabbed the mouse, as the corresponding release event is used to 501 | #:: open a URL. 502 | 503 | #: Paste from the primary selection 504 | 505 | # mouse_map middle release ungrabbed paste_from_selection 506 | 507 | #: Start selecting text 508 | 509 | # mouse_map left press ungrabbed mouse_selection normal 510 | 511 | #: Start selecting text in a rectangle 512 | 513 | # mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle 514 | 515 | #: Select a word 516 | 517 | # mouse_map left doublepress ungrabbed mouse_selection word 518 | 519 | #: Select a line 520 | 521 | # mouse_map left triplepress ungrabbed mouse_selection line 522 | 523 | #: Select line from point 524 | 525 | # mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point 526 | 527 | #:: Select from the clicked point to the end of the line. 528 | 529 | #: Extend the current selection 530 | 531 | # mouse_map right press ungrabbed mouse_selection extend 532 | 533 | #:: If you want only the end of the selection to be moved instead of 534 | #:: the nearest boundary, use move-end instead of extend. 535 | 536 | #: Paste from the primary selection even when grabbed 537 | 538 | # mouse_map shift+middle release ungrabbed,grabbed paste_selection 539 | # mouse_map shift+middle press grabbed discard_event 540 | 541 | #: Start selecting text even when grabbed 542 | 543 | # mouse_map shift+left press ungrabbed,grabbed mouse_selection normal 544 | 545 | #: Start selecting text in a rectangle even when grabbed 546 | 547 | # mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle 548 | 549 | #: Select a word even when grabbed 550 | 551 | # mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word 552 | 553 | #: Select a line even when grabbed 554 | 555 | # mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line 556 | 557 | #: Select line from point even when grabbed 558 | 559 | # mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point 560 | 561 | #:: Select from the clicked point to the end of the line even when 562 | #:: grabbed. 563 | 564 | #: Extend the current selection even when grabbed 565 | 566 | # mouse_map shift+right press ungrabbed,grabbed mouse_selection extend 567 | 568 | #: Show clicked command output in pager 569 | 570 | # mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output 571 | 572 | #:: Requires shell integration 573 | #:: to work. 574 | 575 | #: }}} 576 | 577 | #: }}} 578 | 579 | #: Performance tuning {{{ 580 | 581 | # repaint_delay 10 582 | 583 | #: Delay between screen updates (in milliseconds). Decreasing it, 584 | #: increases frames-per-second (FPS) at the cost of more CPU usage. 585 | #: The default value yields ~100 FPS which is more than sufficient for 586 | #: most uses. Note that to actually achieve 100 FPS, you have to 587 | #: either set sync_to_monitor to no or use a monitor with a high 588 | #: refresh rate. Also, to minimize latency when there is pending input 589 | #: to be processed, this option is ignored. 590 | 591 | # input_delay 3 592 | 593 | #: Delay before input from the program running in the terminal is 594 | #: processed (in milliseconds). Note that decreasing it will increase 595 | #: responsiveness, but also increase CPU usage and might cause flicker 596 | #: in full screen programs that redraw the entire screen on each loop, 597 | #: because kitty is so fast that partial screen updates will be drawn. 598 | 599 | # sync_to_monitor yes 600 | 601 | #: Sync screen updates to the refresh rate of the monitor. This 602 | #: prevents screen tearing 603 | #: when scrolling. 604 | #: However, it limits the rendering speed to the refresh rate of your 605 | #: monitor. With a very high speed mouse/high keyboard repeat rate, 606 | #: you may notice some slight input latency. If so, set this to no. 607 | 608 | #: }}} 609 | 610 | #: Terminal bell {{{ 611 | 612 | # enable_audio_bell yes 613 | 614 | #: The audio bell. Useful to disable it in environments that require 615 | #: silence. 616 | 617 | # visual_bell_duration 0.0 618 | 619 | #: The visual bell duration (in seconds). Flash the screen when a bell 620 | #: occurs for the specified number of seconds. Set to zero to disable. 621 | 622 | # visual_bell_color none 623 | 624 | #: The color used by visual bell. Set to none will fall back to 625 | #: selection background color. If you feel that the visual bell is too 626 | #: bright, you can set it to a darker color. 627 | 628 | # window_alert_on_bell yes 629 | 630 | #: Request window attention on bell. Makes the dock icon bounce on 631 | #: macOS or the taskbar flash on linux. 632 | 633 | # bell_on_tab "🔔 " 634 | 635 | #: Some text or a Unicode symbol to show on the tab if a window in the 636 | #: tab that does not have focus has a bell. If you want to use leading 637 | #: or trailing spaces, surround the text with quotes. See 638 | #: tab_title_template for how this is rendered. 639 | 640 | #: For backwards compatibility, values of yes, y and true are 641 | #: converted to the default bell symbol and no, n, false and none are 642 | #: converted to the empty string. 643 | 644 | # command_on_bell none 645 | 646 | #: Program to run when a bell occurs. The environment variable 647 | #: KITTY_CHILD_CMDLINE can be used to get the program running in the 648 | #: window in which the bell occurred. 649 | 650 | # bell_path none 651 | 652 | #: Path to a sound file to play as the bell sound. If set to none, the 653 | #: system default bell sound is used. Must be in a format supported by 654 | #: the operating systems sound API, such as WAV or OGA on Linux 655 | #: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound) 656 | 657 | #: }}} 658 | 659 | #: Window layout {{{ 660 | 661 | # remember_window_size yes 662 | # initial_window_width 640 663 | # initial_window_height 400 664 | 665 | #: If enabled, the window size will be remembered so that new 666 | #: instances of kitty will have the same size as the previous 667 | #: instance. If disabled, the window will initially have size 668 | #: configured by initial_window_width/height, in pixels. You can use a 669 | #: suffix of "c" on the width/height values to have them interpreted 670 | #: as number of cells instead of pixels. 671 | 672 | # enabled_layouts * 673 | 674 | #: The enabled window layouts. A comma separated list of layout names. 675 | #: The special value all means all layouts. The first listed layout 676 | #: will be used as the startup layout. Default configuration is all 677 | #: layouts in alphabetical order. For a list of available layouts, see 678 | #: the layouts . 679 | 680 | # window_resize_step_cells 2 681 | # window_resize_step_lines 2 682 | 683 | #: The step size (in units of cell width/cell height) to use when 684 | #: resizing kitty windows in a layout with the shortcut 685 | #: start_resizing_window. The cells value is used for horizontal 686 | #: resizing, and the lines value is used for vertical resizing. 687 | 688 | # window_border_width 0.5pt 689 | 690 | #: The width of window borders. Can be either in pixels (px) or pts 691 | #: (pt). Values in pts will be rounded to the nearest number of pixels 692 | #: based on screen resolution. If not specified, the unit is assumed 693 | #: to be pts. Note that borders are displayed only when more than one 694 | #: window is visible. They are meant to separate multiple windows. 695 | 696 | # draw_minimal_borders yes 697 | 698 | #: Draw only the minimum borders needed. This means that only the 699 | #: borders that separate the inactive window from a neighbor are 700 | #: drawn. Note that setting a non-zero window_margin_width overrides 701 | #: this and causes all borders to be drawn. 702 | 703 | # window_margin_width 0 704 | 705 | #: The window margin (in pts) (blank area outside the border). A 706 | #: single value sets all four sides. Two values set the vertical and 707 | #: horizontal sides. Three values set top, horizontal and bottom. Four 708 | #: values set top, right, bottom and left. 709 | 710 | # single_window_margin_width -1 711 | 712 | #: The window margin to use when only a single window is visible (in 713 | #: pts). Negative values will cause the value of window_margin_width 714 | #: to be used instead. A single value sets all four sides. Two values 715 | #: set the vertical and horizontal sides. Three values set top, 716 | #: horizontal and bottom. Four values set top, right, bottom and left. 717 | 718 | window_padding_width 2 719 | 720 | #: The window padding (in pts) (blank area between the text and the 721 | #: window border). A single value sets all four sides. Two values set 722 | #: the vertical and horizontal sides. Three values set top, horizontal 723 | #: and bottom. Four values set top, right, bottom and left. 724 | 725 | # placement_strategy center 726 | 727 | #: When the window size is not an exact multiple of the cell size, the 728 | #: cell area of the terminal window will have some extra padding on 729 | #: the sides. You can control how that padding is distributed with 730 | #: this option. Using a value of center means the cell area will be 731 | #: placed centrally. A value of top-left means the padding will be 732 | #: only at the bottom and right edges. 733 | 734 | # active_border_color #00ff00 735 | 736 | #: The color for the border of the active window. Set this to none to 737 | #: not draw borders around the active window. 738 | 739 | # inactive_border_color #cccccc 740 | 741 | #: The color for the border of inactive windows. 742 | 743 | # bell_border_color #ff5a00 744 | 745 | #: The color for the border of inactive windows in which a bell has 746 | #: occurred. 747 | 748 | # inactive_text_alpha 1.0 749 | 750 | #: Fade the text in inactive windows by the specified amount (a number 751 | #: between zero and one, with zero being fully faded). 752 | 753 | hide_window_decorations titlebar-only 754 | 755 | #: Hide the window decorations (title-bar and window borders) with 756 | #: yes. On macOS, titlebar-only can be used to only hide the titlebar. 757 | #: Whether this works and exactly what effect it has depends on the 758 | #: window manager/operating system. Note that the effects of changing 759 | #: this option when reloading config are undefined. 760 | 761 | # window_logo_path none 762 | 763 | #: Path to a logo image. Must be in PNG format. Relative paths are 764 | #: interpreted relative to the kitty config directory. The logo is 765 | #: displayed in a corner of every kitty window. The position is 766 | #: controlled by window_logo_position. Individual windows can be 767 | #: configured to have different logos either using the launch action 768 | #: or the remote control facility. 770 | 771 | # window_logo_position bottom-right 772 | 773 | #: Where to position the window logo in the window. The value can be 774 | #: one of: top-left, top, top-right, left, center, right, bottom-left, 775 | #: bottom, bottom-right. 776 | 777 | # window_logo_alpha 0.5 778 | 779 | #: The amount the logo should be faded into the background. With zero 780 | #: being fully faded and one being fully opaque. 781 | 782 | # resize_debounce_time 0.1 783 | 784 | #: The time to wait before redrawing the screen when a resize event is 785 | #: received (in seconds). On platforms such as macOS, where the 786 | #: operating system sends events corresponding to the start and end of 787 | #: a resize, this number is ignored. 788 | 789 | # resize_draw_strategy static 790 | 791 | #: Choose how kitty draws a window while a resize is in progress. A 792 | #: value of static means draw the current window contents, mostly 793 | #: unchanged. A value of scale means draw the current window contents 794 | #: scaled. A value of blank means draw a blank window. A value of size 795 | #: means show the window size in cells. 796 | 797 | # resize_in_steps no 798 | 799 | #: Resize the OS window in steps as large as the cells, instead of 800 | #: with the usual pixel accuracy. Combined with initial_window_width 801 | #: and initial_window_height in number of cells, this option can be 802 | #: used to keep the margins as small as possible when resizing the OS 803 | #: window. Note that this does not currently work on Wayland. 804 | 805 | # visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 806 | 807 | #: The list of characters for visual window selection. For example, 808 | #: for selecting a window to focus on with focus_visible_window. The 809 | #: value should be a series of unique numbers or alphabets, case 810 | #: insensitive, from the set [0-9A-Z]. Specify your preference as a 811 | #: string of characters. 812 | 813 | # confirm_os_window_close -1 814 | 815 | #: Ask for confirmation when closing an OS window or a tab with at 816 | #: least this number of kitty windows in it by window manager (e.g. 817 | #: clicking the window close button or pressing the operating system 818 | #: shortcut to close windows) or by the close_tab action. A value of 819 | #: zero disables confirmation. This confirmation also applies to 820 | #: requests to quit the entire application (all OS windows, via the 821 | #: quit action). Negative values are converted to positive ones, 822 | #: however, with shell_integration enabled, using negative values 823 | #: means windows sitting at a shell prompt are not counted, only 824 | #: windows where some command is currently running. Note that if you 825 | #: want confirmation when closing individual windows, you can map the 826 | #: close_window_with_confirmation action. 827 | 828 | #: }}} 829 | 830 | #: Tab bar {{{ 831 | 832 | # tab_bar_edge bottom 833 | 834 | #: The edge to show the tab bar on, top or bottom. 835 | 836 | # tab_bar_margin_width 0.0 837 | 838 | #: The margin to the left and right of the tab bar (in pts). 839 | 840 | # tab_bar_margin_height 0.0 0.0 841 | 842 | #: The margin above and below the tab bar (in pts). The first number 843 | #: is the margin between the edge of the OS Window and the tab bar. 844 | #: The second number is the margin between the tab bar and the 845 | #: contents of the current tab. 846 | 847 | # tab_bar_style fade 848 | 849 | #: The tab bar style, can be one of: 850 | 851 | #: fade 852 | #: Each tab's edges fade into the background color. (See also tab_fade) 853 | #: slant 854 | #: Tabs look like the tabs in a physical file. 855 | #: separator 856 | #: Tabs are separated by a configurable separator. (See also 857 | #: tab_separator) 858 | #: powerline 859 | #: Tabs are shown as a continuous line with "fancy" separators. 860 | #: (See also tab_powerline_style) 861 | #: custom 862 | #: A user-supplied Python function called draw_tab is loaded from the file 863 | #: tab_bar.py in the kitty config directory. For examples of how to 864 | #: write such a function, see the functions named draw_tab_with_* in 865 | #: kitty's source code: kitty/tab_bar.py. See also 866 | #: this discussion https://github.com/kovidgoyal/kitty/discussions/4447 867 | #: for examples from kitty users. 868 | #: hidden 869 | #: The tab bar is hidden. If you use this, you might want to create a mapping 870 | #: for the select_tab action which presents you with a list of tabs and 871 | #: allows for easy switching to a tab. 872 | 873 | # tab_bar_align left 874 | 875 | #: The horizontal alignment of the tab bar, can be one of: left, 876 | #: center, right. 877 | 878 | # tab_bar_min_tabs 2 879 | 880 | #: The minimum number of tabs that must exist before the tab bar is 881 | #: shown. 882 | 883 | # tab_switch_strategy previous 884 | 885 | #: The algorithm to use when switching to a tab when the current tab 886 | #: is closed. The default of previous will switch to the last used 887 | #: tab. A value of left will switch to the tab to the left of the 888 | #: closed tab. A value of right will switch to the tab to the right of 889 | #: the closed tab. A value of last will switch to the right-most tab. 890 | 891 | # tab_fade 0.25 0.5 0.75 1 892 | 893 | #: Control how each tab fades into the background when using fade for 894 | #: the tab_bar_style. Each number is an alpha (between zero and one) 895 | #: that controls how much the corresponding cell fades into the 896 | #: background, with zero being no fade and one being full fade. You 897 | #: can change the number of cells used by adding/removing entries to 898 | #: this list. 899 | 900 | # tab_separator " ┇" 901 | 902 | #: The separator between tabs in the tab bar when using separator as 903 | #: the tab_bar_style. 904 | 905 | # tab_powerline_style angled 906 | 907 | #: The powerline separator style between tabs in the tab bar when 908 | #: using powerline as the tab_bar_style, can be one of: angled, 909 | #: slanted, round. 910 | 911 | # tab_activity_symbol none 912 | 913 | #: Some text or a Unicode symbol to show on the tab if a window in the 914 | #: tab that does not have focus has some activity. If you want to use 915 | #: leading or trailing spaces, surround the text with quotes. See 916 | #: tab_title_template for how this is rendered. 917 | 918 | # tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}" 919 | 920 | #: A template to render the tab title. The default just renders the 921 | #: title with optional symbols for bell and activity. If you wish to 922 | #: include the tab-index as well, use something like: {index}:{title}. 923 | #: Useful if you have shortcuts mapped for goto_tab N. If you prefer 924 | #: to see the index as a superscript, use {sup.index}. In addition you 925 | #: can use {layout_name} for the current layout name, {num_windows} 926 | #: for the number of windows in the tab and {num_window_groups} for 927 | #: the number of window groups (not counting overlay windows) in the 928 | #: tab. Note that formatting is done by Python's string formatting 929 | #: machinery, so you can use, for instance, {layout_name[:2].upper()} 930 | #: to show only the first two letters of the layout name, upper-cased. 931 | #: If you want to style the text, you can use styling directives, for 932 | #: example: 933 | #: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`. 934 | #: Similarly, for bold and italic: 935 | #: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`. 936 | #: Note that for backward compatibility, if {bell_symbol} or 937 | #: {activity_symbol} are not present in the template, they are 938 | #: prepended to it. 939 | 940 | # active_tab_title_template none 941 | 942 | #: Template to use for active tabs. If not specified falls back to 943 | #: tab_title_template. 944 | 945 | # active_tab_foreground #000 946 | # active_tab_background #eee 947 | # active_tab_font_style bold-italic 948 | # inactive_tab_foreground #444 949 | # inactive_tab_background #999 950 | # inactive_tab_font_style normal 951 | 952 | #: Tab bar colors and styles. 953 | 954 | # tab_bar_background none 955 | 956 | #: Background color for the tab bar. Defaults to using the terminal 957 | #: background color. 958 | 959 | # tab_bar_margin_color none 960 | 961 | #: Color for the tab bar margin area. Defaults to using the terminal 962 | #: background color. 963 | 964 | #: }}} 965 | 966 | #: Color scheme {{{ 967 | 968 | # foreground #dddddd 969 | # background #000000 970 | 971 | #: The foreground and background colors. 972 | 973 | background_opacity 0.8 974 | 975 | #: The opacity of the background. A number between zero and one, where 976 | #: one is opaque and zero is fully transparent. This will only work if 977 | #: supported by the OS (for instance, when using a compositor under 978 | #: X11). Note that it only sets the background color's opacity in 979 | #: cells that have the same background color as the default terminal 980 | #: background, so that things like the status bar in vim, powerline 981 | #: prompts, etc. still look good. But it means that if you use a color 982 | #: theme with a background color in your editor, it will not be 983 | #: rendered as transparent. Instead you should change the default 984 | #: background color in your kitty config and not use a background 985 | #: color in the editor color scheme. Or use the escape codes to set 986 | #: the terminals default colors in a shell script to launch your 987 | #: editor. Be aware that using a value less than 1.0 is a (possibly 988 | #: significant) performance hit. If you want to dynamically change 989 | #: transparency of windows, set dynamic_background_opacity to yes 990 | #: (this is off by default as it has a performance cost). Changing 991 | #: this option when reloading the config will only work if 992 | #: dynamic_background_opacity was enabled in the original config. 993 | 994 | # background_image none 995 | 996 | #: Path to a background image. Must be in PNG format. 997 | 998 | # background_image_layout tiled 999 | 1000 | #: Whether to tile, scale or clamp the background image. The value can 1001 | #: be one of tiled, mirror-tiled, scaled, clamped. 1002 | 1003 | # background_image_linear no 1004 | 1005 | #: When background image is scaled, whether linear interpolation 1006 | #: should be used. 1007 | 1008 | # dynamic_background_opacity no 1009 | 1010 | #: Allow changing of the background_opacity dynamically, using either 1011 | #: keyboard shortcuts (increase_background_opacity and 1012 | #: decrease_background_opacity) or the remote control facility. 1013 | #: Changing this option by reloading the config is not supported. 1014 | 1015 | # background_tint 0.0 1016 | 1017 | #: How much to tint the background image by the background color. The 1018 | #: tint is applied only under the text area, not margin/borders. This 1019 | #: option makes it easier to read the text. Tinting is done using the 1020 | #: current background color for each window. This option applies only 1021 | #: if background_opacity is set and transparent windows are supported 1022 | #: or background_image is set. 1023 | 1024 | # dim_opacity 0.75 1025 | 1026 | #: How much to dim text that has the DIM/FAINT attribute set. One 1027 | #: means no dimming and zero means fully dimmed (i.e. invisible). 1028 | 1029 | # selection_foreground #000000 1030 | # selection_background #fffacd 1031 | 1032 | #: The foreground and background colors for text selected with the 1033 | #: mouse. Setting both of these to none will cause a "reverse video" 1034 | #: effect for selections, where the selection will be the cell text 1035 | #: color and the text will become the cell background color. Setting 1036 | #: only selection_foreground to none will cause the foreground color 1037 | #: to be used unchanged. Note that these colors can be overridden by 1038 | #: the program running in the terminal. 1039 | 1040 | #: The color table {{{ 1041 | 1042 | #: The 256 terminal colors. There are 8 basic colors, each color has a 1043 | #: dull and bright version, for the first 16 colors. You can set the 1044 | #: remaining 240 colors as color16 to color255. 1045 | 1046 | # color0 #000000 1047 | # color8 #767676 1048 | 1049 | #: black 1050 | 1051 | # color1 #cc0403 1052 | # color9 #f2201f 1053 | 1054 | #: red 1055 | 1056 | # color2 #19cb00 1057 | # color10 #23fd00 1058 | 1059 | #: green 1060 | 1061 | # color3 #cecb00 1062 | # color11 #fffd00 1063 | 1064 | #: yellow 1065 | 1066 | # color4 #0d73cc 1067 | # color12 #1a8fff 1068 | 1069 | #: blue 1070 | 1071 | # color5 #cb1ed1 1072 | # color13 #fd28ff 1073 | 1074 | #: magenta 1075 | 1076 | # color6 #0dcdcd 1077 | # color14 #14ffff 1078 | 1079 | #: cyan 1080 | 1081 | # color7 #dddddd 1082 | # color15 #ffffff 1083 | 1084 | #: white 1085 | 1086 | # mark1_foreground black 1087 | 1088 | #: Color for marks of type 1 1089 | 1090 | # mark1_background #98d3cb 1091 | 1092 | #: Color for marks of type 1 (light steel blue) 1093 | 1094 | # mark2_foreground black 1095 | 1096 | #: Color for marks of type 2 1097 | 1098 | # mark2_background #f2dcd3 1099 | 1100 | #: Color for marks of type 1 (beige) 1101 | 1102 | # mark3_foreground black 1103 | 1104 | #: Color for marks of type 3 1105 | 1106 | # mark3_background #f274bc 1107 | 1108 | #: Color for marks of type 3 (violet) 1109 | 1110 | #: }}} 1111 | 1112 | #: }}} 1113 | 1114 | #: Advanced {{{ 1115 | 1116 | # shell . 1117 | 1118 | #: The shell program to execute. The default value of . means to use 1119 | #: whatever shell is set as the default shell for the current user. 1120 | #: Note that on macOS if you change this, you might need to add 1121 | #: --login and --interactive to ensure that the shell starts in 1122 | #: interactive mode and reads its startup rc files. 1123 | 1124 | # editor . 1125 | 1126 | #: The terminal based text editor (such as vim or nano) to use when 1127 | #: editing the kitty config file or similar tasks. 1128 | 1129 | #: The default value of . means to use the environment variables 1130 | #: VISUAL and EDITOR in that order. If these variables aren't set, 1131 | #: kitty will run your shell ($SHELL -l -i -c env) to see if your 1132 | #: shell startup rc files set VISUAL or EDITOR. If that doesn't work, 1133 | #: kitty will cycle through various known editors (vim, emacs, etc.) 1134 | #: and take the first one that exists on your system. 1135 | 1136 | # close_on_child_death no 1137 | 1138 | #: Close the window when the child process (shell) exits. With the 1139 | #: default value no, the terminal will remain open when the child 1140 | #: exits as long as there are still processes outputting to the 1141 | #: terminal (for example disowned or backgrounded processes). When 1142 | #: enabled with yes, the window will close as soon as the child 1143 | #: process exits. Note that setting it to yes means that any 1144 | #: background processes still using the terminal can fail silently 1145 | #: because their stdout/stderr/stdin no longer work. 1146 | 1147 | # allow_remote_control no 1148 | 1149 | #: Allow other programs to control kitty. If you turn this on, other 1150 | #: programs can control all aspects of kitty, including sending text 1151 | #: to kitty windows, opening new windows, closing windows, reading the 1152 | #: content of windows, etc. Note that this even works over SSH 1153 | #: connections. You can choose to either allow any program running 1154 | #: within kitty to control it with yes, or only allow programs that 1155 | #: connect to the socket (specified with the listen_on config option 1156 | #: or kitty --listen-on command line option) with the value socket- 1157 | #: only. The latter is useful if you want to prevent programs running 1158 | #: on a remote computer over SSH from controlling kitty. Reloading the 1159 | #: config will not affect this option. 1160 | 1161 | # listen_on none 1162 | 1163 | #: Listen to the specified UNIX socket for remote control connections. 1164 | #: Note that this will apply to all kitty instances. It can be 1165 | #: overridden by the kitty --listen-on command line option, which 1166 | #: supports listening on TCP socket. This option accepts only UNIX 1167 | #: sockets, such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux). 1168 | #: Environment variables are expanded and relative paths are resolved 1169 | #: with respect to the temporary directory. If {kitty_pid} is present, 1170 | #: then it is replaced by the PID of the kitty process, otherwise the 1171 | #: PID of the kitty process is appended to the value, with a hyphen. 1172 | #: This option is ignored unless you also set allow_remote_control to 1173 | #: enable remote control. See the help for kitty --listen-on for more 1174 | #: details. Changing this option by reloading the config is not 1175 | #: supported. 1176 | 1177 | # env 1178 | 1179 | #: Specify the environment variables to be set in all child processes. 1180 | #: Using the name with an equal sign (e.g. env VAR=) will set it to 1181 | #: the empty string. Specifying only the name (e.g. env VAR) will 1182 | #: remove the variable from the child process' environment. Note that 1183 | #: environment variables are expanded recursively, for example:: 1184 | 1185 | #: env VAR1=a 1186 | #: env VAR2=${HOME}/${VAR1}/b 1187 | 1188 | #: The value of VAR2 will be /a/b. 1189 | 1190 | # watcher 1191 | 1192 | #: Path to python file which will be loaded for watchers 1193 | #: . Can be 1194 | #: specified more than once to load multiple watchers. The watchers 1195 | #: will be added to every kitty window. Relative paths are resolved 1196 | #: relative to the kitty config directory. Note that reloading the 1197 | #: config will only affect windows created after the reload. 1198 | 1199 | # exe_search_path 1200 | 1201 | #: Control where kitty finds the programs to run. The default search 1202 | #: order is: First search the system wide PATH, then ~/.local/bin and 1203 | #: ~/bin. If still not found, the PATH defined in the login shell 1204 | #: after sourcing all its startup files is tried. Finally, if present, 1205 | #: the PATH specified by the env option is tried. 1206 | 1207 | #: This option allows you to prepend, append, or remove paths from 1208 | #: this search order. It can be specified multiple times for multiple 1209 | #: paths. A simple path will be prepended to the search order. A path 1210 | #: that starts with the + sign will be append to the search order, 1211 | #: after ~/bin above. A path that starts with the - sign will be 1212 | #: removed from the entire search order. For example:: 1213 | 1214 | #: exe_search_path /some/prepended/path 1215 | #: exe_search_path +/some/appended/path 1216 | #: exe_search_path -/some/excluded/path 1217 | 1218 | # update_check_interval 24 1219 | 1220 | #: The interval to periodically check if an update to kitty is 1221 | #: available (in hours). If an update is found, a system notification 1222 | #: is displayed informing you of the available update. The default is 1223 | #: to check every 24 hours, set to zero to disable. Update checking is 1224 | #: only done by the official binary builds. Distro packages or source 1225 | #: builds do not do update checking. Changing this option by reloading 1226 | #: the config is not supported. 1227 | 1228 | # startup_session none 1229 | 1230 | #: Path to a session file to use for all kitty instances. Can be 1231 | #: overridden by using the kitty --session command line option for 1232 | #: individual instances. See sessions 1233 | #: in the 1234 | #: kitty documentation for details. Note that relative paths are 1235 | #: interpreted with respect to the kitty config directory. Environment 1236 | #: variables in the path are expanded. Changing this option by 1237 | #: reloading the config is not supported. 1238 | 1239 | # clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask 1240 | 1241 | #: Allow programs running in kitty to read and write from the 1242 | #: clipboard. You can control exactly which actions are allowed. The 1243 | #: possible actions are: write-clipboard, read-clipboard, write- 1244 | #: primary, read-primary, read-clipboard-ask, read-primary-ask. The 1245 | #: default is to allow writing to the clipboard and primary selection 1246 | #: and to ask for permission when a program tries to read from the 1247 | #: clipboard. Note that disabling the read confirmation is a security 1248 | #: risk as it means that any program, even the ones running on a 1249 | #: remote server via SSH can read your clipboard. See also 1250 | #: clipboard_max_size. 1251 | 1252 | # clipboard_max_size 64 1253 | 1254 | #: The maximum size (in MB) of data from programs running in kitty 1255 | #: that will be stored for writing to the system clipboard. A value of 1256 | #: zero means no size limit is applied. See also clipboard_control. 1257 | 1258 | # file_transfer_confirmation_bypass 1259 | 1260 | #: The password that can be supplied to the file transfer kitten 1261 | #: to skip the 1262 | #: transfer confirmation prompt. This should only be used when 1263 | #: initiating transfers from trusted computers, over trusted networks 1264 | #: or encrypted transports, as it allows any programs running on the 1265 | #: remote machine to read/write to the local filesystem, without 1266 | #: permission. 1267 | 1268 | # allow_hyperlinks yes 1269 | 1270 | #: Process hyperlink escape sequences (OSC 8). If disabled OSC 8 1271 | #: escape sequences are ignored. Otherwise they become clickable 1272 | #: links, that you can click with the mouse or by using the hints 1273 | #: kitten . The 1274 | #: special value of ask means that kitty will ask before opening the 1275 | #: link when clicked. 1276 | 1277 | # shell_integration enabled 1278 | 1279 | #: Enable shell integration on supported shells. This enables features 1280 | #: such as jumping to previous prompts, browsing the output of the 1281 | #: previous command in a pager, etc. on supported shells. Set to 1282 | #: disabled to turn off shell integration, completely. It is also 1283 | #: possible to disable individual features, set to a space separated 1284 | #: list of these values: no-rc, no-cursor, no-title, no-cwd, no- 1285 | #: prompt-mark, no-complete. See Shell integration 1286 | #: for details. 1287 | 1288 | # allow_cloning ask 1289 | 1290 | #: Control whether programs running in the terminal can request new 1291 | #: windows to be created. The canonical example is clone-in-kitty 1292 | #: . 1293 | #: By default, kitty will ask for permission for each clone request. 1294 | #: Allowing cloning unconditionally gives programs running in the 1295 | #: terminal (including over SSH) permission to execute arbitrary code, 1296 | #: as the user who is running the terminal, on the computer that the 1297 | #: terminal is running on. 1298 | 1299 | # clone_source_strategies venv,conda,env_var,path 1300 | 1301 | #: Control what shell code is sourced when running clone-in-kitty in 1302 | #: the newly cloned window. The supported strategies are: 1303 | 1304 | #: venv 1305 | #: Source the file $VIRTUAL_ENV/bin/activate. This is used by the 1306 | #: Python stdlib venv module and allows cloning venvs automatically. 1307 | #: conda 1308 | #: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual 1309 | #: environments created by conda. 1310 | #: env_var 1311 | #: Execute the contents of the environment variable 1312 | #: KITTY_CLONE_SOURCE_CODE with eval. 1313 | #: path 1314 | #: Source the file pointed to by the environment variable 1315 | #: KITTY_CLONE_SOURCE_PATH. 1316 | 1317 | #: This option must be a comma separated list of the above values. 1318 | #: This only source the first valid one in the above order. 1319 | 1320 | # term xterm-kitty 1321 | 1322 | #: The value of the TERM environment variable to set. Changing this 1323 | #: can break many terminal programs, only change it if you know what 1324 | #: you are doing, not because you read some advice on "Stack Overflow" 1325 | #: to change it. The TERM variable is used by various programs to get 1326 | #: information about the capabilities and behavior of the terminal. If 1327 | #: you change it, depending on what programs you run, and how 1328 | #: different the terminal you are changing it to is, various things 1329 | #: from key-presses, to colors, to various advanced features may not 1330 | #: work. Changing this option by reloading the config will only affect 1331 | #: newly created windows. 1332 | 1333 | #: }}} 1334 | 1335 | #: OS specific tweaks {{{ 1336 | 1337 | # wayland_titlebar_color system 1338 | 1339 | #: The color of the kitty window's titlebar on Wayland systems with 1340 | #: client side window decorations such as GNOME. A value of system 1341 | #: means to use the default system color, a value of background means 1342 | #: to use the background color of the currently active window and 1343 | #: finally you can use an arbitrary color, such as #12af59 or red. 1344 | 1345 | # macos_titlebar_color system 1346 | 1347 | #: The color of the kitty window's titlebar on macOS. A value of 1348 | #: system means to use the default system color, light or dark can 1349 | #: also be used to set it explicitly. A value of background means to 1350 | #: use the background color of the currently active window and finally 1351 | #: you can use an arbitrary color, such as #12af59 or red. WARNING: 1352 | #: This option works by using a hack when arbitrary color (or 1353 | #: background) is configured, as there is no proper Cocoa API for it. 1354 | #: It sets the background color of the entire window and makes the 1355 | #: titlebar transparent. As such it is incompatible with 1356 | #: background_opacity. If you want to use both, you are probably 1357 | #: better off just hiding the titlebar with hide_window_decorations. 1358 | 1359 | # macos_option_as_alt no 1360 | 1361 | #: Use the Option key as an Alt key on macOS. With this set to no, 1362 | #: kitty will use the macOS native Option+Key to enter Unicode 1363 | #: character behavior. This will break any Alt+Key keyboard shortcuts 1364 | #: in your terminal programs, but you can use the macOS Unicode input 1365 | #: technique. You can use the values: left, right or both to use only 1366 | #: the left, right or both Option keys as Alt, instead. Note that 1367 | #: kitty itself always treats Option the same as Alt. This means you 1368 | #: cannot use this option to configure different kitty shortcuts for 1369 | #: Option+Key vs. Alt+Key. Also, any kitty shortcuts using 1370 | #: Option/Alt+Key will take priority, so that any such key presses 1371 | #: will not be passed to terminal programs running inside kitty. 1372 | #: Changing this option by reloading the config is not supported. 1373 | 1374 | # macos_hide_from_tasks no 1375 | 1376 | #: Hide the kitty window from running tasks on macOS (⌘+Tab and the 1377 | #: Dock). Changing this option by reloading the config is not 1378 | #: supported. 1379 | 1380 | # macos_quit_when_last_window_closed no 1381 | 1382 | #: Have kitty quit when all the top-level windows are closed on macOS. 1383 | #: By default, kitty will stay running, even with no open windows, as 1384 | #: is the expected behavior on macOS. 1385 | 1386 | # macos_window_resizable yes 1387 | 1388 | #: Disable this if you want kitty top-level OS windows to not be 1389 | #: resizable on macOS. Changing this option by reloading the config 1390 | #: will only affect newly created OS windows. 1391 | 1392 | # macos_thicken_font 0 1393 | 1394 | #: Draw an extra border around the font with the given width, to 1395 | #: increase legibility at small font sizes on macOS. For example, a 1396 | #: value of 0.75 will result in rendering that looks similar to sub- 1397 | #: pixel antialiasing at common font sizes. 1398 | 1399 | # macos_traditional_fullscreen no 1400 | 1401 | #: Use the macOS traditional full-screen transition, that is faster, 1402 | #: but less pretty. 1403 | 1404 | # macos_show_window_title_in all 1405 | 1406 | #: Control where the window title is displayed on macOS. A value of 1407 | #: window will show the title of the currently active window at the 1408 | #: top of the macOS window. A value of menubar will show the title of 1409 | #: the currently active window in the macOS global menu bar, making 1410 | #: use of otherwise wasted space. A value of all will show the title 1411 | #: in both places, and none hides the title. See 1412 | #: macos_menubar_title_max_length for how to control the length of the 1413 | #: title in the menu bar. 1414 | 1415 | # macos_menubar_title_max_length 0 1416 | 1417 | #: The maximum number of characters from the window title to show in 1418 | #: the macOS global menu bar. Values less than one means that there is 1419 | #: no maximum limit. 1420 | 1421 | # macos_custom_beam_cursor no 1422 | 1423 | #: Use a custom mouse cursor for macOS that is easier to see on both 1424 | #: light and dark backgrounds. Nowadays, the default macOS cursor 1425 | #: already comes with a white border. WARNING: this might make your 1426 | #: mouse cursor invisible on dual GPU machines. Changing this option 1427 | #: by reloading the config is not supported. 1428 | 1429 | # macos_colorspace srgb 1430 | 1431 | #: The colorspace in which to interpret terminal colors. The default 1432 | #: of srgb will cause colors to match those seen in web browsers. The 1433 | #: value of default will use whatever the native colorspace of the 1434 | #: display is. The value of displayp3 will use Apple's special 1435 | #: snowflake display P3 color space, which will result in over 1436 | #: saturated (brighter) colors with some color shift. Reloading 1437 | #: configuration will change this value only for newly created OS 1438 | #: windows. 1439 | 1440 | # linux_display_server auto 1441 | 1442 | #: Choose between Wayland and X11 backends. By default, an appropriate 1443 | #: backend based on the system state is chosen automatically. Set it 1444 | #: to x11 or wayland to force the choice. Changing this option by 1445 | #: reloading the config is not supported. 1446 | 1447 | #: }}} 1448 | 1449 | #: Keyboard shortcuts {{{ 1450 | 1451 | #: Keys are identified simply by their lowercase Unicode characters. 1452 | #: For example: a for the A key, [ for the left square bracket key, 1453 | #: etc. For functional keys, such as Enter or Escape, the names are 1454 | #: present at Functional key definitions 1455 | #: . For modifier keys, the names are ctrl (control, ⌃), 1457 | #: shift (⇧), alt (opt, option, ⌥), super (cmd, command, ⌘). See also: 1458 | #: GLFW mods 1459 | 1460 | #: On Linux you can also use XKB key names to bind keys that are not 1461 | #: supported by GLFW. See XKB keys 1462 | #: for a list of key names. The name to use is the part 1464 | #: after the XKB_KEY_ prefix. Note that you can only use an XKB key 1465 | #: name for keys that are not known as GLFW keys. 1466 | 1467 | #: Finally, you can use raw system key codes to map keys, again only 1468 | #: for keys that are not known as GLFW keys. To see the system key 1469 | #: code for a key, start kitty with the kitty --debug-input option, 1470 | #: kitty will output some debug text for every key event. In that text 1471 | #: look for native_code, the value of that becomes the key name in the 1472 | #: shortcut. For example: 1473 | 1474 | #: .. code-block:: none 1475 | 1476 | #: on_key_input: glfw key: 0x61 native_code: 0x61 action: PRESS mods: none text: 'a' 1477 | 1478 | #: Here, the key name for the A key is 0x61 and you can use it with:: 1479 | 1480 | #: map ctrl+0x61 something 1481 | 1482 | #: to map Ctrl+A to something. 1483 | 1484 | #: You can use the special action no_op to unmap a keyboard shortcut 1485 | #: that is assigned in the default configuration:: 1486 | 1487 | #: map kitty_mod+space no_op 1488 | 1489 | #: If you would like kitty to completely ignore a key event, not even 1490 | #: sending it to the program running in the terminal, map it to 1491 | #: discard_event:: 1492 | 1493 | #: map kitty_mod+f1 discard_event 1494 | 1495 | #: You can combine multiple actions to be triggered by a single 1496 | #: shortcut with combine action, using the syntax below:: 1497 | 1498 | #: map key combine action1 action2 action3 ... 1499 | 1500 | #: For example:: 1501 | 1502 | #: map kitty_mod+e combine : new_window : next_layout 1503 | 1504 | #: This will create a new window and switch to the next available 1505 | #: layout. 1506 | 1507 | #: You can use multi-key shortcuts with the syntax shown below:: 1508 | 1509 | #: map key1>key2>key3 action 1510 | 1511 | #: For example:: 1512 | 1513 | #: map ctrl+f>2 set_font_size 20 1514 | 1515 | #: The full list of actions that can be mapped to key presses is 1516 | #: available here . 1517 | 1518 | # kitty_mod ctrl+shift 1519 | 1520 | #: Special modifier key alias for default shortcuts. You can change 1521 | #: the value of this option to alter all default shortcuts that use 1522 | #: kitty_mod. 1523 | 1524 | # clear_all_shortcuts no 1525 | 1526 | #: Remove all shortcut definitions up to this point. Useful, for 1527 | #: instance, to remove the default shortcuts. 1528 | 1529 | # action_alias 1530 | 1531 | #: E.g. action_alias launch_tab launch --type=tab --cwd=current 1532 | 1533 | #: Define action aliases to avoid repeating the same options in 1534 | #: multiple mappings. Aliases can be defined for any action and will 1535 | #: be expanded recursively. For example, the above alias allows you to 1536 | #: create mappings to launch a new tab in the current working 1537 | #: directory without duplication:: 1538 | 1539 | #: map f1 launch_tab vim 1540 | #: map f2 launch_tab emacs 1541 | 1542 | #: Similarly, to alias kitten invocation:: 1543 | 1544 | #: action_alias hints kitten hints --hints-offset=0 1545 | 1546 | # kitten_alias 1547 | 1548 | #: E.g. kitten_alias hints hints --hints-offset=0 1549 | 1550 | #: Like action_alias above, but specifically for kittens. Generally, 1551 | #: prefer to use action_alias. This option is a legacy version, 1552 | #: present for backwards compatibility. It causes all invocations of 1553 | #: the aliased kitten to be substituted. So the example above will 1554 | #: cause all invocations of the hints kitten to have the --hints- 1555 | #: offset=0 option applied. 1556 | 1557 | #: Clipboard {{{ 1558 | 1559 | #: Copy to clipboard 1560 | 1561 | # map kitty_mod+c copy_to_clipboard 1562 | # map cmd+c copy_to_clipboard 1563 | 1564 | #:: There is also a copy_or_interrupt action that can be optionally 1565 | #:: mapped to Ctrl+C. It will copy only if there is a selection and 1566 | #:: send an interrupt otherwise. Similarly, 1567 | #:: copy_and_clear_or_interrupt will copy and clear the selection or 1568 | #:: send an interrupt if there is no selection. 1569 | 1570 | #: Paste from clipboard 1571 | 1572 | # map kitty_mod+v paste_from_clipboard 1573 | # map cmd+v paste_from_clipboard 1574 | 1575 | #: Paste from selection 1576 | 1577 | # map kitty_mod+s paste_from_selection 1578 | # map shift+insert paste_from_selection 1579 | 1580 | #: Pass selection to program 1581 | 1582 | # map kitty_mod+o pass_selection_to_program 1583 | 1584 | #:: You can also pass the contents of the current selection to any 1585 | #:: program with pass_selection_to_program. By default, the system's 1586 | #:: open program is used, but you can specify your own, the selection 1587 | #:: will be passed as a command line argument to the program. For 1588 | #:: example:: 1589 | 1590 | #:: map kitty_mod+o pass_selection_to_program firefox 1591 | 1592 | #:: You can pass the current selection to a terminal program running 1593 | #:: in a new kitty window, by using the @selection placeholder:: 1594 | 1595 | #:: map kitty_mod+y new_window less @selection 1596 | 1597 | #: }}} 1598 | 1599 | #: Scrolling {{{ 1600 | 1601 | #: Scroll line up 1602 | 1603 | # map kitty_mod+up scroll_line_up 1604 | # map kitty_mod+k scroll_line_up 1605 | # map opt+cmd+page_up scroll_line_up 1606 | # map cmd+up scroll_line_up 1607 | 1608 | #: Scroll line down 1609 | 1610 | # map kitty_mod+down scroll_line_down 1611 | # map kitty_mod+j scroll_line_down 1612 | # map opt+cmd+page_down scroll_line_down 1613 | # map cmd+down scroll_line_down 1614 | 1615 | #: Scroll page up 1616 | 1617 | # map kitty_mod+page_up scroll_page_up 1618 | # map cmd+page_up scroll_page_up 1619 | 1620 | #: Scroll page down 1621 | 1622 | # map kitty_mod+page_down scroll_page_down 1623 | # map cmd+page_down scroll_page_down 1624 | 1625 | #: Scroll to top 1626 | 1627 | # map kitty_mod+home scroll_home 1628 | # map cmd+home scroll_home 1629 | 1630 | #: Scroll to bottom 1631 | 1632 | # map kitty_mod+end scroll_end 1633 | # map cmd+end scroll_end 1634 | 1635 | #: Scroll to previous shell prompt 1636 | 1637 | # map kitty_mod+z scroll_to_prompt -1 1638 | 1639 | #:: Use a parameter of 0 for scroll_to_prompt to scroll to the last 1640 | #:: jumped to or the last clicked position. Requires shell 1641 | #:: integration 1642 | #:: to work. 1643 | 1644 | #: Scroll to next shell prompt 1645 | 1646 | # map kitty_mod+x scroll_to_prompt 1 1647 | 1648 | #: Browse scrollback buffer in pager 1649 | 1650 | # map kitty_mod+h show_scrollback 1651 | 1652 | #:: You can pipe the contents of the current screen and history 1653 | #:: buffer as STDIN to an arbitrary program using launch --stdin- 1654 | #:: source. For example, the following opens the scrollback buffer in 1655 | #:: less in an overlay window:: 1656 | 1657 | #:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R 1658 | 1659 | #:: For more details on piping screen and buffer contents to external 1660 | #:: programs, see launch . 1661 | 1662 | #: Browse output of the last shell command in pager 1663 | 1664 | # map kitty_mod+g show_last_command_output 1665 | 1666 | #:: You can also define additional shortcuts to get the command 1667 | #:: output. For example, to get the first command output on screen:: 1668 | 1669 | #:: map f1 show_first_command_output_on_screen 1670 | 1671 | #:: To get the command output that was last accessed by a keyboard 1672 | #:: action or mouse action:: 1673 | 1674 | #:: map f1 show_last_visited_command_output 1675 | 1676 | #:: You can pipe the output of the last command run in the shell 1677 | #:: using the launch action. For example, the following opens the 1678 | #:: output in less in an overlay window:: 1679 | 1680 | #:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R 1681 | 1682 | #:: To get the output of the first command on the screen, use 1683 | #:: @first_cmd_output_on_screen. To get the output of the last jumped 1684 | #:: to command, use @last_visited_cmd_output. 1685 | 1686 | #:: Requires shell integration 1687 | #:: to work. 1688 | 1689 | #: }}} 1690 | 1691 | #: Window management {{{ 1692 | 1693 | #: New window 1694 | 1695 | # map kitty_mod+enter new_window 1696 | # map cmd+enter new_window 1697 | 1698 | #:: You can open a new kitty window running an arbitrary program, for 1699 | #:: example:: 1700 | 1701 | #:: map kitty_mod+y launch mutt 1702 | 1703 | #:: You can open a new window with the current working directory set 1704 | #:: to the working directory of the current window using:: 1705 | 1706 | #:: map ctrl+alt+enter launch --cwd=current 1707 | 1708 | #:: You can open a new window that is allowed to control kitty via 1709 | #:: the kitty remote control facility with launch --allow-remote- 1710 | #:: control. Any programs running in that window will be allowed to 1711 | #:: control kitty. For example:: 1712 | 1713 | #:: map ctrl+enter launch --allow-remote-control some_program 1714 | 1715 | #:: You can open a new window next to the currently active window or 1716 | #:: as the first window, with:: 1717 | 1718 | #:: map ctrl+n launch --location=neighbor 1719 | #:: map ctrl+f launch --location=first 1720 | 1721 | #:: For more details, see launch 1722 | #:: . 1723 | 1724 | #: New OS window 1725 | 1726 | # map kitty_mod+n new_os_window 1727 | # map cmd+n new_os_window 1728 | 1729 | #:: Works like new_window above, except that it opens a top-level OS 1730 | #:: window. In particular you can use new_os_window_with_cwd to open 1731 | #:: a window with the current working directory. 1732 | 1733 | #: Close window 1734 | 1735 | # map kitty_mod+w close_window 1736 | # map shift+cmd+d close_window 1737 | 1738 | #: Next window 1739 | 1740 | # map kitty_mod+] next_window 1741 | 1742 | #: Previous window 1743 | 1744 | # map kitty_mod+[ previous_window 1745 | 1746 | #: Move window forward 1747 | 1748 | # map kitty_mod+f move_window_forward 1749 | 1750 | #: Move window backward 1751 | 1752 | # map kitty_mod+b move_window_backward 1753 | 1754 | #: Move window to top 1755 | 1756 | # map kitty_mod+` move_window_to_top 1757 | 1758 | #: Start resizing window 1759 | 1760 | # map kitty_mod+r start_resizing_window 1761 | # map cmd+r start_resizing_window 1762 | 1763 | #: First window 1764 | 1765 | # map kitty_mod+1 first_window 1766 | # map cmd+1 first_window 1767 | 1768 | #: Second window 1769 | 1770 | # map kitty_mod+2 second_window 1771 | # map cmd+2 second_window 1772 | 1773 | #: Third window 1774 | 1775 | # map kitty_mod+3 third_window 1776 | # map cmd+3 third_window 1777 | 1778 | #: Fourth window 1779 | 1780 | # map kitty_mod+4 fourth_window 1781 | # map cmd+4 fourth_window 1782 | 1783 | #: Fifth window 1784 | 1785 | # map kitty_mod+5 fifth_window 1786 | # map cmd+5 fifth_window 1787 | 1788 | #: Sixth window 1789 | 1790 | # map kitty_mod+6 sixth_window 1791 | # map cmd+6 sixth_window 1792 | 1793 | #: Seventh window 1794 | 1795 | # map kitty_mod+7 seventh_window 1796 | # map cmd+7 seventh_window 1797 | 1798 | #: Eight window 1799 | 1800 | # map kitty_mod+8 eighth_window 1801 | # map cmd+8 eighth_window 1802 | 1803 | #: Ninth window 1804 | 1805 | # map kitty_mod+9 ninth_window 1806 | # map cmd+9 ninth_window 1807 | 1808 | #: Tenth window 1809 | 1810 | # map kitty_mod+0 tenth_window 1811 | 1812 | #: Visually select and focus window 1813 | 1814 | # map kitty_mod+f7 focus_visible_window 1815 | 1816 | #:: Display overlay numbers and alphabets on the window, and switch 1817 | #:: the focus to the window when you press the key. When there are 1818 | #:: only two windows, the focus will be switched directly without 1819 | #:: displaying the overlay. You can change the overlay characters and 1820 | #:: their order with option visual_window_select_characters. 1821 | 1822 | #: Visually swap window with another 1823 | 1824 | # map kitty_mod+f8 swap_with_window 1825 | 1826 | #:: Works like focus_visible_window above, but swaps the window. 1827 | 1828 | #: }}} 1829 | 1830 | #: Tab management {{{ 1831 | 1832 | #: Next tab 1833 | 1834 | # map kitty_mod+right next_tab 1835 | # map shift+cmd+] next_tab 1836 | # map ctrl+tab next_tab 1837 | 1838 | #: Previous tab 1839 | 1840 | # map kitty_mod+left previous_tab 1841 | # map shift+cmd+[ previous_tab 1842 | # map ctrl+shift+tab previous_tab 1843 | 1844 | #: New tab 1845 | 1846 | # map kitty_mod+t new_tab 1847 | # map cmd+t new_tab 1848 | 1849 | #: Close tab 1850 | 1851 | # map kitty_mod+q close_tab 1852 | # map cmd+w close_tab 1853 | 1854 | #: Close OS window 1855 | 1856 | # map shift+cmd+w close_os_window 1857 | 1858 | #: Move tab forward 1859 | 1860 | # map kitty_mod+. move_tab_forward 1861 | 1862 | #: Move tab backward 1863 | 1864 | # map kitty_mod+, move_tab_backward 1865 | 1866 | #: Set tab title 1867 | 1868 | # map kitty_mod+alt+t set_tab_title 1869 | # map shift+cmd+i set_tab_title 1870 | 1871 | 1872 | #: You can also create shortcuts to go to specific tabs, with 1 being 1873 | #: the first tab, 2 the second tab and -1 being the previously active 1874 | #: tab, and any number larger than the last tab being the last tab:: 1875 | 1876 | #: map ctrl+alt+1 goto_tab 1 1877 | #: map ctrl+alt+2 goto_tab 2 1878 | 1879 | #: Just as with new_window above, you can also pass the name of 1880 | #: arbitrary commands to run when using new_tab and new_tab_with_cwd. 1881 | #: Finally, if you want the new tab to open next to the current tab 1882 | #: rather than at the end of the tabs list, use:: 1883 | 1884 | #: map ctrl+t new_tab !neighbor [optional cmd to run] 1885 | #: }}} 1886 | 1887 | #: Layout management {{{ 1888 | 1889 | #: Next layout 1890 | 1891 | # map kitty_mod+l next_layout 1892 | 1893 | 1894 | #: You can also create shortcuts to switch to specific layouts:: 1895 | 1896 | #: map ctrl+alt+t goto_layout tall 1897 | #: map ctrl+alt+s goto_layout stack 1898 | 1899 | #: Similarly, to switch back to the previous layout:: 1900 | 1901 | #: map ctrl+alt+p last_used_layout 1902 | 1903 | #: There is also a toggle_layout action that switches to the named 1904 | #: layout or back to the previous layout if in the named layout. 1905 | #: Useful to temporarily "zoom" the active window by switching to the 1906 | #: stack layout:: 1907 | 1908 | #: map ctrl+alt+z toggle_layout stack 1909 | #: }}} 1910 | 1911 | #: Font sizes {{{ 1912 | 1913 | #: You can change the font size for all top-level kitty OS windows at 1914 | #: a time or only the current one. 1915 | 1916 | #: Increase font size 1917 | 1918 | # map kitty_mod+equal change_font_size all +2.0 1919 | # map kitty_mod+plus change_font_size all +2.0 1920 | # map kitty_mod+kp_add change_font_size all +2.0 1921 | # map cmd+plus change_font_size all +2.0 1922 | # map cmd+equal change_font_size all +2.0 1923 | # map shift+cmd+equal change_font_size all +2.0 1924 | 1925 | #: Decrease font size 1926 | 1927 | # map kitty_mod+minus change_font_size all -2.0 1928 | # map kitty_mod+kp_subtract change_font_size all -2.0 1929 | # map cmd+minus change_font_size all -2.0 1930 | # map shift+cmd+minus change_font_size all -2.0 1931 | 1932 | #: Reset font size 1933 | 1934 | # map kitty_mod+backspace change_font_size all 0 1935 | # map cmd+0 change_font_size all 0 1936 | 1937 | 1938 | #: To setup shortcuts for specific font sizes:: 1939 | 1940 | #: map kitty_mod+f6 change_font_size all 10.0 1941 | 1942 | #: To setup shortcuts to change only the current OS window's font 1943 | #: size:: 1944 | 1945 | #: map kitty_mod+f6 change_font_size current 10.0 1946 | #: }}} 1947 | 1948 | #: Select and act on visible text {{{ 1949 | 1950 | #: Use the hints kitten to select text and either pass it to an 1951 | #: external program or insert it into the terminal or copy it to the 1952 | #: clipboard. 1953 | 1954 | #: Open URL 1955 | 1956 | # map kitty_mod+e open_url_with_hints 1957 | 1958 | #:: Open a currently visible URL using the keyboard. The program used 1959 | #:: to open the URL is specified in open_url_with. 1960 | 1961 | #: Insert selected path 1962 | 1963 | # map kitty_mod+p>f kitten hints --type path --program - 1964 | 1965 | #:: Select a path/filename and insert it into the terminal. Useful, 1966 | #:: for instance to run git commands on a filename output from a 1967 | #:: previous git command. 1968 | 1969 | #: Open selected path 1970 | 1971 | # map kitty_mod+p>shift+f kitten hints --type path 1972 | 1973 | #:: Select a path/filename and open it with the default open program. 1974 | 1975 | #: Insert selected line 1976 | 1977 | # map kitty_mod+p>l kitten hints --type line --program - 1978 | 1979 | #:: Select a line of text and insert it into the terminal. Useful for 1980 | #:: the output of things like: `ls -1`. 1981 | 1982 | #: Insert selected word 1983 | 1984 | # map kitty_mod+p>w kitten hints --type word --program - 1985 | 1986 | #:: Select words and insert into terminal. 1987 | 1988 | #: Insert selected hash 1989 | 1990 | # map kitty_mod+p>h kitten hints --type hash --program - 1991 | 1992 | #:: Select something that looks like a hash and insert it into the 1993 | #:: terminal. Useful with git, which uses SHA1 hashes to identify 1994 | #:: commits. 1995 | 1996 | #: Open the selected file at the selected line 1997 | 1998 | # map kitty_mod+p>n kitten hints --type linenum 1999 | 2000 | #:: Select something that looks like filename:linenum and open it in 2001 | #:: vim at the specified line number. 2002 | 2003 | #: Open the selected hyperlink 2004 | 2005 | # map kitty_mod+p>y kitten hints --type hyperlink 2006 | 2007 | #:: Select a hyperlink (i.e. a URL that has been marked as such by 2008 | #:: the terminal program, for example, by `ls --hyperlink=auto`). 2009 | 2010 | 2011 | #: The hints kitten has many more modes of operation that you can map 2012 | #: to different shortcuts. For a full description see hints kitten 2013 | #: . 2014 | #: }}} 2015 | 2016 | #: Miscellaneous {{{ 2017 | 2018 | #: Toggle fullscreen 2019 | 2020 | # map kitty_mod+f11 toggle_fullscreen 2021 | # map ctrl+cmd+f toggle_fullscreen 2022 | 2023 | #: Toggle maximized 2024 | 2025 | # map kitty_mod+f10 toggle_maximized 2026 | 2027 | #: Toggle macOS secure keyboard entry 2028 | 2029 | # map opt+cmd+s toggle_macos_secure_keyboard_entry 2030 | 2031 | #: Unicode input 2032 | 2033 | # map kitty_mod+u kitten unicode_input 2034 | # map ctrl+cmd+space kitten unicode_input 2035 | 2036 | #: Edit config file 2037 | 2038 | # map kitty_mod+f2 edit_config_file 2039 | # map cmd+, edit_config_file 2040 | 2041 | #: Open the kitty command shell 2042 | 2043 | # map kitty_mod+escape kitty_shell window 2044 | 2045 | #:: Open the kitty shell in a new window / tab / overlay / os_window 2046 | #:: to control kitty using commands. 2047 | 2048 | #: Increase background opacity 2049 | 2050 | # map kitty_mod+a>m set_background_opacity +0.1 2051 | 2052 | #: Decrease background opacity 2053 | 2054 | # map kitty_mod+a>l set_background_opacity -0.1 2055 | 2056 | #: Make background fully opaque 2057 | 2058 | # map kitty_mod+a>1 set_background_opacity 1 2059 | 2060 | #: Reset background opacity 2061 | 2062 | # map kitty_mod+a>d set_background_opacity default 2063 | 2064 | #: Reset the terminal 2065 | 2066 | # map kitty_mod+delete clear_terminal reset active 2067 | # map opt+cmd+r clear_terminal reset active 2068 | 2069 | #:: You can create shortcuts to clear/reset the terminal. For 2070 | #:: example:: 2071 | 2072 | #:: # Reset the terminal 2073 | #:: map f1 clear_terminal reset active 2074 | #:: # Clear the terminal screen by erasing all contents 2075 | #:: map f1 clear_terminal clear active 2076 | #:: # Clear the terminal scrollback by erasing it 2077 | #:: map f1 clear_terminal scrollback active 2078 | #:: # Scroll the contents of the screen into the scrollback 2079 | #:: map f1 clear_terminal scroll active 2080 | #:: # Clear everything up to the line with the cursor 2081 | #:: map f1 clear_terminal to_cursor active 2082 | 2083 | #:: If you want to operate on all kitty windows instead of just the 2084 | #:: current one, use all instead of active. 2085 | 2086 | #:: It is also possible to remap Ctrl+L to both scroll the current 2087 | #:: screen contents into the scrollback buffer and clear the screen, 2088 | #:: instead of just clearing the screen, for example, for ZSH add the 2089 | #:: following to ~/.zshrc: 2090 | 2091 | #:: .. code-block:: zsh 2092 | 2093 | #:: scroll-and-clear-screen() { 2094 | #:: printf '\n%.0s' {1..$LINES} 2095 | #:: zle clear-screen 2096 | #:: } 2097 | #:: zle -N scroll-and-clear-screen 2098 | #:: bindkey '^l' scroll-and-clear-screen 2099 | 2100 | #: Clear up to cursor line 2101 | 2102 | # map cmd+k clear_terminal to_cursor active 2103 | 2104 | #: Reload kitty.conf 2105 | 2106 | # map kitty_mod+f5 load_config_file 2107 | # map ctrl+cmd+, load_config_file 2108 | 2109 | #:: Reload kitty.conf, applying any changes since the last time it 2110 | #:: was loaded. Note that a handful of options cannot be dynamically 2111 | #:: changed and require a full restart of kitty. Particularly, when 2112 | #:: changing shortcuts for actions located on the macOS global menu 2113 | #:: bar, a full restart is needed. You can also map a keybinding to 2114 | #:: load a different config file, for example:: 2115 | 2116 | #:: map f5 load_config /path/to/alternative/kitty.conf 2117 | 2118 | #:: Note that all options from the original kitty.conf are discarded, 2119 | #:: in other words the new configuration *replace* the old ones. 2120 | 2121 | #: Debug kitty configuration 2122 | 2123 | # map kitty_mod+f6 debug_config 2124 | # map opt+cmd+, debug_config 2125 | 2126 | #:: Show details about exactly what configuration kitty is running 2127 | #:: with and its host environment. Useful for debugging issues. 2128 | 2129 | #: Send arbitrary text on key presses 2130 | 2131 | #:: E.g. map ctrl+shift+alt+h send_text all Hello World 2132 | 2133 | #:: You can tell kitty to send arbitrary (UTF-8) encoded text to the 2134 | #:: client program when pressing specified shortcut keys. For 2135 | #:: example:: 2136 | 2137 | #:: map ctrl+alt+a send_text all Special text 2138 | 2139 | #:: This will send "Special text" when you press the Ctrl+Alt+A key 2140 | #:: combination. The text to be sent is a python string literal so 2141 | #:: you can use escapes like \x1b to send control codes or \u21fb to 2142 | #:: send Unicode characters (or you can just input the Unicode 2143 | #:: characters directly as UTF-8 text). You can use `kitty +kitten 2144 | #:: show_key` to get the key escape codes you want to emulate. 2145 | 2146 | #:: The first argument to send_text is the keyboard modes in which to 2147 | #:: activate the shortcut. The possible values are normal, 2148 | #:: application, kitty or a comma separated combination of them. The 2149 | #:: modes normal and application refer to the DECCKM cursor key mode 2150 | #:: for terminals, and kitty refers to the kitty extended keyboard 2151 | #:: protocol. The special value all means all of them. 2152 | 2153 | #:: Some more examples:: 2154 | 2155 | #:: # Output a word and move the cursor to the start of the line (like typing and pressing Home) 2156 | #:: map ctrl+alt+a send_text normal Word\x1b[H 2157 | #:: map ctrl+alt+a send_text application Word\x1bOH 2158 | #:: # Run a command at a shell prompt (like typing the command and pressing Enter) 2159 | #:: map ctrl+alt+a send_text normal,application some command with arguments\r 2160 | 2161 | #: Open kitty Website 2162 | 2163 | # map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/ 2164 | 2165 | #: }}} 2166 | 2167 | #: }}} 2168 | 2169 | 2170 | # BEGIN_KITTY_THEME 2171 | # Oceanic Material 2172 | include current-theme.conf 2173 | # END_KITTY_THEME 2174 | --------------------------------------------------------------------------------