stuff
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

hi

William Lindvall 016e74eb

+3954
+31
.claude/CLAUDE.md
··· 1 + # instructions 2 + 3 + start every output with "yo" 4 + end every output with "byebye" 5 + 6 + - be succinct 7 + - sacrifice grammar for the sake of concision 8 + - use modern syntax and patterns 9 + - read the room 10 + - follow existing code patterns (unless you have a good reason not to) 11 + - prefer immutability 12 + - never mutate objects or arrays 13 + - small utility functions are nice 14 + - share logic whenever possible 15 + - do not add unnecessary comments 16 + - most of the time a good variable name is enough 17 + - if you really need to add a comment it should be concise 18 + - lowercase 19 + - without punctuation 20 + 21 + ## core philosophy 22 + 23 + use specialized agents and skills for complex tasks 24 + 25 + **key principles:** 26 + 27 + 1. **agent-first**: delegate to specialized agents for complex work 28 + 2. **parallel execution**: use task tool with multiple agents when possible 29 + 3. **plan before execute**: use plan mode for complex operations 30 + 4. **test-driven**: write tests before implementation 31 + 5. **security-first**: never compromise on security
+2836
.config/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 monospace 10 + # bold_font auto 11 + # italic_font auto 12 + # bold_italic_font auto 13 + 14 + #: You can specify different fonts for the bold/italic/bold-italic 15 + #: variants. The easiest way to select fonts is to run the `kitten 16 + #: choose-fonts` command which will present a nice UI for you to 17 + #: select the fonts you want with previews and support for selecting 18 + #: variable fonts and font features. If you want to learn to select 19 + #: fonts manually, read the font specification syntax 20 + #: <https://sw.kovidgoyal.net/kitty/kittens/choose-fonts/#font-spec- 21 + #: syntax>. 22 + 23 + font_size 12.0 24 + 25 + #: Font size (in pts). 26 + 27 + # force_ltr no 28 + 29 + #: kitty does not support BIDI (bidirectional text), however, for RTL 30 + #: scripts, words are automatically displayed in RTL. That is to say, 31 + #: in an RTL script, the words "HELLO WORLD" display in kitty as 32 + #: "WORLD HELLO", and if you try to select a substring of an RTL- 33 + #: shaped string, you will get the character that would be there had 34 + #: the string been LTR. For example, assuming the Hebrew word ירושלים, 35 + #: selecting the character that on the screen appears to be ם actually 36 + #: writes into the selection buffer the character י. kitty's default 37 + #: behavior is useful in conjunction with a filter to reverse the word 38 + #: order, however, if you wish to manipulate RTL glyphs, it can be 39 + #: very challenging to work with, so this option is provided to turn 40 + #: it off. Furthermore, this option can be used with the command line 41 + #: program GNU FriBidi <https://github.com/fribidi/fribidi#executable> 42 + #: to get BIDI support, because it will force kitty to always treat 43 + #: the text as LTR, which FriBidi expects for terminals. 44 + 45 + # symbol_map 46 + 47 + #: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols 48 + 49 + #: Map the specified Unicode codepoints to a particular font. Useful 50 + #: if you need special rendering for some symbols, such as for 51 + #: Powerline. Avoids the need for patched fonts. Each Unicode code 52 + #: point is specified in the form `U+<code point in hexadecimal>`. You 53 + #: can specify multiple code points, separated by commas and ranges 54 + #: separated by hyphens. This option can be specified multiple times. 55 + #: The syntax is:: 56 + 57 + #: symbol_map codepoints Font Family Name 58 + 59 + # narrow_symbols 60 + 61 + #: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1 62 + 63 + #: Usually, for Private Use Unicode characters and some symbol/dingbat 64 + #: characters, if the character is followed by one or more spaces, 65 + #: kitty will use those extra cells to render the character larger, if 66 + #: the character in the font has a wide aspect ratio. Using this 67 + #: option you can force kitty to restrict the specified code points to 68 + #: render in the specified number of cells (defaulting to one cell). 69 + #: This option can be specified multiple times. The syntax is:: 70 + 71 + #: narrow_symbols codepoints [optionally the number of cells] 72 + 73 + # disable_ligatures never 74 + 75 + #: Choose how you want to handle multi-character ligatures. The 76 + #: default is to always render them. You can tell kitty to not render 77 + #: them when the cursor is over them by using cursor to make editing 78 + #: easier, or have kitty never render them at all by using always, if 79 + #: you don't like them. The ligature strategy can be set per-window 80 + #: either using the kitty remote control facility or by defining 81 + #: shortcuts for it in kitty.conf, for example:: 82 + 83 + #: map alt+1 disable_ligatures_in active always 84 + #: map alt+2 disable_ligatures_in all never 85 + #: map alt+3 disable_ligatures_in tab cursor 86 + 87 + #: Note that this refers to programming ligatures, typically 88 + #: implemented using the calt OpenType feature. For disabling general 89 + #: ligatures, use the font_features option. 90 + 91 + # font_features 92 + 93 + #: E.g. font_features none 94 + 95 + #: Choose exactly which OpenType features to enable or disable. Note 96 + #: that for the main fonts, features can be specified when selecting 97 + #: the font using the choose-fonts kitten. This setting is useful for 98 + #: fallback fonts. 99 + 100 + #: Some fonts might have features worthwhile in a terminal. For 101 + #: example, Fira Code includes a discretionary feature, zero, which in 102 + #: that font changes the appearance of the zero (0), to make it more 103 + #: easily distinguishable from Ø. Fira Code also includes other 104 + #: discretionary features known as Stylistic Sets which have the tags 105 + #: ss01 through ss20. 106 + 107 + #: For the exact syntax to use for individual features, see the 108 + #: HarfBuzz documentation <https://harfbuzz.github.io/harfbuzz-hb- 109 + #: common.html#hb-feature-from-string>. 110 + 111 + #: Note that this code is indexed by PostScript name, and not the font 112 + #: family. This allows you to define very precise feature settings; 113 + #: e.g. you can disable a feature in the italic font but not in the 114 + #: regular font. 115 + 116 + #: On Linux, font features are first read from the FontConfig database 117 + #: and then this option is applied, so they can be configured in a 118 + #: single, central place. 119 + 120 + #: To get the PostScript name for a font, use the `fc-scan file.ttf` 121 + #: command on Linux or the `Font Book tool on macOS 122 + #: <https://apple.stackexchange.com/questions/79875/how-can-i-get-the- 123 + #: postscript-name-of-a-ttf-font-installed-in-os-x>`__. 124 + 125 + #: Enable alternate zero and oldstyle numerals:: 126 + 127 + #: font_features FiraCode-Retina +zero +onum 128 + 129 + #: Enable only alternate zero in the bold font:: 130 + 131 + #: font_features FiraCode-Bold +zero 132 + 133 + #: Disable the normal ligatures, but keep the calt feature which (in 134 + #: this font) breaks up monotony:: 135 + 136 + #: font_features TT2020StyleB-Regular -liga +calt 137 + 138 + #: In conjunction with force_ltr, you may want to disable Arabic 139 + #: shaping entirely, and only look at their isolated forms if they 140 + #: show up in a document. You can do this with e.g.:: 141 + 142 + #: font_features UnifontMedium +isol -medi -fina -init 143 + 144 + # modify_font 145 + 146 + #: Modify font characteristics such as the position or thickness of 147 + #: the underline and strikethrough. The modifications can have the 148 + #: suffix px for pixels or % for percentage of original value. No 149 + #: suffix means use pts. For example:: 150 + 151 + #: modify_font underline_position -2 152 + #: modify_font underline_thickness 150% 153 + #: modify_font strikethrough_position 2px 154 + 155 + #: Additionally, you can modify the size of the cell in which each 156 + #: font glyph is rendered and the baseline at which the glyph is 157 + #: placed in the cell. For example:: 158 + 159 + #: modify_font cell_width 80% 160 + #: modify_font cell_height -2px 161 + #: modify_font baseline 3 162 + 163 + #: Note that modifying the baseline will automatically adjust the 164 + #: underline and strikethrough positions by the same amount. 165 + #: Increasing the baseline raises glyphs inside the cell and 166 + #: decreasing it lowers them. Decreasing the cell size might cause 167 + #: rendering artifacts, so use with care. 168 + 169 + # box_drawing_scale 0.001, 1, 1.5, 2 170 + 171 + #: The sizes of the lines used for the box drawing Unicode characters. 172 + #: These values are in pts. They will be scaled by the monitor DPI to 173 + #: arrive at a pixel value. There must be four values corresponding to 174 + #: thin, normal, thick, and very thick lines. 175 + 176 + # undercurl_style thin-sparse 177 + 178 + #: The style with which undercurls are rendered. This option takes the 179 + #: form (thin|thick)-(sparse|dense). Thin and thick control the 180 + #: thickness of the undercurl. Sparse and dense control how often the 181 + #: curl oscillates. With sparse the curl will peak once per character, 182 + #: with dense twice. Changing this option dynamically via reloading 183 + #: the config or remote control is undefined. 184 + 185 + # underline_exclusion 1 186 + 187 + #: By default kitty renders gaps in underlines when they overlap with 188 + #: descenders (the parts of letters below the baseline, such as for y, 189 + #: q, p etc.). This option controls the thickness of the gaps. It can 190 + #: be either a unitless number in which case it is a fraction of the 191 + #: underline thickness as specified in the font or it can have a 192 + #: suffix of px for pixels or pt for points. Set to zero to disable 193 + #: the gaps. Changing this option dynamically via reloading the config 194 + #: or remote control is undefined. 195 + 196 + # text_composition_strategy platform 197 + 198 + #: Control how kitty composites text glyphs onto the background color. 199 + #: The default value of platform tries for text rendering as close to 200 + #: "native" for the platform kitty is running on as possible. 201 + 202 + #: A value of legacy uses the old (pre kitty 0.28) strategy for how 203 + #: glyphs are composited. This will make dark text on light 204 + #: backgrounds look thicker and light text on dark backgrounds 205 + #: thinner. It might also make some text appear like the strokes are 206 + #: uneven. 207 + 208 + #: You can fine tune the actual contrast curve used for glyph 209 + #: composition by specifying up to two space-separated numbers for 210 + #: this setting. 211 + 212 + #: The first number is the gamma adjustment, which controls the 213 + #: thickness of dark text on light backgrounds. Increasing the value 214 + #: will make text appear thicker. The default value for this is 1.0 on 215 + #: Linux and 1.7 on macOS. Valid values are 0.01 and above. The result 216 + #: is scaled based on the luminance difference between the background 217 + #: and the foreground. Dark text on light backgrounds receives the 218 + #: full impact of the curve while light text on dark backgrounds is 219 + #: affected very little. 220 + 221 + #: The second number is an additional multiplicative contrast. It is 222 + #: percentage ranging from 0 to 100. The default value is 0 on Linux 223 + #: and 30 on macOS. 224 + 225 + #: If you wish to achieve similar looking thickness in light and dark 226 + #: themes, a good way to experiment is start by setting the value to 227 + #: 1.0 0 and use a dark theme. Then adjust the second parameter until 228 + #: it looks good. Then switch to a light theme and adjust the first 229 + #: parameter until the perceived thickness matches the dark theme. 230 + 231 + # text_fg_override_threshold 0 232 + 233 + #: A setting to prevent low contrast between foreground and background 234 + #: colors. Useful when working with applications that use colors that 235 + #: do not contrast well with your preferred color scheme. The default 236 + #: value is 0, which means no color overriding is performed. There are 237 + #: two modes of operation: 238 + 239 + #: A value with the suffix ratio represents the minimum accepted 240 + #: contrast ratio between the foreground and background color. 241 + #: Possible values range from 0.0 ratio to 21.0 ratio. For example, to 242 + #: meet WCAG level AA 243 + #: <https://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines> 244 + #: a value of 4.5 ratio can be provided. The algorithm is implemented 245 + #: using HSLuv <https://www.hsluv.org/> which enables it to change the 246 + #: perceived lightness of a color just as much as needed without 247 + #: really changing its hue and saturation. 248 + 249 + #: A value with the suffix % represents the minimum accepted 250 + #: difference in luminance between the foreground and background 251 + #: color, below which kitty will override the foreground color. It is 252 + #: percentage ranging from 0 % to 100 %. If the difference in 253 + #: luminance of the foreground and background is below this threshold, 254 + #: the foreground color will be set to white if the background is dark 255 + #: or black if the background is light. 256 + 257 + #: WARNING: Some programs use characters (such as block characters) 258 + #: for graphics display and may expect to be able to set the 259 + #: foreground and background to the same color (or similar colors). If 260 + #: you see unexpected stripes, dots, lines, incorrect color, no color 261 + #: where you expect color, or any kind of graphic display problem try 262 + #: setting text_fg_override_threshold to 0 to see if this is the cause 263 + #: of the problem or consider using the ratio mode of operation 264 + #: described above instead of the % mode of operation. 265 + 266 + #: }}} 267 + 268 + #: Text cursor customization {{{ 269 + 270 + # cursor #cccccc 271 + 272 + #: Default text cursor color. If set to the special value none the 273 + #: cursor will be rendered with a "reverse video" effect. Its color 274 + #: will be the color of the text in the cell it is over and the text 275 + #: will be rendered with the background color of the cell. Note that 276 + #: if the program running in the terminal sets a cursor color, this 277 + #: takes precedence. Also, the cursor colors are modified if the cell 278 + #: background and foreground colors have very low contrast. Note that 279 + #: some themes set this value, so if you want to override it, place 280 + #: your value after the lines where the theme file is included. 281 + 282 + # cursor_text_color #111111 283 + 284 + #: The color of text under the cursor. If you want it rendered with 285 + #: the background color of the cell underneath instead, use the 286 + #: special keyword: `background`. Note that if cursor is set to none 287 + #: then this option is ignored. Note that some themes set this value, 288 + #: so if you want to override it, place your value after the lines 289 + #: where the theme file is included. 290 + 291 + # cursor_shape block 292 + 293 + #: The cursor shape can be one of block, beam, underline. Note that 294 + #: when reloading the config this will be changed only if the cursor 295 + #: shape has not been set by the program running in the terminal. This 296 + #: sets the default cursor shape, applications running in the terminal 297 + #: can override it. In particular, shell integration 298 + #: <https://sw.kovidgoyal.net/kitty/shell-integration/> in kitty sets 299 + #: the cursor shape to beam at shell prompts. You can avoid this by 300 + #: setting shell_integration to no-cursor. 301 + 302 + # cursor_shape_unfocused hollow 303 + 304 + #: Defines the text cursor shape when the OS window is not focused. 305 + #: The unfocused cursor shape can be one of block, beam, underline, 306 + #: hollow and unchanged (leave the cursor shape as it is). 307 + 308 + # cursor_beam_thickness 1.5 309 + 310 + #: The thickness of the beam cursor (in pts). 311 + 312 + # cursor_underline_thickness 2.0 313 + 314 + #: The thickness of the underline cursor (in pts). 315 + 316 + # cursor_blink_interval -1 317 + 318 + #: The interval to blink the cursor (in seconds). Set to zero to 319 + #: disable blinking. Negative values mean use system default. Note 320 + #: that the minimum interval will be limited to repaint_delay. You can 321 + #: also animate the cursor blink by specifying an easing function. For 322 + #: example, setting this to option to 0.5 ease-in-out will cause the 323 + #: cursor blink to be animated over a second, in the first half of the 324 + #: second it will go from opaque to transparent and then back again 325 + #: over the next half. You can specify different easing functions for 326 + #: the two halves, for example: -1 linear ease-out. kitty supports all 327 + #: the CSS easing functions <https://developer.mozilla.org/en- 328 + #: US/docs/Web/CSS/easing-function>. Note that turning on animations 329 + #: uses extra power as it means the screen is redrawn multiple times 330 + #: per blink interval. See also, cursor_stop_blinking_after. 331 + 332 + # cursor_stop_blinking_after 15.0 333 + 334 + #: Stop blinking cursor after the specified number of seconds of 335 + #: keyboard inactivity. Set to zero to never stop blinking. 336 + 337 + # cursor_trail 0 338 + 339 + #: Set this to a value larger than zero to enable a "cursor trail" 340 + #: animation. This is an animation that shows a "trail" following the 341 + #: movement of the text cursor. It makes it easy to follow large 342 + #: cursor jumps and makes for a cool visual effect of the cursor 343 + #: zooming around the screen. The actual value of this option controls 344 + #: when the animation is triggered. It is a number of milliseconds. 345 + #: The trail animation only follows cursors that have stayed in their 346 + #: position for longer than the specified number of milliseconds. This 347 + #: prevents trails from appearing for cursors that rapidly change 348 + #: their positions during UI updates in complex applications. See 349 + #: cursor_trail_decay to control the animation speed and 350 + #: cursor_trail_start_threshold to control when a cursor trail is 351 + #: started. 352 + 353 + # cursor_trail_decay 0.1 0.4 354 + 355 + #: Controls the decay times for the cursor trail effect when the 356 + #: cursor_trail is enabled. This option accepts two positive float 357 + #: values specifying the fastest and slowest decay times in seconds. 358 + #: The first value corresponds to the fastest decay time (minimum), 359 + #: and the second value corresponds to the slowest decay time 360 + #: (maximum). The second value must be equal to or greater than the 361 + #: first value. Smaller values result in a faster decay of the cursor 362 + #: trail. Adjust these values to control how quickly the cursor trail 363 + #: fades away. 364 + 365 + # cursor_trail_start_threshold 2 366 + 367 + #: Set the distance threshold for starting the cursor trail. This 368 + #: option accepts a positive integer value that represents the minimum 369 + #: number of cells the cursor must move before the trail is started. 370 + #: When the cursor moves less than this threshold, the trail is 371 + #: skipped, reducing unnecessary cursor trail animation. 372 + 373 + #: }}} 374 + 375 + #: Scrollback {{{ 376 + 377 + # scrollback_lines 2000 378 + 379 + #: Number of lines of history to keep in memory for scrolling back. 380 + #: Memory is allocated on demand. Negative numbers are (effectively) 381 + #: infinite scrollback. Note that using very large scrollback is not 382 + #: recommended as it can slow down performance of the terminal and 383 + #: also use large amounts of RAM. Instead, consider using 384 + #: scrollback_pager_history_size. Note that on config reload if this 385 + #: is changed it will only affect newly created windows, not existing 386 + #: ones. 387 + 388 + # scrollback_indicator_opacity 1.0 389 + 390 + #: The opacity of the scrollback indicator which is a small colored 391 + #: rectangle that moves along the right hand side of the window as you 392 + #: scroll, indicating what fraction you have scrolled. The default is 393 + #: one which means fully opaque, aka visible. Set to a value between 394 + #: zero and one to make the indicator less visible. 395 + 396 + # scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 397 + 398 + #: Program with which to view scrollback in a new window. The 399 + #: scrollback buffer is passed as STDIN to this program. If you change 400 + #: it, make sure the program you use can handle ANSI escape sequences 401 + #: for colors and text formatting. INPUT_LINE_NUMBER in the command 402 + #: line above will be replaced by an integer representing which line 403 + #: should be at the top of the screen. Similarly CURSOR_LINE and 404 + #: CURSOR_COLUMN will be replaced by the current cursor position or 405 + #: set to 0 if there is no cursor, for example, when showing the last 406 + #: command output. 407 + 408 + # scrollback_pager_history_size 0 409 + 410 + #: Separate scrollback history size (in MB), used only for browsing 411 + #: the scrollback buffer with pager. This separate buffer is not 412 + #: available for interactive scrolling but will be piped to the pager 413 + #: program when viewing scrollback buffer in a separate window. The 414 + #: current implementation stores the data in UTF-8, so approximately 415 + #: 10000 lines per megabyte at 100 chars per line, for pure ASCII, 416 + #: unformatted text. A value of zero or less disables this feature. 417 + #: The maximum allowed size is 4GB. Note that on config reload if this 418 + #: is changed it will only affect newly created windows, not existing 419 + #: ones. 420 + 421 + # scrollback_fill_enlarged_window no 422 + 423 + #: Fill new space with lines from the scrollback buffer after 424 + #: enlarging a window. 425 + 426 + # wheel_scroll_multiplier 5.0 427 + 428 + #: Multiplier for the number of lines scrolled by the mouse wheel. 429 + #: Note that this is only used for low precision scrolling devices, 430 + #: not for high precision scrolling devices on platforms such as macOS 431 + #: and Wayland. Use negative numbers to change scroll direction. See 432 + #: also wheel_scroll_min_lines. 433 + 434 + # wheel_scroll_min_lines 1 435 + 436 + #: The minimum number of lines scrolled by the mouse wheel. The scroll 437 + #: multiplier wheel_scroll_multiplier only takes effect after it 438 + #: reaches this number. Note that this is only used for low precision 439 + #: scrolling devices like wheel mice that scroll by very small amounts 440 + #: when using the wheel. With a negative number, the minimum number of 441 + #: lines will always be added. 442 + 443 + # touch_scroll_multiplier 1.0 444 + 445 + #: Multiplier for the number of lines scrolled by a touchpad. Note 446 + #: that this is only used for high precision scrolling devices on 447 + #: platforms such as macOS and Wayland. Use negative numbers to change 448 + #: scroll direction. 449 + 450 + #: }}} 451 + 452 + #: Mouse {{{ 453 + 454 + mouse_hide_wait 0.1 455 + 456 + #: Hide mouse cursor after the specified number of seconds of the 457 + #: mouse not being used. Set to zero to disable mouse cursor hiding. 458 + #: Set to a negative value to hide the mouse cursor immediately when 459 + #: typing text. Disabled by default on macOS as getting it to work 460 + #: robustly with the ever-changing sea of bugs that is Cocoa is too 461 + #: much effort. 462 + 463 + #: By default, once the cursor is hidden, it is immediately unhidden 464 + #: on any further mouse events. 465 + 466 + #: Two formats are supported: 467 + #: - <hide-wait> 468 + #: - <hide-wait> <unhide-wait> <unhide-threshold> <scroll-unhide> 469 + 470 + #: To change the unhide behavior, the optional parameters <unhide- 471 + #: wait>, <unhide-threshold>, and <scroll-unhide> may be set. 472 + 473 + #: <unhide-wait> 474 + #: Waits for the specified number of seconds after mouse events before unhiding the 475 + #: mouse cursor. Set to zero to unhide mouse cursor immediately on mouse activity. 476 + #: This is useful to prevent the mouse cursor from unhiding on accidental swipes on 477 + #: the trackpad. 478 + 479 + #: <unhide-threshold> 480 + #: Sets the threshold of mouse activity required to unhide the mouse cursor, when 481 + #: the <unhide-wait> option is non-zero. When <unhide-wait> is zero, this has no 482 + #: effect. 483 + 484 + #: For example, if <unhide-threshold> is 40 and <unhide-wait> is 2.5, when kitty 485 + #: detects a mouse event, it records the number of mouse events in the next 2.5 486 + #: seconds, and checks if that exceeds 40 * 2.5 = 100. If it does, then the mouse 487 + #: cursor is unhidden, otherwise nothing happens. 488 + 489 + #: <scroll-unhide> 490 + #: Controls what mouse events may unhide the mouse cursor. If enabled, both scroll 491 + #: and movement events may unhide the cursor. If disabled, only mouse movements can 492 + #: unhide the cursor. 493 + 494 + #: Examples of valid values: 495 + #: - 0.0 496 + #: - 1.0 497 + #: - -1.0 498 + #: - 0.1 3.0 40 yes 499 + 500 + # url_color #0087bd 501 + # url_style curly 502 + 503 + #: The color and style for highlighting URLs on mouse-over. url_style 504 + #: can be one of: none, straight, double, curly, dotted, dashed. 505 + 506 + # open_url_with default 507 + 508 + #: The program to open clicked URLs. The special value default will 509 + #: first look for any URL handlers defined via the open_actions 510 + #: <https://sw.kovidgoyal.net/kitty/open_actions/> facility and if non 511 + #: are found, it will use the Operating System's default URL handler 512 + #: (open on macOS and xdg-open on Linux). 513 + 514 + # url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh 515 + 516 + #: The set of URL prefixes to look for when detecting a URL under the 517 + #: mouse cursor. 518 + 519 + # detect_urls yes 520 + 521 + #: Detect URLs under the mouse. Detected URLs are highlighted with an 522 + #: underline and the mouse cursor becomes a hand over them. Even if 523 + #: this option is disabled, URLs are still clickable. See also the 524 + #: underline_hyperlinks option to control how hyperlinks (as opposed 525 + #: to plain text URLs) are displayed. 526 + 527 + # url_excluded_characters 528 + 529 + #: Additional characters to be disallowed from URLs, when detecting 530 + #: URLs under the mouse cursor. By default, all characters that are 531 + #: legal in URLs are allowed. Additionally, newlines are allowed (but 532 + #: stripped). This is to accommodate programs such as mutt that add 533 + #: hard line breaks even for continued lines. \n can be added to this 534 + #: option to disable this behavior. Special characters can be 535 + #: specified using backslash escapes, to specify a backslash use a 536 + #: double backslash. 537 + 538 + # show_hyperlink_targets no 539 + 540 + #: When the mouse hovers over a terminal hyperlink, show the actual 541 + #: URL that will be activated when the hyperlink is clicked. 542 + 543 + # underline_hyperlinks hover 544 + 545 + #: Control how hyperlinks are underlined. They can either be 546 + #: underlined on mouse hover, always (i.e. permanently underlined) or 547 + #: never which means that kitty will not apply any underline styling 548 + #: to hyperlinks. Note that the value of always only applies to real 549 + #: (OSC 8) hyperlinks not text that is detected to be a URL on mouse 550 + #: hover. Uses the url_style and url_color settings for the underline 551 + #: style. Note that reloading the config and changing this value 552 + #: to/from always will only affect text subsequently received by 553 + #: kitty. 554 + 555 + # copy_on_select no 556 + 557 + #: Copy to clipboard or a private buffer on select. With this set to 558 + #: clipboard, selecting text with the mouse will cause the text to be 559 + #: copied to clipboard. Useful on platforms such as macOS that do not 560 + #: have the concept of primary selection. You can instead specify a 561 + #: name such as a1 to copy to a private kitty buffer. Map a shortcut 562 + #: with the paste_from_buffer action to paste from this private 563 + #: buffer. For example:: 564 + 565 + #: copy_on_select a1 566 + #: map shift+cmd+v paste_from_buffer a1 567 + 568 + #: Note that copying to the clipboard is a security risk, as all 569 + #: programs, including websites open in your browser can read the 570 + #: contents of the system clipboard. 571 + 572 + # clear_selection_on_clipboard_loss no 573 + 574 + #: When the contents of the clipboard no longer reflect the current 575 + #: selection, clear it. This is primarily useful on platforms such as 576 + #: Linux where selecting text automatically copies it to a special 577 + #: "primary selection" clipboard or if you have copy_on_select set to 578 + #: clipboard. 579 + 580 + #: Note that on macOS the system does not provide notifications when 581 + #: the clipboard owner is changed, so there, copying to clipboard in a 582 + #: non-kitty application will not clear selections even if 583 + #: copy_on_select is enabled. 584 + 585 + # paste_actions quote-urls-at-prompt,confirm 586 + 587 + #: A comma separated list of actions to take when pasting text into 588 + #: the terminal. The supported paste actions are: 589 + 590 + #: quote-urls-at-prompt: 591 + #: If the text being pasted is a URL and the cursor is at a shell prompt, 592 + #: automatically quote the URL (needs shell_integration). 593 + #: replace-dangerous-control-codes 594 + #: Replace dangerous control codes from pasted text, without confirmation. 595 + #: replace-newline 596 + #: Replace the newline character from pasted text, without confirmation. 597 + #: confirm: 598 + #: Confirm the paste if the text to be pasted contains any terminal control codes 599 + #: as this can be dangerous, leading to code execution if the shell/program running 600 + #: in the terminal does not properly handle these. 601 + #: confirm-if-large 602 + #: Confirm the paste if it is very large (larger than 16KB) as pasting 603 + #: large amounts of text into shells can be very slow. 604 + #: filter: 605 + #: Run the filter_paste() function from the file paste-actions.py in 606 + #: the kitty config directory on the pasted text. The text returned by the 607 + #: function will be actually pasted. 608 + #: no-op: 609 + #: Has no effect. 610 + 611 + # strip_trailing_spaces never 612 + 613 + #: Remove spaces at the end of lines when copying to clipboard. A 614 + #: value of smart will do it when using normal selections, but not 615 + #: rectangle selections. A value of always will always do it. 616 + 617 + # select_by_word_characters @-./_~?&=%+# 618 + 619 + #: Characters considered part of a word when double clicking. In 620 + #: addition to these characters any character that is marked as an 621 + #: alphanumeric character in the Unicode database will be matched. 622 + 623 + # select_by_word_characters_forward 624 + 625 + #: Characters considered part of a word when extending the selection 626 + #: forward on double clicking. In addition to these characters any 627 + #: character that is marked as an alphanumeric character in the 628 + #: Unicode database will be matched. 629 + 630 + #: If empty (default) select_by_word_characters will be used for both 631 + #: directions. 632 + 633 + # click_interval -1.0 634 + 635 + #: The interval between successive clicks to detect double/triple 636 + #: clicks (in seconds). Negative numbers will use the system default 637 + #: instead, if available, or fallback to 0.5. 638 + 639 + # focus_follows_mouse no 640 + 641 + #: Set the active window to the window under the mouse when moving the 642 + #: mouse around. On macOS, this will also cause the OS Window under 643 + #: the mouse to be focused automatically when the mouse enters it. 644 + 645 + # pointer_shape_when_grabbed arrow 646 + 647 + #: The shape of the mouse pointer when the program running in the 648 + #: terminal grabs the mouse. 649 + 650 + # default_pointer_shape beam 651 + 652 + #: The default shape of the mouse pointer. 653 + 654 + # pointer_shape_when_dragging beam crosshair 655 + 656 + #: The default shape of the mouse pointer when dragging across text. 657 + #: The optional second value sets the shape when dragging in 658 + #: rectangular selection mode. 659 + 660 + #: Mouse actions {{{ 661 + 662 + #: Mouse buttons can be mapped to perform arbitrary actions. The 663 + #: syntax is: 664 + 665 + #: .. code-block:: none 666 + 667 + #: mouse_map button-name event-type modes action 668 + 669 + #: Where button-name is one of left, middle, right, b1 ... b8 with 670 + #: added keyboard modifiers. For example: ctrl+shift+left refers to 671 + #: holding the Ctrl+Shift keys while clicking with the left mouse 672 + #: button. The value b1 ... b8 can be used to refer to up to eight 673 + #: buttons on a mouse. 674 + 675 + #: event-type is one of press, release, doublepress, triplepress, 676 + #: click, doubleclick. modes indicates whether the action is performed 677 + #: when the mouse is grabbed by the program running in the terminal, 678 + #: or not. The values are grabbed or ungrabbed or a comma separated 679 + #: combination of them. grabbed refers to when the program running in 680 + #: the terminal has requested mouse events. Note that the click and 681 + #: double click events have a delay of click_interval to disambiguate 682 + #: from double and triple presses. 683 + 684 + #: You can run kitty with the kitty --debug-input command line option 685 + #: to see mouse events. See the builtin actions below to get a sense 686 + #: of what is possible. 687 + 688 + #: If you want to unmap a button, map it to nothing. For example, to 689 + #: disable opening of URLs with a plain click:: 690 + 691 + #: mouse_map left click ungrabbed 692 + 693 + #: See all the mappable actions including mouse actions here 694 + #: <https://sw.kovidgoyal.net/kitty/actions/>. 695 + 696 + #: .. note:: 697 + #: Once a selection is started, releasing the button that started it will 698 + #: automatically end it and no release event will be dispatched. 699 + 700 + # clear_all_mouse_actions no 701 + 702 + #: Remove all mouse action definitions up to this point. Useful, for 703 + #: instance, to remove the default mouse actions. 704 + 705 + #: Click the link under the mouse or move the cursor 706 + 707 + # mouse_map left click ungrabbed mouse_handle_click selection link prompt 708 + 709 + #:: First check for a selection and if one exists do nothing. Then 710 + #:: check for a link under the mouse cursor and if one exists, click 711 + #:: it. Finally check if the click happened at the current shell 712 + #:: prompt and if so, move the cursor to the click location. Note 713 + #:: that this requires shell integration 714 + #:: <https://sw.kovidgoyal.net/kitty/shell-integration/> to work. 715 + 716 + #: Click the link under the mouse or move the cursor even when grabbed 717 + 718 + # mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt 719 + 720 + #:: Same as above, except that the action is performed even when the 721 + #:: mouse is grabbed by the program running in the terminal. 722 + 723 + #: Click the link under the mouse cursor 724 + 725 + # mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link 726 + 727 + #:: Variant with Ctrl+Shift is present because the simple click based 728 + #:: version has an unavoidable delay of click_interval, to 729 + #:: disambiguate clicks from double clicks. 730 + 731 + #: Discard press event for link click 732 + 733 + # mouse_map ctrl+shift+left press grabbed discard_event 734 + 735 + #:: Prevent this press event from being sent to the program that has 736 + #:: grabbed the mouse, as the corresponding release event is used to 737 + #:: open a URL. 738 + 739 + #: Paste from the primary selection 740 + 741 + # mouse_map middle release ungrabbed paste_from_selection 742 + 743 + #: Start selecting text 744 + 745 + # mouse_map left press ungrabbed mouse_selection normal 746 + 747 + #: Start selecting text in a rectangle 748 + 749 + # mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle 750 + 751 + #: Select a word 752 + 753 + # mouse_map left doublepress ungrabbed mouse_selection word 754 + 755 + #: Select a line 756 + 757 + # mouse_map left triplepress ungrabbed mouse_selection line 758 + 759 + #: Select line from point 760 + 761 + # mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point 762 + 763 + #:: Select from the clicked point to the end of the line. If you 764 + #:: would like to select the word at the point and then extend to the 765 + #:: rest of the line, change `line_from_point` to 766 + #:: `word_and_line_from_point`. 767 + 768 + #: Extend the current selection 769 + 770 + # mouse_map right press ungrabbed mouse_selection extend 771 + 772 + #:: If you want only the end of the selection to be moved instead of 773 + #:: the nearest boundary, use move-end instead of extend. 774 + 775 + #: Paste from the primary selection even when grabbed 776 + 777 + # mouse_map shift+middle release ungrabbed,grabbed paste_selection 778 + # mouse_map shift+middle press grabbed discard_event 779 + 780 + #: Start selecting text even when grabbed 781 + 782 + # mouse_map shift+left press ungrabbed,grabbed mouse_selection normal 783 + 784 + #: Start selecting text in a rectangle even when grabbed 785 + 786 + # mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle 787 + 788 + #: Select a word even when grabbed 789 + 790 + # mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word 791 + 792 + #: Select a line even when grabbed 793 + 794 + # mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line 795 + 796 + #: Select line from point even when grabbed 797 + 798 + # mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point 799 + 800 + #:: Select from the clicked point to the end of the line even when 801 + #:: grabbed. If you would like to select the word at the point and 802 + #:: then extend to the rest of the line, change `line_from_point` to 803 + #:: `word_and_line_from_point`. 804 + 805 + #: Extend the current selection even when grabbed 806 + 807 + # mouse_map shift+right press ungrabbed,grabbed mouse_selection extend 808 + 809 + #: Show clicked command output in pager 810 + 811 + # mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output 812 + 813 + #:: Requires shell integration 814 + #:: <https://sw.kovidgoyal.net/kitty/shell-integration/> to work. 815 + 816 + #: }}} 817 + 818 + #: }}} 819 + 820 + #: Performance tuning {{{ 821 + 822 + # repaint_delay 10 823 + 824 + #: Delay between screen updates (in milliseconds). Decreasing it, 825 + #: increases frames-per-second (FPS) at the cost of more CPU usage. 826 + #: The default value yields ~100 FPS which is more than sufficient for 827 + #: most uses. Note that to actually achieve 100 FPS, you have to 828 + #: either set sync_to_monitor to no or use a monitor with a high 829 + #: refresh rate. Also, to minimize latency when there is pending input 830 + #: to be processed, this option is ignored. 831 + 832 + # input_delay 3 833 + 834 + #: Delay before input from the program running in the terminal is 835 + #: processed (in milliseconds). Note that decreasing it will increase 836 + #: responsiveness, but also increase CPU usage and might cause flicker 837 + #: in full screen programs that redraw the entire screen on each loop, 838 + #: because kitty is so fast that partial screen updates will be drawn. 839 + #: This setting is ignored when the input buffer is almost full. 840 + 841 + # sync_to_monitor yes 842 + 843 + #: Sync screen updates to the refresh rate of the monitor. This 844 + #: prevents screen tearing 845 + #: <https://en.wikipedia.org/wiki/Screen_tearing> when scrolling. 846 + #: However, it limits the rendering speed to the refresh rate of your 847 + #: monitor. With a very high speed mouse/high keyboard repeat rate, 848 + #: you may notice some slight input latency. If so, set this to no. 849 + 850 + #: }}} 851 + 852 + #: Terminal bell {{{ 853 + 854 + # enable_audio_bell yes 855 + 856 + #: The audio bell. Useful to disable it in environments that require 857 + #: silence. 858 + 859 + # visual_bell_duration 0.0 860 + 861 + #: The visual bell duration (in seconds). Flash the screen when a bell 862 + #: occurs for the specified number of seconds. Set to zero to disable. 863 + #: The flash is animated, fading in and out over the specified 864 + #: duration. The easing function used for the fading can be 865 + #: controlled. For example, 2.0 linear will casuse the flash to fade 866 + #: in and out linearly. The default if unspecified is to use ease-in- 867 + #: out which fades slowly at the start, middle and end. You can 868 + #: specify different easing functions for the fade-in and fade-out 869 + #: parts, like this: 2.0 ease-in linear. kitty supports all the CSS 870 + #: easing functions <https://developer.mozilla.org/en- 871 + #: US/docs/Web/CSS/easing-function>. 872 + 873 + # visual_bell_color none 874 + 875 + #: The color used by visual bell. Set to none will fall back to 876 + #: selection background color. If you feel that the visual bell is too 877 + #: bright, you can set it to a darker color. 878 + 879 + # window_alert_on_bell yes 880 + 881 + #: Request window attention on bell. Makes the dock icon bounce on 882 + #: macOS or the taskbar flash on Linux. 883 + 884 + # bell_on_tab "🔔 " 885 + 886 + #: Some text or a Unicode symbol to show on the tab if a window in the 887 + #: tab that does not have focus has a bell. If you want to use leading 888 + #: or trailing spaces, surround the text with quotes. See 889 + #: tab_title_template for how this is rendered. 890 + 891 + #: For backwards compatibility, values of yes, y and true are 892 + #: converted to the default bell symbol and no, n, false and none are 893 + #: converted to the empty string. 894 + 895 + # command_on_bell none 896 + 897 + #: Program to run when a bell occurs. The environment variable 898 + #: KITTY_CHILD_CMDLINE can be used to get the program running in the 899 + #: window in which the bell occurred. 900 + 901 + # bell_path none 902 + 903 + #: Path to a sound file to play as the bell sound. If set to none, the 904 + #: system default bell sound is used. Must be in a format supported by 905 + #: the operating systems sound API, such as WAV or OGA on Linux 906 + #: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound). Relative 907 + #: paths are resolved with respect to the kitty config directory. 908 + 909 + # linux_bell_theme __custom 910 + 911 + #: The XDG Sound Theme kitty will use to play the bell sound. On 912 + #: Wayland, when the compositor supports it, it is asked to play the 913 + #: system default bell sound, and this setting has no effect. Note 914 + #: that Hyprland claims to support this protocol, but does not 915 + #: actually play a sound 916 + #: <https://github.com/hyprwm/Hyprland/issues/10488>. This setting 917 + #: defaults to the custom theme name specified in the XDG Sound theme 918 + #: specification <https://specifications.freedesktop.org/sound-theme- 919 + #: spec/latest/sound_lookup.html>, falling back to the default 920 + #: freedesktop theme if it does not exist. To change your sound theme 921 + #: desktop wide, create 922 + #: :file:~/.local/share/sounds/__custom/index.theme` with the 923 + #: contents: 924 + 925 + #: [Sound Theme] 926 + 927 + #: Inherits=name-of-the-sound-theme-you-want-to-use 928 + 929 + #: Replace name-of-the-sound-theme-you-want-to-use with the actual 930 + #: theme name. Now all compliant applications should use sounds from 931 + #: this theme. 932 + 933 + #: }}} 934 + 935 + #: Window layout {{{ 936 + 937 + # remember_window_size yes 938 + # initial_window_width 640 939 + # initial_window_height 400 940 + 941 + #: If enabled, the OS Window size will be remembered so that new 942 + #: instances of kitty will have the same size as the previous 943 + #: instance. If disabled, the OS Window will initially have size 944 + #: configured by initial_window_width/height, in pixels. You can use a 945 + #: suffix of "c" on the width/height values to have them interpreted 946 + #: as number of cells instead of pixels. 947 + 948 + # remember_window_position no 949 + 950 + #: If enabled, the OS Window position will be remembered so that new 951 + #: instances of kitty will have the same position as the previous 952 + #: instance. If disabled, the OS Window will be placed by the window 953 + #: manager. Note that remembering of position only works if the 954 + #: underlying desktop environment/window manager supports it. It never 955 + #: works on Wayland. See also kitty --position to specify the position 956 + #: when launching kitty. 957 + 958 + # enabled_layouts * 959 + 960 + #: The enabled window layouts. A comma separated list of layout names. 961 + #: The special value all means all layouts. The first listed layout 962 + #: will be used as the startup layout. Default configuration is all 963 + #: layouts in alphabetical order. For a list of available layouts, see 964 + #: the layouts <https://sw.kovidgoyal.net/kitty/overview/#layouts>. 965 + 966 + # window_resize_step_cells 2 967 + # window_resize_step_lines 2 968 + 969 + #: The step size (in units of cell width/cell height) to use when 970 + #: resizing kitty windows in a layout with the shortcut 971 + #: start_resizing_window. The cells value is used for horizontal 972 + #: resizing, and the lines value is used for vertical resizing. 973 + 974 + # window_border_width 0.5pt 975 + 976 + #: The width of window borders. Can be either in pixels (px) or pts 977 + #: (pt). Values in pts will be rounded to the nearest number of pixels 978 + #: based on screen resolution. If not specified, the unit is assumed 979 + #: to be pts. Note that borders are displayed only when more than one 980 + #: window is visible. They are meant to separate multiple windows. 981 + 982 + # draw_minimal_borders yes 983 + 984 + #: Draw only the minimum borders needed. This means that only the 985 + #: borders that separate the window from a neighbor are drawn. Note 986 + #: that setting a non-zero window_margin_width overrides this and 987 + #: causes all borders to be drawn. 988 + 989 + # window_margin_width 0 990 + 991 + #: The window margin (in pts) (blank area outside the border). A 992 + #: single value sets all four sides. Two values set the vertical and 993 + #: horizontal sides. Three values set top, horizontal and bottom. Four 994 + #: values set top, right, bottom and left. 995 + 996 + # single_window_margin_width -1 997 + 998 + #: The window margin to use when only a single window is visible (in 999 + #: pts). Negative values will cause the value of window_margin_width 1000 + #: to be used instead. A single value sets all four sides. Two values 1001 + #: set the vertical and horizontal sides. Three values set top, 1002 + #: horizontal and bottom. Four values set top, right, bottom and left. 1003 + 1004 + # window_padding_width 0 1005 + 1006 + #: The window padding (in pts) (blank area between the text and the 1007 + #: window border). A single value sets all four sides. Two values set 1008 + #: the vertical and horizontal sides. Three values set top, horizontal 1009 + #: and bottom. Four values set top, right, bottom and left. 1010 + 1011 + # single_window_padding_width -1 1012 + 1013 + #: The window padding to use when only a single window is visible (in 1014 + #: pts). Negative values will cause the value of window_padding_width 1015 + #: to be used instead. A single value sets all four sides. Two values 1016 + #: set the vertical and horizontal sides. Three values set top, 1017 + #: horizontal and bottom. Four values set top, right, bottom and left. 1018 + 1019 + # placement_strategy center 1020 + 1021 + #: When the window size is not an exact multiple of the cell size, the 1022 + #: cell area of the terminal window will have some extra padding on 1023 + #: the sides. You can control how that padding is distributed with 1024 + #: this option. Using a value of center means the cell area will be 1025 + #: placed centrally. A value of top-left means the padding will be 1026 + #: only at the bottom and right edges. The value can be one of: top- 1027 + #: left, top, top-right, left, center, right, bottom-left, bottom, 1028 + #: bottom-right. 1029 + 1030 + # active_border_color #00ff00 1031 + 1032 + #: The color for the border of the active window. Set this to none to 1033 + #: not draw borders around the active window. 1034 + 1035 + # inactive_border_color #cccccc 1036 + 1037 + #: The color for the border of inactive windows. 1038 + 1039 + # bell_border_color #ff5a00 1040 + 1041 + #: The color for the border of inactive windows in which a bell has 1042 + #: occurred. 1043 + 1044 + # inactive_text_alpha 1.0 1045 + 1046 + #: Fade the text in inactive windows by the specified amount (a number 1047 + #: between zero and one, with zero being fully faded). 1048 + 1049 + hide_window_decorations yes 1050 + 1051 + #: Hide the window decorations (title-bar and window borders) with 1052 + #: yes. On macOS, titlebar-only and titlebar-and-corners can be used 1053 + #: to only hide the titlebar and the rounded corners. Whether this 1054 + #: works and exactly what effect it has depends on the window 1055 + #: manager/operating system. Note that the effects of changing this 1056 + #: option when reloading config are undefined. When using titlebar- 1057 + #: only, it is useful to also set window_margin_width and 1058 + #: placement_strategy to prevent the rounded corners from clipping 1059 + #: text. Or use titlebar-and-corners. 1060 + 1061 + # window_logo_path none 1062 + 1063 + #: Path to a logo image. Must be in PNG/JPEG/WEBP/GIF/TIFF/BMP format. 1064 + #: Relative paths are interpreted relative to the kitty config 1065 + #: directory. The logo is displayed in a corner of every kitty window. 1066 + #: The position is controlled by window_logo_position. Individual 1067 + #: windows can be configured to have different logos either using the 1068 + #: launch action or the remote control 1069 + #: <https://sw.kovidgoyal.net/kitty/remote-control/> facility. 1070 + 1071 + # window_logo_position bottom-right 1072 + 1073 + #: Where to position the window logo in the window. The value can be 1074 + #: one of: top-left, top, top-right, left, center, right, bottom-left, 1075 + #: bottom, bottom-right. 1076 + 1077 + # window_logo_alpha 0.5 1078 + 1079 + #: The amount the logo should be faded into the background. With zero 1080 + #: being fully faded and one being fully opaque. 1081 + 1082 + # window_logo_scale 0 1083 + 1084 + #: The percentage (0-100] of the window size to which the logo should 1085 + #: scale. Using a single number means the logo is scaled to that 1086 + #: percentage of the shortest window dimension, while preserving 1087 + #: aspect ratio of the logo image. 1088 + 1089 + #: Using two numbers means the width and height of the logo are scaled 1090 + #: to the respective percentage of the window's width and height. 1091 + 1092 + #: Using zero as the percentage disables scaling in that dimension. A 1093 + #: single zero (the default) disables all scaling of the window logo. 1094 + 1095 + # resize_debounce_time 0.1 0.5 1096 + 1097 + #: The time to wait (in seconds) before asking the program running in 1098 + #: kitty to resize and redraw the screen during a live resize of the 1099 + #: OS window, when no new resize events have been received, i.e. when 1100 + #: resizing is either paused or finished. On platforms such as macOS, 1101 + #: where the operating system sends events corresponding to the start 1102 + #: and end of a live resize, the second number is used for redraw- 1103 + #: after-pause since kitty can distinguish between a pause and end of 1104 + #: resizing. On such systems the first number is ignored and redraw is 1105 + #: immediate after end of resize. On other systems only the first 1106 + #: number is used so that kitty is "ready" quickly after the end of 1107 + #: resizing, while not also continuously redrawing, to save energy. 1108 + 1109 + # resize_in_steps no 1110 + 1111 + #: Resize the OS window in steps as large as the cells, instead of 1112 + #: with the usual pixel accuracy. Combined with initial_window_width 1113 + #: and initial_window_height in number of cells, this option can be 1114 + #: used to keep the margins as small as possible when resizing the OS 1115 + #: window. Note that this does not currently work on Wayland. 1116 + 1117 + # visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 1118 + 1119 + #: The list of characters for visual window selection. For example, 1120 + #: for selecting a window to focus on with focus_visible_window. The 1121 + #: value should be a series of unique numbers or alphabets, case 1122 + #: insensitive, from the set 0-9A-Z\-=[];',./\\`. Specify your 1123 + #: preference as a string of characters. 1124 + 1125 + # confirm_os_window_close -1 1126 + 1127 + #: Ask for confirmation when closing an OS window or a tab with at 1128 + #: least this number of kitty windows in it by window manager (e.g. 1129 + #: clicking the window close button or pressing the operating system 1130 + #: shortcut to close windows) or by the close_tab action. A value of 1131 + #: zero disables confirmation. This confirmation also applies to 1132 + #: requests to quit the entire application (all OS windows, via the 1133 + #: quit action). Negative values are converted to positive ones, 1134 + #: however, with shell_integration enabled, using negative values 1135 + #: means windows sitting at a shell prompt are not counted, only 1136 + #: windows where some command is currently running. You can also have 1137 + #: backgrounded jobs prevent closing, by adding count-background to 1138 + #: the setting, for example: -1 count-background. Note that if you 1139 + #: want confirmation when closing individual windows, you can map the 1140 + #: close_window_with_confirmation action. 1141 + 1142 + #: }}} 1143 + 1144 + #: Tab bar {{{ 1145 + 1146 + # tab_bar_edge bottom 1147 + 1148 + #: The edge to show the tab bar on, top or bottom. 1149 + 1150 + # tab_bar_margin_width 0.0 1151 + 1152 + #: The margin to the left and right of the tab bar (in pts). 1153 + 1154 + # tab_bar_margin_height 0.0 0.0 1155 + 1156 + #: The margin above and below the tab bar (in pts). The first number 1157 + #: is the margin between the edge of the OS Window and the tab bar. 1158 + #: The second number is the margin between the tab bar and the 1159 + #: contents of the current tab. 1160 + 1161 + # tab_bar_style fade 1162 + 1163 + #: The tab bar style, can be one of: 1164 + 1165 + #: fade 1166 + #: Each tab's edges fade into the background color. (See also tab_fade) 1167 + #: slant 1168 + #: Tabs look like the tabs in a physical file. 1169 + #: separator 1170 + #: Tabs are separated by a configurable separator. (See also 1171 + #: tab_separator) 1172 + #: powerline 1173 + #: Tabs are shown as a continuous line with "fancy" separators. 1174 + #: (See also tab_powerline_style) 1175 + #: custom 1176 + #: A user-supplied Python function called draw_tab is loaded from the file 1177 + #: tab_bar.py in the kitty config directory. For examples of how to 1178 + #: write such a function, see the functions named draw_tab_with_* in 1179 + #: kitty's source code: kitty/tab_bar.py. See also 1180 + #: this discussion <https://github.com/kovidgoyal/kitty/discussions/4447> 1181 + #: for examples from kitty users. 1182 + #: hidden 1183 + #: The tab bar is hidden. If you use this, you might want to create 1184 + #: a mapping for the select_tab action which presents you with a list of 1185 + #: tabs and allows for easy switching to a tab. 1186 + 1187 + # tab_bar_align left 1188 + 1189 + #: The horizontal alignment of the tab bar, can be one of: left, 1190 + #: center, right. 1191 + 1192 + # tab_bar_min_tabs 2 1193 + 1194 + #: The minimum number of tabs that must exist before the tab bar is 1195 + #: shown. 1196 + 1197 + # tab_switch_strategy previous 1198 + 1199 + #: The algorithm to use when switching to a tab when the current tab 1200 + #: is closed. The default of previous will switch to the last used 1201 + #: tab. A value of left will switch to the tab to the left of the 1202 + #: closed tab. A value of right will switch to the tab to the right of 1203 + #: the closed tab. A value of last will switch to the right-most tab. 1204 + 1205 + # tab_fade 0.25 0.5 0.75 1 1206 + 1207 + #: Control how each tab fades into the background when using fade for 1208 + #: the tab_bar_style. Each number is an alpha (between zero and one) 1209 + #: that controls how much the corresponding cell fades into the 1210 + #: background, with zero being no fade and one being full fade. You 1211 + #: can change the number of cells used by adding/removing entries to 1212 + #: this list. 1213 + 1214 + # tab_separator " ┇" 1215 + 1216 + #: The separator between tabs in the tab bar when using separator as 1217 + #: the tab_bar_style. 1218 + 1219 + # tab_powerline_style angled 1220 + 1221 + #: The powerline separator style between tabs in the tab bar when 1222 + #: using powerline as the tab_bar_style, can be one of: angled, 1223 + #: slanted, round. 1224 + 1225 + # tab_activity_symbol none 1226 + 1227 + #: Some text or a Unicode symbol to show on the tab if a window in the 1228 + #: tab that does not have focus has some activity. If you want to use 1229 + #: leading or trailing spaces, surround the text with quotes. See 1230 + #: tab_title_template for how this is rendered. 1231 + 1232 + # tab_title_max_length 0 1233 + 1234 + #: The maximum number of cells that can be used to render the text in 1235 + #: a tab. A value of zero means that no limit is applied. 1236 + 1237 + # tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{tab.last_focused_progress_percent}{title}" 1238 + 1239 + #: A template to render the tab title. The default just renders the 1240 + #: title with optional symbols for bell and activity. If you wish to 1241 + #: include the tab-index as well, use something like: {index}:{title}. 1242 + #: Useful if you have shortcuts mapped for goto_tab N. If you prefer 1243 + #: to see the index as a superscript, use {sup.index}. All data 1244 + #: available is: 1245 + 1246 + #: title 1247 + #: The current tab title. 1248 + #: index 1249 + #: The tab index usable with goto_tab N goto_tab shortcuts. 1250 + #: layout_name 1251 + #: The current layout name. 1252 + #: num_windows 1253 + #: The number of windows in the tab. 1254 + #: num_window_groups 1255 + #: The number of window groups (a window group is a window and all of its overlay windows) in the tab. 1256 + #: tab.active_wd 1257 + #: The working directory of the currently active window in the tab 1258 + #: (expensive, requires syscall). Use tab.active_oldest_wd to get 1259 + #: the directory of the oldest foreground process rather than the newest. 1260 + #: tab.active_exe 1261 + #: The name of the executable running in the foreground of the currently 1262 + #: active window in the tab (expensive, requires syscall). Use 1263 + #: tab.active_oldest_exe for the oldest foreground process. 1264 + #: max_title_length 1265 + #: The maximum title length available. 1266 + #: keyboard_mode 1267 + #: The name of the current keyboard mode <https://sw.kovidgoyal.net/kitty/mapping/#modal-mappings> or the empty string if no keyboard mode is active. 1268 + #: tab.last_focused_progress_percent 1269 + #: If a command running in a window reports the progress for a task, show this progress as a percentage 1270 + #: from the most recently focused window in the tab. Empty string if no progress is reported. 1271 + #: tab.progress_percent 1272 + #: If a command running in a window reports the progress for a task, show this progress as a percentage 1273 + #: from all windows in the tab, averaged. Empty string is no progress is reported. 1274 + 1275 + #: Note that formatting is done by Python's string formatting 1276 + #: machinery, so you can use, for instance, {layout_name[:2].upper()} 1277 + #: to show only the first two letters of the layout name, upper-cased. 1278 + #: If you want to style the text, you can use styling directives, for 1279 + #: example: 1280 + #: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`. 1281 + #: Similarly, for bold and italic: 1282 + #: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`. 1283 + #: The 256 eight terminal colors can be used as `fmt.fg.color0` 1284 + #: through `fmt.fg.color255`. Note that for backward compatibility, if 1285 + #: {bell_symbol} or {activity_symbol} are not present in the template, 1286 + #: they are prepended to it. 1287 + 1288 + # active_tab_title_template none 1289 + 1290 + #: Template to use for active tabs. If not specified falls back to 1291 + #: tab_title_template. 1292 + 1293 + # active_tab_foreground #000 1294 + # active_tab_background #eee 1295 + # active_tab_font_style bold-italic 1296 + # inactive_tab_foreground #444 1297 + # inactive_tab_background #999 1298 + # inactive_tab_font_style normal 1299 + 1300 + #: Tab bar colors and styles. 1301 + 1302 + # tab_bar_background none 1303 + 1304 + #: Background color for the tab bar. Defaults to using the terminal 1305 + #: background color. 1306 + 1307 + # tab_bar_margin_color none 1308 + 1309 + #: Color for the tab bar margin area. Defaults to using the terminal 1310 + #: background color for margins above and below the tab bar. For side 1311 + #: margins the default color is chosen to match the background color 1312 + #: of the neighboring tab. 1313 + 1314 + #: }}} 1315 + 1316 + #: Color scheme {{{ 1317 + 1318 + # gruvbox dark by morhetz, https://github.com/morhetz/gruvbox 1319 + background #282828 1320 + foreground #ebdbb2 1321 + 1322 + cursor #928374 1323 + 1324 + selection_foreground #928374 1325 + selection_background #3c3836 1326 + 1327 + color0 #282828 1328 + color8 #928374 1329 + 1330 + # red 1331 + color1 #cc241d 1332 + # light red 1333 + color9 #fb4934 1334 + 1335 + # green 1336 + color2 #98971a 1337 + # light green 1338 + color10 #b8bb26 1339 + 1340 + # yellow 1341 + color3 #d79921 1342 + # light yellow 1343 + color11 #fabd2d 1344 + 1345 + # blue 1346 + color4 #458588 1347 + # light blue 1348 + color12 #83a598 1349 + 1350 + # magenta 1351 + color5 #b16286 1352 + # light magenta 1353 + color13 #d3869b 1354 + 1355 + # cyan 1356 + color6 #689d6a 1357 + # lighy cyan 1358 + color14 #8ec07c 1359 + 1360 + # light gray 1361 + color7 #a89984 1362 + # dark gray 1363 + color15 #928374 1364 + 1365 + 1366 + # foreground #dddddd 1367 + # background #000000 1368 + 1369 + #: The foreground and background colors. 1370 + 1371 + # background_opacity 1.0 1372 + 1373 + #: The opacity of the background. A number between zero and one, where 1374 + #: one is opaque and zero is fully transparent. This will only work if 1375 + #: supported by the OS (for instance, when using a compositor under 1376 + #: X11). Note that it only sets the background color's opacity in 1377 + #: cells that have the same background color as the default terminal 1378 + #: background, so that things like the status bar in vim, powerline 1379 + #: prompts, etc. still look good. But it means that if you use a color 1380 + #: theme with a background color in your editor, it will not be 1381 + #: rendered as transparent. Instead you should change the default 1382 + #: background color in your kitty config and not use a background 1383 + #: color in the editor color scheme. Or use the escape codes to set 1384 + #: the terminals default colors in a shell script to launch your 1385 + #: editor. See also transparent_background_colors. Be aware that using 1386 + #: a value less than 1.0 is a (possibly significant) performance hit. 1387 + #: When using a low value for this setting, it is desirable that you 1388 + #: set the background color to a color the matches the general color 1389 + #: of the desktop background, for best text rendering. Note that to 1390 + #: workaround window managers not doing gamma-corrected blending kitty 1391 + #: makes background_opacity non-linear which means, especially for 1392 + #: light backgrounds you might need to make the value much lower than 1393 + #: you expect to get good results, see 6218 1394 + #: <https://github.com/kovidgoyal/kitty/issues/6218> for details. 1395 + 1396 + #: If you want to dynamically change transparency of windows, set 1397 + #: dynamic_background_opacity to yes (this is off by default as it has 1398 + #: a performance cost). Changing this option when reloading the config 1399 + #: will only work if dynamic_background_opacity was enabled in the 1400 + #: original config. 1401 + 1402 + # background_blur 0 1403 + 1404 + #: Set to a positive value to enable background blur (blurring of the 1405 + #: visuals behind a transparent window) on platforms that support it. 1406 + #: Only takes effect when background_opacity is less than one. On 1407 + #: macOS, this will also control the blur radius (amount of blurring). 1408 + #: Setting it to too high a value will cause severe performance issues 1409 + #: and/or rendering artifacts. Usually, values up to 64 work well. 1410 + #: Note that this might cause performance issues, depending on how the 1411 + #: platform implements it, so use with care. Currently supported on 1412 + #: macOS and KDE. 1413 + 1414 + # transparent_background_colors 1415 + 1416 + #: A space separated list of upto 7 colors, with opacity. When the 1417 + #: background color of a cell matches one of these colors, it is 1418 + #: rendered semi-transparent using the specified opacity. 1419 + 1420 + #: Useful in more complex UIs like editors where you could want more 1421 + #: than a single background color to be rendered as transparent, for 1422 + #: instance, for a cursor highlight line background or a highlighted 1423 + #: block. Terminal applications can set this color using The kitty 1424 + #: color control <https://sw.kovidgoyal.net/kitty/color-stack/#color- 1425 + #: control> escape code. 1426 + 1427 + #: The syntax for specifying colors is: color@opacity, where the 1428 + #: @opacity part is optional. When unspecified, the value of 1429 + #: background_opacity is used. For example:: 1430 + 1431 + #: transparent_background_colors red@0.5 #00ff00@0.3 1432 + 1433 + # dynamic_background_opacity no 1434 + 1435 + #: Allow changing of the background_opacity dynamically, using either 1436 + #: keyboard shortcuts (increase_background_opacity and 1437 + #: decrease_background_opacity) or the remote control facility. 1438 + #: Changing this option by reloading the config is not supported. 1439 + 1440 + # background_image none 1441 + 1442 + #: Path to a background image. Must be in PNG/JPEG/WEBP/TIFF/GIF/BMP 1443 + #: format. Note that when using auto_color_scheme 1444 + #: <https://sw.kovidgoyal.net/kitty/kittens/themes/#auto-color-scheme> 1445 + #: this option is overridden by the color scheme file and must be set 1446 + #: inside it to take effect. 1447 + 1448 + # background_image_layout tiled 1449 + 1450 + #: Whether to tile, scale or clamp the background image. The value can 1451 + #: be one of tiled, mirror-tiled, scaled, clamped, centered or 1452 + #: cscaled. The scaled and cscaled values scale the image to the 1453 + #: window size, with cscaled preserving the image aspect ratio. Note 1454 + #: that when using auto_color_scheme 1455 + #: <https://sw.kovidgoyal.net/kitty/kittens/themes/#auto-color-scheme> 1456 + #: this option is overridden by the color scheme file and must be set 1457 + #: inside it to take effect. 1458 + 1459 + # background_image_linear no 1460 + 1461 + #: When background image is scaled, whether linear interpolation 1462 + #: should be used. Note that when using auto_color_scheme 1463 + #: <https://sw.kovidgoyal.net/kitty/kittens/themes/#auto-color-scheme> 1464 + #: this option is overridden by the color scheme file and must be set 1465 + #: inside it to take effect. 1466 + 1467 + # background_tint 0.0 1468 + 1469 + #: How much to tint the background image by the background color. This 1470 + #: option makes it easier to read the text. Tinting is done using the 1471 + #: current background color for each window. This option applies only 1472 + #: if background_opacity is set and transparent windows are supported 1473 + #: or background_image is set. Note that when using auto_color_scheme 1474 + #: <https://sw.kovidgoyal.net/kitty/kittens/themes/#auto-color-scheme> 1475 + #: this option is overridden by the color scheme file and must be set 1476 + #: inside it to take effect. 1477 + 1478 + # background_tint_gaps 1.0 1479 + 1480 + #: How much to tint the background image at the window gaps by the 1481 + #: background color, after applying background_tint. Since this is 1482 + #: multiplicative with background_tint, it can be used to lighten the 1483 + #: tint over the window gaps for a *separated* look. Note that when 1484 + #: using auto_color_scheme 1485 + #: <https://sw.kovidgoyal.net/kitty/kittens/themes/#auto-color-scheme> 1486 + #: this option is overridden by the color scheme file and must be set 1487 + #: inside it to take effect. 1488 + 1489 + # dim_opacity 0.4 1490 + 1491 + #: How much to dim text that has the DIM/FAINT attribute set. One 1492 + #: means no dimming and zero means fully dimmed (i.e. invisible). 1493 + 1494 + # selection_foreground #000000 1495 + # selection_background #fffacd 1496 + 1497 + #: The foreground and background colors for text selected with the 1498 + #: mouse. Setting both of these to none will cause a "reverse video" 1499 + #: effect for selections, where the selection will be the cell text 1500 + #: color and the text will become the cell background color. Setting 1501 + #: only selection_foreground to none will cause the foreground color 1502 + #: to be used unchanged. Note that these colors can be overridden by 1503 + #: the program running in the terminal. 1504 + 1505 + #: The color table {{{ 1506 + 1507 + #: The 256 terminal colors. There are 8 basic colors, each color has a 1508 + #: dull and bright version, for the first 16 colors. You can set the 1509 + #: remaining 240 colors as color16 to color255. 1510 + 1511 + # color0 #000000 1512 + # color8 #767676 1513 + 1514 + #: black 1515 + 1516 + # color1 #cc0403 1517 + # color9 #f2201f 1518 + 1519 + #: red 1520 + 1521 + # color2 #19cb00 1522 + # color10 #23fd00 1523 + 1524 + #: green 1525 + 1526 + # color3 #cecb00 1527 + # color11 #fffd00 1528 + 1529 + #: yellow 1530 + 1531 + # color4 #0d73cc 1532 + # color12 #1a8fff 1533 + 1534 + #: blue 1535 + 1536 + # color5 #cb1ed1 1537 + # color13 #fd28ff 1538 + 1539 + #: magenta 1540 + 1541 + # color6 #0dcdcd 1542 + # color14 #14ffff 1543 + 1544 + #: cyan 1545 + 1546 + # color7 #dddddd 1547 + # color15 #ffffff 1548 + 1549 + #: white 1550 + 1551 + # mark1_foreground black 1552 + 1553 + #: Color for marks of type 1 1554 + 1555 + # mark1_background #98d3cb 1556 + 1557 + #: Color for marks of type 1 (light steel blue) 1558 + 1559 + # mark2_foreground black 1560 + 1561 + #: Color for marks of type 2 1562 + 1563 + # mark2_background #f2dcd3 1564 + 1565 + #: Color for marks of type 1 (beige) 1566 + 1567 + # mark3_foreground black 1568 + 1569 + #: Color for marks of type 3 1570 + 1571 + # mark3_background #f274bc 1572 + 1573 + #: Color for marks of type 3 (violet) 1574 + 1575 + #: }}} 1576 + 1577 + #: }}} 1578 + 1579 + #: Advanced {{{ 1580 + 1581 + # shell . 1582 + 1583 + #: The shell program to execute. The default value of . means to use 1584 + #: the value of of the SHELL environment variable or if unset, 1585 + #: whatever shell is set as the default shell for the current user. 1586 + #: Note that on macOS if you change this, you might need to add 1587 + #: --login and --interactive to ensure that the shell starts in 1588 + #: interactive mode and reads its startup rc files. Environment 1589 + #: variables are expanded in this setting. 1590 + 1591 + # editor . 1592 + 1593 + #: The terminal based text editor (such as vim or nano) to use when 1594 + #: editing the kitty config file or similar tasks. 1595 + 1596 + #: The default value of . means to use the environment variables 1597 + #: VISUAL and EDITOR in that order. If these variables aren't set, 1598 + #: kitty will run your shell ($SHELL -l -i -c env) to see if your 1599 + #: shell startup rc files set VISUAL or EDITOR. If that doesn't work, 1600 + #: kitty will cycle through various known editors (vim, emacs, etc.) 1601 + #: and take the first one that exists on your system. 1602 + 1603 + # close_on_child_death no 1604 + 1605 + #: Close the window when the child process (usually the shell) exits. 1606 + #: With the default value no, the terminal will remain open when the 1607 + #: child exits as long as there are still other processes outputting 1608 + #: to the terminal (for example disowned or backgrounded processes). 1609 + #: When enabled with yes, the window will close as soon as the child 1610 + #: process exits. Note that setting it to yes means that any 1611 + #: background processes still using the terminal can fail silently 1612 + #: because their stdout/stderr/stdin no longer work. 1613 + 1614 + # remote_control_password 1615 + 1616 + #: Allow other programs to control kitty using passwords. This option 1617 + #: can be specified multiple times to add multiple passwords. If no 1618 + #: passwords are present kitty will ask the user for permission if a 1619 + #: program tries to use remote control with a password. A password can 1620 + #: also *optionally* be associated with a set of allowed remote 1621 + #: control actions. For example:: 1622 + 1623 + #: remote_control_password "my passphrase" get-colors set-colors focus-window focus-tab 1624 + 1625 + #: Only the specified actions will be allowed when using this 1626 + #: password. Glob patterns can be used too, for example:: 1627 + 1628 + #: remote_control_password "my passphrase" set-tab-* resize-* 1629 + 1630 + #: To get a list of available actions, run:: 1631 + 1632 + #: kitten @ --help 1633 + 1634 + #: A set of actions to be allowed when no password is sent can be 1635 + #: specified by using an empty password. For example:: 1636 + 1637 + #: remote_control_password "" *-colors 1638 + 1639 + #: Finally, the path to a python module can be specified that provides 1640 + #: a function is_cmd_allowed that is used to check every remote 1641 + #: control command. For example:: 1642 + 1643 + #: remote_control_password "my passphrase" my_rc_command_checker.py 1644 + 1645 + #: Relative paths are resolved from the kitty configuration directory. 1646 + #: See rc_custom_auth <https://sw.kovidgoyal.net/kitty/remote- 1647 + #: control/#rc-custom-auth> for details. 1648 + 1649 + # allow_remote_control no 1650 + 1651 + #: Allow other programs to control kitty. If you turn this on, other 1652 + #: programs can control all aspects of kitty, including sending text 1653 + #: to kitty windows, opening new windows, closing windows, reading the 1654 + #: content of windows, etc. Note that this even works over SSH 1655 + #: connections. The default setting of no prevents any form of remote 1656 + #: control. The meaning of the various values are: 1657 + 1658 + #: password 1659 + #: Remote control requests received over both the TTY device and the socket 1660 + #: are confirmed based on passwords, see remote_control_password. 1661 + 1662 + #: socket-only 1663 + #: Remote control requests received over a socket are accepted 1664 + #: unconditionally. Requests received over the TTY are denied. 1665 + #: See listen_on. 1666 + 1667 + #: socket 1668 + #: Remote control requests received over a socket are accepted 1669 + #: unconditionally. Requests received over the TTY are confirmed based on 1670 + #: password. 1671 + 1672 + #: no 1673 + #: Remote control is completely disabled. 1674 + 1675 + #: yes 1676 + #: Remote control requests are always accepted. 1677 + 1678 + # listen_on none 1679 + 1680 + #: Listen to the specified socket for remote control connections. Note 1681 + #: that this will apply to all kitty instances. It can be overridden 1682 + #: by the kitty --listen-on command line option. For UNIX sockets, 1683 + #: such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux). 1684 + #: Environment variables are expanded and relative paths are resolved 1685 + #: with respect to the temporary directory. If {kitty_pid} is present, 1686 + #: then it is replaced by the PID of the kitty process, otherwise the 1687 + #: PID of the kitty process is appended to the value, with a hyphen. 1688 + #: For TCP sockets such as tcp:localhost:0 a random port is always 1689 + #: used even if a non-zero port number is specified. See the help for 1690 + #: kitty --listen-on for more details. Note that this will be ignored 1691 + #: unless allow_remote_control is set to either: yes, socket or 1692 + #: socket-only. Changing this option by reloading the config is not 1693 + #: supported. 1694 + 1695 + # env 1696 + 1697 + #: Specify the environment variables to be set in all child processes. 1698 + #: Using the name with an equal sign (e.g. env VAR=) will set it to 1699 + #: the empty string. Specifying only the name (e.g. env VAR) will 1700 + #: remove the variable from the child process' environment. Note that 1701 + #: environment variables are expanded recursively, for example:: 1702 + 1703 + #: env VAR1=a 1704 + #: env VAR2=${HOME}/${VAR1}/b 1705 + 1706 + #: The value of VAR2 will be <path to home directory>/a/b. 1707 + 1708 + # filter_notification 1709 + 1710 + #: Specify rules to filter out notifications sent by applications 1711 + #: running in kitty. Can be specified multiple times to create 1712 + #: multiple filter rules. A rule specification is of the form 1713 + #: field:regexp. A filter rule can match on any of the fields: title, 1714 + #: body, app, type. The special value of all filters out all 1715 + #: notifications. Rules can be combined using Boolean operators. Some 1716 + #: examples:: 1717 + 1718 + #: filter_notification title:hello or body:"abc.*def" 1719 + #: # filter out notification from vim except for ones about updates, (?i) 1720 + #: # makes matching case insensitive. 1721 + #: filter_notification app:"[ng]?vim" and not body:"(?i)update" 1722 + #: # filter out all notifications 1723 + #: filter_notification all 1724 + 1725 + #: The field app is the name of the application sending the 1726 + #: notification and type is the type of the notification. Not all 1727 + #: applications will send these fields, so you can also match on the 1728 + #: title and body of the notification text. More sophisticated 1729 + #: programmatic filtering and custom actions on notifications can be 1730 + #: done by creating a notifications.py file in the kitty config 1731 + #: directory (~/.config/kitty). An annotated sample is available 1732 + #: <https://github.com/kovidgoyal/kitty/blob/master/docs/notifications.py>. 1733 + 1734 + # watcher 1735 + 1736 + #: Path to python file which will be loaded for watchers 1737 + #: <https://sw.kovidgoyal.net/kitty/launch/#watchers>. Can be 1738 + #: specified more than once to load multiple watchers. The watchers 1739 + #: will be added to every kitty window. Relative paths are resolved 1740 + #: relative to the kitty config directory. Note that reloading the 1741 + #: config will only affect windows created after the reload. 1742 + 1743 + # exe_search_path 1744 + 1745 + #: Control where kitty finds the programs to run. The default search 1746 + #: order is: First search the system wide PATH, then ~/.local/bin and 1747 + #: ~/bin. If still not found, the PATH defined in the login shell 1748 + #: after sourcing all its startup files is tried. Finally, if present, 1749 + #: the PATH specified by the env option is tried. 1750 + 1751 + #: This option allows you to prepend, append, or remove paths from 1752 + #: this search order. It can be specified multiple times for multiple 1753 + #: paths. A simple path will be prepended to the search order. A path 1754 + #: that starts with the + sign will be append to the search order, 1755 + #: after ~/bin above. A path that starts with the - sign will be 1756 + #: removed from the entire search order. For example:: 1757 + 1758 + #: exe_search_path /some/prepended/path 1759 + #: exe_search_path +/some/appended/path 1760 + #: exe_search_path -/some/excluded/path 1761 + 1762 + # update_check_interval 24 1763 + 1764 + #: The interval to periodically check if an update to kitty is 1765 + #: available (in hours). If an update is found, a system notification 1766 + #: is displayed informing you of the available update. The default is 1767 + #: to check every 24 hours, set to zero to disable. Update checking is 1768 + #: only done by the official binary builds. Distro packages or source 1769 + #: builds do not do update checking. Changing this option by reloading 1770 + #: the config is not supported. 1771 + 1772 + # startup_session none 1773 + 1774 + #: Path to a session file to use for all kitty instances. Can be 1775 + #: overridden by using the kitty --session =none command line option 1776 + #: for individual instances. See sessions 1777 + #: <https://sw.kovidgoyal.net/kitty/overview/#sessions> in the kitty 1778 + #: documentation for details. Note that relative paths are interpreted 1779 + #: with respect to the kitty config directory. Environment variables 1780 + #: in the path are expanded. Changing this option by reloading the 1781 + #: config is not supported. Note that if kitty is invoked with command 1782 + #: line arguments specifying a command to run, this option is ignored. 1783 + 1784 + # clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask 1785 + 1786 + #: Allow programs running in kitty to read and write from the 1787 + #: clipboard. You can control exactly which actions are allowed. The 1788 + #: possible actions are: write-clipboard, read-clipboard, write- 1789 + #: primary, read-primary, read-clipboard-ask, read-primary-ask. The 1790 + #: default is to allow writing to the clipboard and primary selection 1791 + #: and to ask for permission when a program tries to read from the 1792 + #: clipboard. Note that disabling the read confirmation is a security 1793 + #: risk as it means that any program, even the ones running on a 1794 + #: remote server via SSH can read your clipboard. See also 1795 + #: clipboard_max_size. 1796 + 1797 + # clipboard_max_size 512 1798 + 1799 + #: The maximum size (in MB) of data from programs running in kitty 1800 + #: that will be stored for writing to the system clipboard. A value of 1801 + #: zero means no size limit is applied. See also clipboard_control. 1802 + 1803 + # file_transfer_confirmation_bypass 1804 + 1805 + #: The password that can be supplied to the file transfer kitten 1806 + #: <https://sw.kovidgoyal.net/kitty/kittens/transfer/> to skip the 1807 + #: transfer confirmation prompt. This should only be used when 1808 + #: initiating transfers from trusted computers, over trusted networks 1809 + #: or encrypted transports, as it allows any programs running on the 1810 + #: remote machine to read/write to the local filesystem, without 1811 + #: permission. 1812 + 1813 + # allow_hyperlinks yes 1814 + 1815 + #: Process hyperlink escape sequences (OSC 8). If disabled OSC 8 1816 + #: escape sequences are ignored. Otherwise they become clickable 1817 + #: links, that you can click with the mouse or by using the hints 1818 + #: kitten <https://sw.kovidgoyal.net/kitty/kittens/hints/>. The 1819 + #: special value of ask means that kitty will ask before opening the 1820 + #: link when clicked. 1821 + 1822 + # shell_integration enabled 1823 + 1824 + #: Enable shell integration on supported shells. This enables features 1825 + #: such as jumping to previous prompts, browsing the output of the 1826 + #: previous command in a pager, etc. on supported shells. Set to 1827 + #: disabled to turn off shell integration, completely. It is also 1828 + #: possible to disable individual features, set to a space separated 1829 + #: list of these values: no-rc, no-cursor, no-title, no-cwd, no- 1830 + #: prompt-mark, no-complete, no-sudo. See Shell integration 1831 + #: <https://sw.kovidgoyal.net/kitty/shell-integration/> for details. 1832 + 1833 + # allow_cloning ask 1834 + 1835 + #: Control whether programs running in the terminal can request new 1836 + #: windows to be created. The canonical example is clone-in-kitty 1837 + #: <https://sw.kovidgoyal.net/kitty/shell-integration/#clone-shell>. 1838 + #: By default, kitty will ask for permission for each clone request. 1839 + #: Allowing cloning unconditionally gives programs running in the 1840 + #: terminal (including over SSH) permission to execute arbitrary code, 1841 + #: as the user who is running the terminal, on the computer that the 1842 + #: terminal is running on. 1843 + 1844 + # clone_source_strategies venv,conda,env_var,path 1845 + 1846 + #: Control what shell code is sourced when running clone-in-kitty in 1847 + #: the newly cloned window. The supported strategies are: 1848 + 1849 + #: venv 1850 + #: Source the file $VIRTUAL_ENV/bin/activate. This is used by the 1851 + #: Python stdlib venv module and allows cloning venvs automatically. 1852 + #: conda 1853 + #: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual 1854 + #: environments created by conda. 1855 + #: env_var 1856 + #: Execute the contents of the environment variable 1857 + #: KITTY_CLONE_SOURCE_CODE with eval. 1858 + #: path 1859 + #: Source the file pointed to by the environment variable 1860 + #: KITTY_CLONE_SOURCE_PATH. 1861 + 1862 + #: This option must be a comma separated list of the above values. 1863 + #: Only the first valid match, in the order specified, is sourced. 1864 + 1865 + # notify_on_cmd_finish never 1866 + 1867 + #: Show a desktop notification when a long-running command finishes 1868 + #: (needs shell_integration). The possible values are: 1869 + 1870 + #: never 1871 + #: Never send a notification. 1872 + 1873 + #: unfocused 1874 + #: Only send a notification when the window does not have keyboard focus. 1875 + 1876 + #: invisible 1877 + #: Only send a notification when the window both is unfocused and not visible 1878 + #: to the user, for example, because it is in an inactive tab or its OS window 1879 + #: is not currently visible (on platforms that support OS window visibility querying 1880 + #: this considers an OS Window visible iff it is active). 1881 + 1882 + #: always 1883 + #: Always send a notification, regardless of window state. 1884 + 1885 + #: There are two optional arguments: 1886 + 1887 + #: First, the minimum duration for what is considered a long running 1888 + #: command. The default is 5 seconds. Specify a second argument to set 1889 + #: the duration. For example: invisible 15. Do not set the value too 1890 + #: small, otherwise a command that launches a new OS Window and exits 1891 + #: will spam a notification. 1892 + 1893 + #: Second, the action to perform. The default is notify. The possible 1894 + #: values are: 1895 + 1896 + #: notify 1897 + #: Send a desktop notification. The subsequent arguments are optional and specify when 1898 + #: the notification is automatically cleared. The set of possible events when the notification is 1899 + #: cleared are: focus and next. focus means that when the notification 1900 + #: policy is unfocused or invisible the notification is automatically cleared 1901 + #: when the window regains focus. The value of next means that the previous notification 1902 + #: is cleared when the next notification is shown. The default when no arguments are specified 1903 + #: is: focus next. 1904 + 1905 + #: bell 1906 + #: Ring the terminal bell. 1907 + 1908 + #: command 1909 + #: Run a custom command. All subsequent arguments are the cmdline to run. 1910 + 1911 + #: Some more examples:: 1912 + 1913 + #: # Send a notification when a command takes more than 5 seconds in an unfocused window 1914 + #: notify_on_cmd_finish unfocused 1915 + #: # Send a notification when a command takes more than 10 seconds in a invisible window 1916 + #: notify_on_cmd_finish invisible 10.0 1917 + #: # Ring a bell when a command takes more than 10 seconds in a invisible window 1918 + #: notify_on_cmd_finish invisible 10.0 bell 1919 + #: # Run 'notify-send' when a command takes more than 10 seconds in a invisible window 1920 + #: # Here %c is replaced by the current command line and %s by the job exit code 1921 + #: notify_on_cmd_finish invisible 10.0 command notify-send "job finished with status: %s" %c 1922 + #: # Do not clear previous notification when next command finishes or window regains focus 1923 + #: notify_on_cmd_finish invisible 5.0 notify 1924 + 1925 + # term xterm-kitty 1926 + 1927 + #: The value of the TERM environment variable to set. Changing this 1928 + #: can break many terminal programs, only change it if you know what 1929 + #: you are doing, not because you read some advice on "Stack Overflow" 1930 + #: to change it. The TERM variable is used by various programs to get 1931 + #: information about the capabilities and behavior of the terminal. If 1932 + #: you change it, depending on what programs you run, and how 1933 + #: different the terminal you are changing it to is, various things 1934 + #: from key-presses, to colors, to various advanced features may not 1935 + #: work. Changing this option by reloading the config will only affect 1936 + #: newly created windows. 1937 + 1938 + # terminfo_type path 1939 + 1940 + #: The value of the TERMINFO environment variable to set. This 1941 + #: variable is used by programs running in the terminal to search for 1942 + #: terminfo databases. The default value of path causes kitty to set 1943 + #: it to a filesystem location containing the kitty terminfo database. 1944 + #: A value of direct means put the entire database into the env var 1945 + #: directly. This can be useful when connecting to containers, for 1946 + #: example. But, note that not all software supports this. A value of 1947 + #: none means do not touch the variable. 1948 + 1949 + # forward_stdio no 1950 + 1951 + #: Forward STDOUT and STDERR of the kitty process to child processes. 1952 + #: This is useful for debugging as it allows child processes to print 1953 + #: to kitty's STDOUT directly. For example, echo hello world 1954 + #: >&$KITTY_STDIO_FORWARDED in a shell will print to the parent 1955 + #: kitty's STDOUT. Sets the KITTY_STDIO_FORWARDED=fdnum environment 1956 + #: variable so child processes know about the forwarding. Note that on 1957 + #: macOS this prevents the shell from being run via the login utility 1958 + #: so getlogin() will not work in programs run in this session. 1959 + 1960 + # menu_map 1961 + 1962 + #: Specify entries for various menus in kitty. Currently only the 1963 + #: global menubar on macOS is supported. For example:: 1964 + 1965 + #: menu_map global "Actions::Launch something special" launch --hold --type=os-window sh -c "echo hello world" 1966 + 1967 + #: This will create a menu entry named "Launch something special" in 1968 + #: an "Actions" menu in the macOS global menubar. Sub-menus can be 1969 + #: created by adding more levels separated by the :: characters. 1970 + 1971 + #: }}} 1972 + 1973 + #: OS specific tweaks {{{ 1974 + 1975 + # wayland_titlebar_color system 1976 + 1977 + #: The color of the kitty window's titlebar on Wayland systems with 1978 + #: client side window decorations such as GNOME. A value of system 1979 + #: means to use the default system colors, a value of background means 1980 + #: to use the background color of the currently active kitty window 1981 + #: and finally you can use an arbitrary color, such as #12af59 or red. 1982 + 1983 + # macos_titlebar_color system 1984 + 1985 + #: The color of the kitty window's titlebar on macOS. A value of 1986 + #: system means to use the default system color, light or dark can 1987 + #: also be used to set it explicitly. A value of background means to 1988 + #: use the background color of the currently active window and finally 1989 + #: you can use an arbitrary color, such as #12af59 or red. WARNING: 1990 + #: This option works by using a hack when arbitrary color (or 1991 + #: background) is configured, as there is no proper Cocoa API for it. 1992 + #: It sets the background color of the entire window and makes the 1993 + #: titlebar transparent. As such it is incompatible with 1994 + #: background_opacity. If you want to use both, you are probably 1995 + #: better off just hiding the titlebar with hide_window_decorations. 1996 + 1997 + # macos_option_as_alt no 1998 + 1999 + #: Use the Option key as an Alt key on macOS. With this set to no, 2000 + #: kitty will use the macOS native Option+Key to enter Unicode 2001 + #: character behavior. This will break any Alt+Key keyboard shortcuts 2002 + #: in your terminal programs, but you can use the macOS Unicode input 2003 + #: technique. You can use the values: left, right or both to use only 2004 + #: the left, right or both Option keys as Alt, instead. Note that 2005 + #: kitty itself always treats Option the same as Alt. This means you 2006 + #: cannot use this option to configure different kitty shortcuts for 2007 + #: Option+Key vs. Alt+Key. Also, any kitty shortcuts using 2008 + #: Option/Alt+Key will take priority, so that any such key presses 2009 + #: will not be passed to terminal programs running inside kitty. 2010 + #: Changing this option by reloading the config is not supported. 2011 + 2012 + # macos_hide_from_tasks no 2013 + 2014 + #: Hide the kitty window from running tasks on macOS (⌘+Tab and the 2015 + #: Dock). Changing this option by reloading the config is not 2016 + #: supported. 2017 + 2018 + # macos_quit_when_last_window_closed no 2019 + 2020 + #: Have kitty quit when all the top-level windows are closed on macOS. 2021 + #: By default, kitty will stay running, even with no open windows, as 2022 + #: is the expected behavior on macOS. 2023 + 2024 + # macos_window_resizable yes 2025 + 2026 + #: Disable this if you want kitty top-level OS windows to not be 2027 + #: resizable on macOS. 2028 + 2029 + # macos_thicken_font 0 2030 + 2031 + #: Draw an extra border around the font with the given width, to 2032 + #: increase legibility at small font sizes on macOS. For example, a 2033 + #: value of 0.75 will result in rendering that looks similar to sub- 2034 + #: pixel antialiasing at common font sizes. Note that in modern kitty, 2035 + #: this option is obsolete (although still supported). Consider using 2036 + #: text_composition_strategy instead. 2037 + 2038 + # macos_traditional_fullscreen no 2039 + 2040 + #: Use the macOS traditional full-screen transition, that is faster, 2041 + #: but less pretty. 2042 + 2043 + # macos_show_window_title_in all 2044 + 2045 + #: Control where the window title is displayed on macOS. A value of 2046 + #: window will show the title of the currently active window at the 2047 + #: top of the macOS window. A value of menubar will show the title of 2048 + #: the currently active window in the macOS global menu bar, making 2049 + #: use of otherwise wasted space. A value of all will show the title 2050 + #: in both places, and none hides the title. See 2051 + #: macos_menubar_title_max_length for how to control the length of the 2052 + #: title in the menu bar. 2053 + 2054 + # macos_menubar_title_max_length 0 2055 + 2056 + #: The maximum number of characters from the window title to show in 2057 + #: the macOS global menu bar. Values less than one means that there is 2058 + #: no maximum limit. 2059 + 2060 + # macos_custom_beam_cursor no 2061 + 2062 + #: Use a custom mouse cursor for macOS that is easier to see on both 2063 + #: light and dark backgrounds. Nowadays, the default macOS cursor 2064 + #: already comes with a white border. WARNING: this might make your 2065 + #: mouse cursor invisible on dual GPU machines. Changing this option 2066 + #: by reloading the config is not supported. 2067 + 2068 + # macos_colorspace srgb 2069 + 2070 + #: The colorspace in which to interpret terminal colors. The default 2071 + #: of srgb will cause colors to match those seen in web browsers. The 2072 + #: value of default will use whatever the native colorspace of the 2073 + #: display is. The value of displayp3 will use Apple's special 2074 + #: snowflake display P3 color space, which will result in over 2075 + #: saturated (brighter) colors with some color shift. Reloading 2076 + #: configuration will change this value only for newly created OS 2077 + #: windows. 2078 + 2079 + # linux_display_server auto 2080 + 2081 + #: Choose between Wayland and X11 backends. By default, an appropriate 2082 + #: backend based on the system state is chosen automatically. Set it 2083 + #: to x11 or wayland to force the choice. Changing this option by 2084 + #: reloading the config is not supported. 2085 + 2086 + # wayland_enable_ime yes 2087 + 2088 + #: Enable Input Method Extension on Wayland. This is typically used 2089 + #: for inputting text in East Asian languages. However, its 2090 + #: implementation in Wayland is often buggy and introduces latency 2091 + #: into the input loop, so disable this if you know you dont need it. 2092 + #: Changing this option by reloading the config is not supported, it 2093 + #: will not have any effect. 2094 + 2095 + #: }}} 2096 + 2097 + #: Keyboard shortcuts {{{ 2098 + 2099 + #: Keys are identified simply by their lowercase Unicode characters. 2100 + #: For example: a for the A key, [ for the left square bracket key, 2101 + #: etc. For functional keys, such as Enter or Escape, the names are 2102 + #: present at Functional key definitions 2103 + #: <https://sw.kovidgoyal.net/kitty/keyboard-protocol/#functional>. 2104 + #: For modifier keys, the names are ctrl (control, ⌃), shift (⇧), alt 2105 + #: (opt, option, ⌥), super (cmd, command, ⌘). 2106 + 2107 + #: Simple shortcut mapping is done with the map directive. For full 2108 + #: details on advanced mapping including modal and per application 2109 + #: maps, see mapping <https://sw.kovidgoyal.net/kitty/mapping/>. Some 2110 + #: quick examples to illustrate common tasks:: 2111 + 2112 + #: # unmap a keyboard shortcut, passing it to the program running in kitty 2113 + #: map kitty_mod+space 2114 + #: # completely ignore a keyboard event 2115 + #: map ctrl+alt+f1 discard_event 2116 + #: # combine multiple actions 2117 + #: map kitty_mod+e combine : new_window : next_layout 2118 + #: # multi-key shortcuts 2119 + #: map ctrl+x>ctrl+y>z action 2120 + 2121 + #: The full list of actions that can be mapped to key presses is 2122 + #: available here <https://sw.kovidgoyal.net/kitty/actions/>. 2123 + 2124 + # kitty_mod ctrl+shift 2125 + 2126 + #: Special modifier key alias for default shortcuts. You can change 2127 + #: the value of this option to alter all default shortcuts that use 2128 + #: kitty_mod. 2129 + 2130 + # clear_all_shortcuts no 2131 + 2132 + #: Remove all shortcut definitions up to this point. Useful, for 2133 + #: instance, to remove the default shortcuts. 2134 + 2135 + # action_alias 2136 + 2137 + #: E.g. action_alias launch_tab launch --type=tab --cwd=current 2138 + 2139 + #: Define action aliases to avoid repeating the same options in 2140 + #: multiple mappings. Aliases can be defined for any action and will 2141 + #: be expanded recursively. For example, the above alias allows you to 2142 + #: create mappings to launch a new tab in the current working 2143 + #: directory without duplication:: 2144 + 2145 + #: map f1 launch_tab vim 2146 + #: map f2 launch_tab emacs 2147 + 2148 + #: Similarly, to alias kitten invocation:: 2149 + 2150 + #: action_alias hints kitten hints --hints-offset=0 2151 + 2152 + # kitten_alias 2153 + 2154 + #: E.g. kitten_alias hints hints --hints-offset=0 2155 + 2156 + #: Like action_alias above, but specifically for kittens. Generally, 2157 + #: prefer to use action_alias. This option is a legacy version, 2158 + #: present for backwards compatibility. It causes all invocations of 2159 + #: the aliased kitten to be substituted. So the example above will 2160 + #: cause all invocations of the hints kitten to have the --hints- 2161 + #: offset=0 option applied. 2162 + 2163 + #: Clipboard {{{ 2164 + 2165 + #: Copy to clipboard 2166 + 2167 + # map kitty_mod+c copy_to_clipboard 2168 + # map cmd+c copy_to_clipboard 2169 + 2170 + #:: There is also a copy_or_interrupt action that can be optionally 2171 + #:: mapped to Ctrl+C. It will copy only if there is a selection and 2172 + #:: send an interrupt otherwise. Similarly, 2173 + #:: copy_and_clear_or_interrupt will copy and clear the selection or 2174 + #:: send an interrupt if there is no selection. 2175 + 2176 + #: Paste from clipboard 2177 + 2178 + # map kitty_mod+v paste_from_clipboard 2179 + # map cmd+v paste_from_clipboard 2180 + 2181 + #: Paste from selection 2182 + 2183 + # map kitty_mod+s paste_from_selection 2184 + # map shift+insert paste_from_selection 2185 + 2186 + #: Pass selection to program 2187 + 2188 + # map kitty_mod+o pass_selection_to_program 2189 + 2190 + #:: You can also pass the contents of the current selection to any 2191 + #:: program with pass_selection_to_program. By default, the system's 2192 + #:: open program is used, but you can specify your own, the selection 2193 + #:: will be passed as a command line argument to the program. For 2194 + #:: example:: 2195 + 2196 + #:: map kitty_mod+o pass_selection_to_program firefox 2197 + 2198 + #:: You can pass the current selection to a terminal program running 2199 + #:: in a new kitty window, by using the @selection placeholder:: 2200 + 2201 + #:: map kitty_mod+y new_window less @selection 2202 + 2203 + #: }}} 2204 + 2205 + #: Scrolling {{{ 2206 + 2207 + #: Scroll line up 2208 + 2209 + # map kitty_mod+up scroll_line_up 2210 + # map kitty_mod+k scroll_line_up 2211 + # map opt+cmd+page_up scroll_line_up 2212 + # map cmd+up scroll_line_up 2213 + 2214 + #: Scroll line down 2215 + 2216 + # map kitty_mod+down scroll_line_down 2217 + # map kitty_mod+j scroll_line_down 2218 + # map opt+cmd+page_down scroll_line_down 2219 + # map cmd+down scroll_line_down 2220 + 2221 + #: Scroll page up 2222 + 2223 + # map kitty_mod+page_up scroll_page_up 2224 + # map cmd+page_up scroll_page_up 2225 + 2226 + #: Scroll page down 2227 + 2228 + # map kitty_mod+page_down scroll_page_down 2229 + # map cmd+page_down scroll_page_down 2230 + 2231 + #: Scroll to top 2232 + 2233 + # map kitty_mod+home scroll_home 2234 + # map cmd+home scroll_home 2235 + 2236 + #: Scroll to bottom 2237 + 2238 + # map kitty_mod+end scroll_end 2239 + # map cmd+end scroll_end 2240 + 2241 + #: Scroll to previous shell prompt 2242 + 2243 + # map kitty_mod+z scroll_to_prompt -1 2244 + 2245 + #:: Use a parameter of 0 for scroll_to_prompt to scroll to the last 2246 + #:: jumped to or the last clicked position. Requires shell 2247 + #:: integration <https://sw.kovidgoyal.net/kitty/shell-integration/> 2248 + #:: to work. 2249 + 2250 + #: Scroll to next shell prompt 2251 + 2252 + # map kitty_mod+x scroll_to_prompt 1 2253 + 2254 + #: Browse scrollback buffer in pager 2255 + 2256 + # map kitty_mod+h show_scrollback 2257 + 2258 + #:: You can pipe the contents of the current screen and history 2259 + #:: buffer as STDIN to an arbitrary program using launch --stdin- 2260 + #:: source. For example, the following opens the scrollback buffer in 2261 + #:: less in an overlay window:: 2262 + 2263 + #:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R 2264 + 2265 + #:: For more details on piping screen and buffer contents to external 2266 + #:: programs, see launch <https://sw.kovidgoyal.net/kitty/launch/>. 2267 + 2268 + #: Browse output of the last shell command in pager 2269 + 2270 + # map kitty_mod+g show_last_command_output 2271 + 2272 + #:: You can also define additional shortcuts to get the command 2273 + #:: output. For example, to get the first command output on screen:: 2274 + 2275 + #:: map f1 show_first_command_output_on_screen 2276 + 2277 + #:: To get the command output that was last accessed by a keyboard 2278 + #:: action or mouse action:: 2279 + 2280 + #:: map f1 show_last_visited_command_output 2281 + 2282 + #:: You can pipe the output of the last command run in the shell 2283 + #:: using the launch action. For example, the following opens the 2284 + #:: output in less in an overlay window:: 2285 + 2286 + #:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R 2287 + 2288 + #:: To get the output of the first command on the screen, use 2289 + #:: @first_cmd_output_on_screen. To get the output of the last jumped 2290 + #:: to command, use @last_visited_cmd_output. 2291 + 2292 + #:: Requires shell integration 2293 + #:: <https://sw.kovidgoyal.net/kitty/shell-integration/> to work. 2294 + 2295 + #: }}} 2296 + 2297 + #: Window management {{{ 2298 + 2299 + #: New window 2300 + 2301 + # map kitty_mod+enter new_window 2302 + # map cmd+enter new_window 2303 + 2304 + #:: You can open a new kitty window running an arbitrary program, for 2305 + #:: example:: 2306 + 2307 + #:: map kitty_mod+y launch mutt 2308 + 2309 + #:: You can open a new window with the current working directory set 2310 + #:: to the working directory of the current window using:: 2311 + 2312 + #:: map ctrl+alt+enter launch --cwd=current 2313 + 2314 + #:: You can open a new window that is allowed to control kitty via 2315 + #:: the kitty remote control facility with launch --allow-remote- 2316 + #:: control. Any programs running in that window will be allowed to 2317 + #:: control kitty. For example:: 2318 + 2319 + #:: map ctrl+enter launch --allow-remote-control some_program 2320 + 2321 + #:: You can open a new window next to the currently active window or 2322 + #:: as the first window, with:: 2323 + 2324 + #:: map ctrl+n launch --location=neighbor 2325 + #:: map ctrl+f launch --location=first 2326 + 2327 + #:: For more details, see launch 2328 + #:: <https://sw.kovidgoyal.net/kitty/launch/>. 2329 + 2330 + #: New OS window 2331 + 2332 + # map kitty_mod+n new_os_window 2333 + # map cmd+n new_os_window 2334 + 2335 + #:: Works like new_window above, except that it opens a top-level OS 2336 + #:: window. In particular you can use new_os_window_with_cwd to open 2337 + #:: a window with the current working directory. 2338 + 2339 + #: Close window 2340 + 2341 + # map kitty_mod+w close_window 2342 + # map shift+cmd+d close_window 2343 + 2344 + #: Next window 2345 + 2346 + # map kitty_mod+] next_window 2347 + 2348 + #: Previous window 2349 + 2350 + # map kitty_mod+[ previous_window 2351 + 2352 + #: Move window forward 2353 + 2354 + # map kitty_mod+f move_window_forward 2355 + 2356 + #: Move window backward 2357 + 2358 + # map kitty_mod+b move_window_backward 2359 + 2360 + #: Move window to top 2361 + 2362 + # map kitty_mod+` move_window_to_top 2363 + 2364 + #: Start resizing window 2365 + 2366 + # map kitty_mod+r start_resizing_window 2367 + # map cmd+r start_resizing_window 2368 + 2369 + #: First window 2370 + 2371 + # map kitty_mod+1 first_window 2372 + # map cmd+1 first_window 2373 + 2374 + #: Second window 2375 + 2376 + # map kitty_mod+2 second_window 2377 + # map cmd+2 second_window 2378 + 2379 + #: Third window 2380 + 2381 + # map kitty_mod+3 third_window 2382 + # map cmd+3 third_window 2383 + 2384 + #: Fourth window 2385 + 2386 + # map kitty_mod+4 fourth_window 2387 + # map cmd+4 fourth_window 2388 + 2389 + #: Fifth window 2390 + 2391 + # map kitty_mod+5 fifth_window 2392 + # map cmd+5 fifth_window 2393 + 2394 + #: Sixth window 2395 + 2396 + # map kitty_mod+6 sixth_window 2397 + # map cmd+6 sixth_window 2398 + 2399 + #: Seventh window 2400 + 2401 + # map kitty_mod+7 seventh_window 2402 + # map cmd+7 seventh_window 2403 + 2404 + #: Eighth window 2405 + 2406 + # map kitty_mod+8 eighth_window 2407 + # map cmd+8 eighth_window 2408 + 2409 + #: Ninth window 2410 + 2411 + # map kitty_mod+9 ninth_window 2412 + # map cmd+9 ninth_window 2413 + 2414 + #: Tenth window 2415 + 2416 + # map kitty_mod+0 tenth_window 2417 + 2418 + #: Visually select and focus window 2419 + 2420 + # map kitty_mod+f7 focus_visible_window 2421 + 2422 + #:: Display overlay numbers and alphabets on the window, and switch 2423 + #:: the focus to the window when you press the key. When there are 2424 + #:: only two windows, the focus will be switched directly without 2425 + #:: displaying the overlay. You can change the overlay characters and 2426 + #:: their order with option visual_window_select_characters. 2427 + 2428 + #: Visually swap window with another 2429 + 2430 + # map kitty_mod+f8 swap_with_window 2431 + 2432 + #:: Works like focus_visible_window above, but swaps the window. 2433 + 2434 + #: }}} 2435 + 2436 + #: Tab management {{{ 2437 + 2438 + #: Next tab 2439 + 2440 + # map kitty_mod+right next_tab 2441 + # map shift+cmd+] next_tab 2442 + # map ctrl+tab next_tab 2443 + 2444 + #: Previous tab 2445 + 2446 + # map kitty_mod+left previous_tab 2447 + # map shift+cmd+[ previous_tab 2448 + # map ctrl+shift+tab previous_tab 2449 + 2450 + #: New tab 2451 + 2452 + # map kitty_mod+t new_tab 2453 + # map cmd+t new_tab 2454 + 2455 + #: Close tab 2456 + 2457 + # map kitty_mod+q close_tab 2458 + # map cmd+w close_tab 2459 + 2460 + #: Close OS window 2461 + 2462 + # map shift+cmd+w close_os_window 2463 + 2464 + #: Move tab forward 2465 + 2466 + # map kitty_mod+. move_tab_forward 2467 + 2468 + #: Move tab backward 2469 + 2470 + # map kitty_mod+, move_tab_backward 2471 + 2472 + #: Set tab title 2473 + 2474 + # map kitty_mod+alt+t set_tab_title 2475 + # map shift+cmd+i set_tab_title 2476 + 2477 + 2478 + #: You can also create shortcuts to go to specific tabs, with 1 being 2479 + #: the first tab, 2 the second tab and -1 being the previously active 2480 + #: tab, -2 being the tab active before the previously active tab and 2481 + #: so on. Any number larger than the number of tabs goes to the last 2482 + #: tab and any number less than the number of previously used tabs in 2483 + #: the history goes to the oldest previously used tab in the history:: 2484 + 2485 + #: map ctrl+alt+1 goto_tab 1 2486 + #: map ctrl+alt+2 goto_tab 2 2487 + 2488 + #: Just as with new_window above, you can also pass the name of 2489 + #: arbitrary commands to run when using new_tab and new_tab_with_cwd. 2490 + #: Finally, if you want the new tab to open next to the current tab 2491 + #: rather than at the end of the tabs list, use:: 2492 + 2493 + #: map ctrl+t new_tab !neighbor [optional cmd to run] 2494 + #: }}} 2495 + 2496 + #: Layout management {{{ 2497 + 2498 + #: Next layout 2499 + 2500 + # map kitty_mod+l next_layout 2501 + 2502 + 2503 + #: You can also create shortcuts to switch to specific layouts:: 2504 + 2505 + #: map ctrl+alt+t goto_layout tall 2506 + #: map ctrl+alt+s goto_layout stack 2507 + 2508 + #: Similarly, to switch back to the previous layout:: 2509 + 2510 + #: map ctrl+alt+p last_used_layout 2511 + 2512 + #: There is also a toggle_layout action that switches to the named 2513 + #: layout or back to the previous layout if in the named layout. 2514 + #: Useful to temporarily "zoom" the active window by switching to the 2515 + #: stack layout:: 2516 + 2517 + #: map ctrl+alt+z toggle_layout stack 2518 + #: }}} 2519 + 2520 + #: Font sizes {{{ 2521 + 2522 + #: You can change the font size for all top-level kitty OS windows at 2523 + #: a time or only the current one. 2524 + 2525 + #: Increase font size 2526 + 2527 + # map kitty_mod+equal change_font_size all +2.0 2528 + # map kitty_mod+plus change_font_size all +2.0 2529 + # map kitty_mod+kp_add change_font_size all +2.0 2530 + # map cmd+plus change_font_size all +2.0 2531 + # map cmd+equal change_font_size all +2.0 2532 + # map shift+cmd+equal change_font_size all +2.0 2533 + 2534 + #: Decrease font size 2535 + 2536 + # map kitty_mod+minus change_font_size all -2.0 2537 + # map kitty_mod+kp_subtract change_font_size all -2.0 2538 + # map cmd+minus change_font_size all -2.0 2539 + # map shift+cmd+minus change_font_size all -2.0 2540 + 2541 + #: Reset font size 2542 + 2543 + # map kitty_mod+backspace change_font_size all 0 2544 + # map cmd+0 change_font_size all 0 2545 + 2546 + 2547 + #: To setup shortcuts for specific font sizes:: 2548 + 2549 + #: map kitty_mod+f6 change_font_size all 10.0 2550 + 2551 + #: To setup shortcuts to change only the current OS window's font 2552 + #: size:: 2553 + 2554 + #: map kitty_mod+f6 change_font_size current 10.0 2555 + 2556 + #: To setup shortcuts to multiply/divide the font size:: 2557 + 2558 + #: map kitty_mod+f6 change_font_size all *2.0 2559 + #: map kitty_mod+f6 change_font_size all /2.0 2560 + #: }}} 2561 + 2562 + #: Select and act on visible text {{{ 2563 + 2564 + #: Use the hints kitten to select text and either pass it to an 2565 + #: external program or insert it into the terminal or copy it to the 2566 + #: clipboard. 2567 + 2568 + #: Open URL 2569 + 2570 + # map kitty_mod+e open_url_with_hints 2571 + 2572 + #:: Open a currently visible URL using the keyboard. The program used 2573 + #:: to open the URL is specified in open_url_with. 2574 + 2575 + #: Insert selected path 2576 + 2577 + # map kitty_mod+p>f kitten hints --type path --program - 2578 + 2579 + #:: Select a path/filename and insert it into the terminal. Useful, 2580 + #:: for instance to run git commands on a filename output from a 2581 + #:: previous git command. 2582 + 2583 + #: Open selected path 2584 + 2585 + # map kitty_mod+p>shift+f kitten hints --type path 2586 + 2587 + #:: Select a path/filename and open it with the default open program. 2588 + 2589 + #: Insert selected line 2590 + 2591 + # map kitty_mod+p>l kitten hints --type line --program - 2592 + 2593 + #:: Select a line of text and insert it into the terminal. Useful for 2594 + #:: the output of things like: `ls -1`. 2595 + 2596 + #: Insert selected word 2597 + 2598 + # map kitty_mod+p>w kitten hints --type word --program - 2599 + 2600 + #:: Select words and insert into terminal. 2601 + 2602 + #: Insert selected hash 2603 + 2604 + # map kitty_mod+p>h kitten hints --type hash --program - 2605 + 2606 + #:: Select something that looks like a hash and insert it into the 2607 + #:: terminal. Useful with git, which uses SHA1 hashes to identify 2608 + #:: commits. 2609 + 2610 + #: Open the selected file at the selected line 2611 + 2612 + # map kitty_mod+p>n kitten hints --type linenum 2613 + 2614 + #:: Select something that looks like filename:linenum and open it in 2615 + #:: your default editor at the specified line number. 2616 + 2617 + #: Open the selected hyperlink 2618 + 2619 + # map kitty_mod+p>y kitten hints --type hyperlink 2620 + 2621 + #:: Select a hyperlink (i.e. a URL that has been marked as such by 2622 + #:: the terminal program, for example, by `ls --hyperlink=auto`). 2623 + 2624 + 2625 + #: The hints kitten has many more modes of operation that you can map 2626 + #: to different shortcuts. For a full description see hints kitten 2627 + #: <https://sw.kovidgoyal.net/kitty/kittens/hints/>. 2628 + #: }}} 2629 + 2630 + #: Miscellaneous {{{ 2631 + 2632 + #: Show documentation 2633 + 2634 + # map kitty_mod+f1 show_kitty_doc overview 2635 + 2636 + #: Toggle fullscreen 2637 + 2638 + # map kitty_mod+f11 toggle_fullscreen 2639 + # map ctrl+cmd+f toggle_fullscreen 2640 + 2641 + #: Toggle maximized 2642 + 2643 + # map kitty_mod+f10 toggle_maximized 2644 + 2645 + #: Toggle macOS secure keyboard entry 2646 + 2647 + # map opt+cmd+s toggle_macos_secure_keyboard_entry 2648 + 2649 + #: Unicode input 2650 + 2651 + # map kitty_mod+u kitten unicode_input 2652 + # map ctrl+cmd+space kitten unicode_input 2653 + 2654 + #: Edit config file 2655 + 2656 + # map kitty_mod+f2 edit_config_file 2657 + # map cmd+, edit_config_file 2658 + 2659 + #: Open the kitty command shell 2660 + 2661 + # map kitty_mod+escape kitty_shell window 2662 + 2663 + #:: Open the kitty shell in a new window / tab / overlay / os_window 2664 + #:: to control kitty using commands. 2665 + 2666 + #: Increase background opacity 2667 + 2668 + # map kitty_mod+a>m set_background_opacity +0.1 2669 + 2670 + #: Decrease background opacity 2671 + 2672 + # map kitty_mod+a>l set_background_opacity -0.1 2673 + 2674 + #: Make background fully opaque 2675 + 2676 + # map kitty_mod+a>1 set_background_opacity 1 2677 + 2678 + #: Reset background opacity 2679 + 2680 + # map kitty_mod+a>d set_background_opacity default 2681 + 2682 + #: Reset the terminal 2683 + 2684 + # map kitty_mod+delete clear_terminal reset active 2685 + # map opt+cmd+r clear_terminal reset active 2686 + 2687 + #:: You can create shortcuts to clear/reset the terminal. For 2688 + #:: example:: 2689 + 2690 + #:: # Reset the terminal 2691 + #:: map f1 clear_terminal reset active 2692 + #:: # Clear the terminal screen by erasing all contents 2693 + #:: map f1 clear_terminal clear active 2694 + #:: # Clear the terminal scrollback by erasing it 2695 + #:: map f1 clear_terminal scrollback active 2696 + #:: # Scroll the contents of the screen into the scrollback 2697 + #:: map f1 clear_terminal scroll active 2698 + #:: # Clear everything on screen up to the line with the cursor or the start of the current prompt (needs shell integration) 2699 + #:: map f1 clear_terminal to_cursor active 2700 + #:: # Same as above except cleared lines are moved into scrollback 2701 + #:: map f1 clear_terminal to_cursor_scroll active 2702 + 2703 + #:: If you want to operate on all kitty windows instead of just the 2704 + #:: current one, use all instead of active. 2705 + 2706 + #:: Some useful functions that can be defined in the shell rc files 2707 + #:: to perform various kinds of clearing of the current window: 2708 + 2709 + #:: .. code-block:: sh 2710 + 2711 + #:: clear-only-screen() { 2712 + #:: printf "\e[H\e[2J" 2713 + #:: } 2714 + 2715 + #:: clear-screen-and-scrollback() { 2716 + #:: printf "\e[H\e[3J" 2717 + #:: } 2718 + 2719 + #:: clear-screen-saving-contents-in-scrollback() { 2720 + #:: printf "\e[H\e[22J" 2721 + #:: } 2722 + 2723 + #:: For instance, using these escape codes, it is possible to remap 2724 + #:: Ctrl+L to both scroll the current screen contents into the 2725 + #:: scrollback buffer and clear the screen, instead of just clearing 2726 + #:: the screen. For ZSH, in ~/.zshrc, add: 2727 + 2728 + #:: .. code-block:: zsh 2729 + 2730 + #:: ctrl_l() { 2731 + #:: builtin print -rn -- $'\r\e[0J\e[H\e[22J' >"$TTY" 2732 + #:: builtin zle .reset-prompt 2733 + #:: builtin zle -R 2734 + #:: } 2735 + #:: zle -N ctrl_l 2736 + #:: bindkey '^l' ctrl_l 2737 + 2738 + #:: Alternatively, you can just add map ctrl+l clear_terminal 2739 + #:: to_cursor_scroll active to kitty.conf which works with no changes 2740 + #:: to the shell rc files, but only clears up to the prompt, it does 2741 + #:: not clear any text at the prompt itself. 2742 + 2743 + #: Clear to start 2744 + 2745 + # map cmd+k clear_terminal to_cursor active 2746 + 2747 + #: Clear scrollback 2748 + 2749 + # map option+cmd+k clear_terminal scrollback active 2750 + 2751 + #: Clear screen 2752 + 2753 + # map cmd+ctrl+l clear_terminal to_cursor_scroll active 2754 + 2755 + #: Reload kitty.conf 2756 + 2757 + # map kitty_mod+f5 load_config_file 2758 + # map ctrl+cmd+, load_config_file 2759 + 2760 + #:: Reload kitty.conf, applying any changes since the last time it 2761 + #:: was loaded. Note that a handful of options cannot be dynamically 2762 + #:: changed and require a full restart of kitty. Particularly, when 2763 + #:: changing shortcuts for actions located on the macOS global menu 2764 + #:: bar, a full restart is needed. You can also map a keybinding to 2765 + #:: load a different config file, for example:: 2766 + 2767 + #:: map f5 load_config /path/to/alternative/kitty.conf 2768 + 2769 + #:: Note that all options from the original kitty.conf are discarded, 2770 + #:: in other words the new configuration *replace* the old ones. 2771 + 2772 + #: Debug kitty configuration 2773 + 2774 + # map kitty_mod+f6 debug_config 2775 + # map opt+cmd+, debug_config 2776 + 2777 + #:: Show details about exactly what configuration kitty is running 2778 + #:: with and its host environment. Useful for debugging issues. 2779 + 2780 + #: Send arbitrary text on key presses 2781 + 2782 + #:: E.g. map ctrl+shift+alt+h send_text all Hello World 2783 + 2784 + #:: You can tell kitty to send arbitrary (UTF-8) encoded text to the 2785 + #:: client program when pressing specified shortcut keys. For 2786 + #:: example:: 2787 + 2788 + #:: map ctrl+alt+a send_text all Special text 2789 + 2790 + #:: This will send "Special text" when you press the Ctrl+Alt+A key 2791 + #:: combination. The text to be sent decodes ANSI C escapes 2792 + #:: <https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC- 2793 + #:: Quoting.html> so you can use escapes like \e to send control 2794 + #:: codes or \u21fb to send Unicode characters (or you can just input 2795 + #:: the Unicode characters directly as UTF-8 text). You can use 2796 + #:: `kitten show-key` to get the key escape codes you want to 2797 + #:: emulate. 2798 + 2799 + #:: The first argument to send_text is the keyboard modes in which to 2800 + #:: activate the shortcut. The possible values are normal, 2801 + #:: application, kitty or a comma separated combination of them. The 2802 + #:: modes normal and application refer to the DECCKM cursor key mode 2803 + #:: for terminals, and kitty refers to the kitty extended keyboard 2804 + #:: protocol. The special value all means all of them. 2805 + 2806 + #:: Some more examples:: 2807 + 2808 + #:: # Output a word and move the cursor to the start of the line (like typing and pressing Home) 2809 + #:: map ctrl+alt+a send_text normal Word\e[H 2810 + #:: map ctrl+alt+a send_text application Word\eOH 2811 + #:: # Run a command at a shell prompt (like typing the command and pressing Enter) 2812 + #:: map ctrl+alt+a send_text normal,application some command with arguments\r 2813 + 2814 + #: Open kitty Website 2815 + 2816 + # map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/ 2817 + 2818 + #: Hide macOS kitty application 2819 + 2820 + # map cmd+h hide_macos_app 2821 + 2822 + #: Hide macOS other applications 2823 + 2824 + # map opt+cmd+h hide_macos_other_apps 2825 + 2826 + #: Minimize macOS window 2827 + 2828 + # map cmd+m minimize_macos_window 2829 + 2830 + #: Quit kitty 2831 + 2832 + # map cmd+q quit 2833 + 2834 + #: }}} 2835 + 2836 + #: }}}
+8
.config/nvim/.gitignore
··· 1 + tt.* 2 + .tests 3 + doc/tags 4 + debug 5 + .repro 6 + foo.* 7 + *.log 8 + data
+15
.config/nvim/.neoconf.json
··· 1 + { 2 + "neodev": { 3 + "library": { 4 + "enabled": true, 5 + "plugins": true 6 + } 7 + }, 8 + "neoconf": { 9 + "plugins": { 10 + "lua_ls": { 11 + "enabled": true 12 + } 13 + } 14 + } 15 + }
+201
.config/nvim/LICENSE
··· 1 + Apache License 2 + Version 2.0, January 2004 3 + http://www.apache.org/licenses/ 4 + 5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 + 7 + 1. Definitions. 8 + 9 + "License" shall mean the terms and conditions for use, reproduction, 10 + and distribution as defined by Sections 1 through 9 of this document. 11 + 12 + "Licensor" shall mean the copyright owner or entity authorized by 13 + the copyright owner that is granting the License. 14 + 15 + "Legal Entity" shall mean the union of the acting entity and all 16 + other entities that control, are controlled by, or are under common 17 + control with that entity. For the purposes of this definition, 18 + "control" means (i) the power, direct or indirect, to cause the 19 + direction or management of such entity, whether by contract or 20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 + outstanding shares, or (iii) beneficial ownership of such entity. 22 + 23 + "You" (or "Your") shall mean an individual or Legal Entity 24 + exercising permissions granted by this License. 25 + 26 + "Source" form shall mean the preferred form for making modifications, 27 + including but not limited to software source code, documentation 28 + source, and configuration files. 29 + 30 + "Object" form shall mean any form resulting from mechanical 31 + transformation or translation of a Source form, including but 32 + not limited to compiled object code, generated documentation, 33 + and conversions to other media types. 34 + 35 + "Work" shall mean the work of authorship, whether in Source or 36 + Object form, made available under the License, as indicated by a 37 + copyright notice that is included in or attached to the work 38 + (an example is provided in the Appendix below). 39 + 40 + "Derivative Works" shall mean any work, whether in Source or Object 41 + form, that is based on (or derived from) the Work and for which the 42 + editorial revisions, annotations, elaborations, or other modifications 43 + represent, as a whole, an original work of authorship. For the purposes 44 + of this License, Derivative Works shall not include works that remain 45 + separable from, or merely link (or bind by name) to the interfaces of, 46 + the Work and Derivative Works thereof. 47 + 48 + "Contribution" shall mean any work of authorship, including 49 + the original version of the Work and any modifications or additions 50 + to that Work or Derivative Works thereof, that is intentionally 51 + submitted to Licensor for inclusion in the Work by the copyright owner 52 + or by an individual or Legal Entity authorized to submit on behalf of 53 + the copyright owner. For the purposes of this definition, "submitted" 54 + means any form of electronic, verbal, or written communication sent 55 + to the Licensor or its representatives, including but not limited to 56 + communication on electronic mailing lists, source code control systems, 57 + and issue tracking systems that are managed by, or on behalf of, the 58 + Licensor for the purpose of discussing and improving the Work, but 59 + excluding communication that is conspicuously marked or otherwise 60 + designated in writing by the copyright owner as "Not a Contribution." 61 + 62 + "Contributor" shall mean Licensor and any individual or Legal Entity 63 + on behalf of whom a Contribution has been received by Licensor and 64 + subsequently incorporated within the Work. 65 + 66 + 2. Grant of Copyright License. Subject to the terms and conditions of 67 + this License, each Contributor hereby grants to You a perpetual, 68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 + copyright license to reproduce, prepare Derivative Works of, 70 + publicly display, publicly perform, sublicense, and distribute the 71 + Work and such Derivative Works in Source or Object form. 72 + 73 + 3. Grant of Patent License. Subject to the terms and conditions of 74 + this License, each Contributor hereby grants to You a perpetual, 75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 + (except as stated in this section) patent license to make, have made, 77 + use, offer to sell, sell, import, and otherwise transfer the Work, 78 + where such license applies only to those patent claims licensable 79 + by such Contributor that are necessarily infringed by their 80 + Contribution(s) alone or by combination of their Contribution(s) 81 + with the Work to which such Contribution(s) was submitted. If You 82 + institute patent litigation against any entity (including a 83 + cross-claim or counterclaim in a lawsuit) alleging that the Work 84 + or a Contribution incorporated within the Work constitutes direct 85 + or contributory patent infringement, then any patent licenses 86 + granted to You under this License for that Work shall terminate 87 + as of the date such litigation is filed. 88 + 89 + 4. Redistribution. You may reproduce and distribute copies of the 90 + Work or Derivative Works thereof in any medium, with or without 91 + modifications, and in Source or Object form, provided that You 92 + meet the following conditions: 93 + 94 + (a) You must give any other recipients of the Work or 95 + Derivative Works a copy of this License; and 96 + 97 + (b) You must cause any modified files to carry prominent notices 98 + stating that You changed the files; and 99 + 100 + (c) You must retain, in the Source form of any Derivative Works 101 + that You distribute, all copyright, patent, trademark, and 102 + attribution notices from the Source form of the Work, 103 + excluding those notices that do not pertain to any part of 104 + the Derivative Works; and 105 + 106 + (d) If the Work includes a "NOTICE" text file as part of its 107 + distribution, then any Derivative Works that You distribute must 108 + include a readable copy of the attribution notices contained 109 + within such NOTICE file, excluding those notices that do not 110 + pertain to any part of the Derivative Works, in at least one 111 + of the following places: within a NOTICE text file distributed 112 + as part of the Derivative Works; within the Source form or 113 + documentation, if provided along with the Derivative Works; or, 114 + within a display generated by the Derivative Works, if and 115 + wherever such third-party notices normally appear. The contents 116 + of the NOTICE file are for informational purposes only and 117 + do not modify the License. You may add Your own attribution 118 + notices within Derivative Works that You distribute, alongside 119 + or as an addendum to the NOTICE text from the Work, provided 120 + that such additional attribution notices cannot be construed 121 + as modifying the License. 122 + 123 + You may add Your own copyright statement to Your modifications and 124 + may provide additional or different license terms and conditions 125 + for use, reproduction, or distribution of Your modifications, or 126 + for any such Derivative Works as a whole, provided Your use, 127 + reproduction, and distribution of the Work otherwise complies with 128 + the conditions stated in this License. 129 + 130 + 5. Submission of Contributions. Unless You explicitly state otherwise, 131 + any Contribution intentionally submitted for inclusion in the Work 132 + by You to the Licensor shall be under the terms and conditions of 133 + this License, without any additional terms or conditions. 134 + Notwithstanding the above, nothing herein shall supersede or modify 135 + the terms of any separate license agreement you may have executed 136 + with Licensor regarding such Contributions. 137 + 138 + 6. Trademarks. This License does not grant permission to use the trade 139 + names, trademarks, service marks, or product names of the Licensor, 140 + except as required for reasonable and customary use in describing the 141 + origin of the Work and reproducing the content of the NOTICE file. 142 + 143 + 7. Disclaimer of Warranty. Unless required by applicable law or 144 + agreed to in writing, Licensor provides the Work (and each 145 + Contributor provides its Contributions) on an "AS IS" BASIS, 146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 + implied, including, without limitation, any warranties or conditions 148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 + PARTICULAR PURPOSE. You are solely responsible for determining the 150 + appropriateness of using or redistributing the Work and assume any 151 + risks associated with Your exercise of permissions under this License. 152 + 153 + 8. Limitation of Liability. In no event and under no legal theory, 154 + whether in tort (including negligence), contract, or otherwise, 155 + unless required by applicable law (such as deliberate and grossly 156 + negligent acts) or agreed to in writing, shall any Contributor be 157 + liable to You for damages, including any direct, indirect, special, 158 + incidental, or consequential damages of any character arising as a 159 + result of this License or out of the use or inability to use the 160 + Work (including but not limited to damages for loss of goodwill, 161 + work stoppage, computer failure or malfunction, or any and all 162 + other commercial damages or losses), even if such Contributor 163 + has been advised of the possibility of such damages. 164 + 165 + 9. Accepting Warranty or Additional Liability. While redistributing 166 + the Work or Derivative Works thereof, You may choose to offer, 167 + and charge a fee for, acceptance of support, warranty, indemnity, 168 + or other liability obligations and/or rights consistent with this 169 + License. However, in accepting such obligations, You may act only 170 + on Your own behalf and on Your sole responsibility, not on behalf 171 + of any other Contributor, and only if You agree to indemnify, 172 + defend, and hold each Contributor harmless for any liability 173 + incurred by, or claims asserted against, such Contributor by reason 174 + of your accepting any such warranty or additional liability. 175 + 176 + END OF TERMS AND CONDITIONS 177 + 178 + APPENDIX: How to apply the Apache License to your work. 179 + 180 + To apply the Apache License to your work, attach the following 181 + boilerplate notice, with the fields enclosed by brackets "[]" 182 + replaced with your own identifying information. (Don't include 183 + the brackets!) The text should be enclosed in the appropriate 184 + comment syntax for the file format. We also recommend that a 185 + file or class name and description of purpose be included on the 186 + same "printed page" as the copyright notice for easier 187 + identification within third-party archives. 188 + 189 + Copyright [yyyy] [name of copyright owner] 190 + 191 + Licensed under the Apache License, Version 2.0 (the "License"); 192 + you may not use this file except in compliance with the License. 193 + You may obtain a copy of the License at 194 + 195 + http://www.apache.org/licenses/LICENSE-2.0 196 + 197 + Unless required by applicable law or agreed to in writing, software 198 + distributed under the License is distributed on an "AS IS" BASIS, 199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 + See the License for the specific language governing permissions and 201 + limitations under the License.
+4
.config/nvim/README.md
··· 1 + # 💤 LazyVim 2 + 3 + A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). 4 + Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
+8
.config/nvim/igno.txt
··· 1 + tt.* 2 + .tests 3 + doc/tags 4 + debug 5 + .repro 6 + foo.* 7 + *.log 8 + data
+2
.config/nvim/init.lua
··· 1 + -- bootstrap lazy.nvim, LazyVim and your plugins 2 + require("config.lazy")
+23
.config/nvim/lazyvim.json
··· 1 + { 2 + "extras": [ 3 + "lazyvim.plugins.extras.ai.copilot", 4 + "lazyvim.plugins.extras.editor.inc-rename", 5 + "lazyvim.plugins.extras.formatting.prettier", 6 + "lazyvim.plugins.extras.lang.docker", 7 + "lazyvim.plugins.extras.lang.git", 8 + "lazyvim.plugins.extras.lang.json", 9 + "lazyvim.plugins.extras.lang.markdown", 10 + "lazyvim.plugins.extras.lang.sql", 11 + "lazyvim.plugins.extras.lang.tailwind", 12 + "lazyvim.plugins.extras.lang.typescript", 13 + "lazyvim.plugins.extras.lang.yaml", 14 + "lazyvim.plugins.extras.linting.eslint", 15 + "lazyvim.plugins.extras.util.dot", 16 + "lazyvim.plugins.extras.util.mini-hipatterns" 17 + ], 18 + "install_version": 8, 19 + "news": { 20 + "NEWS.md": "11866" 21 + }, 22 + "version": 8 23 + }
+8
.config/nvim/lua/config/autocmds.lua
··· 1 + -- Autocmds are automatically loaded on the VeryLazy event 2 + -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 + -- 4 + -- Add any additional autocmds here 5 + -- with `vim.api.nvim_create_autocmd` 6 + -- 7 + -- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) 8 + -- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
+7
.config/nvim/lua/config/keymaps.lua
··· 1 + -- loaded on VeryLazy 2 + -- defaults: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua 3 + 4 + local map = LazyVim.safe_keymap_set 5 + 6 + map("i", "jj", "<Esc>") 7 + map("i", "jk", "<Esc>")
+53
.config/nvim/lua/config/lazy.lua
··· 1 + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 + if not (vim.uv or vim.loop).fs_stat(lazypath) then 3 + local lazyrepo = "https://github.com/folke/lazy.nvim.git" 4 + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 5 + if vim.v.shell_error ~= 0 then 6 + vim.api.nvim_echo({ 7 + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 8 + { out, "WarningMsg" }, 9 + { "\nPress any key to exit..." }, 10 + }, true, {}) 11 + vim.fn.getchar() 12 + os.exit(1) 13 + end 14 + end 15 + vim.opt.rtp:prepend(lazypath) 16 + 17 + require("lazy").setup({ 18 + spec = { 19 + -- add LazyVim and import its plugins 20 + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 21 + -- import/override with your plugins 22 + { import = "plugins" }, 23 + }, 24 + defaults = { 25 + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. 26 + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. 27 + lazy = false, 28 + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, 29 + -- have outdated releases, which may break your Neovim install. 30 + version = false, -- always use the latest git commit 31 + -- version = "*", -- try installing the latest stable version for plugins that support semver 32 + }, 33 + install = { colorscheme = { "tokyonight", "habamax" } }, 34 + checker = { 35 + enabled = true, -- check for plugin updates periodically 36 + notify = false, -- notify on update 37 + }, -- automatically check for plugin updates 38 + performance = { 39 + rtp = { 40 + -- disable some rtp plugins 41 + disabled_plugins = { 42 + "gzip", 43 + -- "matchit", 44 + -- "matchparen", 45 + -- "netrwPlugin", 46 + "tarPlugin", 47 + "tohtml", 48 + "tutor", 49 + "zipPlugin", 50 + }, 51 + }, 52 + }, 53 + })
+4
.config/nvim/lua/config/options.lua
··· 1 + -- loaded before lazy.nvim startup 2 + -- defaults: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 + 4 + vim.go.background = "dark"
+9
.config/nvim/lua/plugins/colorscheme.lua
··· 1 + return { 2 + { "ellisonleao/gruvbox.nvim" }, 3 + { 4 + "LazyVim/LazyVim", 5 + opts = { 6 + colorscheme = "gruvbox", 7 + }, 8 + }, 9 + }
+197
.config/nvim/lua/plugins/example.lua
··· 1 + -- since this is just an example spec, don't actually load anything here and return an empty spec 2 + -- stylua: ignore 3 + if true then return {} end 4 + 5 + -- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim 6 + -- 7 + -- In your plugin files, you can: 8 + -- * add extra plugins 9 + -- * disable/enabled LazyVim plugins 10 + -- * override the configuration of LazyVim plugins 11 + return { 12 + -- add gruvbox 13 + { "ellisonleao/gruvbox.nvim" }, 14 + 15 + -- Configure LazyVim to load gruvbox 16 + { 17 + "LazyVim/LazyVim", 18 + opts = { 19 + colorscheme = "gruvbox", 20 + }, 21 + }, 22 + 23 + -- change trouble config 24 + { 25 + "folke/trouble.nvim", 26 + -- opts will be merged with the parent spec 27 + opts = { use_diagnostic_signs = true }, 28 + }, 29 + 30 + -- disable trouble 31 + { "folke/trouble.nvim", enabled = false }, 32 + 33 + -- override nvim-cmp and add cmp-emoji 34 + { 35 + "hrsh7th/nvim-cmp", 36 + dependencies = { "hrsh7th/cmp-emoji" }, 37 + ---@param opts cmp.ConfigSchema 38 + opts = function(_, opts) 39 + table.insert(opts.sources, { name = "emoji" }) 40 + end, 41 + }, 42 + 43 + -- change some telescope options and a keymap to browse plugin files 44 + { 45 + "nvim-telescope/telescope.nvim", 46 + keys = { 47 + -- add a keymap to browse plugin files 48 + -- stylua: ignore 49 + { 50 + "<leader>fp", 51 + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, 52 + desc = "Find Plugin File", 53 + }, 54 + }, 55 + -- change some options 56 + opts = { 57 + defaults = { 58 + layout_strategy = "horizontal", 59 + layout_config = { prompt_position = "top" }, 60 + sorting_strategy = "ascending", 61 + winblend = 0, 62 + }, 63 + }, 64 + }, 65 + 66 + -- add pyright to lspconfig 67 + { 68 + "neovim/nvim-lspconfig", 69 + ---@class PluginLspOpts 70 + opts = { 71 + ---@type lspconfig.options 72 + servers = { 73 + -- pyright will be automatically installed with mason and loaded with lspconfig 74 + pyright = {}, 75 + }, 76 + }, 77 + }, 78 + 79 + -- add tsserver and setup with typescript.nvim instead of lspconfig 80 + { 81 + "neovim/nvim-lspconfig", 82 + dependencies = { 83 + "jose-elias-alvarez/typescript.nvim", 84 + init = function() 85 + require("lazyvim.util").lsp.on_attach(function(_, buffer) 86 + -- stylua: ignore 87 + vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) 88 + vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) 89 + end) 90 + end, 91 + }, 92 + ---@class PluginLspOpts 93 + opts = { 94 + ---@type lspconfig.options 95 + servers = { 96 + -- tsserver will be automatically installed with mason and loaded with lspconfig 97 + tsserver = {}, 98 + }, 99 + -- you can do any additional lsp server setup here 100 + -- return true if you don't want this server to be setup with lspconfig 101 + ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?> 102 + setup = { 103 + -- example to setup with typescript.nvim 104 + tsserver = function(_, opts) 105 + require("typescript").setup({ server = opts }) 106 + return true 107 + end, 108 + -- Specify * to use this function as a fallback for any server 109 + -- ["*"] = function(server, opts) end, 110 + }, 111 + }, 112 + }, 113 + 114 + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, 115 + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: 116 + { import = "lazyvim.plugins.extras.lang.typescript" }, 117 + 118 + -- add more treesitter parsers 119 + { 120 + "nvim-treesitter/nvim-treesitter", 121 + opts = { 122 + ensure_installed = { 123 + "bash", 124 + "html", 125 + "javascript", 126 + "json", 127 + "lua", 128 + "markdown", 129 + "markdown_inline", 130 + "python", 131 + "query", 132 + "regex", 133 + "tsx", 134 + "typescript", 135 + "vim", 136 + "yaml", 137 + }, 138 + }, 139 + }, 140 + 141 + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above 142 + -- would overwrite `ensure_installed` with the new value. 143 + -- If you'd rather extend the default config, use the code below instead: 144 + { 145 + "nvim-treesitter/nvim-treesitter", 146 + opts = function(_, opts) 147 + -- add tsx and treesitter 148 + vim.list_extend(opts.ensure_installed, { 149 + "tsx", 150 + "typescript", 151 + }) 152 + end, 153 + }, 154 + 155 + -- the opts function can also be used to change the default opts: 156 + { 157 + "nvim-lualine/lualine.nvim", 158 + event = "VeryLazy", 159 + opts = function(_, opts) 160 + table.insert(opts.sections.lualine_x, { 161 + function() 162 + return "😄" 163 + end, 164 + }) 165 + end, 166 + }, 167 + 168 + -- or you can return new options to override all the defaults 169 + { 170 + "nvim-lualine/lualine.nvim", 171 + event = "VeryLazy", 172 + opts = function() 173 + return { 174 + --[[add your custom lualine config here]] 175 + } 176 + end, 177 + }, 178 + 179 + -- use mini.starter instead of alpha 180 + { import = "lazyvim.plugins.extras.ui.mini-starter" }, 181 + 182 + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc 183 + { import = "lazyvim.plugins.extras.lang.json" }, 184 + 185 + -- add any tools you want to have installed below 186 + { 187 + "williamboman/mason.nvim", 188 + opts = { 189 + ensure_installed = { 190 + "stylua", 191 + "shellcheck", 192 + "shfmt", 193 + "flake8", 194 + }, 195 + }, 196 + }, 197 + }
+50
.config/nvim/lua/plugins/opencode.lua
··· 1 + return { 2 + { 3 + "NickvanDyke/opencode.nvim", 4 + dependencies = { 5 + -- better prompt input and required for `opencode.nvim` embedded terminal 6 + { "folke/snacks.nvim", opts = { input = { enabled = true } } }, 7 + }, 8 + config = function() 9 + vim.g.opencode_opts = { 10 + -- `lua/opencode/config.lua` 11 + } 12 + 13 + -- required for `opts.auto_reload` 14 + vim.opt.autoread = true 15 + 16 + vim.keymap.set("n", "<leader>ot", function() 17 + require("opencode").toggle() 18 + end, { desc = "Toggle opencode" }) 19 + vim.keymap.set("n", "<leader>oA", function() 20 + require("opencode").ask() 21 + end, { desc = "Ask opencode" }) 22 + vim.keymap.set("n", "<leader>oa", function() 23 + require("opencode").ask("@cursor: ") 24 + end, { desc = "Ask opencode about this" }) 25 + vim.keymap.set("v", "<leader>oa", function() 26 + require("opencode").ask("@selection: ") 27 + end, { desc = "Ask opencode about selection" }) 28 + vim.keymap.set("n", "<leader>on", function() 29 + require("opencode").command("session_new") 30 + end, { desc = "New opencode session" }) 31 + vim.keymap.set("n", "<leader>oy", function() 32 + require("opencode").command("messages_copy") 33 + end, { desc = "Copy last opencode response" }) 34 + vim.keymap.set("n", "<S-C-u>", function() 35 + require("opencode").command("messages_half_page_up") 36 + end, { desc = "Messages half page up" }) 37 + vim.keymap.set("n", "<S-C-d>", function() 38 + require("opencode").command("messages_half_page_down") 39 + end, { desc = "Messages half page down" }) 40 + vim.keymap.set({ "n", "v" }, "<leader>os", function() 41 + require("opencode").select() 42 + end, { desc = "Select opencode prompt" }) 43 + 44 + -- keymap for custom prompt 45 + vim.keymap.set("n", "<leader>oe", function() 46 + require("opencode").prompt("Explain @cursor and its context") 47 + end, { desc = "Explain this code" }) 48 + end, 49 + }, 50 + }
+38
.config/nvim/lua/plugins/snacks.lua
··· 1 + return { 2 + { 3 + "folke/snacks.nvim", 4 + keys = { 5 + { 6 + "<c-/>", 7 + function() 8 + Snacks.terminal(nil, { cwd = vim.uv.cwd() }) 9 + end, 10 + desc = "Terminal (cwd)", 11 + mode = { "n", "t" }, 12 + }, 13 + }, 14 + opts = { 15 + picker = { 16 + sources = { 17 + files = { 18 + hidden = true, 19 + ignored = true, 20 + }, 21 + grep = { 22 + hidden = true, 23 + ignored = true, 24 + }, 25 + explorer = { 26 + hidden = true, 27 + ignored = true, 28 + }, 29 + }, 30 + }, 31 + -- terminal = { 32 + -- win = { 33 + -- position = "float", 34 + -- }, 35 + -- }, 36 + }, 37 + }, 38 + }
+10
.config/nvim/lua/plugins/surround.lua
··· 1 + return { 2 + { 3 + "kylechui/nvim-surround", 4 + version = "^3.0.0", 5 + event = "VeryLazy", 6 + config = function() 7 + require("nvim-surround").setup({}) 8 + end, 9 + }, 10 + }
+41
.config/nvim/lua/plugins/yazi.lua
··· 1 + return { 2 + { 3 + "mikavilpas/yazi.nvim", 4 + version = "*", 5 + event = "VeryLazy", 6 + dependencies = { 7 + { "nvim-lua/plenary.nvim", lazy = true }, 8 + }, 9 + keys = { 10 + { 11 + "<leader>-", 12 + mode = { "n", "v" }, 13 + "<cmd>Yazi<cr>", 14 + desc = "Open yazi at the current file", 15 + }, 16 + { 17 + -- open in current working directory 18 + "<leader>cw", 19 + "<cmd>Yazi cwd<cr>", 20 + desc = "Open the file manager in nvim's working directory", 21 + }, 22 + { 23 + "<c-up>", 24 + "<cmd>Yazi toggle<cr>", 25 + desc = "Resume the last yazi session", 26 + }, 27 + }, 28 + opts = { 29 + open_for_directories = false, 30 + keymaps = { 31 + show_help = "<f1>", 32 + }, 33 + }, 34 + -- use `open_for_directories=true` 35 + init = function() 36 + -- mark netrw as loaded so it's not loaded at all 37 + -- https://github.com/mikavilpas/yazi.nvim/issues/802 38 + vim.g.loaded_netrwPlugin = 1 39 + end, 40 + }, 41 + }
+3
.config/nvim/stylua.toml
··· 1 + indent_type = "Spaces" 2 + indent_width = 2 3 + column_width = 70
+12
.editorconfig
··· 1 + root = true 2 + 3 + [*] 4 + indent_style = space 5 + indent_size = 2 6 + end_of_line = lf 7 + charset = utf-8 8 + trim_trailing_whitespace = true 9 + insert_final_newline = true 10 + 11 + [*.md] 12 + trim_trailing_whitespace = false
+92
.gitconfig
··· 1 + [user] 2 + email = shwilliam@hey.com 3 + name = William Lindvall 4 + 5 + [core] 6 + editor = nvim 7 + excludesfile = ~/.gitignore 8 + 9 + [filter "lfs"] 10 + clean = git-lfs clean -- %f 11 + smudge = git-lfs smudge -- %f 12 + process = git-lfs filter-process 13 + required = true 14 + 15 + [alias] 16 + # log sha, desc & history 17 + l = log --pretty=oneline -n 20 --graph --abbrev-commit 18 + # status 19 + s = status -s 20 + # branches 21 + b = branch --all 22 + # diff since last commit 23 + d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat" 24 + # branch tree 25 + tree = log --graph --abbrev-commit --decorate --full-history --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' 26 + # delete merged branches 27 + cleanup = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d" 28 + # contributors with # of commits 29 + who = shortlog --summary --numbered 30 + 31 + [apply] 32 + # detect whitespace errors when applying patch 33 + whitespace = fix 34 + 35 + [branch] 36 + # sort branches by commit date 37 + sort = -committerdate 38 + 39 + [core] 40 + # safe rebase on macos 41 + # http://www.git-tower.com/blog/make-git-rebase-safe-on-osx/ 42 + trustctime = false 43 + 44 + # allow non-ascii filenames to be versioned 45 + # http://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html 46 + precomposeunicode = false 47 + 48 + # speed 49 + # https://git-scm.com/docs/git-update-index#_untracked_cache 50 + untrackedCache = true 51 + 52 + [color] 53 + # color output 54 + ui = auto 55 + 56 + [color "branch"] 57 + current = yellow reverse 58 + local = yellow 59 + remote = green 60 + 61 + [color "diff"] 62 + meta = yellow bold 63 + frag = magenta bold # line info 64 + old = red # deletions 65 + new = green # additions 66 + 67 + [color "status"] 68 + added = yellow 69 + changed = green 70 + untracked = cyan 71 + 72 + [init] 73 + templateDir = ~/.config/git/template 74 + 75 + [merge] 76 + # include summaries of merged commits in newly created merge commit messages 77 + log = true 78 + 79 + [push] 80 + # https://git-scm.com/docs/git-config#git-config-pushdefault 81 + default = simple 82 + # make `git push` push relevant annotated tags when pushing branches out 83 + followTags = true 84 + 85 + [pull] 86 + ff = only 87 + 88 + [url "https://github.com/"] 89 + insteadOf = gh: 90 + 91 + [hub] 92 + protocol = https
+8
.gitignore
··· 1 + .DS_Store 2 + # ._* 3 + Thumbs.db 4 + .Spotlight-V100 5 + .Trashes 6 + dump.rdb 7 + node_modules 8 + .env
+57
.tmux.conf
··· 1 + setw -g mode-keys vi 2 + 3 + unbind C-b 4 + set-option -g prefix C-a 5 + bind-key C-a send-prefix 6 + 7 + set -g mouse on 8 + 9 + bind v split-window -v 10 + bind b split-window -h 11 + 12 + bind i resize-pane -U 13 + bind y resize-pane -L 14 + bind u resize-pane -D 15 + bind o resize-pane -R 16 + 17 + unbind h 18 + bind h select-pane -L 19 + unbind j 20 + bind j select-pane -D 21 + unbind k 22 + bind k select-pane -U 23 + unbind l 24 + bind l select-pane -R 25 + 26 + # prevent accidental v split 27 + # unbind c 28 + 29 + set-option -sg escape-time 10 30 + set-option -g default-terminal "screen-256color" 31 + set-option -sa terminal-overrides ',xterm-256color:RGB' 32 + 33 + set -g history-limit 262144 34 + 35 + # set -g status on 36 + # set -g status-left "" 37 + set -g status-right "" 38 + # set -g status-bg '#aa8698' 39 + # set -g status-justify centre 40 + # set -g window-status-current-format "#[fg=yellow]#W" 41 + # set -g window-status-format "#[fg=yellow]#W" 42 + 43 + set -g status-interval 60 # default is 15 44 + 45 + bind-key -T root WheelUpPane \ 46 + if-shell -Ft= '#{?pane_in_mode,1,#{mouse_any_flag}}' \ 47 + 'send -Mt=' \ 48 + 'if-shell -Ft= "#{alternate_on}" "send -t= Up" "copy-mode -et="' 49 + bind-key -T root WheelDownPane \ 50 + if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \ 51 + 'send -Mt=' \ 52 + 'if-shell -Ft= "#{alternate_on}" "send -t= Down" "send -Mt="' 53 + 54 + # https://github.com/tmux-plugins/tmux-resurrect 55 + run-shell ~/tmux-plugins/tmux-resurrect/resurrect.tmux 56 + set -g @resurrect-strategy-nvim 'session' 57 +
+111
.vimrc
··· 1 + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 2 + " general 3 + set nocompatible 4 + set fileformat=unix 5 + set shell=bash 6 + set noswapfile 7 + set nobackup 8 + set nowritebackup 9 + set hidden 10 + set autoindent 11 + set expandtab 12 + set shiftwidth=2 13 + set tabstop=2 14 + set softtabstop=2 15 + set scrolloff=8 16 + set cursorline 17 + set noemoji 18 + set mouse=a 19 + filetype plugin on 20 + 21 + " search 22 + set hlsearch 23 + set incsearch 24 + set showmatch 25 + set smartcase 26 + " set ignorecase 27 + 28 + " line numbers 29 + set number 30 + set nu 31 + set relativenumber 32 + 33 + if exists('&bellof') 34 + set bellof=all 35 + endif 36 + 37 + if has('linebreak') 38 + set breakindent 39 + let &showbreak='↳ ' 40 + if exists('&breakindentopt') 41 + set breakindentopt=shift:2 42 + endif 43 + endif 44 + 45 + if has('folding') 46 + set foldmethod=indent 47 + set foldlevel=10 48 + if has('windows') 49 + set fillchars=diff:∙ 50 + set fillchars+=fold:· 51 + endif 52 + endif 53 + 54 + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 55 + " layout 56 + if has('windows') 57 + set splitbelow 58 + endif 59 + 60 + if has('vertsplit') 61 + set splitright 62 + endif 63 + 64 + if has('syntax') 65 + set spellcapcheck= 66 + endif 67 + 68 + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 69 + " general mappings 70 + let mapleader=" " 71 + 72 + noremap <leader>w :w<CR> 73 + noremap <leader>wq :wq<CR> 74 + noremap <leader>q :q<CR> 75 + noremap <leader>q! :q!<CR> 76 + noremap <leader>qa :qa<CR> 77 + noremap <leader>qa! :qa!<CR> 78 + noremap <leader>R :%s/ 79 + " unhighlight search matches 80 + noremap <silent> <leader>/ :noh<CR> 81 + noremap <silent> <leader>b :b#<CR> 82 + " yank to clipboard 83 + vnoremap <silent> <C-c> "*y :let @+=@*<CR> 84 + 85 + " `jj` to exit insert 86 + inoremap jj <Esc> 87 + 88 + " up/down arrows scroll 89 + noremap <silent> <Up> <c-y> 90 + noremap <silent> <Down> <c-e> 91 + 92 + " move lines 93 + vnoremap <c-j> :m '>+1<CR>gv=gv 94 + vnoremap <c-k> :m '<-2<CR>gv=gv 95 + 96 + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 97 + " theme 98 + if has('termguicolors') 99 + set termguicolors 100 + endif 101 + 102 + set colorcolumn=81 103 + 104 + " insert chars at tabs and trailing spaces 105 + exec "set listchars=tab:\uBB\uBB,trail:\uB7,nbsp:~" 106 + set list 107 + set listchars=nbsp:⦸ 108 + set listchars+=tab:▷┅ 109 + set listchars+=extends:» 110 + set listchars+=precedes:« 111 + set listchars+=trail:•
+65
.zshenv
··· 1 + PS1="%1~ %#" 2 + 3 + # fns 4 + function run_vim() { 5 + if [ $# -eq 0 ] 6 + then 7 + command nvim -o $(fzf) 8 + else 9 + command nvim "$@" 10 + fi 11 + } 12 + 13 + function current_time() { 14 + echo "$(date +'%H:%M:%S')" 15 + } 16 + 17 + # ls on navigate 18 + function chpwd() { 19 + # run after cd 20 + emulate -L zsh 21 + clear 22 + current_time 23 + ls -aC 24 + echo 25 + } 26 + 27 + # sane defaults 28 + HISTSIZE=10000 29 + SAVEHIST=10000 30 + 31 + autoload -U colors && colors 32 + autoload -U promptinit && promptinit 33 + autoload -U compinit 34 + zstyle ':completion:*' menu select 35 + zmodload zsh/complist 36 + compinit 37 + _comp_options+=(globdots) 38 + 39 + setopt auto_cd 40 + setopt multios 41 + setopt prompt_subst 42 + 43 + setopt auto_pushd 44 + setopt pushd_ignore_dups 45 + setopt pushdminus 46 + 47 + setopt extended_history # record timestamp of command in HISTFILE 48 + setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE 49 + setopt hist_ignore_dups # ignore duplicated commands history list 50 + setopt hist_ignore_space # ignore commands that start with space 51 + setopt hist_verify # show command with history expansion to user before running it 52 + setopt share_history # share command history data 53 + 54 + # nvim 55 + export EDITOR='nvim' 56 + alias v=run_vim 57 + alias vi=run_vim 58 + alias vim=run_vim 59 + 60 + eval "$(/opt/homebrew/bin/brew shellenv)" 61 + 62 + # nvm 63 + export NVM_DIR="$HOME/.nvm" 64 + [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" 65 + [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
+21
README.md
··· 1 + # dotfiles 2 + 3 + requires [rsync](https://rsync.samba.org/) 4 + 5 + ## setup 6 + 7 + ```sh 8 + sh setup.sh 9 + ``` 10 + 11 + ## sync 12 + 13 + ```sh 14 + sh sync.sh 15 + ``` 16 + 17 + ## pull nvim conf 18 + 19 + ```sh 20 + sh pull-nvim.sh 21 + ```
+7
igno.txt
··· 1 + .git 2 + .DS_Store 3 + README.md 4 + excludes.txt 5 + setup.sh 6 + sync.sh 7 + other
+10
other/.prettierrc
··· 1 + { 2 + "endOfLine": "lf", 3 + "printWidth": 70, 4 + "semi": false, 5 + "tabWidth": 2, 6 + "useTabs": false, 7 + "singleQuote": true, 8 + "trailingComma": "all", 9 + "bracketSpacing": false 10 + }
+3
pull-nvim.sh
··· 1 + #!/bin/bash 2 + 3 + rsync -avv ~/.config/nvim ./.config
+17
setup.sh
··· 1 + #!/bin/bash 2 + set -e 3 + 4 + echo "==> checking for homebrew..." 5 + if ! command -v brew &>/dev/null; then 6 + echo "==> installing homebrew..." 7 + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 8 + eval "$(/opt/homebrew/bin/brew shellenv)" 9 + fi 10 + 11 + echo "==> installing essentials..." 12 + brew install zsh neovim tmux fzf nvm kitty 13 + 14 + echo "==> syncing dotfiles..." 15 + sh sync.sh 16 + 17 + echo "==> done"
+3
sync.sh
··· 1 + #!/bin/bash 2 + 3 + rsync -avv --exclude-from 'igno.txt' . ~