chore: Refactored symlink order d0b90e6a
Steve · 2025-06-02 20:49 36 file(s) · +5400 −13
fish/conf.d/exports.fish (added) +37 −0
1 +
# Exports
2 +
set -x MANPAGER 'nvim +Man!'
3 +
set -x TINTED_SHELL_ENABLE_BASE16_VARS "1"
4 +
set -x MANWIDTH 999
5 +
set -x PATH "$HOME/.cargo/bin:$PATH"
6 +
set -x PATH "$HOME/.local/share/go/bin:$PATH"
7 +
set -x PATH "$HOME/.local/bin:$PATH"
8 +
set -x PATH "/Applications/Docker.app/Contents/Resources/bin:$PATH"
9 +
set -x GOPATH "$HOME/.local/share/go"
10 +
set -x PATH "/opt/homebrew/opt/llvm/bin:$PATH"
11 +
set -x PATH "/Users/stevedsimkins/.local/share/solana/install/active_release/bin:$PATH"
12 +
set -x BAT_THEME ansi
13 +
# pnpm
14 +
set -x PNPM_HOME "/Users/stevedsimkins/.local/share/pnpm"
15 +
set -x PATH "$PNPM_HOME:$PATH"
16 +
# pnpm end
17 +
set -x FZF_DEFAULT_OPTS "--height 60% --layout=reverse --inline-info --border"
18 +
set -x _ZO_DATA_DIR "$HOME/.local/share/zoxide"
19 +
20 +
# set -gx NVM_DIR (brew --prefix nvm)
21 +
# set -x PATH "/Users/stevedsimkins/solana"/bin:"$PATH"
22 +
# source $NVM_DIR/nvm.sh; and nvm use
23 +
# set -x PATH "/Users/stevedsimkins/.local/share/solana/install/active_release/bin:$PATH"
24 +
set -x BUN_INSTALL "$HOME/.bun"
25 +
set -x PATH "$BUN_INSTALL/bin:$PATH"
26 +
set -x PATH "/opt/homebrew/opt/curl/bin:$PATH"
27 +
set -x IPFS_GATEWAY "https://newonboardingflow.mypinata.cloud"
28 +
# ~/.tmux/plugins
29 +
set -x PATH $HOME/.tmux/plugins/t-smart-tmux-session-manager/bin:$PATH
30 +
# ~/.config/tmux/plugins
31 +
set -x PATH $HOME/.config/tmux/plugins/t-smart-tmux-session-manager/bin:$PATH
32 +
set -x ETHERSCAN_API_KEY $(prs show etherscan/secret)
33 +
set -x OATMEAL_THEME_FILE "/Users/stevedsimkins/.config/oatmeal/black-metal.tmTheme"
34 +
set -x nvm_default_version "20"
35 +
set -x LIBRARY_PATH "$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
36 +
set -x PATH "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib:$PATH"
37 +
set -x PATH "/Users/stevedsimkins/.local/share/solana/install/active_release/bin:$PATH"
ghostty/config +58 −1
1 -
/Users/stevedylandev/.config/ghostty/config
1 +
font-family = CommitMono Nerd Font
2 +
font-family-bold = CommitMono Nerd Font
3 +
font-family-italic = CommitMono Nerd Font
4 +
font-family-bold-italic = CommitMono Nerd Font
5 +
font-size = 14
6 +
7 +
confirm-close-surface = false
8 +
clipboard-read = allow
9 +
clipboard-write = allow
10 +
mouse-hide-while-typing = true
11 +
macos-titlebar-style = hidden
12 +
macos-window-shadow = false
13 +
window-padding-x = 6
14 +
window-padding-balance = true
15 +
window-save-state = always
16 +
window-width = 85
17 +
window-height = 30
18 +
19 +
# Icon
20 +
macos-icon = custom-style
21 +
macos-icon-frame = plastic
22 +
macos-icon-screen-color = #000000
23 +
macos-icon-ghost-color = #E78B52
24 +
25 +
# Scheme: Black Metal (Bathory)
26 +
# Generated by Ghostty Base16 Converter
27 +
background = #000000
28 +
foreground = #ffffff
29 +
30 +
selection-background = #222222
31 +
selection-foreground = #000000
32 +
33 +
palette = 0=#000000
34 +
palette = 1=#5f8787
35 +
palette = 2=#fbcb97
36 +
palette = 3=#e78a53
37 +
palette = 4=#888888
38 +
palette = 5=#999999
39 +
palette = 6=#aaaaaa
40 +
palette = 7=#c1c1c1
41 +
palette = 8=#333333
42 +
palette = 9=#5f8787
43 +
palette = 10=#fbcb97
44 +
palette = 11=#e78a53
45 +
palette = 12=#888888
46 +
palette = 13=#999999
47 +
palette = 14=#aaaaaa
48 +
palette = 15=#c1c1c1
49 +
palette = 16=#aaaaaa
50 +
palette = 17=#444444
51 +
palette = 18=#121212
52 +
palette = 19=#222222
53 +
palette = 20=#999999
54 +
palette = 21=#999999
55 +
56 +
auto-update-channel = stable
57 +
click-repeat-interval = 500
58 +
command = /opt/homebrew/bin/nu
ghostty/config.bak +2222 −1
1 -
/Users/stevedylandev/.config/ghostty/config.bak
1 +
# The font families to use.
2 +
# 
3 +
# You can generate the list of valid values using the CLI:
4 +
# 
5 +
#     ghostty +list-fonts
6 +
# 
7 +
# This configuration can be repeated multiple times to specify preferred
8 +
# fallback fonts when the requested codepoint is not available in the primary
9 +
# font. This is particularly useful for multiple languages, symbolic fonts,
10 +
# etc.
11 +
# 
12 +
# Notes on emoji specifically: On macOS, Ghostty by default will always use
13 +
# Apple Color Emoji and on Linux will always use Noto Emoji. You can
14 +
# override this behavior by specifying a font family here that contains
15 +
# emoji glyphs.
16 +
# 
17 +
# The specific styles (bold, italic, bold italic) do not need to be
18 +
# explicitly set. If a style is not set, then the regular style (font-family)
19 +
# will be searched for stylistic variants. If a stylistic variant is not
20 +
# found, Ghostty will use the regular style. This prevents falling back to a
21 +
# different font family just to get a style such as bold. This also applies
22 +
# if you explicitly specify a font family for a style. For example, if you
23 +
# set `font-family-bold = FooBar` and "FooBar" cannot be found, Ghostty will
24 +
# use whatever font is set for `font-family` for the bold style.
25 +
# 
26 +
# Finally, some styles may be synthesized if they are not supported.
27 +
# For example, if a font does not have an italic style and no alternative
28 +
# italic font is specified, Ghostty will synthesize an italic style by
29 +
# applying a slant to the regular style. If you want to disable these
30 +
# synthesized styles then you can use the `font-style` configurations
31 +
# as documented below.
32 +
# 
33 +
# You can disable styles completely by using the `font-style` set of
34 +
# configurations. See the documentation for `font-style` for more information.
35 +
# 
36 +
# If you want to overwrite a previous set value rather than append a fallback,
37 +
# specify the value as `""` (empty string) to reset the list and then set the
38 +
# new values. For example:
39 +
# 
40 +
#     font-family = ""
41 +
#     font-family = "My Favorite Font"
42 +
# 
43 +
# Setting any of these as CLI arguments will automatically clear the
44 +
# values set in configuration files so you don't need to specify
45 +
# `--font-family=""` before setting a new value. You only need to specify
46 +
# this within config files if you want to clear previously set values in
47 +
# configuration files or on the CLI if you want to clear values set on the
48 +
# CLI.
49 +
# 
50 +
# Changing this configuration at runtime will only affect new terminals, i.e.
51 +
# new windows, tabs, etc.
52 +
font-family = "CommitMono Nerd Font"
53 +
54 +
font-family-bold = 
55 +
font-family-italic = 
56 +
font-family-bold-italic = 
57 +
58 +
keybind = super+alt+j=toggle_quick_terminal
59 +
60 +
# The named font style to use for each of the requested terminal font styles.
61 +
# This looks up the style based on the font style string advertised by the
62 +
# font itself. For example, "Iosevka Heavy" has a style of "Heavy".
63 +
# 
64 +
# You can also use these fields to completely disable a font style. If you set
65 +
# the value of the configuration below to literal `false` then that font style
66 +
# will be disabled. If the running program in the terminal requests a disabled
67 +
# font style, the regular font style will be used instead.
68 +
# 
69 +
# These are only valid if its corresponding font-family is also specified. If
70 +
# no font-family is specified, then the font-style is ignored unless you're
71 +
# disabling the font style.
72 +
font-style = default
73 +
74 +
font-style-bold = default
75 +
font-style-italic = default
76 +
font-style-bold-italic = default
77 +
# Control whether Ghostty should synthesize a style if the requested style is
78 +
# not available in the specified font-family.
79 +
# 
80 +
# Ghostty can synthesize bold, italic, and bold italic styles if the font
81 +
# does not have a specific style. For bold, this is done by drawing an
82 +
# outline around the glyph of varying thickness. For italic, this is done by
83 +
# applying a slant to the glyph. For bold italic, both of these are applied.
84 +
# 
85 +
# Synthetic styles are not perfect and will generally not look as good
86 +
# as a font that has the style natively. However, they are useful to
87 +
# provide styled text when the font does not have the style.
88 +
# 
89 +
# Set this to "false" or "true" to disable or enable synthetic styles
90 +
# completely. You can disable specific styles using "no-bold", "no-italic",
91 +
# and "no-bold-italic". You can disable multiple styles by separating them
92 +
# with a comma. For example, "no-bold,no-italic".
93 +
# 
94 +
# Available style keys are: `bold`, `italic`, `bold-italic`.
95 +
# 
96 +
# If synthetic styles are disabled, then the regular style will be used
97 +
# instead if the requested style is not available. If the font has the
98 +
# requested style, then the font will be used as-is since the style is
99 +
# not synthetic.
100 +
# 
101 +
# Warning: An easy mistake is to disable `bold` or `italic` but not
102 +
# `bold-italic`. Disabling only `bold` or `italic` will NOT disable either
103 +
# in the `bold-italic` style. If you want to disable `bold-italic`, you must
104 +
# explicitly disable it. You cannot partially disable `bold-italic`.
105 +
# 
106 +
# By default, synthetic styles are enabled.
107 +
font-synthetic-style = bold,italic,bold-italic
108 +
109 +
# Apply a font feature. This can be repeated multiple times to enable multiple
110 +
# font features. You can NOT set multiple font features with a single value
111 +
# (yet).
112 +
# 
113 +
# The font feature will apply to all fonts rendered by Ghostty. A future
114 +
# enhancement will allow targeting specific faces.
115 +
# 
116 +
# A valid value is the name of a feature. Prefix the feature with a `-` to
117 +
# explicitly disable it. Example: `ss20` or `-ss20`.
118 +
# 
119 +
# To disable programming ligatures, use `-calt` since this is the typical
120 +
# feature name for programming ligatures. To look into what font features
121 +
# your font has and what they do, use a font inspection tool such as
122 +
# [fontdrop.info](https://fontdrop.info).
123 +
# 
124 +
# To generally disable most ligatures, use `-calt`, `-liga`, and `-dlig` (as
125 +
# separate repetitive entries in your config).
126 +
font-feature = 
127 +
128 +
# Font size in points. This value can be a non-integer and the nearest integer
129 +
# pixel size will be selected. If you have a high dpi display where 1pt = 2px
130 +
# then you can get an odd numbered pixel size by specifying a half point.
131 +
# 
132 +
# For example, 13.5pt @ 2px/pt = 27px
133 +
# 
134 +
# Changing this configuration at runtime will only affect new terminals,
135 +
# i.e. new windows, tabs, etc. Note that you may still not see the change
136 +
# depending on your `window-inherit-font-size` setting. If that setting is
137 +
# true, only the first window will be affected by this change since all
138 +
# subsequent windows will inherit the font size of the previous window.
139 +
font-size = 13
140 +
141 +
# A repeatable configuration to set one or more font variations values for
142 +
# a variable font. A variable font is a single font, usually with a filename
143 +
# ending in `-VF.ttf` or `-VF.otf` that contains one or more configurable axes
144 +
# for things such as weight, slant, etc. Not all fonts support variations;
145 +
# only fonts that explicitly state they are variable fonts will work.
146 +
# 
147 +
# The format of this is `id=value` where `id` is the axis identifier. An axis
148 +
# identifier is always a 4 character string, such as `wght`. To get the list
149 +
# of supported axes, look at your font documentation or use a font inspection
150 +
# tool.
151 +
# 
152 +
# Invalid ids and values are usually ignored. For example, if a font only
153 +
# supports weights from 100 to 700, setting `wght=800` will do nothing (it
154 +
# will not be clamped to 700). You must consult your font's documentation to
155 +
# see what values are supported.
156 +
# 
157 +
# Common axes are: `wght` (weight), `slnt` (slant), `ital` (italic), `opsz`
158 +
# (optical size), `wdth` (width), `GRAD` (gradient), etc.
159 +
font-variation = 
160 +
161 +
font-variation-bold = 
162 +
font-variation-italic = 
163 +
font-variation-bold-italic = 
164 +
# Force one or a range of Unicode codepoints to map to a specific named font.
165 +
# This is useful if you want to support special symbols or if you want to use
166 +
# specific glyphs that render better for your specific font.
167 +
# 
168 +
# The syntax is `codepoint=fontname` where `codepoint` is either a single
169 +
# codepoint or a range. Codepoints must be specified as full Unicode
170 +
# hex values, such as `U+ABCD`. Codepoints ranges are specified as
171 +
# `U+ABCD-U+DEFG`. You can specify multiple ranges for the same font separated
172 +
# by commas, such as `U+ABCD-U+DEFG,U+1234-U+5678=fontname`. The font name is
173 +
# the same value as you would use for `font-family`.
174 +
# 
175 +
# This configuration can be repeated multiple times to specify multiple
176 +
# codepoint mappings.
177 +
# 
178 +
# Changing this configuration at runtime will only affect new terminals,
179 +
# i.e. new windows, tabs, etc.
180 +
font-codepoint-map = 
181 +
182 +
# Draw fonts with a thicker stroke, if supported. This is only supported
183 +
# currently on macOS.
184 +
font-thicken = false
185 +
186 +
# All of the configurations behavior adjust various metrics determined by the
187 +
# font. The values can be integers (1, -1, etc.) or a percentage (20%, -15%,
188 +
# etc.). In each case, the values represent the amount to change the original
189 +
# value.
190 +
# 
191 +
# For example, a value of `1` increases the value by 1; it does not set it to
192 +
# literally 1. A value of `20%` increases the value by 20%. And so on.
193 +
# 
194 +
# There is little to no validation on these values so the wrong values (i.e.
195 +
# `-100%`) can cause the terminal to be unusable. Use with caution and reason.
196 +
# 
197 +
# Some values are clamped to minimum or maximum values. This can make it
198 +
# appear that certain values are ignored. For example, many `*-thickness`
199 +
# adjustments cannot go below 1px.
200 +
# 
201 +
# `adjust-cell-height` has some additional behaviors to describe:
202 +
# 
203 +
#   * The font will be centered vertically in the cell.
204 +
# 
205 +
#   * The cursor will remain the same size as the font, but may be
206 +
#     adjusted separately with `adjust-cursor-height`.
207 +
# 
208 +
#   * Powerline glyphs will be adjusted along with the cell height so
209 +
#     that things like status lines continue to look aligned.
210 +
adjust-cell-width = 
211 +
212 +
adjust-cell-height = 
213 +
# Distance in pixels from the bottom of the cell to the text baseline.
214 +
# Increase to move baseline UP, decrease to move baseline DOWN.
215 +
adjust-font-baseline = 
216 +
217 +
# Distance in pixels from the top of the cell to the top of the underline.
218 +
# Increase to move underline DOWN, decrease to move underline UP.
219 +
adjust-underline-position = 
220 +
221 +
# Thickness in pixels of the underline.
222 +
adjust-underline-thickness = 
223 +
224 +
# Distance in pixels from the top of the cell to the top of the strikethrough.
225 +
# Increase to move strikethrough DOWN, decrease to move underline UP.
226 +
adjust-strikethrough-position = 
227 +
228 +
# Thickness in pixels of the strikethrough.
229 +
adjust-strikethrough-thickness = 
230 +
231 +
# Distance in pixels from the top of the cell to the top of the overline.
232 +
# Increase to move overline DOWN, decrease to move underline UP.
233 +
adjust-overline-position = 
234 +
235 +
# Thickness in pixels of the overline.
236 +
adjust-overline-thickness = 
237 +
238 +
# Thickness in pixels of the bar cursor and outlined rect cursor.
239 +
adjust-cursor-thickness = 
240 +
241 +
# Height in pixels of the cursor. Currently applies to all cursor types:
242 +
# bar, rect, and outlined rect.
243 +
adjust-cursor-height = 
244 +
245 +
# Thickness in pixels of box drawing characters.
246 +
adjust-box-thickness = 
247 +
248 +
# The method to use for calculating the cell width of a grapheme cluster.
249 +
# The default value is `unicode` which uses the Unicode standard to determine
250 +
# grapheme width. This results in correct grapheme width but may result in
251 +
# cursor-desync issues with some programs (such as shells) that may use a
252 +
# legacy method such as `wcswidth`.
253 +
# 
254 +
# Valid values are:
255 +
# 
256 +
# * `legacy` - Use a legacy method to determine grapheme width, such as
257 +
#   wcswidth This maximizes compatibility with legacy programs but may result
258 +
#   in incorrect grapheme width for certain graphemes such as skin-tone
259 +
#   emoji, non-English characters, etc.
260 +
# 
261 +
#   This is called "legacy" and not something more specific because the
262 +
#   behavior is undefined and we want to retain the ability to modify it.
263 +
#   For example, we may or may not use libc `wcswidth` now or in the future.
264 +
# 
265 +
# * `unicode` - Use the Unicode standard to determine grapheme width.
266 +
# 
267 +
# If a running program explicitly enables terminal mode 2027, then `unicode`
268 +
# width will be forced regardless of this configuration. When mode 2027 is
269 +
# reset, this configuration will be used again.
270 +
# 
271 +
# This configuration can be changed at runtime but will not affect existing
272 +
# terminals. Only new terminals will use the new configuration.
273 +
grapheme-width-method = unicode
274 +
275 +
# FreeType load flags to enable. The format of this is a list of flags to
276 +
# enable separated by commas. If you prefix a flag with `no-` then it is
277 +
# disabled. If you omit a flag, it's default value is used, so you must
278 +
# explicitly disable flags you don't want. You can also use `true` or `false`
279 +
# to turn all flags on or off.
280 +
# 
281 +
# This configuration only applies to Ghostty builds that use FreeType.
282 +
# This is usually the case only for Linux builds. macOS uses CoreText
283 +
# and does not have an equivalent configuration.
284 +
# 
285 +
# Available flags:
286 +
# 
287 +
#   * `hinting` - Enable or disable hinting, enabled by default.
288 +
#   * `force-autohint` - Use the freetype auto-hinter rather than the
289 +
#     font's native hinter. Enabled by default.
290 +
#   * `monochrome` - Instructs renderer to use 1-bit monochrome
291 +
#     rendering. This option doesn't impact the hinter.
292 +
#     Enabled by default.
293 +
#   * `autohint` - Use the freetype auto-hinter. Enabled by default.
294 +
# 
295 +
# Example: `hinting`, `no-hinting`, `force-autohint`, `no-force-autohint`
296 +
freetype-load-flags = hinting,force-autohint,monochrome,autohint
297 +
298 +
# A theme to use. This can be a built-in theme name, a custom theme
299 +
# name, or an absolute path to a custom theme file. Ghostty also supports
300 +
# specifying a different theme to use for light and dark mode. Each
301 +
# option is documented below.
302 +
# 
303 +
# If the theme is an absolute pathname, Ghostty will attempt to load that
304 +
# file as a theme. If that file does not exist or is inaccessible, an error
305 +
# will be logged and no other directories will be searched.
306 +
# 
307 +
# If the theme is not an absolute pathname, two different directories will be
308 +
# searched for a file name that matches the theme. This is case sensitive on
309 +
# systems with case-sensitive filesystems. It is an error for a theme name to
310 +
# include path separators unless it is an absolute pathname.
311 +
# 
312 +
# The first directory is the `themes` subdirectory of your Ghostty
313 +
# configuration directory. This is `$XDG_CONFIG_DIR/ghostty/themes` or
314 +
# `~/.config/ghostty/themes`.
315 +
# 
316 +
# The second directory is the `themes` subdirectory of the Ghostty resources
317 +
# directory. Ghostty ships with a multitude of themes that will be installed
318 +
# into this directory. On macOS, this list is in the `Ghostty.app/Contents/
319 +
# Resources/ghostty/themes` directory. On Linux, this list is in the `share/
320 +
# ghostty/themes` directory (wherever you installed the Ghostty "share"
321 +
# directory.
322 +
# 
323 +
# To see a list of available themes, run `ghostty +list-themes`.
324 +
# 
325 +
# A theme file is simply another Ghostty configuration file. They share
326 +
# the same syntax and same configuration options. A theme can set any valid
327 +
# configuration option so please do not use a theme file from an untrusted
328 +
# source. The built-in themes are audited to only set safe configuration
329 +
# options.
330 +
# 
331 +
# Some options cannot be set within theme files. The reason these are not
332 +
# supported should be self-evident. A theme file cannot set `theme` or
333 +
# `config-file`. At the time of writing this, Ghostty will not show any
334 +
# warnings or errors if you set these options in a theme file but they will
335 +
# be silently ignored.
336 +
# 
337 +
# Any additional colors specified via background, foreground, palette, etc.
338 +
# will override the colors specified in the theme.
339 +
# 
340 +
# To specify a different theme for light and dark mode, use the following
341 +
# syntax: `light:theme-name,dark:theme-name`. For example:
342 +
# `light:rose-pine-dawn,dark:rose-pine`. Whitespace around all values are
343 +
# trimmed and order of light and dark does not matter. Both light and dark
344 +
# must be specified in this form. In this form, the theme used will be
345 +
# based on the current desktop environment theme.
346 +
# 
347 +
# There are some known bugs with light/dark mode theming. These will
348 +
# be fixed in a future update:
349 +
# 
350 +
#   - macOS: titlebar tabs style is not updated when switching themes.
351 +
# 
352 +
theme = 
353 +
354 +
# Background color for the window.
355 +
background = #282c34
356 +
357 +
# Foreground color for the window.
358 +
foreground = #ffffff
359 +
360 +
# The foreground and background color for selection. If this is not set, then
361 +
# the selection color is just the inverted window background and foreground
362 +
# (note: not to be confused with the cell bg/fg).
363 +
selection-foreground = 
364 +
365 +
selection-background = 
366 +
# Swap the foreground and background colors of cells for selection. This
367 +
# option overrides the `selection-foreground` and `selection-background`
368 +
# options.
369 +
# 
370 +
# If you select across cells with differing foregrounds and backgrounds, the
371 +
# selection color will vary across the selection.
372 +
selection-invert-fg-bg = false
373 +
374 +
# The minimum contrast ratio between the foreground and background colors.
375 +
# The contrast ratio is a value between 1 and 21. A value of 1 allows for no
376 +
# contrast (i.e. black on black). This value is the contrast ratio as defined
377 +
# by the [WCAG 2.0 specification](https://www.w3.org/TR/WCAG20/).
378 +
# 
379 +
# If you want to avoid invisible text (same color as background), a value of
380 +
# 1.1 is a good value. If you want to avoid text that is difficult to read, a
381 +
# value of 3 or higher is a good value. The higher the value, the more likely
382 +
# that text will become black or white.
383 +
# 
384 +
# This value does not apply to Emoji or images.
385 +
minimum-contrast = 1
386 +
387 +
# Color palette for the 256 color form that many terminal applications use.
388 +
# The syntax of this configuration is `N=HEXCODE` where `N` is 0 to 255 (for
389 +
# the 256 colors in the terminal color table) and `HEXCODE` is a typical RGB
390 +
# color code such as `#AABBCC`.
391 +
# 
392 +
# For definitions on all the codes [see this cheat
393 +
# sheet](https://www.ditig.com/256-colors-cheat-sheet).
394 +
palette = 0=#1d1f21
395 +
palette = 1=#cc6666
396 +
palette = 2=#b5bd68
397 +
palette = 3=#f0c674
398 +
palette = 4=#81a2be
399 +
palette = 5=#b294bb
400 +
palette = 6=#8abeb7
401 +
palette = 7=#c5c8c6
402 +
palette = 8=#666666
403 +
palette = 9=#d54e53
404 +
palette = 10=#b9ca4a
405 +
palette = 11=#e7c547
406 +
palette = 12=#7aa6da
407 +
palette = 13=#c397d8
408 +
palette = 14=#70c0b1
409 +
palette = 15=#eaeaea
410 +
palette = 16=#000000
411 +
palette = 17=#00005f
412 +
palette = 18=#000087
413 +
palette = 19=#0000af
414 +
palette = 20=#0000d7
415 +
palette = 21=#0000ff
416 +
palette = 22=#005f00
417 +
palette = 23=#005f5f
418 +
palette = 24=#005f87
419 +
palette = 25=#005faf
420 +
palette = 26=#005fd7
421 +
palette = 27=#005fff
422 +
palette = 28=#008700
423 +
palette = 29=#00875f
424 +
palette = 30=#008787
425 +
palette = 31=#0087af
426 +
palette = 32=#0087d7
427 +
palette = 33=#0087ff
428 +
palette = 34=#00af00
429 +
palette = 35=#00af5f
430 +
palette = 36=#00af87
431 +
palette = 37=#00afaf
432 +
palette = 38=#00afd7
433 +
palette = 39=#00afff
434 +
palette = 40=#00d700
435 +
palette = 41=#00d75f
436 +
palette = 42=#00d787
437 +
palette = 43=#00d7af
438 +
palette = 44=#00d7d7
439 +
palette = 45=#00d7ff
440 +
palette = 46=#00ff00
441 +
palette = 47=#00ff5f
442 +
palette = 48=#00ff87
443 +
palette = 49=#00ffaf
444 +
palette = 50=#00ffd7
445 +
palette = 51=#00ffff
446 +
palette = 52=#5f0000
447 +
palette = 53=#5f005f
448 +
palette = 54=#5f0087
449 +
palette = 55=#5f00af
450 +
palette = 56=#5f00d7
451 +
palette = 57=#5f00ff
452 +
palette = 58=#5f5f00
453 +
palette = 59=#5f5f5f
454 +
palette = 60=#5f5f87
455 +
palette = 61=#5f5faf
456 +
palette = 62=#5f5fd7
457 +
palette = 63=#5f5fff
458 +
palette = 64=#5f8700
459 +
palette = 65=#5f875f
460 +
palette = 66=#5f8787
461 +
palette = 67=#5f87af
462 +
palette = 68=#5f87d7
463 +
palette = 69=#5f87ff
464 +
palette = 70=#5faf00
465 +
palette = 71=#5faf5f
466 +
palette = 72=#5faf87
467 +
palette = 73=#5fafaf
468 +
palette = 74=#5fafd7
469 +
palette = 75=#5fafff
470 +
palette = 76=#5fd700
471 +
palette = 77=#5fd75f
472 +
palette = 78=#5fd787
473 +
palette = 79=#5fd7af
474 +
palette = 80=#5fd7d7
475 +
palette = 81=#5fd7ff
476 +
palette = 82=#5fff00
477 +
palette = 83=#5fff5f
478 +
palette = 84=#5fff87
479 +
palette = 85=#5fffaf
480 +
palette = 86=#5fffd7
481 +
palette = 87=#5fffff
482 +
palette = 88=#870000
483 +
palette = 89=#87005f
484 +
palette = 90=#870087
485 +
palette = 91=#8700af
486 +
palette = 92=#8700d7
487 +
palette = 93=#8700ff
488 +
palette = 94=#875f00
489 +
palette = 95=#875f5f
490 +
palette = 96=#875f87
491 +
palette = 97=#875faf
492 +
palette = 98=#875fd7
493 +
palette = 99=#875fff
494 +
palette = 100=#878700
495 +
palette = 101=#87875f
496 +
palette = 102=#878787
497 +
palette = 103=#8787af
498 +
palette = 104=#8787d7
499 +
palette = 105=#8787ff
500 +
palette = 106=#87af00
501 +
palette = 107=#87af5f
502 +
palette = 108=#87af87
503 +
palette = 109=#87afaf
504 +
palette = 110=#87afd7
505 +
palette = 111=#87afff
506 +
palette = 112=#87d700
507 +
palette = 113=#87d75f
508 +
palette = 114=#87d787
509 +
palette = 115=#87d7af
510 +
palette = 116=#87d7d7
511 +
palette = 117=#87d7ff
512 +
palette = 118=#87ff00
513 +
palette = 119=#87ff5f
514 +
palette = 120=#87ff87
515 +
palette = 121=#87ffaf
516 +
palette = 122=#87ffd7
517 +
palette = 123=#87ffff
518 +
palette = 124=#af0000
519 +
palette = 125=#af005f
520 +
palette = 126=#af0087
521 +
palette = 127=#af00af
522 +
palette = 128=#af00d7
523 +
palette = 129=#af00ff
524 +
palette = 130=#af5f00
525 +
palette = 131=#af5f5f
526 +
palette = 132=#af5f87
527 +
palette = 133=#af5faf
528 +
palette = 134=#af5fd7
529 +
palette = 135=#af5fff
530 +
palette = 136=#af8700
531 +
palette = 137=#af875f
532 +
palette = 138=#af8787
533 +
palette = 139=#af87af
534 +
palette = 140=#af87d7
535 +
palette = 141=#af87ff
536 +
palette = 142=#afaf00
537 +
palette = 143=#afaf5f
538 +
palette = 144=#afaf87
539 +
palette = 145=#afafaf
540 +
palette = 146=#afafd7
541 +
palette = 147=#afafff
542 +
palette = 148=#afd700
543 +
palette = 149=#afd75f
544 +
palette = 150=#afd787
545 +
palette = 151=#afd7af
546 +
palette = 152=#afd7d7
547 +
palette = 153=#afd7ff
548 +
palette = 154=#afff00
549 +
palette = 155=#afff5f
550 +
palette = 156=#afff87
551 +
palette = 157=#afffaf
552 +
palette = 158=#afffd7
553 +
palette = 159=#afffff
554 +
palette = 160=#d70000
555 +
palette = 161=#d7005f
556 +
palette = 162=#d70087
557 +
palette = 163=#d700af
558 +
palette = 164=#d700d7
559 +
palette = 165=#d700ff
560 +
palette = 166=#d75f00
561 +
palette = 167=#d75f5f
562 +
palette = 168=#d75f87
563 +
palette = 169=#d75faf
564 +
palette = 170=#d75fd7
565 +
palette = 171=#d75fff
566 +
palette = 172=#d78700
567 +
palette = 173=#d7875f
568 +
palette = 174=#d78787
569 +
palette = 175=#d787af
570 +
palette = 176=#d787d7
571 +
palette = 177=#d787ff
572 +
palette = 178=#d7af00
573 +
palette = 179=#d7af5f
574 +
palette = 180=#d7af87
575 +
palette = 181=#d7afaf
576 +
palette = 182=#d7afd7
577 +
palette = 183=#d7afff
578 +
palette = 184=#d7d700
579 +
palette = 185=#d7d75f
580 +
palette = 186=#d7d787
581 +
palette = 187=#d7d7af
582 +
palette = 188=#d7d7d7
583 +
palette = 189=#d7d7ff
584 +
palette = 190=#d7ff00
585 +
palette = 191=#d7ff5f
586 +
palette = 192=#d7ff87
587 +
palette = 193=#d7ffaf
588 +
palette = 194=#d7ffd7
589 +
palette = 195=#d7ffff
590 +
palette = 196=#ff0000
591 +
palette = 197=#ff005f
592 +
palette = 198=#ff0087
593 +
palette = 199=#ff00af
594 +
palette = 200=#ff00d7
595 +
palette = 201=#ff00ff
596 +
palette = 202=#ff5f00
597 +
palette = 203=#ff5f5f
598 +
palette = 204=#ff5f87
599 +
palette = 205=#ff5faf
600 +
palette = 206=#ff5fd7
601 +
palette = 207=#ff5fff
602 +
palette = 208=#ff8700
603 +
palette = 209=#ff875f
604 +
palette = 210=#ff8787
605 +
palette = 211=#ff87af
606 +
palette = 212=#ff87d7
607 +
palette = 213=#ff87ff
608 +
palette = 214=#ffaf00
609 +
palette = 215=#ffaf5f
610 +
palette = 216=#ffaf87
611 +
palette = 217=#ffafaf
612 +
palette = 218=#ffafd7
613 +
palette = 219=#ffafff
614 +
palette = 220=#ffd700
615 +
palette = 221=#ffd75f
616 +
palette = 222=#ffd787
617 +
palette = 223=#ffd7af
618 +
palette = 224=#ffd7d7
619 +
palette = 225=#ffd7ff
620 +
palette = 226=#ffff00
621 +
palette = 227=#ffff5f
622 +
palette = 228=#ffff87
623 +
palette = 229=#ffffaf
624 +
palette = 230=#ffffd7
625 +
palette = 231=#ffffff
626 +
palette = 232=#080808
627 +
palette = 233=#121212
628 +
palette = 234=#1c1c1c
629 +
palette = 235=#262626
630 +
palette = 236=#303030
631 +
palette = 237=#3a3a3a
632 +
palette = 238=#444444
633 +
palette = 239=#4e4e4e
634 +
palette = 240=#585858
635 +
palette = 241=#626262
636 +
palette = 242=#6c6c6c
637 +
palette = 243=#767676
638 +
palette = 244=#808080
639 +
palette = 245=#8a8a8a
640 +
palette = 246=#949494
641 +
palette = 247=#9e9e9e
642 +
palette = 248=#a8a8a8
643 +
palette = 249=#b2b2b2
644 +
palette = 250=#bcbcbc
645 +
palette = 251=#c6c6c6
646 +
palette = 252=#d0d0d0
647 +
palette = 253=#dadada
648 +
palette = 254=#e4e4e4
649 +
palette = 255=#eeeeee
650 +
651 +
# The color of the cursor. If this is not set, a default will be chosen.
652 +
cursor-color = 
653 +
654 +
# Swap the foreground and background colors of the cell under the cursor. This
655 +
# option overrides the `cursor-color` and `cursor-text` options.
656 +
cursor-invert-fg-bg = false
657 +
658 +
# The opacity level (opposite of transparency) of the cursor. A value of 1
659 +
# is fully opaque and a value of 0 is fully transparent. A value less than 0
660 +
# or greater than 1 will be clamped to the nearest valid value. Note that a
661 +
# sufficiently small value such as 0.3 may be effectively invisible and may
662 +
# make it difficult to find the cursor.
663 +
cursor-opacity = 1
664 +
665 +
# The style of the cursor. This sets the default style. A running program can
666 +
# still request an explicit cursor style using escape sequences (such as `CSI
667 +
# q`). Shell configurations will often request specific cursor styles.
668 +
# 
669 +
# Note that shell integration will automatically set the cursor to a bar at
670 +
# a prompt, regardless of this configuration. You can disable that behavior
671 +
# by specifying `shell-integration-features = no-cursor` or disabling shell
672 +
# integration entirely.
673 +
# 
674 +
# Valid values are:
675 +
# 
676 +
#   * `block`
677 +
#   * `bar`
678 +
#   * `underline`
679 +
#   * `block_hollow`
680 +
# 
681 +
cursor-style = block
682 +
683 +
# Sets the default blinking state of the cursor. This is just the default
684 +
# state; running programs may override the cursor style using `DECSCUSR` (`CSI
685 +
# q`).
686 +
# 
687 +
# If this is not set, the cursor blinks by default. Note that this is not the
688 +
# same as a "true" value, as noted below.
689 +
# 
690 +
# If this is not set at all (`null`), then Ghostty will respect DEC Mode 12
691 +
# (AT&T cursor blink) as an alternate approach to turning blinking on/off. If
692 +
# this is set to any value other than null, DEC mode 12 will be ignored but
693 +
# `DECSCUSR` will still be respected.
694 +
# 
695 +
# Valid values are:
696 +
# 
697 +
#   * `` (blank)
698 +
#   * `true`
699 +
#   * `false`
700 +
# 
701 +
cursor-style-blink = 
702 +
703 +
# The color of the text under the cursor. If this is not set, a default will
704 +
# be chosen.
705 +
cursor-text = 
706 +
707 +
# Enables the ability to move the cursor at prompts by using `alt+click` on
708 +
# Linux and `option+click` on macOS.
709 +
# 
710 +
# This feature requires shell integration (specifically prompt marking
711 +
# via `OSC 133`) and only works in primary screen mode. Alternate screen
712 +
# applications like vim usually have their own version of this feature but
713 +
# this configuration doesn't control that.
714 +
# 
715 +
# It should be noted that this feature works by translating your desired
716 +
# position into a series of synthetic arrow key movements, so some weird
717 +
# behavior around edge cases are to be expected. This is unfortunately how
718 +
# this feature is implemented across terminals because there isn't any other
719 +
# way to implement it.
720 +
cursor-click-to-move = true
721 +
722 +
# Hide the mouse immediately when typing. The mouse becomes visible again
723 +
# when the mouse is used (button, movement, etc.). Platform-specific behavior
724 +
# may dictate other scenarios where the mouse is shown. For example on macOS,
725 +
# the mouse is shown again when a new window, tab, or split is created.
726 +
mouse-hide-while-typing = false
727 +
728 +
# Determines whether running programs can detect the shift key pressed with a
729 +
# mouse click. Typically, the shift key is used to extend mouse selection.
730 +
# 
731 +
# The default value of `false` means that the shift key is not sent with
732 +
# the mouse protocol and will extend the selection. This value can be
733 +
# conditionally overridden by the running program with the `XTSHIFTESCAPE`
734 +
# sequence.
735 +
# 
736 +
# The value `true` means that the shift key is sent with the mouse protocol
737 +
# but the running program can override this behavior with `XTSHIFTESCAPE`.
738 +
# 
739 +
# The value `never` is the same as `false` but the running program cannot
740 +
# override this behavior with `XTSHIFTESCAPE`. The value `always` is the
741 +
# same as `true` but the running program cannot override this behavior with
742 +
# `XTSHIFTESCAPE`.
743 +
# 
744 +
# If you always want shift to extend mouse selection even if the program
745 +
# requests otherwise, set this to `never`.
746 +
# 
747 +
# Valid values are:
748 +
# 
749 +
#   * `true`
750 +
#   * `false`
751 +
#   * `always`
752 +
#   * `never`
753 +
# 
754 +
mouse-shift-capture = false
755 +
756 +
# Multiplier for scrolling distance with the mouse wheel. Any value less
757 +
# than 0.01 or greater than 10,000 will be clamped to the nearest valid
758 +
# value.
759 +
# 
760 +
# A value of "1" (default) scrolls te default amount. A value of "2" scrolls
761 +
# double the default amount. A value of "0.5" scrolls half the default amount.
762 +
# Et cetera.
763 +
mouse-scroll-multiplier = 1
764 +
765 +
# The opacity level (opposite of transparency) of the background. A value of
766 +
# 1 is fully opaque and a value of 0 is fully transparent. A value less than 0
767 +
# or greater than 1 will be clamped to the nearest valid value.
768 +
# 
769 +
# On macOS, background opacity is disabled when the terminal enters native
770 +
# fullscreen. This is because the background becomes gray and it can cause
771 +
# widgets to show through which isn't generally desirable.
772 +
background-opacity = 1
773 +
774 +
# A positive value enables blurring of the background when background-opacity
775 +
# is less than 1. The value is the blur radius to apply. A value of 20
776 +
# is reasonable for a good looking blur. Higher values will cause strange
777 +
# rendering issues as well as performance issues.
778 +
# 
779 +
# This is only supported on macOS.
780 +
background-blur-radius = 0
781 +
782 +
# The opacity level (opposite of transparency) of an unfocused split.
783 +
# Unfocused splits by default are slightly faded out to make it easier to see
784 +
# which split is focused. To disable this feature, set this value to 1.
785 +
# 
786 +
# A value of 1 is fully opaque and a value of 0 is fully transparent. Because
787 +
# "0" is not useful (it makes the window look very weird), the minimum value
788 +
# is 0.15. This value still looks weird but you can at least see what's going
789 +
# on. A value outside of the range 0.15 to 1 will be clamped to the nearest
790 +
# valid value.
791 +
unfocused-split-opacity = 0.7
792 +
793 +
# The color to dim the unfocused split. Unfocused splits are dimmed by
794 +
# rendering a semi-transparent rectangle over the split. This sets the color of
795 +
# that rectangle and can be used to carefully control the dimming effect.
796 +
# 
797 +
# This will default to the background color.
798 +
unfocused-split-fill = 
799 +
800 +
# The command to run, usually a shell. If this is not an absolute path, it'll
801 +
# be looked up in the `PATH`. If this is not set, a default will be looked up
802 +
# from your system. The rules for the default lookup are:
803 +
# 
804 +
#   * `SHELL` environment variable
805 +
# 
806 +
#   * `passwd` entry (user information)
807 +
# 
808 +
# This can contain additional arguments to run the command with. If additional
809 +
# arguments are provided, the command will be executed using `/bin/sh -c`.
810 +
# Ghostty does not do any shell command parsing.
811 +
# 
812 +
# This command will be used for all new terminal surfaces, i.e. new windows,
813 +
# tabs, etc. If you want to run a command only for the first terminal surface
814 +
# created when Ghostty starts, use the `initial-command` configuration.
815 +
# 
816 +
# Ghostty supports the common `-e` flag for executing a command with
817 +
# arguments. For example, `ghostty -e fish --with --custom --args`.
818 +
# This flag sets the `initial-command` configuration, see that for more
819 +
# information.
820 +
command = 
821 +
822 +
# This is the same as "command", but only applies to the first terminal
823 +
# surface created when Ghostty starts. Subsequent terminal surfaces will use
824 +
# the `command` configuration.
825 +
# 
826 +
# After the first terminal surface is created (or closed), there is no
827 +
# way to run this initial command again automatically. As such, setting
828 +
# this at runtime works but will only affect the next terminal surface
829 +
# if it is the first one ever created.
830 +
# 
831 +
# If you're using the `ghostty` CLI there is also a shortcut to set this
832 +
# with arguments directly: you can use the `-e` flag. For example: `ghostty -e
833 +
# fish --with --custom --args`. The `-e` flag automatically forces some
834 +
# other behaviors as well:
835 +
# 
836 +
#   * `gtk-single-instance=false` - This ensures that a new instance is
837 +
#     launched and the CLI args are respected.
838 +
# 
839 +
#   * `quit-after-last-window-closed=true` - This ensures that the Ghostty
840 +
#     process will exit when the command exits. Additionally, the
841 +
#     `quit-after-last-window-closed-delay` is unset.
842 +
# 
843 +
#   * `shell-integration=detect` (if not `none`) - This prevents forcibly
844 +
#     injecting any configured shell integration into the command's
845 +
#     environment. With `-e` its highly unlikely that you're executing a
846 +
#     shell and forced shell integration is likely to cause problems
847 +
#     (i.e. by wrapping your command in a shell, setting env vars, etc.).
848 +
#     This is a safety measure to prevent unexpected behavior. If you want
849 +
#     shell integration with a `-e`-executed command, you must either
850 +
#     name your binary appopriately or source the shell integration script
851 +
#     manually.
852 +
# 
853 +
initial-command = 
854 +
855 +
# If true, keep the terminal open after the command exits. Normally, the
856 +
# terminal window closes when the running command (such as a shell) exits.
857 +
# With this true, the terminal window will stay open until any keypress is
858 +
# received.
859 +
# 
860 +
# This is primarily useful for scripts or debugging.
861 +
wait-after-command = false
862 +
863 +
# The number of milliseconds of runtime below which we consider a process exit
864 +
# to be abnormal. This is used to show an error message when the process exits
865 +
# too quickly.
866 +
# 
867 +
# On Linux, this must be paired with a non-zero exit code. On macOS, we allow
868 +
# any exit code because of the way shell processes are launched via the login
869 +
# command.
870 +
abnormal-command-exit-runtime = 250
871 +
872 +
# The size of the scrollback buffer in bytes. This also includes the active
873 +
# screen. No matter what this is set to, enough memory will always be
874 +
# allocated for the visible screen and anything leftover is the limit for
875 +
# the scrollback.
876 +
# 
877 +
# When this limit is reached, the oldest lines are removed from the
878 +
# scrollback.
879 +
# 
880 +
# Scrollback currently exists completely in memory. This means that the
881 +
# larger this value, the larger potential memory usage. Scrollback is
882 +
# allocated lazily up to this limit, so if you set this to a very large
883 +
# value, it will not immediately consume a lot of memory.
884 +
# 
885 +
# This size is per terminal surface, not for the entire application.
886 +
# 
887 +
# It is not currently possible to set an unlimited scrollback buffer.
888 +
# This is a future planned feature.
889 +
# 
890 +
# This can be changed at runtime but will only affect new terminal surfaces.
891 +
scrollback-limit = 10000000
892 +
893 +
# Match a regular expression against the terminal text and associate clicking
894 +
# it with an action. This can be used to match URLs, file paths, etc. Actions
895 +
# can be opening using the system opener (i.e. `open` or `xdg-open`) or
896 +
# executing any arbitrary binding action.
897 +
# 
898 +
# Links that are configured earlier take precedence over links that are
899 +
# configured later.
900 +
# 
901 +
# A default link that matches a URL and opens it in the system opener always
902 +
# exists. This can be disabled using `link-url`.
903 +
# 
904 +
# TODO: This can't currently be set!
905 +
906 +
# Enable URL matching. URLs are matched on hover with control (Linux) or
907 +
# super (macOS) pressed and open using the default system application for
908 +
# the linked URL.
909 +
# 
910 +
# The URL matcher is always lowest priority of any configured links (see
911 +
# `link`). If you want to customize URL matching, use `link` and disable this.
912 +
link-url = true
913 +
914 +
# Start new windows in fullscreen. This setting applies to new windows and
915 +
# does not apply to tabs, splits, etc. However, this setting will apply to all
916 +
# new windows, not just the first one.
917 +
# 
918 +
# On macOS, this setting does not work if window-decoration is set to
919 +
# "false", because native fullscreen on macOS requires window decorations
920 +
# to be set.
921 +
fullscreen = false
922 +
923 +
# The title Ghostty will use for the window. This will force the title of the
924 +
# window to be this title at all times and Ghostty will ignore any set title
925 +
# escape sequences programs (such as Neovim) may send.
926 +
# 
927 +
# If you want a blank title, set this to one or more spaces by quoting
928 +
# the value. For example, `title = " "`. This effectively hides the title.
929 +
# This is necessary because setting a blank value resets the title to the
930 +
# default value of the running program.
931 +
# 
932 +
# This configuration can be reloaded at runtime. If it is set, the title
933 +
# will update for all windows. If it is unset, the next title change escape
934 +
# sequence will be honored but previous changes will not retroactively
935 +
# be set. This latter case may require you restart programs such as neovim
936 +
# to get the new title.
937 +
title = 
938 +
939 +
# The setting that will change the application class value.
940 +
# 
941 +
# This controls the class field of the `WM_CLASS` X11 property (when running
942 +
# under X11), and the Wayland application ID (when running under Wayland).
943 +
# 
944 +
# Note that changing this value between invocations will create new, separate
945 +
# instances, of Ghostty when running with `gtk-single-instance=true`. See that
946 +
# option for more details.
947 +
# 
948 +
# The class name must follow the requirements defined [in the GTK
949 +
# documentation](https://docs.gtk.org/gio/type_func.Application.id_is_valid.html).
950 +
# 
951 +
# The default is `com.mitchellh.ghostty`.
952 +
# 
953 +
# This only affects GTK builds.
954 +
class = 
955 +
956 +
# This controls the instance name field of the `WM_CLASS` X11 property when
957 +
# running under X11. It has no effect otherwise.
958 +
# 
959 +
# The default is `ghostty`.
960 +
# 
961 +
# This only affects GTK builds.
962 +
x11-instance-name = 
963 +
964 +
# The directory to change to after starting the command.
965 +
# 
966 +
# This setting is secondary to the `window-inherit-working-directory`
967 +
# setting. If a previous Ghostty terminal exists in the same process,
968 +
# `window-inherit-working-directory` will take precedence. Otherwise, this
969 +
# setting will be used. Typically, this setting is used only for the first
970 +
# window.
971 +
# 
972 +
# The default is `inherit` except in special scenarios listed next. On macOS,
973 +
# if Ghostty can detect it is launched from launchd (double-clicked) or
974 +
# `open`, then it defaults to `home`. On Linux with GTK, if Ghostty can detect
975 +
# it was launched from a desktop launcher, then it defaults to `home`.
976 +
# 
977 +
# The value of this must be an absolute value or one of the special values
978 +
# below:
979 +
# 
980 +
#   * `home` - The home directory of the executing user.
981 +
# 
982 +
#   * `inherit` - The working directory of the launching process.
983 +
working-directory = 
984 +
985 +
# Key bindings. The format is `trigger=action`. Duplicate triggers will
986 +
# overwrite previously set values. The list of actions is available in
987 +
# the documentation or using the `ghostty +list-actions` command.
988 +
# 
989 +
# Trigger: `+`-separated list of keys and modifiers. Example: `ctrl+a`,
990 +
# `ctrl+shift+b`, `up`. Some notes:
991 +
# 
992 +
#   * modifiers cannot repeat, `ctrl+ctrl+a` is invalid.
993 +
# 
994 +
#   * modifiers and keys can be in any order, `shift+a+ctrl` is *weird*,
995 +
#     but valid.
996 +
# 
997 +
#   * only a single key input is allowed, `ctrl+a+b` is invalid.
998 +
# 
999 +
#   * the key input can be prefixed with `physical:` to specify a
1000 +
#     physical key mapping rather than a logical one. A physical key
1001 +
#     mapping responds to the hardware keycode and not the keycode
1002 +
#     translated by any system keyboard layouts. Example: "ctrl+physical:a"
1003 +
# 
1004 +
# Valid modifiers are `shift`, `ctrl` (alias: `control`), `alt` (alias: `opt`,
1005 +
# `option`), and `super` (alias: `cmd`, `command`). You may use the modifier
1006 +
# or the alias. When debugging keybinds, the non-aliased modifier will always
1007 +
# be used in output.
1008 +
# 
1009 +
# Note: The fn or "globe" key on keyboards are not supported as a
1010 +
# modifier. This is a limitation of the operating systems and GUI toolkits
1011 +
# that Ghostty uses.
1012 +
# 
1013 +
# You may also specify multiple triggers separated by `>` to require a
1014 +
# sequence of triggers to activate the action. For example,
1015 +
# `ctrl+a>n=new_window` will only trigger the `new_window` action if the
1016 +
# user presses `ctrl+a` followed separately by `n`. In other software, this
1017 +
# is sometimes called a leader key, a key chord, a key table, etc. There
1018 +
# is no hardcoded limit on the number of parts in a sequence.
1019 +
# 
1020 +
# Warning: If you define a sequence as a CLI argument to `ghostty`,
1021 +
# you probably have to quote the keybind since `>` is a special character
1022 +
# in most shells. Example: ghostty --keybind='ctrl+a>n=new_window'
1023 +
# 
1024 +
# A trigger sequence has some special handling:
1025 +
# 
1026 +
#   * Ghostty will wait an indefinite amount of time for the next key in
1027 +
#     the sequence. There is no way to specify a timeout. The only way to
1028 +
#     force the output of a prefix key is to assign another keybind to
1029 +
#     specifically output that key (i.e. `ctrl+a>ctrl+a=text:foo`) or
1030 +
#     press an unbound key which will send both keys to the program.
1031 +
# 
1032 +
#   * If a prefix in a sequence is previously bound, the sequence will
1033 +
#     override the previous binding. For example, if `ctrl+a` is bound to
1034 +
#     `new_window` and `ctrl+a>n` is bound to `new_tab`, pressing `ctrl+a`
1035 +
#     will do nothing.
1036 +
# 
1037 +
#   * Adding to the above, if a previously bound sequence prefix is
1038 +
#     used in a new, non-sequence binding, the entire previously bound
1039 +
#     sequence will be unbound. For example, if you bind `ctrl+a>n` and
1040 +
#     `ctrl+a>t`, and then bind `ctrl+a` directly, both `ctrl+a>n` and
1041 +
#     `ctrl+a>t` will become unbound.
1042 +
# 
1043 +
#   * Trigger sequences are not allowed for `global:` or `all:`-prefixed
1044 +
#     triggers. This is a limitation we could remove in the future.
1045 +
# 
1046 +
# Action is the action to take when the trigger is satisfied. It takes the
1047 +
# format `action` or `action:param`. The latter form is only valid if the
1048 +
# action requires a parameter.
1049 +
# 
1050 +
#   * `ignore` - Do nothing, ignore the key input. This can be used to
1051 +
#     black hole certain inputs to have no effect.
1052 +
# 
1053 +
#   * `unbind` - Remove the binding. This makes it so the previous action
1054 +
#     is removed, and the key will be sent through to the child command
1055 +
#     if it is printable.
1056 +
# 
1057 +
#   * `csi:text` - Send a CSI sequence. i.e. `csi:A` sends "cursor up".
1058 +
# 
1059 +
#   * `esc:text` - Send an escape sequence. i.e. `esc:d` deletes to the
1060 +
#     end of the word to the right.
1061 +
# 
1062 +
#   * `text:text` - Send a string. Uses Zig string literal syntax.
1063 +
#     i.e. `text:\x15` sends Ctrl-U.
1064 +
# 
1065 +
#   * All other actions can be found in the documentation or by using the
1066 +
#     `ghostty +list-actions` command.
1067 +
# 
1068 +
# Some notes for the action:
1069 +
# 
1070 +
#   * The parameter is taken as-is after the `:`. Double quotes or
1071 +
#     other mechanisms are included and NOT parsed. If you want to
1072 +
#     send a string value that includes spaces, wrap the entire
1073 +
#     trigger/action in double quotes. Example: `--keybind="up=csi:A B"`
1074 +
# 
1075 +
# There are some additional special values that can be specified for
1076 +
# keybind:
1077 +
# 
1078 +
#   * `keybind=clear` will clear all set keybindings. Warning: this
1079 +
#     removes ALL keybindings up to this point, including the default
1080 +
#     keybindings.
1081 +
# 
1082 +
# The keybind trigger can be prefixed with some special values to change
1083 +
# the behavior of the keybind. These are:
1084 +
# 
1085 +
#   * `all:` - Make the keybind apply to all terminal surfaces. By default,
1086 +
#     keybinds only apply to the focused terminal surface. If this is true,
1087 +
#     then the keybind will be sent to all terminal surfaces. This only
1088 +
#     applies to actions that are surface-specific. For actions that
1089 +
#     are already global (i.e. `quit`), this prefix has no effect.
1090 +
# 
1091 +
#   * `global:` - Make the keybind global. By default, keybinds only work
1092 +
#     within Ghostty and under the right conditions (application focused,
1093 +
#     sometimes terminal focused, etc.). If you want a keybind to work
1094 +
#     globally across your system (i.e. even when Ghostty is not focused),
1095 +
#     specify this prefix. This prefix implies `all:`. Note: this does not
1096 +
#     work in all environments; see the additional notes below for more
1097 +
#     information.
1098 +
# 
1099 +
#   * `unconsumed:` - Do not consume the input. By default, a keybind
1100 +
#     will consume the input, meaning that the associated encoding (if
1101 +
#     any) will not be sent to the running program in the terminal. If
1102 +
#     you wish to send the encoded value to the program, specify the
1103 +
#     `unconsumed:` prefix before the entire keybind. For example:
1104 +
#     `unconsumed:ctrl+a=reload_config`. `global:` and `all:`-prefixed
1105 +
#     keybinds will always consume the input regardless of this setting.
1106 +
#     Since they are not associated with a specific terminal surface,
1107 +
#     they're never encoded.
1108 +
# 
1109 +
# Keybind triggers are not unique per prefix combination. For example,
1110 +
# `ctrl+a` and `global:ctrl+a` are not two separate keybinds. The keybind
1111 +
# set later will overwrite the keybind set earlier. In this case, the
1112 +
# `global:` keybind will be used.
1113 +
# 
1114 +
# Multiple prefixes can be specified. For example,
1115 +
# `global:unconsumed:ctrl+a=reload_config` will make the keybind global
1116 +
# and not consume the input to reload the config.
1117 +
# 
1118 +
# Note: `global:` is only supported on macOS. On macOS,
1119 +
# this feature requires accessibility permissions to be granted to Ghostty.
1120 +
# When a `global:` keybind is specified and Ghostty is launched or reloaded,
1121 +
# Ghostty will attempt to request these permissions. If the permissions are
1122 +
# not granted, the keybind will not work. On macOS, you can find these
1123 +
# permissions in System Preferences -> Privacy & Security -> Accessibility.
1124 +
keybind = super+page_up=scroll_page_up
1125 +
keybind = super+ctrl+equal=equalize_splits
1126 +
keybind = super+physical:four=goto_tab:4
1127 +
keybind = super+shift+down=jump_to_prompt:1
1128 +
keybind = super+shift+w=close_window
1129 +
keybind = super+shift+left_bracket=previous_tab
1130 +
keybind = super+alt+i=inspector:toggle
1131 +
keybind = super+w=close_surface
1132 +
keybind = super+physical:eight=goto_tab:8
1133 +
keybind = super+alt+right=goto_split:right
1134 +
keybind = shift+up=adjust_selection:up
1135 +
keybind = super+down=jump_to_prompt:1
1136 +
keybind = super+enter=toggle_fullscreen
1137 +
keybind = super+t=new_tab
1138 +
keybind = super+c=copy_to_clipboard
1139 +
keybind = super+shift+right_bracket=next_tab
1140 +
keybind = super+physical:one=goto_tab:1
1141 +
keybind = shift+left=adjust_selection:left
1142 +
keybind = super+equal=increase_font_size:1
1143 +
keybind = shift+page_up=adjust_selection:page_up
1144 +
keybind = super+physical:three=goto_tab:3
1145 +
keybind = super+physical:zero=last_tab
1146 +
keybind = super+right=text:\x05
1147 +
keybind = super+d=new_split:right
1148 +
keybind = super+ctrl+down=resize_split:down,10
1149 +
keybind = shift+end=adjust_selection:end
1150 +
keybind = super+plus=increase_font_size:1
1151 +
keybind = super+q=quit
1152 +
keybind = super+home=scroll_to_top
1153 +
keybind = super+ctrl+left=resize_split:left,10
1154 +
keybind = alt+left=esc:b
1155 +
keybind = super+ctrl+up=resize_split:up,10
1156 +
keybind = super+left=text:\x01
1157 +
keybind = super+shift+up=jump_to_prompt:-1
1158 +
keybind = shift+right=adjust_selection:right
1159 +
keybind = super+comma=open_config
1160 +
keybind = super+shift+comma=reload_config
1161 +
keybind = super+minus=decrease_font_size:1
1162 +
keybind = shift+page_down=adjust_selection:page_down
1163 +
keybind = ctrl+tab=next_tab
1164 +
keybind = super+a=select_all
1165 +
keybind = alt+right=esc:f
1166 +
keybind = super+shift+enter=toggle_split_zoom
1167 +
keybind = super+alt+down=goto_split:bottom
1168 +
keybind = super+ctrl+f=toggle_fullscreen
1169 +
keybind = super+ctrl+right=resize_split:right,10
1170 +
keybind = super+alt+shift+j=write_scrollback_file:open
1171 +
keybind = shift+down=adjust_selection:down
1172 +
keybind = ctrl+shift+tab=previous_tab
1173 +
keybind = super+n=new_window
1174 +
keybind = super+alt+left=goto_split:left
1175 +
keybind = super+page_down=scroll_page_down
1176 +
keybind = super+alt+shift+w=close_all_windows
1177 +
keybind = super+alt+up=goto_split:top
1178 +
keybind = super+left_bracket=goto_split:previous
1179 +
keybind = super+physical:nine=goto_tab:9
1180 +
keybind = super+right_bracket=goto_split:next
1181 +
keybind = super+end=scroll_to_bottom
1182 +
keybind = super+shift+j=write_scrollback_file:paste
1183 +
keybind = super+shift+d=new_split:down
1184 +
keybind = super+zero=reset_font_size
1185 +
keybind = super+physical:five=goto_tab:5
1186 +
keybind = shift+home=adjust_selection:home
1187 +
keybind = super+physical:seven=goto_tab:7
1188 +
keybind = super+up=jump_to_prompt:-1
1189 +
keybind = super+k=clear_screen
1190 +
keybind = super+physical:two=goto_tab:2
1191 +
keybind = super+physical:six=goto_tab:6
1192 +
keybind = super+v=paste_from_clipboard
1193 +
1194 +
# Horizontal window padding. This applies padding between the terminal cells
1195 +
# and the left and right window borders. The value is in points, meaning that
1196 +
# it will be scaled appropriately for screen DPI.
1197 +
# 
1198 +
# If this value is set too large, the screen will render nothing, because the
1199 +
# grid will be completely squished by the padding. It is up to you as the user
1200 +
# to pick a reasonable value. If you pick an unreasonable value, a warning
1201 +
# will appear in the logs.
1202 +
# 
1203 +
# Changing this configuration at runtime will only affect new terminals, i.e.
1204 +
# new windows, tabs, etc.
1205 +
# 
1206 +
# To set a different left and right padding, specify two numerical values
1207 +
# separated by a comma. For example, `window-padding-x = 2,4` will set the
1208 +
# left padding to 2 and the right padding to 4. If you want to set both
1209 +
# paddings to the same value, you can use a single value. For example,
1210 +
# `window-padding-x = 2` will set both paddings to 2.
1211 +
window-padding-x = 6
1212 +
1213 +
# Vertical window padding. This applies padding between the terminal cells and
1214 +
# the top and bottom window borders. The value is in points, meaning that it
1215 +
# will be scaled appropriately for screen DPI.
1216 +
# 
1217 +
# If this value is set too large, the screen will render nothing, because the
1218 +
# grid will be completely squished by the padding. It is up to you as the user
1219 +
# to pick a reasonable value. If you pick an unreasonable value, a warning
1220 +
# will appear in the logs.
1221 +
# 
1222 +
# Changing this configuration at runtime will only affect new terminals,
1223 +
# i.e. new windows, tabs, etc.
1224 +
# 
1225 +
# To set a different top and bottom padding, specify two numerical values
1226 +
# separated by a comma. For example, `window-padding-y = 2,4` will set the
1227 +
# top padding to 2 and the bottom padding to 4. If you want to set both
1228 +
# paddings to the same value, you can use a single value. For example,
1229 +
# `window-padding-y = 2` will set both paddings to 2.
1230 +
window-padding-y = 2
1231 +
1232 +
# The viewport dimensions are usually not perfectly divisible by the cell
1233 +
# size. In this case, some extra padding on the end of a column and the bottom
1234 +
# of the final row may exist. If this is `true`, then this extra padding
1235 +
# is automatically balanced between all four edges to minimize imbalance on
1236 +
# one side. If this is `false`, the top left grid cell will always hug the
1237 +
# edge with zero padding other than what may be specified with the other
1238 +
# `window-padding` options.
1239 +
# 
1240 +
# If other `window-padding` fields are set and this is `true`, this will still
1241 +
# apply. The other padding is applied first and may affect how many grid cells
1242 +
# actually exist, and this is applied last in order to balance the padding
1243 +
# given a certain viewport size and grid cell size.
1244 +
window-padding-balance = false
1245 +
1246 +
# The color of the padding area of the window. Valid values are:
1247 +
# 
1248 +
# * `background` - The background color specified in `background`.
1249 +
# * `extend` - Extend the background color of the nearest grid cell.
1250 +
# * `extend-always` - Same as "extend" but always extends without applying
1251 +
#   any of the heuristics that disable extending noted below.
1252 +
# 
1253 +
# The "extend" value will be disabled in certain scenarios. On primary
1254 +
# screen applications (i.e. not something like Neovim), the color will not
1255 +
# be extended vertically if any of the following are true:
1256 +
# 
1257 +
# * The nearest row has any cells that have the default background color.
1258 +
#   The thinking is that in this case, the default background color looks
1259 +
#   fine as a padding color.
1260 +
# * The nearest row is a prompt row (requires shell integration). The
1261 +
#   thinking here is that prompts often contain powerline glyphs that
1262 +
#   do not look good extended.
1263 +
# * The nearest row contains a perfect fit powerline character. These
1264 +
#   don't look good extended.
1265 +
# 
1266 +
window-padding-color = background
1267 +
1268 +
# Synchronize rendering with the screen refresh rate. If true, this will
1269 +
# minimize tearing and align redraws with the screen but may cause input
1270 +
# latency. If false, this will maximize redraw frequency but may cause tearing,
1271 +
# and under heavy load may use more CPU and power.
1272 +
# 
1273 +
# This defaults to true because out-of-sync rendering on macOS can
1274 +
# cause kernel panics (macOS 14.4+) and performance issues for external
1275 +
# displays over some hardware such as DisplayLink. If you want to minimize
1276 +
# input latency, set this to false with the known aforementioned risks.
1277 +
# 
1278 +
# Changing this value at runtime will only affect new terminals.
1279 +
# 
1280 +
# This setting is only supported currently on macOS.
1281 +
window-vsync = true
1282 +
1283 +
# If true, new windows and tabs will inherit the working directory of the
1284 +
# previously focused window. If no window was previously focused, the default
1285 +
# working directory will be used (the `working-directory` option).
1286 +
window-inherit-working-directory = true
1287 +
1288 +
# If true, new windows and tabs will inherit the font size of the previously
1289 +
# focused window. If no window was previously focused, the default font size
1290 +
# will be used. If this is false, the default font size specified in the
1291 +
# configuration `font-size` will be used.
1292 +
window-inherit-font-size = true
1293 +
1294 +
# Valid values:
1295 +
# 
1296 +
#   * `true`
1297 +
#   * `false` - windows won't have native decorations, i.e. titlebar and
1298 +
#      borders. On macOS this also disables tabs and tab overview.
1299 +
# 
1300 +
# The "toggle_window_decorations" keybind action can be used to create
1301 +
# a keybinding to toggle this setting at runtime.
1302 +
# 
1303 +
# Changing this configuration in your configuration and reloading will
1304 +
# only affect new windows. Existing windows will not be affected.
1305 +
# 
1306 +
# macOS: To hide the titlebar without removing the native window borders
1307 +
#        or rounded corners, use `mghostty +show-config --default --docsacos-titlebar-style = hidden` instead.
1308 +
window-decoration = true
1309 +
1310 +
# The font that will be used for the application's window and tab titles.
1311 +
# 
1312 +
# This is currently only supported on macOS.
1313 +
window-title-font-family = 
1314 +
1315 +
# The theme to use for the windows. Valid values:
1316 +
# 
1317 +
#   * `auto` - Determine the theme based on the configured terminal
1318 +
#      background color. This has no effect if the "theme" configuration
1319 +
#      has separate light and dark themes. In that case, the behavior
1320 +
#      of "auto" is equivalent to "system".
1321 +
#   * `system` - Use the system theme.
1322 +
#   * `light` - Use the light theme regardless of system theme.
1323 +
#   * `dark` - Use the dark theme regardless of system theme.
1324 +
#   * `ghostty` - Use the background and foreground colors specified in the
1325 +
#     Ghostty configuration. This is only supported on Linux builds with
1326 +
#     Adwaita and `gtk-adwaita` enabled.
1327 +
# 
1328 +
# On macOS, if `macos-titlebar-style` is "tabs", the window theme will be
1329 +
# automatically set based on the luminosity of the terminal background color.
1330 +
# This only applies to terminal windows. This setting will still apply to
1331 +
# non-terminal windows within Ghostty.
1332 +
# 
1333 +
# This is currently only supported on macOS and Linux.
1334 +
window-theme = auto
1335 +
1336 +
# The colorspace to use for the terminal window. The default is `srgb` but
1337 +
# this can also be set to `display-p3` to use the Display P3 colorspace.
1338 +
# 
1339 +
# Changing this value at runtime will only affect new windows.
1340 +
# 
1341 +
# This setting is only supported on macOS.
1342 +
window-colorspace = srgb
1343 +
1344 +
# The initial window size. This size is in terminal grid cells by default.
1345 +
# Both values must be set to take effect. If only one value is set, it is
1346 +
# ignored.
1347 +
# 
1348 +
# We don't currently support specifying a size in pixels but a future change
1349 +
# can enable that. If this isn't specified, the app runtime will determine
1350 +
# some default size.
1351 +
# 
1352 +
# Note that the window manager may put limits on the size or override the
1353 +
# size. For example, a tiling window manager may force the window to be a
1354 +
# certain size to fit within the grid. There is nothing Ghostty will do about
1355 +
# this, but it will make an effort.
1356 +
# 
1357 +
# Sizes larger than the screen size will be clamped to the screen size.
1358 +
# This can be used to create a maximized-by-default window size.
1359 +
# 
1360 +
# This will not affect new tabs, splits, or other nested terminal elements.
1361 +
# This only affects the initial window size of any new window. Changing this
1362 +
# value will not affect the size of the window after it has been created. This
1363 +
# is only used for the initial size.
1364 +
# 
1365 +
# BUG: On Linux with GTK, the calculated window size will not properly take
1366 +
# into account window decorations. As a result, the grid dimensions will not
1367 +
# exactly match this configuration. If window decorations are disabled (see
1368 +
# window-decorations), then this will work as expected.
1369 +
# 
1370 +
# Windows smaller than 10 wide by 4 high are not allowed.
1371 +
window-height = 0
1372 +
1373 +
window-width = 0
1374 +
# Whether to enable saving and restoring window state. Window state includes
1375 +
# their position, size, tabs, splits, etc. Some window state requires shell
1376 +
# integration, such as preserving working directories. See `shell-integration`
1377 +
# for more information.
1378 +
# 
1379 +
# There are three valid values for this configuration:
1380 +
# 
1381 +
#   * `default` will use the default system behavior. On macOS, this
1382 +
#     will only save state if the application is forcibly terminated
1383 +
#     or if it is configured systemwide via Settings.app.
1384 +
# 
1385 +
#   * `never` will never save window state.
1386 +
# 
1387 +
#   * `always` will always save window state whenever Ghostty is exited.
1388 +
# 
1389 +
# If you change this value to `never` while Ghostty is not running, the next
1390 +
# Ghostty launch will NOT restore the window state.
1391 +
# 
1392 +
# If you change this value to `default` while Ghostty is not running and the
1393 +
# previous exit saved state, the next Ghostty launch will still restore the
1394 +
# window state. This is because Ghostty cannot know if the previous exit was
1395 +
# due to a forced save or not (macOS doesn't provide this information).
1396 +
# 
1397 +
# If you change this value so that window state is saved while Ghostty is not
1398 +
# running, the previous window state will not be restored because Ghostty only
1399 +
# saves state on exit if this is enabled.
1400 +
# 
1401 +
# The default value is `default`.
1402 +
# 
1403 +
# This is currently only supported on macOS. This has no effect on Linux.
1404 +
window-save-state = default
1405 +
1406 +
# Resize the window in discrete increments of the focused surface's cell size.
1407 +
# If this is disabled, surfaces are resized in pixel increments. Currently
1408 +
# only supported on macOS.
1409 +
window-step-resize = false
1410 +
1411 +
# The position where new tabs are created. Valid values:
1412 +
# 
1413 +
#   * `current` - Insert the new tab after the currently focused tab,
1414 +
#     or at the end if there are no focused tabs.
1415 +
# 
1416 +
#   * `end` - Insert the new tab at the end of the tab list.
1417 +
window-new-tab-position = current
1418 +
1419 +
# This controls when resize overlays are shown. Resize overlays are a
1420 +
# transient popup that shows the size of the terminal while the surfaces are
1421 +
# being resized. The possible options are:
1422 +
# 
1423 +
#   * `always` - Always show resize overlays.
1424 +
#   * `never` - Never show resize overlays.
1425 +
#   * `after-first` - The resize overlay will not appear when the surface
1426 +
#                     is first created, but will show up if the surface is
1427 +
#                     subsequently resized.
1428 +
# 
1429 +
# The default is `after-first`.
1430 +
resize-overlay = after-first
1431 +
1432 +
# If resize overlays are enabled, this controls the position of the overlay.
1433 +
# The possible options are:
1434 +
# 
1435 +
#   * `center`
1436 +
#   * `top-left`
1437 +
#   * `top-center`
1438 +
#   * `top-right`
1439 +
#   * `bottom-left`
1440 +
#   * `bottom-center`
1441 +
#   * `bottom-right`
1442 +
# 
1443 +
# The default is `center`.
1444 +
resize-overlay-position = center
1445 +
1446 +
# If resize overlays are enabled, this controls how long the overlay is
1447 +
# visible on the screen before it is hidden. The default is ¾ of a second or
1448 +
# 750 ms.
1449 +
# 
1450 +
# The duration is specified as a series of numbers followed by time units.
1451 +
# Whitespace is allowed between numbers and units. Each number and unit will
1452 +
# be added together to form the total duration.
1453 +
# 
1454 +
# The allowed time units are as follows:
1455 +
# 
1456 +
#   * `y` - 365 SI days, or 8760 hours, or 31536000 seconds. No adjustments
1457 +
#     are made for leap years or leap seconds.
1458 +
#   * `d` - one SI day, or 86400 seconds.
1459 +
#   * `h` - one hour, or 3600 seconds.
1460 +
#   * `m` - one minute, or 60 seconds.
1461 +
#   * `s` - one second.
1462 +
#   * `ms` - one millisecond, or 0.001 second.
1463 +
#   * `us` or `µs` - one microsecond, or 0.000001 second.
1464 +
#   * `ns` - one nanosecond, or 0.000000001 second.
1465 +
# 
1466 +
# Examples:
1467 +
#   * `1h30m`
1468 +
#   * `45s`
1469 +
# 
1470 +
# Units can be repeated and will be added together. This means that
1471 +
# `1h1h` is equivalent to `2h`. This is confusing and should be avoided.
1472 +
# A future update may disallow this.
1473 +
# 
1474 +
# The maximum value is `584y 49w 23h 34m 33s 709ms 551µs 615ns`. Any
1475 +
# value larger than this will be clamped to the maximum value.
1476 +
resize-overlay-duration = 750ms
1477 +
1478 +
focus-follows-mouse = false
1479 +
# Whether to allow programs running in the terminal to read/write to the
1480 +
# system clipboard (OSC 52, for googling). The default is to allow clipboard
1481 +
# reading after prompting the user and allow writing unconditionally.
1482 +
# 
1483 +
# Valid values are:
1484 +
# 
1485 +
#   * `ask`
1486 +
#   * `allow`
1487 +
#   * `deny`
1488 +
# 
1489 +
clipboard-read = ask
1490 +
1491 +
clipboard-write = allow
1492 +
# Trims trailing whitespace on data that is copied to the clipboard. This does
1493 +
# not affect data sent to the clipboard via `clipboard-write`.
1494 +
clipboard-trim-trailing-spaces = true
1495 +
1496 +
# Require confirmation before pasting text that appears unsafe. This helps
1497 +
# prevent a "copy/paste attack" where a user may accidentally execute unsafe
1498 +
# commands by pasting text with newlines.
1499 +
clipboard-paste-protection = true
1500 +
1501 +
# If true, bracketed pastes will be considered safe. By default, bracketed
1502 +
# pastes are considered safe. "Bracketed" pastes are pastes while the running
1503 +
# program has bracketed paste mode enabled (a setting set by the running
1504 +
# program, not the terminal emulator).
1505 +
clipboard-paste-bracketed-safe = true
1506 +
1507 +
# The total amount of bytes that can be used for image data (i.e. the Kitty
1508 +
# image protocol) per terminal screen. The maximum value is 4,294,967,295
1509 +
# (4GiB). The default is 320MB. If this is set to zero, then all image
1510 +
# protocols will be disabled.
1511 +
# 
1512 +
# This value is separate for primary and alternate screens so the effective
1513 +
# limit per surface is double.
1514 +
image-storage-limit = 320000000
1515 +
1516 +
# Whether to automatically copy selected text to the clipboard. `true`
1517 +
# will prefer to copy to the selection clipboard if supported by the
1518 +
# OS, otherwise it will copy to the system clipboard.
1519 +
# 
1520 +
# The value `clipboard` will always copy text to the selection clipboard
1521 +
# (for supported systems) as well as the system clipboard. This is sometimes
1522 +
# a preferred behavior on Linux.
1523 +
# 
1524 +
# Middle-click paste will always use the selection clipboard on Linux
1525 +
# and the system clipboard on macOS. Middle-click paste is always enabled
1526 +
# even if this is `false`.
1527 +
# 
1528 +
# The default value is true on Linux and false on macOS. macOS copy on
1529 +
# select behavior is not typical for applications so it is disabled by
1530 +
# default. On Linux, this is a standard behavior so it is enabled by
1531 +
# default.
1532 +
copy-on-select = false
1533 +
1534 +
# The time in milliseconds between clicks to consider a click a repeat
1535 +
# (double, triple, etc.) or an entirely new single click. A value of zero will
1536 +
# use a platform-specific default. The default on macOS is determined by the
1537 +
# OS settings. On every other platform it is 500ms.
1538 +
click-repeat-interval = 0
1539 +
1540 +
# Additional configuration files to read. This configuration can be repeated
1541 +
# to read multiple configuration files. Configuration files themselves can
1542 +
# load more configuration files. Paths are relative to the file containing the
1543 +
# `config-file` directive. For command-line arguments, paths are relative to
1544 +
# the current working directory.
1545 +
# 
1546 +
# Prepend a ? character to the file path to suppress errors if the file does
1547 +
# not exist. If you want to include a file that begins with a literal ?
1548 +
# character, surround the file path in double quotes (").
1549 +
# 
1550 +
# Cycles are not allowed. If a cycle is detected, an error will be logged and
1551 +
# the configuration file will be ignored.
1552 +
# 
1553 +
# Configuration files are loaded after the configuration they're defined
1554 +
# within in the order they're defined. **THIS IS A VERY SUBTLE BUT IMPORTANT
1555 +
# POINT.** To put it another way: configuration files do not take effect
1556 +
# until after the entire configuration is loaded. For example, in the
1557 +
# configuration below:
1558 +
# 
1559 +
# ```
1560 +
# config-file = "foo"
1561 +
# a = 1
1562 +
# ```
1563 +
# 
1564 +
# If "foo" contains `a = 2`, the final value of `a` will be 2, because
1565 +
# `foo` is loaded after the configuration file that configures the
1566 +
# nested `config-file` value.
1567 +
config-file = 
1568 +
1569 +
# When this is true, the default configuration file paths will be loaded.
1570 +
# The default configuration file paths are currently only the XDG
1571 +
# config path ($XDG_CONFIG_HOME/ghostty/config).
1572 +
# 
1573 +
# If this is false, the default configuration paths will not be loaded.
1574 +
# This is targeted directly at using Ghostty from the CLI in a way
1575 +
# that minimizes external effects.
1576 +
# 
1577 +
# This is a CLI-only configuration. Setting this in a configuration file
1578 +
# will have no effect. It is not an error, but it will not do anything.
1579 +
# This configuration can only be set via CLI arguments.
1580 +
config-default-files = true
1581 +
1582 +
# Confirms that a surface should be closed before closing it. This defaults to
1583 +
# true. If set to false, surfaces will close without any confirmation.
1584 +
confirm-close-surface = true
1585 +
1586 +
# Whether or not to quit after the last surface is closed.
1587 +
# 
1588 +
# This defaults to `false` on macOS since that is standard behavior for
1589 +
# a macOS application. On Linux, this defaults to `true` since that is
1590 +
# generally expected behavior.
1591 +
# 
1592 +
# On Linux, if this is `true`, Ghostty can delay quitting fully until a
1593 +
# configurable amount of time has passed after the last window is closed.
1594 +
# See the documentation of `quit-after-last-window-closed-delay`.
1595 +
quit-after-last-window-closed = false
1596 +
1597 +
# Controls how long Ghostty will stay running after the last open surface has
1598 +
# been closed. This only has an effect if `quit-after-last-window-closed` is
1599 +
# also set to `true`.
1600 +
# 
1601 +
# The minimum value for this configuration is `1s`. Any values lower than
1602 +
# this will be clamped to `1s`.
1603 +
# 
1604 +
# The duration is specified as a series of numbers followed by time units.
1605 +
# Whitespace is allowed between numbers and units. Each number and unit will
1606 +
# be added together to form the total duration.
1607 +
# 
1608 +
# The allowed time units are as follows:
1609 +
# 
1610 +
#   * `y` - 365 SI days, or 8760 hours, or 31536000 seconds. No adjustments
1611 +
#     are made for leap years or leap seconds.
1612 +
#   * `d` - one SI day, or 86400 seconds.
1613 +
#   * `h` - one hour, or 3600 seconds.
1614 +
#   * `m` - one minute, or 60 seconds.
1615 +
#   * `s` - one second.
1616 +
#   * `ms` - one millisecond, or 0.001 second.
1617 +
#   * `us` or `µs` - one microsecond, or 0.000001 second.
1618 +
#   * `ns` - one nanosecond, or 0.000000001 second.
1619 +
# 
1620 +
# Examples:
1621 +
#   * `1h30m`
1622 +
#   * `45s`
1623 +
# 
1624 +
# Units can be repeated and will be added together. This means that
1625 +
# `1h1h` is equivalent to `2h`. This is confusing and should be avoided.
1626 +
# A future update may disallow this.
1627 +
# 
1628 +
# The maximum value is `584y 49w 23h 34m 33s 709ms 551µs 615ns`. Any
1629 +
# value larger than this will be clamped to the maximum value.
1630 +
# 
1631 +
# By default `quit-after-last-window-closed-delay` is unset and
1632 +
# Ghostty will quit immediately after the last window is closed if
1633 +
# `quit-after-last-window-closed` is `true`.
1634 +
# 
1635 +
# Only implemented on Linux.
1636 +
quit-after-last-window-closed-delay = 
1637 +
1638 +
# This controls whether an initial window is created when Ghostty
1639 +
# is run. Note that if `quit-after-last-window-closed` is `true` and
1640 +
# `quit-after-last-window-closed-delay` is set, setting `initial-window` to
1641 +
# `false` will mean that Ghostty will quit after the configured delay if no
1642 +
# window is ever created. Only implemented on Linux and macOS.
1643 +
initial-window = true
1644 +
1645 +
# The position of the "quick" terminal window. To learn more about the
1646 +
# quick terminal, see the documentation for the `toggle_quick_terminal`
1647 +
# binding action.
1648 +
# 
1649 +
# Valid values are:
1650 +
# 
1651 +
#   * `top` - Terminal appears at the top of the screen.
1652 +
#   * `bottom` - Terminal appears at the bottom of the screen.
1653 +
#   * `left` - Terminal appears at the left of the screen.
1654 +
#   * `right` - Terminal appears at the right of the screen.
1655 +
#   * `center` - Terminal appears at the center of the screen.
1656 +
# 
1657 +
# Changing this configuration requires restarting Ghostty completely.
1658 +
quick-terminal-position = top
1659 +
1660 +
# The screen where the quick terminal should show up.
1661 +
# 
1662 +
# Valid values are:
1663 +
# 
1664 +
#  * `main` - The screen that the operating system recommends as the main
1665 +
#    screen. On macOS, this is the screen that is currently receiving
1666 +
#    keyboard input. This screen is defined by the operating system and
1667 +
#    not chosen by Ghostty.
1668 +
# 
1669 +
#  * `mouse` - The screen that the mouse is currently hovered over.
1670 +
# 
1671 +
#  * `macos-menu-bar` - The screen that contains the macOS menu bar as
1672 +
#    set in the display settings on macOS. This is a bit confusing because
1673 +
#    every screen on macOS has a menu bar, but this is the screen that
1674 +
#    contains the primary menu bar.
1675 +
# 
1676 +
# The default value is `main` because this is the recommended screen
1677 +
# by the operating system.
1678 +
quick-terminal-screen = main
1679 +
1680 +
# Duration (in seconds) of the quick terminal enter and exit animation.
1681 +
# Set it to 0 to disable animation completely. This can be changed at
1682 +
# runtime.
1683 +
quick-terminal-animation-duration = 0.2
1684 +
1685 +
# Automatically hide the quick terminal when focus shifts to another window.
1686 +
# Set it to false for the quick terminal to remain open even when it loses focus.
1687 +
quick-terminal-autohide = true
1688 +
1689 +
# Whether to enable shell integration auto-injection or not. Shell integration
1690 +
# greatly enhances the terminal experience by enabling a number of features:
1691 +
# 
1692 +
#   * Working directory reporting so new tabs, splits inherit the
1693 +
#     previous terminal's working directory.
1694 +
# 
1695 +
#   * Prompt marking that enables the "jump_to_prompt" keybinding.
1696 +
# 
1697 +
#   * If you're sitting at a prompt, closing a terminal will not ask
1698 +
#     for confirmation.
1699 +
# 
1700 +
#   * Resizing the window with a complex prompt usually paints much
1701 +
#     better.
1702 +
# 
1703 +
# Allowable values are:
1704 +
# 
1705 +
#   * `none` - Do not do any automatic injection. You can still manually
1706 +
#     configure your shell to enable the integration.
1707 +
# 
1708 +
#   * `detect` - Detect the shell based on the filename.
1709 +
# 
1710 +
#   * `bash`, `elvish`, `fish`, `zsh` - Use this specific shell injection scheme.
1711 +
# 
1712 +
# The default value is `detect`.
1713 +
shell-integration = detect
1714 +
1715 +
# Shell integration features to enable if shell integration itself is enabled.
1716 +
# The format of this is a list of features to enable separated by commas. If
1717 +
# you prefix a feature with `no-` then it is disabled. If you omit a feature,
1718 +
# its default value is used, so you must explicitly disable features you don't
1719 +
# want. You can also use `true` or `false` to turn all features on or off.
1720 +
# 
1721 +
# Available features:
1722 +
# 
1723 +
#   * `cursor` - Set the cursor to a blinking bar at the prompt.
1724 +
# 
1725 +
#   * `sudo` - Set sudo wrapper to preserve terminfo.
1726 +
# 
1727 +
#   * `title` - Set the window title via shell integration.
1728 +
# 
1729 +
# Example: `cursor`, `no-cursor`, `sudo`, `no-sudo`, `title`, `no-title`
1730 +
shell-integration-features = cursor,no-sudo,title
1731 +
1732 +
# Sets the reporting format for OSC sequences that request color information.
1733 +
# Ghostty currently supports OSC 10 (foreground), OSC 11 (background), and
1734 +
# OSC 4 (256 color palette) queries, and by default the reported values
1735 +
# are scaled-up RGB values, where each component are 16 bits. This is how
1736 +
# most terminals report these values. However, some legacy applications may
1737 +
# require 8-bit, unscaled, components. We also support turning off reporting
1738 +
# altogether. The components are lowercase hex values.
1739 +
# 
1740 +
# Allowable values are:
1741 +
# 
1742 +
#   * `none` - OSC 4/10/11 queries receive no reply
1743 +
# 
1744 +
#   * `8-bit` - Color components are return unscaled, i.e. `rr/gg/bb`
1745 +
# 
1746 +
#   * `16-bit` - Color components are returned scaled, e.g. `rrrr/gggg/bbbb`
1747 +
# 
1748 +
# The default value is `16-bit`.
1749 +
osc-color-report-format = 16-bit
1750 +
1751 +
# If true, allows the "KAM" mode (ANSI mode 2) to be used within
1752 +
# the terminal. KAM disables keyboard input at the request of the
1753 +
# application. This is not a common feature and is not recommended
1754 +
# to be enabled. This will not be documented further because
1755 +
# if you know you need KAM, you know. If you don't know if you
1756 +
# need KAM, you don't need it.
1757 +
vt-kam-allowed = false
1758 +
1759 +
# Custom shaders to run after the default shaders. This is a file path
1760 +
# to a GLSL-syntax shader for all platforms.
1761 +
# 
1762 +
# Warning: Invalid shaders can cause Ghostty to become unusable such as by
1763 +
# causing the window to be completely black. If this happens, you can
1764 +
# unset this configuration to disable the shader.
1765 +
# 
1766 +
# On Linux, this requires OpenGL 4.2. Ghostty typically only requires
1767 +
# OpenGL 3.3, but custom shaders push that requirement up to 4.2.
1768 +
# 
1769 +
# The shader API is identical to the Shadertoy API: you specify a `mainImage`
1770 +
# function and the available uniforms match Shadertoy. The iChannel0 uniform
1771 +
# is a texture containing the rendered terminal screen.
1772 +
# 
1773 +
# If the shader fails to compile, the shader will be ignored. Any errors
1774 +
# related to shader compilation will not show up as configuration errors
1775 +
# and only show up in the log, since shader compilation happens after
1776 +
# configuration loading on the dedicated render thread.  For interactive
1777 +
# development, use [shadertoy.com](https://shadertoy.com).
1778 +
# 
1779 +
# This can be repeated multiple times to load multiple shaders. The shaders
1780 +
# will be run in the order they are specified.
1781 +
# 
1782 +
# Changing this value at runtime and reloading the configuration will only
1783 +
# affect new windows, tabs, and splits.
1784 +
custom-shader = 
1785 +
1786 +
# If `true` (default), the focused terminal surface will run an animation
1787 +
# loop when custom shaders are used. This uses slightly more CPU (generally
1788 +
# less than 10%) but allows the shader to animate. This only runs if there
1789 +
# are custom shaders and the terminal is focused.
1790 +
# 
1791 +
# If this is set to `false`, the terminal and custom shader will only render
1792 +
# when the terminal is updated. This is more efficient but the shader will
1793 +
# not animate.
1794 +
# 
1795 +
# This can also be set to `always`, which will always run the animation
1796 +
# loop regardless of whether the terminal is focused or not. The animation
1797 +
# loop will still only run when custom shaders are used. Note that this
1798 +
# will use more CPU per terminal surface and can become quite expensive
1799 +
# depending on the shader and your terminal usage.
1800 +
# 
1801 +
# This value can be changed at runtime and will affect all currently
1802 +
# open terminals.
1803 +
custom-shader-animation = true
1804 +
1805 +
# If anything other than false, fullscreen mode on macOS will not use the
1806 +
# native fullscreen, but make the window fullscreen without animations and
1807 +
# using a new space. It's faster than the native fullscreen mode since it
1808 +
# doesn't use animations.
1809 +
# 
1810 +
# Important: tabs DO NOT WORK in this mode. Non-native fullscreen removes
1811 +
# the titlebar and macOS native tabs require the titlebar. If you use tabs,
1812 +
# you should not use this mode.
1813 +
# 
1814 +
# If you fullscreen a window with tabs, the currently focused tab will
1815 +
# become fullscreen while the others will remain in a separate window in
1816 +
# the background. You can switch to that window using normal window-switching
1817 +
# keybindings such as command+tilde. When you exit fullscreen, the window
1818 +
# will return to the tabbed state it was in before.
1819 +
# 
1820 +
# Allowable values are:
1821 +
# 
1822 +
#   * `visible-menu` - Use non-native macOS fullscreen, keep the menu bar visible
1823 +
#   * `true` - Use non-native macOS fullscreen, hide the menu bar
1824 +
#   * `false` - Use native macOS fullscreen
1825 +
# 
1826 +
# Changing this option at runtime works, but will only apply to the next
1827 +
# time the window is made fullscreen. If a window is already fullscreen,
1828 +
# it will retain the previous setting until fullscreen is exited.
1829 +
macos-non-native-fullscreen = false
1830 +
1831 +
# The style of the macOS titlebar. Available values are: "native",
1832 +
# "transparent", "tabs", and "hidden".
1833 +
# 
1834 +
# The "native" style uses the native macOS titlebar with zero customization.
1835 +
# The titlebar will match your window theme (see `window-theme`).
1836 +
# 
1837 +
# The "transparent" style is the same as "native" but the titlebar will
1838 +
# be transparent and allow your window background color to come through.
1839 +
# This makes a more seamless window appearance but looks a little less
1840 +
# typical for a macOS application and may not work well with all themes.
1841 +
# 
1842 +
# The "transparent" style will also update in real-time to dynamic
1843 +
# changes to the window background color, i.e. via OSC 11. To make this
1844 +
# more aesthetically pleasing, this only happens if the terminal is
1845 +
# a window, tab, or split that borders the top of the window. This
1846 +
# avoids a disjointed appearance where the titlebar color changes
1847 +
# but all the topmost terminals don't match.
1848 +
# 
1849 +
# The "tabs" style is a completely custom titlebar that integrates the
1850 +
# tab bar into the titlebar. This titlebar always matches the background
1851 +
# color of the terminal. There are some limitations to this style:
1852 +
# On macOS 13 and below, saved window state will not restore tabs correctly.
1853 +
# macOS 14 does not have this issue and any other macOS version has not
1854 +
# been tested.
1855 +
# 
1856 +
# The "hidden" style hides the titlebar. Unlike `window-decoration = false`,
1857 +
# however, it does not remove the frame from the window or cause it to have
1858 +
# squared corners. Changing to or from this option at run-time may affect
1859 +
# existing windows in buggy ways. The top titlebar area of the window will
1860 +
# continue to drag the window around and you will not be able to use
1861 +
# the mouse for terminal events in this space.
1862 +
# 
1863 +
# The default value is "transparent". This is an opinionated choice
1864 +
# but its one I think is the most aesthetically pleasing and works in
1865 +
# most cases.
1866 +
# 
1867 +
# Changing this option at runtime only applies to new windows.
1868 +
macos-titlebar-style = hidden
1869 +
1870 +
# Whether the proxy icon in the macOS titlebar is visible. The proxy icon
1871 +
# is the icon that represents the folder of the current working directory.
1872 +
# You can see this very clearly in the macOS built-in Terminal.app
1873 +
# titlebar.
1874 +
# 
1875 +
# The proxy icon is only visible with the native macOS titlebar style.
1876 +
# 
1877 +
# Valid values are:
1878 +
# 
1879 +
#   * `visible` - Show the proxy icon.
1880 +
#   * `hidden` - Hide the proxy icon.
1881 +
# 
1882 +
# The default value is `visible`.
1883 +
# 
1884 +
# This setting can be changed at runtime and will affect all currently
1885 +
# open windows but only after their working directory changes again.
1886 +
# Therefore, to make this work after changing the setting, you must
1887 +
# usually `cd` to a different directory, open a different file in an
1888 +
# editor, etc.
1889 +
macos-titlebar-proxy-icon = visible
1890 +
1891 +
# macOS doesn't have a distinct "alt" key and instead has the "option"
1892 +
# key which behaves slightly differently. On macOS by default, the
1893 +
# option key plus a character will sometimes produces a Unicode character.
1894 +
# For example, on US standard layouts option-b produces "∫". This may be
1895 +
# undesirable if you want to use "option" as an "alt" key for keybindings
1896 +
# in terminal programs or shells.
1897 +
# 
1898 +
# This configuration lets you change the behavior so that option is treated
1899 +
# as alt.
1900 +
# 
1901 +
# The default behavior (unset) will depend on your active keyboard
1902 +
# layout. If your keyboard layout is one of the keyboard layouts listed
1903 +
# below, then the default value is "true". Otherwise, the default
1904 +
# value is "false". Keyboard layouts with a default value of "true" are:
1905 +
# 
1906 +
#   - U.S. Standard
1907 +
#   - U.S. International
1908 +
# 
1909 +
# Note that if an *Option*-sequence doesn't produce a printable character, it
1910 +
# will be treated as *Alt* regardless of this setting. (i.e. `alt+ctrl+a`).
1911 +
# 
1912 +
# Explicit values that can be set:
1913 +
# 
1914 +
# If `true`, the *Option* key will be treated as *Alt*. This makes terminal
1915 +
# sequences expecting *Alt* to work properly, but will break Unicode input
1916 +
# sequences on macOS if you use them via the *Alt* key.
1917 +
# 
1918 +
# You may set this to `false` to restore the macOS *Alt* key unicode
1919 +
# sequences but this will break terminal sequences expecting *Alt* to work.
1920 +
# 
1921 +
# The values `left` or `right` enable this for the left or right *Option*
1922 +
# key, respectively.
1923 +
# 
1924 +
# This does not work with GLFW builds.
1925 +
macos-option-as-alt = 
1926 +
1927 +
# Whether to enable the macOS window shadow. The default value is true.
1928 +
# With some window managers and window transparency settings, you may
1929 +
# find false more visually appealing.
1930 +
macos-window-shadow = false
1931 +
1932 +
# If true, Ghostty on macOS will automatically enable the "Secure Input"
1933 +
# feature when it detects that a password prompt is being displayed.
1934 +
# 
1935 +
# "Secure Input" is a macOS security feature that prevents applications from
1936 +
# reading keyboard events. This can always be enabled manually using the
1937 +
# `Ghostty > Secure Keyboard Entry` menu item.
1938 +
# 
1939 +
# Note that automatic password prompt detection is based on heuristics
1940 +
# and may not always work as expected. Specifically, it does not work
1941 +
# over SSH connections, but there may be other cases where it also
1942 +
# doesn't work.
1943 +
# 
1944 +
# A reason to disable this feature is if you find that it is interfering
1945 +
# with legitimate accessibility software (or software that uses the
1946 +
# accessibility APIs), since secure input prevents any application from
1947 +
# reading keyboard events.
1948 +
macos-auto-secure-input = true
1949 +
1950 +
# If true, Ghostty will show a graphical indication when secure input is
1951 +
# enabled. This indication is generally recommended to know when secure input
1952 +
# is enabled.
1953 +
# 
1954 +
# Normally, secure input is only active when a password prompt is displayed
1955 +
# or it is manually (and typically temporarily) enabled. However, if you
1956 +
# always have secure input enabled, the indication can be distracting and
1957 +
# you may want to disable it.
1958 +
macos-secure-input-indication = true
1959 +
1960 +
# Customize the macOS app icon.
1961 +
# 
1962 +
# This only affects the icon that appears in the dock, application
1963 +
# switcher, etc. This does not affect the icon in Finder because
1964 +
# that is controlled by a hardcoded value in the signed application
1965 +
# bundle and can't be changed at runtime. For more details on what
1966 +
# exactly is affected, see the `NSApplication.icon` Apple documentation;
1967 +
# that is the API that is being used to set the icon.
1968 +
# 
1969 +
# Valid values:
1970 +
# 
1971 +
#  * `official` - Use the official Ghostty icon.
1972 +
#  * `custom-style` - Use the official Ghostty icon but with custom
1973 +
#    styles applied to various layers. The custom styles must be
1974 +
#    specified using the additional `macos-icon`-prefixed configurations.
1975 +
#    The `macos-icon-ghost-color` and `macos-icon-screen-color`
1976 +
#    configurations are required for this style.
1977 +
# 
1978 +
# WARNING: The `custom-style` option is _experimental_. We may change
1979 +
# the format of the custom styles in the future. We're still finalizing
1980 +
# the exact layers and customization options that will be available.
1981 +
# 
1982 +
# Other caveats:
1983 +
# 
1984 +
#   * The icon in the update dialog will always be the official icon.
1985 +
#     This is because the update dialog is managed through a
1986 +
#     separate framework and cannot be customized without significant
1987 +
#     effort.
1988 +
# 
1989 +
macos-icon = official
1990 +
1991 +
# The material to use for the frame of the macOS app icon.
1992 +
# 
1993 +
# Valid values:
1994 +
# 
1995 +
#  * `aluminum` - A brushed aluminum frame. This is the default.
1996 +
#  * `beige` - A classic 90's computer beige frame.
1997 +
#  * `plastic` - A glossy, dark plastic frame.
1998 +
#  * `chrome` - A shiny chrome frame.
1999 +
# 
2000 +
# This only has an effect when `macos-icon` is set to `custom-style`.
2001 +
macos-icon-frame = aluminum
2002 +
2003 +
# The color of the ghost in the macOS app icon.
2004 +
# 
2005 +
# The format of the color is the same as the `background` configuration;
2006 +
# see that for more information.
2007 +
# 
2008 +
# Note: This configuration is required when `macos-icon` is set to
2009 +
# `custom-style`.
2010 +
# 
2011 +
# This only has an effect when `macos-icon` is set to `custom-style`.
2012 +
macos-icon-ghost-color = 
2013 +
2014 +
# The color of the screen in the macOS app icon.
2015 +
# 
2016 +
# The screen is a gradient so you can specify multiple colors that
2017 +
# make up the gradient. Colors should be separated by commas. The
2018 +
# format of the color is the same as the `background` configuration;
2019 +
# see that for more information.
2020 +
# 
2021 +
# Note: This configuration is required when `macos-icon` is set to
2022 +
# `custom-style`.
2023 +
# 
2024 +
# This only has an effect when `macos-icon` is set to `custom-style`.
2025 +
macos-icon-screen-color = 
2026 +
2027 +
# Put every surface (tab, split, window) into a dedicated Linux cgroup.
2028 +
# 
2029 +
# This makes it so that resource management can be done on a per-surface
2030 +
# granularity. For example, if a shell program is using too much memory,
2031 +
# only that shell will be killed by the oom monitor instead of the entire
2032 +
# Ghostty process. Similarly, if a shell program is using too much CPU,
2033 +
# only that surface will be CPU-throttled.
2034 +
# 
2035 +
# This will cause startup times to be slower (a hundred milliseconds or so),
2036 +
# so the default value is "single-instance." In single-instance mode, only
2037 +
# one instance of Ghostty is running (see gtk-single-instance) so the startup
2038 +
# time is a one-time cost. Additionally, single instance Ghostty is much
2039 +
# more likely to have many windows, tabs, etc. so cgroup isolation is a
2040 +
# big benefit.
2041 +
# 
2042 +
# This feature requires systemd. If systemd is unavailable, cgroup
2043 +
# initialization will fail. By default, this will not prevent Ghostty
2044 +
# from working (see linux-cgroup-hard-fail).
2045 +
# 
2046 +
# Valid values are:
2047 +
# 
2048 +
#   * `never` - Never use cgroups.
2049 +
#   * `always` - Always use cgroups.
2050 +
#   * `single-instance` - Enable cgroups only for Ghostty instances launched
2051 +
#     as single-instance applications (see gtk-single-instance).
2052 +
# 
2053 +
linux-cgroup = single-instance
2054 +
2055 +
# Memory limit for any individual terminal process (tab, split, window,
2056 +
# etc.) in bytes. If this is unset then no memory limit will be set.
2057 +
# 
2058 +
# Note that this sets the "memory.high" configuration for the memory
2059 +
# controller, which is a soft limit. You should configure something like
2060 +
# systemd-oom to handle killing processes that have too much memory
2061 +
# pressure.
2062 +
linux-cgroup-memory-limit = 
2063 +
2064 +
# Number of processes limit for any individual terminal process (tab, split,
2065 +
# window, etc.). If this is unset then no limit will be set.
2066 +
# 
2067 +
# Note that this sets the "pids.max" configuration for the process number
2068 +
# controller, which is a hard limit.
2069 +
linux-cgroup-processes-limit = 
2070 +
2071 +
# If this is false, then any cgroup initialization (for linux-cgroup)
2072 +
# will be allowed to fail and the failure is ignored. This is useful if
2073 +
# you view cgroup isolation as a "nice to have" and not a critical resource
2074 +
# management feature, because Ghostty startup will not fail if cgroup APIs
2075 +
# fail.
2076 +
# 
2077 +
# If this is true, then any cgroup initialization failure will cause
2078 +
# Ghostty to exit or new surfaces to not be created.
2079 +
# 
2080 +
# Note: This currently only affects cgroup initialization. Subprocesses
2081 +
# must always be able to move themselves into an isolated cgroup.
2082 +
linux-cgroup-hard-fail = false
2083 +
2084 +
# If `true`, the Ghostty GTK application will run in single-instance mode:
2085 +
# each new `ghostty` process launched will result in a new window if there is
2086 +
# already a running process.
2087 +
# 
2088 +
# If `false`, each new ghostty process will launch a separate application.
2089 +
# 
2090 +
# The default value is `detect` which will default to `true` if Ghostty
2091 +
# detects that it was launched from the `.desktop` file such as an app
2092 +
# launcher (like Gnome Shell)  or by D-Bus activation. If Ghostty is launched
2093 +
# from the command line, it will default to `false`.
2094 +
# 
2095 +
# Note that debug builds of Ghostty have a separate single-instance ID
2096 +
# so you can test single instance without conflicting with release builds.
2097 +
gtk-single-instance = desktop
2098 +
2099 +
# When enabled, the full GTK titlebar is displayed instead of your window
2100 +
# manager's simple titlebar. The behavior of this option will vary with your
2101 +
# window manager.
2102 +
# 
2103 +
# This option does nothing when `window-decoration` is false or when running
2104 +
# under macOS.
2105 +
# 
2106 +
# Changing this value at runtime and reloading the configuration will only
2107 +
# affect new windows.
2108 +
gtk-titlebar = true
2109 +
2110 +
# Determines the side of the screen that the GTK tab bar will stick to.
2111 +
# Top, bottom, left, right, and hidden are supported. The default is top.
2112 +
# 
2113 +
# If this option has value `left` or `right` when using Adwaita, it falls
2114 +
# back to `top`. `hidden`, meaning that tabs don't exist, is not supported
2115 +
# without using Adwaita, falling back to `top`.
2116 +
# 
2117 +
# When `hidden` is set and Adwaita is enabled, a tab button displaying the
2118 +
# number of tabs will appear in the title bar. It has the ability to open a
2119 +
# tab overview for displaying tabs. Alternatively, you can use the
2120 +
# `toggle_tab_overview` action in a keybind if your window doesn't have a
2121 +
# title bar, or you can switch tabs with keybinds.
2122 +
gtk-tabs-location = top
2123 +
2124 +
# Determines the appearance of the top and bottom bars when using the
2125 +
# Adwaita tab bar. This requires `gtk-adwaita` to be enabled (it is
2126 +
# by default).
2127 +
# 
2128 +
# Valid values are:
2129 +
# 
2130 +
#  * `flat` - Top and bottom bars are flat with the terminal window.
2131 +
#  * `raised` - Top and bottom bars cast a shadow on the terminal area.
2132 +
#  * `raised-border` - Similar to `raised` but the shadow is replaced with a
2133 +
#    more subtle border.
2134 +
# 
2135 +
# Changing this value at runtime will only affect new windows.
2136 +
adw-toolbar-style = raised
2137 +
2138 +
# If `true` (default), then the Ghostty GTK tabs will be "wide." Wide tabs
2139 +
# are the new typical Gnome style where tabs fill their available space.
2140 +
# If you set this to `false` then tabs will only take up space they need,
2141 +
# which is the old style.
2142 +
gtk-wide-tabs = true
2143 +
2144 +
# If `true` (default), Ghostty will enable Adwaita theme support. This
2145 +
# will make `window-theme` work properly and will also allow Ghostty to
2146 +
# properly respond to system theme changes, light/dark mode changing, etc.
2147 +
# This requires a GTK4 desktop with a GTK4 theme.
2148 +
# 
2149 +
# If you are running GTK3 or have a GTK3 theme, you may have to set this
2150 +
# to false to get your theme picked up properly. Having this set to true
2151 +
# with GTK3 should not cause any problems, but it may not work exactly as
2152 +
# expected.
2153 +
# 
2154 +
# This configuration only has an effect if Ghostty was built with
2155 +
# Adwaita support.
2156 +
gtk-adwaita = true
2157 +
2158 +
# If `true` (default), applications running in the terminal can show desktop
2159 +
# notifications using certain escape sequences such as OSC 9 or OSC 777.
2160 +
desktop-notifications = true
2161 +
2162 +
# If `true`, the bold text will use the bright color palette.
2163 +
bold-is-bright = false
2164 +
2165 +
# This will be used to set the `TERM` environment variable.
2166 +
# HACK: We set this with an `xterm` prefix because vim uses that to enable key
2167 +
# protocols (specifically this will enable `modifyOtherKeys`), among other
2168 +
# features. An option exists in vim to modify this: `:set
2169 +
# keyprotocol=ghostty:kitty`, however a bug in the implementation prevents it
2170 +
# from working properly. https://github.com/vim/vim/pull/13211 fixes this.
2171 +
term = xterm-ghostty
2172 +
2173 +
# String to send when we receive `ENQ` (`0x05`) from the command that we are
2174 +
# running. Defaults to an empty string if not set.
2175 +
enquiry-response = 
2176 +
2177 +
# Control the auto-update functionality of Ghostty. This is only supported
2178 +
# on macOS currently, since Linux builds are distributed via package
2179 +
# managers that are not centrally controlled by Ghostty.
2180 +
# 
2181 +
# Checking or downloading an update does not send any information to
2182 +
# the project beyond standard network information mandated by the
2183 +
# underlying protocols. To put it another way: Ghostty doesn't explicitly
2184 +
# add any tracking to the update process. The update process works by
2185 +
# downloading information about the latest version and comparing it
2186 +
# client-side to the current version.
2187 +
# 
2188 +
# Valid values are:
2189 +
# 
2190 +
#  * `off` - Disable auto-updates.
2191 +
#  * `check` - Check for updates and notify the user if an update is
2192 +
#    available, but do not automatically download or install the update.
2193 +
#  * `download` - Check for updates, automatically download the update,
2194 +
#    notify the user, but do not automatically install the update.
2195 +
# 
2196 +
# The default value is `check`.
2197 +
# 
2198 +
# Changing this value at runtime works after a small delay.
2199 +
auto-update = check
2200 +
2201 +
# The release channel to use for auto-updates.
2202 +
# 
2203 +
# The default value of this matches the release channel of the currently
2204 +
# running Ghostty version. If you download a pre-release version of Ghostty
2205 +
# then this will be set to `tip` and you will receive pre-release updates.
2206 +
# If you download a stable version of Ghostty then this will be set to
2207 +
# `stable` and you will receive stable updates.
2208 +
# 
2209 +
# Valid values are:
2210 +
# 
2211 +
#  * `stable` - Stable, tagged releases such as "1.0.0".
2212 +
#  * `tip` - Pre-release versions generated from each commit to the
2213 +
#    main branch. This is the version that was in use during private
2214 +
#    beta testing by thousands of people. It is generally stable but
2215 +
#    will likely have more bugs than the stable channel.
2216 +
# 
2217 +
# Changing this configuration requires a full restart of
2218 +
# Ghostty to take effect.
2219 +
# 
2220 +
# This only works on macOS since only macOS has an auto-update feature.
2221 +
auto-update-channel = 
2222 +
lazygit/config.yml +0 −1
1 -
/Users/stevedylandev/.config/lazygit/config.yml
lazygit/state.yml +6 −1
1 -
/Users/stevedylandev/.config/lazygit/state.yml
1 +
lastupdatecheck: 0
2 +
recentrepos:
3 +
- /Users/stevedsimkins/Developer/steve-dylan-photo-nextjs
4 +
startuppopupversion: 5
5 +
customcommandshistory: []
6 +
hidecommandlog: false
nushell/black-metal-bathory.nu +134 −1
1 -
/Users/stevedylandev/.config/nushell/black-metal-bathory.nu
1 +
# Retrieve the theme settings
2 +
export def main [] {
3 +
    return {
4 +
        binary: '#999999'
5 +
        block: '#888888'
6 +
        cell-path: '#c1c1c1'
7 +
        closure: '#aaaaaa'
8 +
        custom: '#c1c1c1'
9 +
        duration: '#e78a53'
10 +
        float: '#5f8787'
11 +
        glob: '#c1c1c1'
12 +
        int: '#999999'
13 +
        list: '#aaaaaa'
14 +
        nothing: '#5f8787'
15 +
        range: '#e78a53'
16 +
        record: '#aaaaaa'
17 +
        string: '#fbcb97'
18 +
19 +
        bool: {|| if $in { '#aaaaaa' } else { '#e78a53' } }
20 +
21 +
        date: {|| (date now) - $in |
22 +
            if $in < 1hr {
23 +
                { fg: '#5f8787' attr: 'b' }
24 +
            } else if $in < 6hr {
25 +
                '#5f8787'
26 +
            } else if $in < 1day {
27 +
                '#e78a53'
28 +
            } else if $in < 3day {
29 +
                '#fbcb97'
30 +
            } else if $in < 1wk {
31 +
                { fg: '#fbcb97' attr: 'b' }
32 +
            } else if $in < 6wk {
33 +
                '#aaaaaa'
34 +
            } else if $in < 52wk {
35 +
                '#888888'
36 +
            } else { 'dark_gray' }
37 +
        }
38 +
39 +
        filesize: {|e|
40 +
            if $e == 0b {
41 +
                '#c1c1c1'
42 +
            } else if $e < 1mb {
43 +
                '#aaaaaa'
44 +
            } else {{ fg: '#888888' }}
45 +
        }
46 +
47 +
        shape_and: { fg: '#999999' attr: 'b' }
48 +
        shape_binary: { fg: '#999999' attr: 'b' }
49 +
        shape_block: { fg: '#888888' attr: 'b' }
50 +
        shape_bool: '#aaaaaa'
51 +
        shape_closure: { fg: '#aaaaaa' attr: 'b' }
52 +
        shape_custom: '#fbcb97'
53 +
        shape_datetime: { fg: '#aaaaaa' attr: 'b' }
54 +
        shape_directory: '#aaaaaa'
55 +
        shape_external: '#aaaaaa'
56 +
        shape_external_resolved: '#aaaaaa'
57 +
        shape_externalarg: { fg: '#fbcb97' attr: 'b' }
58 +
        shape_filepath: '#aaaaaa'
59 +
        shape_flag: { fg: '#888888' attr: 'b' }
60 +
        shape_float: { fg: '#5f8787' attr: 'b' }
61 +
        shape_garbage: { fg: '#FFFFFF' bg: '#FF0000' attr: 'b' }
62 +
        shape_glob_interpolation: { fg: '#aaaaaa' attr: 'b' }
63 +
        shape_globpattern: { fg: '#aaaaaa' attr: 'b' }
64 +
        shape_int: { fg: '#999999' attr: 'b' }
65 +
        shape_internalcall: { fg: '#aaaaaa' attr: 'b' }
66 +
        shape_keyword: { fg: '#999999' attr: 'b' }
67 +
        shape_list: { fg: '#aaaaaa' attr: 'b' }
68 +
        shape_literal: '#888888'
69 +
        shape_match_pattern: '#fbcb97'
70 +
        shape_matching_brackets: { attr: 'u' }
71 +
        shape_nothing: '#5f8787'
72 +
        shape_operator: '#e78a53'
73 +
        shape_or: { fg: '#999999' attr: 'b' }
74 +
        shape_pipe: { fg: '#999999' attr: 'b' }
75 +
        shape_range: { fg: '#e78a53' attr: 'b' }
76 +
        shape_raw_string: { fg: '#c1c1c1' attr: 'b' }
77 +
        shape_record: { fg: '#aaaaaa' attr: 'b' }
78 +
        shape_redirection: { fg: '#999999' attr: 'b' }
79 +
        shape_signature: { fg: '#fbcb97' attr: 'b' }
80 +
        shape_string: '#fbcb97'
81 +
        shape_string_interpolation: { fg: '#aaaaaa' attr: 'b' }
82 +
        shape_table: { fg: '#888888' attr: 'b' }
83 +
        shape_vardecl: { fg: '#888888' attr: 'u' }
84 +
        shape_variable: '#999999'
85 +
86 +
        foreground: '#c1c1c1'
87 +
        background: '#000000'
88 +
        cursor: '#c1c1c1'
89 +
90 +
        empty: '#888888'
91 +
        header: { fg: '#fbcb97' attr: 'b' }
92 +
        hints: '#333333'
93 +
        leading_trailing_space_bg: { attr: 'n' }
94 +
        row_index: { fg: '#fbcb97' attr: 'b' }
95 +
        search_result: { fg: '#5f8787' bg: '#c1c1c1' }
96 +
        separator: '#c1c1c1'
97 +
    }
98 +
}
99 +
100 +
# Update the Nushell configuration
101 +
export def --env "set color_config" [] {
102 +
    $env.config.color_config = (main)
103 +
}
104 +
105 +
# Update terminal colors
106 +
export def "update terminal" [] {
107 +
    let theme = (main)
108 +
109 +
    # Set terminal colors
110 +
    let osc_screen_foreground_color = '10;'
111 +
    let osc_screen_background_color = '11;'
112 +
    let osc_cursor_color = '12;'
113 +
        
114 +
    $"
115 +
    (ansi -o $osc_screen_foreground_color)($theme.foreground)(char bel)
116 +
    (ansi -o $osc_screen_background_color)($theme.background)(char bel)
117 +
    (ansi -o $osc_cursor_color)($theme.cursor)(char bel)
118 +
    "
119 +
    # Line breaks above are just for source readability
120 +
    # but create extra whitespace when activating. Collapse
121 +
    # to one line and print with no-newline
122 +
    | str replace --all "\n" ''
123 +
    | print -n $"($in)\r"
124 +
}
125 +
126 +
export module activate {
127 +
    export-env {
128 +
        set color_config
129 +
        update terminal
130 +
    }
131 +
}
132 +
133 +
# Activate the theme when sourced
134 +
use activate
nushell/config.nu +934 −1
1 -
/Users/stevedylandev/.config/nushell/config.nu
1 +
# Nushell Config File
2 +
#
3 +
# version = "0.99.1"
4 +
5 +
# For more information on defining custom themes, see
6 +
# https://www.nushell.sh/book/coloring_and_theming.html
7 +
# And here is the theme collection
8 +
# https://github.com/nushell/nu_scripts/tree/main/themes
9 +
let dark_theme = {
10 +
    # color for nushell primitives
11 +
    separator: white
12 +
    leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
13 +
    header: green_bold
14 +
    empty: blue
15 +
    # Closures can be used to choose colors for specific values.
16 +
    # The value (in this case, a bool) is piped into the closure.
17 +
    # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
18 +
    bool: light_cyan
19 +
    int: white
20 +
    filesize: cyan
21 +
    duration: white
22 +
    date: purple
23 +
    range: white
24 +
    float: white
25 +
    string: white
26 +
    nothing: white
27 +
    binary: white
28 +
    cell-path: white
29 +
    row_index: green_bold
30 +
    record: white
31 +
    list: white
32 +
    block: white
33 +
    hints: dark_gray
34 +
    search_result: { bg: red fg: white }
35 +
    shape_and: purple_bold
36 +
    shape_binary: purple_bold
37 +
    shape_block: blue_bold
38 +
    shape_bool: light_cyan
39 +
    shape_closure: green_bold
40 +
    shape_custom: green
41 +
    shape_datetime: cyan_bold
42 +
    shape_directory: cyan
43 +
    shape_external: cyan
44 +
    shape_externalarg: green_bold
45 +
    shape_external_resolved: light_yellow_bold
46 +
    shape_filepath: cyan
47 +
    shape_flag: blue_bold
48 +
    shape_float: purple_bold
49 +
    # shapes are used to change the cli syntax highlighting
50 +
    shape_garbage: { fg: white bg: red attr: b }
51 +
    shape_glob_interpolation: cyan_bold
52 +
    shape_globpattern: cyan_bold
53 +
    shape_int: purple_bold
54 +
    shape_internalcall: cyan_bold
55 +
    shape_keyword: cyan_bold
56 +
    shape_list: cyan_bold
57 +
    shape_literal: blue
58 +
    shape_match_pattern: green
59 +
    shape_matching_brackets: { attr: u }
60 +
    shape_nothing: light_cyan
61 +
    shape_operator: yellow
62 +
    shape_or: purple_bold
63 +
    shape_pipe: purple_bold
64 +
    shape_range: yellow_bold
65 +
    shape_record: cyan_bold
66 +
    shape_redirection: purple_bold
67 +
    shape_signature: green_bold
68 +
    shape_string: green
69 +
    shape_string_interpolation: cyan_bold
70 +
    shape_table: blue_bold
71 +
    shape_variable: purple
72 +
    shape_vardecl: purple
73 +
    shape_raw_string: light_purple
74 +
}
75 +
76 +
let light_theme = {
77 +
    # color for nushell primitives
78 +
    separator: dark_gray
79 +
    leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
80 +
    header: green_bold
81 +
    empty: blue
82 +
    # Closures can be used to choose colors for specific values.
83 +
    # The value (in this case, a bool) is piped into the closure.
84 +
    # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
85 +
    bool: dark_cyan
86 +
    int: dark_gray
87 +
    filesize: cyan_bold
88 +
    duration: dark_gray
89 +
    date: purple
90 +
    range: dark_gray
91 +
    float: dark_gray
92 +
    string: dark_gray
93 +
    nothing: dark_gray
94 +
    binary: dark_gray
95 +
    cell-path: dark_gray
96 +
    row_index: green_bold
97 +
    record: dark_gray
98 +
    list: dark_gray
99 +
    block: dark_gray
100 +
    hints: dark_gray
101 +
    search_result: { fg: white bg: red }
102 +
    shape_and: purple_bold
103 +
    shape_binary: purple_bold
104 +
    shape_block: blue_bold
105 +
    shape_bool: light_cyan
106 +
    shape_closure: green_bold
107 +
    shape_custom: green
108 +
    shape_datetime: cyan_bold
109 +
    shape_directory: cyan
110 +
    shape_external: cyan
111 +
    shape_externalarg: green_bold
112 +
    shape_external_resolved: light_purple_bold
113 +
    shape_filepath: cyan
114 +
    shape_flag: blue_bold
115 +
    shape_float: purple_bold
116 +
    # shapes are used to change the cli syntax highlighting
117 +
    shape_garbage: { fg: white bg: red attr: b }
118 +
    shape_glob_interpolation: cyan_bold
119 +
    shape_globpattern: cyan_bold
120 +
    shape_int: purple_bold
121 +
    shape_internalcall: cyan_bold
122 +
    shape_keyword: cyan_bold
123 +
    shape_list: cyan_bold
124 +
    shape_literal: blue
125 +
    shape_match_pattern: green
126 +
    shape_matching_brackets: { attr: u }
127 +
    shape_nothing: light_cyan
128 +
    shape_operator: yellow
129 +
    shape_or: purple_bold
130 +
    shape_pipe: purple_bold
131 +
    shape_range: yellow_bold
132 +
    shape_record: cyan_bold
133 +
    shape_redirection: purple_bold
134 +
    shape_signature: green_bold
135 +
    shape_string: green
136 +
    shape_string_interpolation: cyan_bold
137 +
    shape_table: blue_bold
138 +
    shape_variable: purple
139 +
    shape_vardecl: purple
140 +
    shape_raw_string: light_purple
141 +
}
142 +
143 +
# External completer example
144 +
# let carapace_completer = {|spans|
145 +
#     carapace $spans.0 nushell ...$spans | from json
146 +
# }
147 +
148 +
# The default config record. This is where much of your global configuration is setup.
149 +
$env.config = {
150 +
    show_banner: false # true or false to enable or disable the welcome banner at startup
151 +
152 +
    ls: {
153 +
        use_ls_colors: false # use the LS_COLORS environment variable to colorize output
154 +
        clickable_links: true # enable or disable clickable links. Your terminal has to support links.
155 +
    }
156 +
157 +
    rm: {
158 +
        always_trash: true # always act as if -t was given. Can be overridden with -p
159 +
    }
160 +
161 +
    table: {
162 +
        mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
163 +
        index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
164 +
        show_empty: true # show 'empty list' and 'empty record' placeholders for command output
165 +
        padding: { left: 1, right: 1 } # a left right padding of each column in a table
166 +
        trim: {
167 +
            methodology: wrapping # wrapping or truncating
168 +
            wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
169 +
            truncating_suffix: "..." # A suffix used by the 'truncating' methodology
170 +
        }
171 +
        header_on_separator: false # show header text on separator/border line
172 +
        # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point
173 +
    }
174 +
175 +
    error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages
176 +
177 +
    # Whether an error message should be printed if an error of a certain kind is triggered.
178 +
    display_errors: {
179 +
        exit_code: false # assume the external command prints an error message
180 +
        # Core dump errors are always printed, and SIGPIPE never triggers an error.
181 +
        # The setting below controls message printing for termination by all other signals.
182 +
        termination_signal: true
183 +
    }
184 +
185 +
    # datetime_format determines what a datetime rendered in the shell would look like.
186 +
    # Behavior without this configuration point will be to "humanize" the datetime display,
187 +
    # showing something like "a day ago."
188 +
    datetime_format: {
189 +
        # normal: '%a, %d %b %Y %H:%M:%S %z'    # shows up in displays of variables or other datetime's outside of tables
190 +
        # table: '%m/%d/%y %I:%M:%S%p'          # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format
191 +
    }
192 +
193 +
    explore: {
194 +
        status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" },
195 +
        command_bar_text: { fg: "#C4C9C6" },
196 +
        highlight: { fg: "black", bg: "yellow" },
197 +
        status: {
198 +
            error: { fg: "white", bg: "red" },
199 +
            warn: {}
200 +
            info: {}
201 +
        },
202 +
        selected_cell: { bg: light_blue },
203 +
    }
204 +
205 +
    history: {
206 +
        max_size: 100_000 # Session has to be reloaded for this to take effect
207 +
        sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
208 +
        file_format: "plaintext" # "sqlite" or "plaintext"
209 +
        isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions.
210 +
    }
211 +
212 +
    completions: {
213 +
        case_sensitive: false # set to true to enable case-sensitive completions
214 +
        quick: true    # set this to false to prevent auto-selecting completions when only one remains
215 +
        partial: true    # set this to false to prevent partial filling of the prompt
216 +
        algorithm: "prefix"    # prefix or fuzzy
217 +
        sort: "smart" # "smart" (alphabetical for prefix matching, fuzzy score for fuzzy matching) or "alphabetical"
218 +
        external: {
219 +
            enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
220 +
            max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
221 +
            completer: null # check 'carapace_completer' above as an example
222 +
        }
223 +
        use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS
224 +
    }
225 +
226 +
227 +
    cursor_shape: {
228 +
        emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default)
229 +
        vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
230 +
        vi_normal: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default)
231 +
    }
232 +
233 +
    color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record
234 +
    footer_mode: 25 # always, never, number_of_rows, auto
235 +
    float_precision: 2 # the precision for displaying floats in tables
236 +
    buffer_editor: null # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
237 +
    use_ansi_coloring: true
238 +
    bracketed_paste: true # enable bracketed paste, currently useless on windows
239 +
    edit_mode: vi # emacs, vi
240 +
    shell_integration: {
241 +
        # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
242 +
        osc2: true
243 +
        # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
244 +
        osc7: true
245 +
        # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
246 +
        osc8: true
247 +
        # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
248 +
        osc9_9: false
249 +
        # osc133 is several escapes invented by Final Term which include the supported ones below.
250 +
        # 133;A - Mark prompt start
251 +
        # 133;B - Mark prompt end
252 +
        # 133;C - Mark pre-execution
253 +
        # 133;D;exit - Mark execution finished with exit code
254 +
        # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
255 +
        osc133: true
256 +
        # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
257 +
        # 633;A - Mark prompt start
258 +
        # 633;B - Mark prompt end
259 +
        # 633;C - Mark pre-execution
260 +
        # 633;D;exit - Mark execution finished with exit code
261 +
        # 633;E - Explicitly set the command line with an optional nonce
262 +
        # 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
263 +
        # and also helps with the run recent menu in vscode
264 +
        osc633: true
265 +
        # reset_application_mode is escape \x1b[?1l and was added to help ssh work better
266 +
        reset_application_mode: true
267 +
    }
268 +
    render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
269 +
    use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this.
270 +
    highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which.
271 +
    recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it
272 +
273 +
    plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration.
274 +
275 +
    plugin_gc: {
276 +
        # Configuration for plugin garbage collection
277 +
        default: {
278 +
            enabled: true # true to enable stopping of inactive plugins
279 +
            stop_after: 10sec # how long to wait after a plugin is inactive to stop it
280 +
        }
281 +
        plugins: {
282 +
            # alternate configuration for specific plugins, by name, for example:
283 +
            #
284 +
            # gstat: {
285 +
            #     enabled: false
286 +
            # }
287 +
        }
288 +
    }
289 +
290 +
    hooks: {
291 +
        pre_prompt: [{ null }] # run before the prompt is shown
292 +
        pre_execution: [{ null }] # run before the repl input is run
293 +
        env_change: {
294 +
            PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
295 +
        }
296 +
        display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
297 +
        command_not_found: { null } # return an error message when a command is not found
298 +
    }
299 +
300 +
    menus: [
301 +
        # Configuration for default nushell menus
302 +
        # Note the lack of source parameter
303 +
        {
304 +
            name: completion_menu
305 +
            only_buffer_difference: false
306 +
            marker: "| "
307 +
            type: {
308 +
                layout: columnar
309 +
                columns: 4
310 +
                col_width: 20     # Optional value. If missing all the screen width is used to calculate column width
311 +
                col_padding: 2
312 +
            }
313 +
            style: {
314 +
                text: green
315 +
                selected_text: { attr: r }
316 +
                description_text: yellow
317 +
                match_text: { attr: u }
318 +
                selected_match_text: { attr: ur }
319 +
            }
320 +
        }
321 +
        {
322 +
            name: ide_completion_menu
323 +
            only_buffer_difference: false
324 +
            marker: "| "
325 +
            type: {
326 +
                layout: ide
327 +
                min_completion_width: 0,
328 +
                max_completion_width: 50,
329 +
                max_completion_height: 10, # will be limited by the available lines in the terminal
330 +
                padding: 0,
331 +
                border: true,
332 +
                cursor_offset: 0,
333 +
                description_mode: "prefer_right"
334 +
                min_description_width: 0
335 +
                max_description_width: 50
336 +
                max_description_height: 10
337 +
                description_offset: 1
338 +
                # If true, the cursor pos will be corrected, so the suggestions match up with the typed text
339 +
                #
340 +
                # C:\> str
341 +
                #      str join
342 +
                #      str trim
343 +
                #      str split
344 +
                correct_cursor_pos: false
345 +
            }
346 +
            style: {
347 +
                text: green
348 +
                selected_text: { attr: r }
349 +
                description_text: yellow
350 +
                match_text: { attr: u }
351 +
                selected_match_text: { attr: ur }
352 +
            }
353 +
        }
354 +
        {
355 +
            name: history_menu
356 +
            only_buffer_difference: true
357 +
            marker: "? "
358 +
            type: {
359 +
                layout: list
360 +
                page_size: 10
361 +
            }
362 +
            style: {
363 +
                text: green
364 +
                selected_text: green_reverse
365 +
                description_text: yellow
366 +
            }
367 +
        }
368 +
        {
369 +
            name: help_menu
370 +
            only_buffer_difference: true
371 +
            marker: "? "
372 +
            type: {
373 +
                layout: description
374 +
                columns: 4
375 +
                col_width: 20     # Optional value. If missing all the screen width is used to calculate column width
376 +
                col_padding: 2
377 +
                selection_rows: 4
378 +
                description_rows: 10
379 +
            }
380 +
            style: {
381 +
                text: green
382 +
                selected_text: green_reverse
383 +
                description_text: yellow
384 +
            }
385 +
        }
386 +
    ]
387 +
388 +
    keybindings: [
389 +
        {
390 +
            name: completion_menu
391 +
            modifier: none
392 +
            keycode: tab
393 +
            mode: [emacs vi_normal vi_insert]
394 +
            event: {
395 +
                until: [
396 +
                    { send: menu name: completion_menu }
397 +
                    { send: menunext }
398 +
                    { edit: complete }
399 +
                ]
400 +
            }
401 +
        }
402 +
        {
403 +
            name: completion_previous_menu
404 +
            modifier: shift
405 +
            keycode: backtab
406 +
            mode: [emacs, vi_normal, vi_insert]
407 +
            event: { send: menuprevious }
408 +
        }
409 +
        {
410 +
            name: ide_completion_menu
411 +
            modifier: control
412 +
            keycode: space
413 +
            mode: [emacs vi_normal vi_insert]
414 +
            event: {
415 +
                until: [
416 +
                    { send: menu name: ide_completion_menu }
417 +
                    { send: menunext }
418 +
                    { edit: complete }
419 +
                ]
420 +
            }
421 +
        }
422 +
        {
423 +
            name: history_menu
424 +
            modifier: control
425 +
            keycode: char_r
426 +
            mode: [emacs, vi_insert, vi_normal]
427 +
            event: { send: menu name: history_menu }
428 +
        }
429 +
        {
430 +
            name: help_menu
431 +
            modifier: none
432 +
            keycode: f1
433 +
            mode: [emacs, vi_insert, vi_normal]
434 +
            event: { send: menu name: help_menu }
435 +
        }
436 +
        {
437 +
            name: next_page_menu
438 +
            modifier: control
439 +
            keycode: char_x
440 +
            mode: emacs
441 +
            event: { send: menupagenext }
442 +
        }
443 +
        {
444 +
            name: undo_or_previous_page_menu
445 +
            modifier: control
446 +
            keycode: char_z
447 +
            mode: emacs
448 +
            event: {
449 +
                until: [
450 +
                    { send: menupageprevious }
451 +
                    { edit: undo }
452 +
                ]
453 +
            }
454 +
        }
455 +
        {
456 +
            name: escape
457 +
            modifier: none
458 +
            keycode: escape
459 +
            mode: [emacs, vi_normal, vi_insert]
460 +
            event: { send: esc }    # NOTE: does not appear to work
461 +
        }
462 +
        {
463 +
            name: cancel_command
464 +
            modifier: control
465 +
            keycode: char_c
466 +
            mode: [emacs, vi_normal, vi_insert]
467 +
            event: { send: ctrlc }
468 +
        }
469 +
        {
470 +
            name: quit_shell
471 +
            modifier: control
472 +
            keycode: char_d
473 +
            mode: [emacs, vi_normal, vi_insert]
474 +
            event: { send: ctrld }
475 +
        }
476 +
        {
477 +
            name: clear_screen
478 +
            modifier: control
479 +
            keycode: char_l
480 +
            mode: [emacs, vi_normal, vi_insert]
481 +
            event: { send: clearscreen }
482 +
        }
483 +
        {
484 +
            name: search_history
485 +
            modifier: control
486 +
            keycode: char_q
487 +
            mode: [emacs, vi_normal, vi_insert]
488 +
            event: { send: searchhistory }
489 +
        }
490 +
        {
491 +
            name: open_command_editor
492 +
            modifier: control
493 +
            keycode: char_o
494 +
            mode: [emacs, vi_normal, vi_insert]
495 +
            event: { send: openeditor }
496 +
        }
497 +
        {
498 +
            name: move_up
499 +
            modifier: none
500 +
            keycode: up
501 +
            mode: [emacs, vi_normal, vi_insert]
502 +
            event: {
503 +
                until: [
504 +
                    { send: menuup }
505 +
                    { send: up }
506 +
                ]
507 +
            }
508 +
        }
509 +
        {
510 +
            name: move_down
511 +
            modifier: none
512 +
            keycode: down
513 +
            mode: [emacs, vi_normal, vi_insert]
514 +
            event: {
515 +
                until: [
516 +
                    { send: menudown }
517 +
                    { send: down }
518 +
                ]
519 +
            }
520 +
        }
521 +
        {
522 +
            name: move_left
523 +
            modifier: none
524 +
            keycode: left
525 +
            mode: [emacs, vi_normal, vi_insert]
526 +
            event: {
527 +
                until: [
528 +
                    { send: menuleft }
529 +
                    { send: left }
530 +
                ]
531 +
            }
532 +
        }
533 +
        {
534 +
            name: move_right_or_take_history_hint
535 +
            modifier: none
536 +
            keycode: right
537 +
            mode: [emacs, vi_normal, vi_insert]
538 +
            event: {
539 +
                until: [
540 +
                    { send: historyhintcomplete }
541 +
                    { send: menuright }
542 +
                    { send: right }
543 +
                ]
544 +
            }
545 +
        }
546 +
        {
547 +
            name: move_one_word_left
548 +
            modifier: control
549 +
            keycode: left
550 +
            mode: [emacs, vi_normal, vi_insert]
551 +
            event: { edit: movewordleft }
552 +
        }
553 +
        {
554 +
            name: move_one_word_right_or_take_history_hint
555 +
            modifier: control
556 +
            keycode: right
557 +
            mode: [emacs, vi_normal, vi_insert]
558 +
            event: {
559 +
                until: [
560 +
                    { send: historyhintwordcomplete }
561 +
                    { edit: movewordright }
562 +
                ]
563 +
            }
564 +
        }
565 +
        {
566 +
            name: move_to_line_start
567 +
            modifier: none
568 +
            keycode: home
569 +
            mode: [emacs, vi_normal, vi_insert]
570 +
            event: { edit: movetolinestart }
571 +
        }
572 +
        {
573 +
            name: move_to_line_start
574 +
            modifier: control
575 +
            keycode: char_a
576 +
            mode: [emacs, vi_normal, vi_insert]
577 +
            event: { edit: movetolinestart }
578 +
        }
579 +
        {
580 +
            name: move_to_line_end_or_take_history_hint
581 +
            modifier: none
582 +
            keycode: end
583 +
            mode: [emacs, vi_normal, vi_insert]
584 +
            event: {
585 +
                until: [
586 +
                    { send: historyhintcomplete }
587 +
                    { edit: movetolineend }
588 +
                ]
589 +
            }
590 +
        }
591 +
        {
592 +
            name: move_to_line_end_or_take_history_hint
593 +
            modifier: control
594 +
            keycode: char_e
595 +
            mode: [emacs, vi_normal, vi_insert]
596 +
            event: {
597 +
                until: [
598 +
                    { send: historyhintcomplete }
599 +
                    { edit: movetolineend }
600 +
                ]
601 +
            }
602 +
        }
603 +
        {
604 +
            name: move_to_line_start
605 +
            modifier: control
606 +
            keycode: home
607 +
            mode: [emacs, vi_normal, vi_insert]
608 +
            event: { edit: movetolinestart }
609 +
        }
610 +
        {
611 +
            name: move_to_line_end
612 +
            modifier: control
613 +
            keycode: end
614 +
            mode: [emacs, vi_normal, vi_insert]
615 +
            event: { edit: movetolineend }
616 +
        }
617 +
        {
618 +
            name: move_down
619 +
            modifier: control
620 +
            keycode: char_n
621 +
            mode: [emacs, vi_normal, vi_insert]
622 +
            event: {
623 +
                until: [
624 +
                    { send: menudown }
625 +
                    { send: down }
626 +
                ]
627 +
            }
628 +
        }
629 +
        {
630 +
            name: move_up
631 +
            modifier: control
632 +
            keycode: char_p
633 +
            mode: [emacs, vi_normal, vi_insert]
634 +
            event: {
635 +
                until: [
636 +
                    { send: menuup }
637 +
                    { send: up }
638 +
                ]
639 +
            }
640 +
        }
641 +
        {
642 +
            name: delete_one_character_backward
643 +
            modifier: none
644 +
            keycode: backspace
645 +
            mode: [emacs, vi_insert]
646 +
            event: { edit: backspace }
647 +
        }
648 +
        {
649 +
            name: delete_one_word_backward
650 +
            modifier: control
651 +
            keycode: backspace
652 +
            mode: [emacs, vi_insert]
653 +
            event: { edit: backspaceword }
654 +
        }
655 +
        {
656 +
            name: delete_one_character_forward
657 +
            modifier: none
658 +
            keycode: delete
659 +
            mode: [emacs, vi_insert]
660 +
            event: { edit: delete }
661 +
        }
662 +
        {
663 +
            name: delete_one_character_forward
664 +
            modifier: control
665 +
            keycode: delete
666 +
            mode: [emacs, vi_insert]
667 +
            event: { edit: delete }
668 +
        }
669 +
        {
670 +
            name: delete_one_character_backward
671 +
            modifier: control
672 +
            keycode: char_h
673 +
            mode: [emacs, vi_insert]
674 +
            event: { edit: backspace }
675 +
        }
676 +
        {
677 +
            name: delete_one_word_backward
678 +
            modifier: control
679 +
            keycode: char_w
680 +
            mode: [emacs, vi_insert]
681 +
            event: { edit: backspaceword }
682 +
        }
683 +
        {
684 +
            name: move_left
685 +
            modifier: none
686 +
            keycode: backspace
687 +
            mode: vi_normal
688 +
            event: { edit: moveleft }
689 +
        }
690 +
        {
691 +
            name: newline_or_run_command
692 +
            modifier: none
693 +
            keycode: enter
694 +
            mode: emacs
695 +
            event: { send: enter }
696 +
        }
697 +
        {
698 +
            name: move_left
699 +
            modifier: control
700 +
            keycode: char_b
701 +
            mode: emacs
702 +
            event: {
703 +
                until: [
704 +
                    { send: menuleft }
705 +
                    { send: left }
706 +
                ]
707 +
            }
708 +
        }
709 +
        {
710 +
            name: move_right_or_take_history_hint
711 +
            modifier: control
712 +
            keycode: char_f
713 +
            mode: emacs
714 +
            event: {
715 +
                until: [
716 +
                    { send: historyhintcomplete }
717 +
                    { send: menuright }
718 +
                    { send: right }
719 +
                ]
720 +
            }
721 +
        }
722 +
        {
723 +
            name: redo_change
724 +
            modifier: control
725 +
            keycode: char_g
726 +
            mode: emacs
727 +
            event: { edit: redo }
728 +
        }
729 +
        {
730 +
            name: undo_change
731 +
            modifier: control
732 +
            keycode: char_z
733 +
            mode: emacs
734 +
            event: { edit: undo }
735 +
        }
736 +
        {
737 +
            name: paste_before
738 +
            modifier: control
739 +
            keycode: char_y
740 +
            mode: emacs
741 +
            event: { edit: pastecutbufferbefore }
742 +
        }
743 +
        {
744 +
            name: cut_word_left
745 +
            modifier: control
746 +
            keycode: char_w
747 +
            mode: emacs
748 +
            event: { edit: cutwordleft }
749 +
        }
750 +
        {
751 +
            name: cut_line_to_end
752 +
            modifier: control
753 +
            keycode: char_k
754 +
            mode: emacs
755 +
            event: { edit: cuttolineend }
756 +
        }
757 +
        {
758 +
            name: cut_line_from_start
759 +
            modifier: control
760 +
            keycode: char_u
761 +
            mode: emacs
762 +
            event: { edit: cutfromstart }
763 +
        }
764 +
        {
765 +
            name: swap_graphemes
766 +
            modifier: control
767 +
            keycode: char_t
768 +
            mode: emacs
769 +
            event: { edit: swapgraphemes }
770 +
        }
771 +
        {
772 +
            name: move_one_word_left
773 +
            modifier: alt
774 +
            keycode: left
775 +
            mode: emacs
776 +
            event: { edit: movewordleft }
777 +
        }
778 +
        {
779 +
            name: move_one_word_right_or_take_history_hint
780 +
            modifier: alt
781 +
            keycode: right
782 +
            mode: emacs
783 +
            event: {
784 +
                until: [
785 +
                    { send: historyhintwordcomplete }
786 +
                    { edit: movewordright }
787 +
                ]
788 +
            }
789 +
        }
790 +
        {
791 +
            name: move_one_word_left
792 +
            modifier: alt
793 +
            keycode: char_b
794 +
            mode: emacs
795 +
            event: { edit: movewordleft }
796 +
        }
797 +
        {
798 +
            name: move_one_word_right_or_take_history_hint
799 +
            modifier: alt
800 +
            keycode: char_f
801 +
            mode: emacs
802 +
            event: {
803 +
                until: [
804 +
                    { send: historyhintwordcomplete }
805 +
                    { edit: movewordright }
806 +
                ]
807 +
            }
808 +
        }
809 +
        {
810 +
            name: delete_one_word_forward
811 +
            modifier: alt
812 +
            keycode: delete
813 +
            mode: emacs
814 +
            event: { edit: deleteword }
815 +
        }
816 +
        {
817 +
            name: delete_one_word_backward
818 +
            modifier: alt
819 +
            keycode: backspace
820 +
            mode: emacs
821 +
            event: { edit: backspaceword }
822 +
        }
823 +
        {
824 +
            name: delete_one_word_backward
825 +
            modifier: alt
826 +
            keycode: char_m
827 +
            mode: emacs
828 +
            event: { edit: backspaceword }
829 +
        }
830 +
        {
831 +
            name: cut_word_to_right
832 +
            modifier: alt
833 +
            keycode: char_d
834 +
            mode: emacs
835 +
            event: { edit: cutwordright }
836 +
        }
837 +
        {
838 +
            name: upper_case_word
839 +
            modifier: alt
840 +
            keycode: char_u
841 +
            mode: emacs
842 +
            event: { edit: uppercaseword }
843 +
        }
844 +
        {
845 +
            name: lower_case_word
846 +
            modifier: alt
847 +
            keycode: char_l
848 +
            mode: emacs
849 +
            event: { edit: lowercaseword }
850 +
        }
851 +
        {
852 +
            name: capitalize_char
853 +
            modifier: alt
854 +
            keycode: char_c
855 +
            mode: emacs
856 +
            event: { edit: capitalizechar }
857 +
        }
858 +
        # The following bindings with `*system` events require that Nushell has
859 +
        # been compiled with the `system-clipboard` feature.
860 +
        # If you want to use the system clipboard for visual selection or to
861 +
        # paste directly, uncomment the respective lines and replace the version
862 +
        # using the internal clipboard.
863 +
        {
864 +
            name: copy_selection
865 +
            modifier: control_shift
866 +
            keycode: char_c
867 +
            mode: emacs
868 +
            event: { edit: copyselection }
869 +
            # event: { edit: copyselectionsystem }
870 +
        }
871 +
        {
872 +
            name: cut_selection
873 +
            modifier: control_shift
874 +
            keycode: char_x
875 +
            mode: emacs
876 +
            event: { edit: cutselection }
877 +
            # event: { edit: cutselectionsystem }
878 +
        }
879 +
        # {
880 +
        #     name: paste_system
881 +
        #     modifier: control_shift
882 +
        #     keycode: char_v
883 +
        #     mode: emacs
884 +
        #     event: { edit: pastesystem }
885 +
        # }
886 +
        {
887 +
            name: select_all
888 +
            modifier: control_shift
889 +
            keycode: char_a
890 +
            mode: emacs
891 +
            event: { edit: selectall }
892 +
        }
893 +
    ]
894 +
}
895 +
896 +
$env.config.hooks.env_change.PWD = [...$env.config.hooks.env_change.PWD
897 +
    { |_, after|
898 +
      if (($after | path join .node-version | path exists) or ($after | path join .nvmrc | path exists)) {
899 +
          fnm use --silent-if-unchanged
900 +
      }
901 +
    }]
902 +
903 +
# Function to open sesh
904 +
def t [] {
905 +
  let selected = (sesh list -i | gum filter --limit 1 --placeholder "Choose a session" --height 50 --prompt="⚡")
906 +
  if ($selected | is-empty) {
907 +
    echo "No session selected"
908 +
  } else {
909 +
    sesh connect $selected
910 +
  }
911 +
}
912 +
913 +
# Custom git init with .gitignore template
914 +
def ginit [
915 +
  --template (-t): string = "node,macos,linux,windows"  # The template to use for .gitignore, comma separated values
916 +
] {
917 +
  git init
918 +
  echo $"Fetching .gitignore template for ($template)..."
919 +
  curl -sL $"https://www.toptal.com/developers/gitignore/api/($template)" | save .gitignore
920 +
  git add .gitignore
921 +
  git commit -m "Initial commit with .gitignore"
922 +
  echo "Repository initialized with .gitignore template!"
923 +
}
924 +
925 +
alias ll = ls -l
926 +
alias la = ls -a
927 +
alias lg = lazygit
928 +
alias nf = neofetch
929 +
alias fl = fastfetch -c ~/.config/fastfetch/presets/examples/8.jsonc
930 +
alias ff = fastfetch -c ~/.config/fastfetch/presets/examples/20.jsonc
931 +
alias shitter = ssh itter
932 +
alias tailscale = /Applications/Tailscale.app/Contents/MacOS/Tailscale
933 +
934 +
use ~/.cache/starship/init.nu
nushell/env.nu +108 −1
1 -
/Users/stevedylandev/.config/nushell/env.nu
1 +
# Nushell Environment Config File
2 +
#
3 +
# version = "0.99.1"
4 +
5 +
# The prompt indicators are environmental variables that represent
6 +
# the state of the prompt
7 +
$env.PROMPT_INDICATOR = {|| "> " }
8 +
$env.PROMPT_INDICATOR_VI_INSERT = {|| "" }
9 +
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "" }
10 +
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }
11 +
$env.STARSHIP_SHELL = "nu"
12 +
13 +
# Specifies how environment variables are:
14 +
# - converted from a string to a value on Nushell startup (from_string)
15 +
# - converted from a value back to a string when running external commands (to_string)
16 +
# Note: The conversions happen *after* config.nu is loaded
17 +
$env.ENV_CONVERSIONS = {
18 +
    "PATH": {
19 +
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
20 +
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
21 +
    }
22 +
    "Path": {
23 +
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
24 +
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
25 +
    }
26 +
}
27 +
28 +
# Directories to search for scripts when calling source or use
29 +
# The default for this is $nu.default-config-dir/scripts
30 +
$env.NU_LIB_DIRS = [
31 +
    ($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
32 +
    ($nu.data-dir | path join 'completions') # default home for nushell completions
33 +
]
34 +
35 +
# Directories to search for plugin binaries when calling register
36 +
# The default for this is $nu.default-config-dir/plugins
37 +
$env.NU_PLUGIN_DIRS = [
38 +
    ($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
39 +
]
40 +
41 +
42 +
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
43 +
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
44 +
# An alternate way to add entries to $env.PATH is to use the custom command `path add`
45 +
# which is built into the nushell stdlib:
46 +
use std "path add"
47 +
48 +
# $env.PATH = ($env.PATH | split row (char esep))
49 +
# path add /some/path
50 +
# path add ($env.CARGO_HOME | path join "bin")
51 +
# path add ($env.HOME | path join ".local" "bin")
52 +
# $env.PATH = ($env.PATH | uniq)
53 +
54 +
path add /opt/homebrew/bin
55 +
path add /usr/local/go/bin
56 +
path add ~/.cargo/bin
57 +
path add ~/.local/share/go/bin
58 +
path add ~/.local/bin
59 +
path add /usr/local/bin
60 +
path add ~/.bun/bin
61 +
path add /Applications/Docker.app/Contents/Resources/bin
62 +
$env.GOROOT = "/usr/local/go"
63 +
$env.GOPATH = "/Users/stevedylandev/.local/share/go"
64 +
$env.GOMODCACHE = "/Users/stevedylandev/.local/share/go-mod-cache"
65 +
# $env.GITHUB_TOKEN = ""
66 +
path add ~/.tmux/plugins/t-smart-tmux-session-manager/bin
67 +
path add ~/.deno/bin
68 +
path add ~/.foundry/bin
69 +
path add ~/.local/share/pinata-go-cli
70 +
path add ~/.local/share/
71 +
path add ~/.local/share/solana/install/active_release/bin
72 +
path add /Users/stevedylandev/.local/share/pinata
73 +
path add ~/.sp1/bin
74 +
path add ~/.aztec/bin
75 +
path add ~/.nargo/bin
76 +
$env.ANDROID_HOME = "~/Library/Android/sdk"
77 +
path add ~/Library/Android/sdk/emulator
78 +
path add ~/Library/Android/sdk/platform-tools
79 +
$env.JAVA_HOME = "/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home"
80 +
$env.RUSTUP_TOOLCHAIN = "nightly-2025-01-05"
81 +
$env.config.filesize.unit = "MB"
82 +
$env.BAT_THEME_DARK = "base16"
83 +
$env.BAT_THEME_LIGHT = "base16"
84 +
$env.BAT_THEME = "base16"
85 +
# $env.FNM_DIR = "/Users/stevedsimkins/Library/Application Support/fnm"
86 +
# $env.FNM_ARCH = "arm64"
87 +
# $env.FNM_LOGLEVEL = "info"
88 +
# $env.FNM_COREPACK_ENABLED = "false"
89 +
# $env.FNM_RESOLVE_ENGINES = "false"
90 +
# $env.FNM_VERSION_FILE_STRATEGY = "local"
91 +
# $env.FNM_MULTISHELL_PATH = "/Users/stevedsimkins/.local/state/fnm_multishells/96094_1730946598404"
92 +
# $env.FNM_NODE_DIST_MIRROR = "https://nodejs.org/dist"
93 +
fnm env --json | from json | load-env
94 +
path add ($env.FNM_MULTISHELL_PATH + "/bin")
95 +
96 +
# To load from a custom file you can use:
97 +
# source ~/.config/nushell/env.nu
98 +
99 +
source ~/.config/nushell/black-metal-bathory.nu
100 +
# source ~/.config/nushell/zoxide.nu
101 +
source ~/.config/nushell/git-completions.nu
102 +
source ~/.cargo/env.nu
103 +
source ~/.config/nushell/zoxide.nu
104 +
105 +
$env.EDITOR = "nvim"
106 +
107 +
mkdir ~/.cache/starship
108 +
starship init nu | save -f ~/.cache/starship/init.nu
nushell/git-completions.nu +775 −1
1 -
/Users/stevedylandev/.config/nushell/git-completions.nu
1 +
def "nu-complete git available upstream" [] {
2 +
  ^git branch --no-color -a | lines | each { |line| $line | str replace '* ' "" | str trim }
3 +
}
4 +
5 +
def "nu-complete git remotes" [] {
6 +
  ^git remote | lines | each { |line| $line | str trim }
7 +
}
8 +
9 +
def "nu-complete git log" [] {
10 +
  ^git log --pretty=%h | lines | each { |line| $line | str trim }
11 +
}
12 +
13 +
# Yield all existing commits in descending chronological order.
14 +
def "nu-complete git commits all" [] {
15 +
  ^git rev-list --all --remotes --pretty=oneline | lines | parse "{value} {description}"
16 +
}
17 +
18 +
# Yield commits of current branch only. This is useful for e.g. cut points in
19 +
# `git rebase`.
20 +
def "nu-complete git commits current branch" [] {
21 +
  ^git log --pretty="%h %s" | lines | parse "{value} {description}"
22 +
}
23 +
24 +
# Yield local branches like `main`, `feature/typo_fix`
25 +
def "nu-complete git local branches" [] {
26 +
  ^git branch --no-color | lines | each { |line| $line | str replace '* ' "" | str trim }
27 +
}
28 +
29 +
# Yield remote branches like `origin/main`, `upstream/feature-a`
30 +
def "nu-complete git remote branches with prefix" [] {
31 +
  ^git branch --no-color -r | lines | parse -r '^\*?(\s*|\s*\S* -> )(?P<branch>\S*$)' | get branch | uniq
32 +
}
33 +
34 +
# Yield remote branches *without* prefix which do not have a local counterpart.
35 +
# E.g. `upstream/feature-a` as `feature-a` to checkout and track in one command
36 +
# with `git checkout` or `git switch`.
37 +
def "nu-complete git remote branches nonlocal without prefix" [] {
38 +
  # Get regex to strip remotes prefixes. It will look like `(origin|upstream)`
39 +
  # for the two remotes `origin` and `upstream`.
40 +
  let remotes_regex = (["(", ((nu-complete git remotes | each {|r| [$r, '/'] | str join}) | str join "|"), ")"] | str join)
41 +
  let local_branches = (nu-complete git local branches)
42 +
  ^git branch --no-color -r | lines | parse -r (['^[\* ]+', $remotes_regex, '?(?P<branch>\S+)'] | flatten | str join) | get branch | uniq | where {|branch| $branch != "HEAD"} | where {|branch| $branch not-in $local_branches }
43 +
}
44 +
45 +
def "nu-complete git switch" [] {
46 +
  (nu-complete git local branches)
47 +
  | parse "{value}"
48 +
  | insert description "local branch"
49 +
  | append (nu-complete git remote branches nonlocal without prefix
50 +
            | parse "{value}"
51 +
            | insert description "remote branch")
52 +
}
53 +
54 +
def "nu-complete git checkout" [] {
55 +
  (nu-complete git local branches)
56 +
  | parse "{value}"
57 +
  | insert description "local branch"
58 +
  | append (nu-complete git remote branches nonlocal without prefix
59 +
            | parse "{value}"
60 +
            | insert description "remote branch")
61 +
  | append (nu-complete git remote branches with prefix
62 +
            | parse "{value}"
63 +
            | insert description "remote branch")
64 +
  | append (nu-complete git commits all)
65 +
  | append (nu-complete git files | where description != "Untracked" | select value)
66 +
}
67 +
68 +
# Arguments to `git rebase --onto <arg1> <arg2>`
69 +
def "nu-complete git rebase" [] {
70 +
  (nu-complete git local branches)
71 +
  | parse "{value}"
72 +
  | insert description "local branch"
73 +
  | append (nu-complete git remote branches with prefix
74 +
            | parse "{value}"
75 +
            | insert description "remote branch")
76 +
  | append (nu-complete git commits all)
77 +
}
78 +
79 +
def "nu-complete git stash-list" [] {
80 +
  git stash list | lines | parse "{value}: {description}"
81 +
}
82 +
83 +
def "nu-complete git tags" [] {
84 +
  ^git tag --no-color | lines
85 +
}
86 +
87 +
# See `man git-status` under "Short Format"
88 +
# This is incomplete, but should cover the most common cases.
89 +
const short_status_descriptions = {
90 +
  ".D": "Deleted"
91 +
  ".M": "Modified"
92 +
  "!" : "Ignored"
93 +
  "?" : "Untracked"
94 +
  "AU": "Staged, not merged"
95 +
  "MD": "Some modifications staged, file deleted in work tree"
96 +
  "MM": "Some modifications staged, some modifications untracked"
97 +
  "R.": "Renamed"
98 +
  "UU": "Both modified (in merge conflict)"
99 +
}
100 +
101 +
def "nu-complete git files" [] {
102 +
  let relevant_statuses = ["?",".M", "MM", "MD", ".D", "UU"]
103 +
  ^git status -uall --porcelain=2
104 +
  | lines
105 +
  | each { |$it|
106 +
    if $it starts-with "1 " {
107 +
      $it | parse --regex "1 (?P<short_status>\\S+) (?:\\S+\\s?){6} (?P<value>\\S+)"
108 +
    } else if $it starts-with "2 " {
109 +
      $it | parse --regex "2 (?P<short_status>\\S+) (?:\\S+\\s?){6} (?P<value>\\S+)"
110 +
    } else if $it starts-with "u " {
111 +
      $it | parse --regex "u (?P<short_status>\\S+) (?:\\S+\\s?){8} (?P<value>\\S+)"
112 +
    } else if $it starts-with "? " {
113 +
      $it | parse --regex "(?P<short_status>.{1}) (?P<value>.+)"
114 +
    } else {
115 +
      { short_status: 'unknown', value: $it }
116 +
    }
117 +
  }
118 +
  | flatten
119 +
  | where $it.short_status in $relevant_statuses
120 +
  | insert "description" { |e| $short_status_descriptions | get $e.short_status}
121 +
}
122 +
123 +
def "nu-complete git built-in-refs" [] {
124 +
  [HEAD FETCH_HEAD ORIG_HEAD]
125 +
}
126 +
127 +
def "nu-complete git refs" [] {
128 +
  nu-complete git local branches
129 +
  | parse "{value}"
130 +
  | insert description Branch
131 +
  | append (nu-complete git tags | parse "{value}" | insert description Tag)
132 +
  | append (nu-complete git built-in-refs)
133 +
}
134 +
135 +
def "nu-complete git files-or-refs" [] {
136 +
  nu-complete git local branches
137 +
  | parse "{value}"
138 +
  | insert description Branch
139 +
  | append (nu-complete git files | where description == "Modified" | select value)
140 +
  | append (nu-complete git tags | parse "{value}" | insert description Tag)
141 +
  | append (nu-complete git built-in-refs)
142 +
}
143 +
144 +
def "nu-complete git subcommands" [] {
145 +
  ^git help -a | lines | where $it starts-with "   " | parse -r '\s*(?P<value>[^ ]+) \s*(?P<description>\w.*)'
146 +
}
147 +
148 +
def "nu-complete git add" [] {
149 +
  nu-complete git files
150 +
}
151 +
152 +
def "nu-complete git pull rebase" [] {
153 +
  ["false","true","merges","interactive"]
154 +
}
155 +
156 +
157 +
# Check out git branches and files
158 +
export extern "git checkout" [
159 +
  ...targets: string@"nu-complete git checkout"   # name of the branch or files to checkout
160 +
  --conflict: string                              # conflict style (merge or diff3)
161 +
  --detach(-d)                                    # detach HEAD at named commit
162 +
  --force(-f)                                     # force checkout (throw away local modifications)
163 +
  --guess                                         # second guess 'git checkout <no-such-branch>' (default)
164 +
  --ignore-other-worktrees                        # do not check if another worktree is holding the given ref
165 +
  --ignore-skip-worktree-bits                     # do not limit pathspecs to sparse entries only
166 +
  --merge(-m)                                     # perform a 3-way merge with the new branch
167 +
  --orphan: string                                # new unparented branch
168 +
  --ours(-2)                                      # checkout our version for unmerged files
169 +
  --overlay                                       # use overlay mode (default)
170 +
  --overwrite-ignore                              # update ignored files (default)
171 +
  --patch(-p)                                     # select hunks interactively
172 +
  --pathspec-from-file: string                    # read pathspec from file
173 +
  --progress                                      # force progress reporting
174 +
  --quiet(-q)                                     # suppress progress reporting
175 +
  --recurse-submodules                            # control recursive updating of submodules
176 +
  --theirs(-3)                                    # checkout their version for unmerged files
177 +
  --track(-t)                                     # set upstream info for new branch
178 +
  -b                                              # create and checkout a new branch
179 +
  -B: string                                      # create/reset and checkout a branch
180 +
  -l                                              # create reflog for new branch
181 +
]
182 +
183 +
# Download objects and refs from another repository
184 +
export extern "git fetch" [
185 +
  repository?: string@"nu-complete git remotes" # name of the branch to fetch
186 +
  --all                                         # Fetch all remotes
187 +
  --append(-a)                                  # Append ref names and object names to .git/FETCH_HEAD
188 +
  --atomic                                      # Use an atomic transaction to update local refs.
189 +
  --depth: int                                  # Limit fetching to n commits from the tip
190 +
  --deepen: int                                 # Limit fetching to n commits from the current shallow boundary
191 +
  --shallow-since: string                       # Deepen or shorten the history by date
192 +
  --shallow-exclude: string                     # Deepen or shorten the history by branch/tag
193 +
  --unshallow                                   # Fetch all available history
194 +
  --update-shallow                              # Update .git/shallow to accept new refs
195 +
  --negotiation-tip: string                     # Specify which commit/glob to report while fetching
196 +
  --negotiate-only                              # Do not fetch, only print common ancestors
197 +
  --dry-run                                     # Show what would be done
198 +
  --write-fetch-head                            # Write fetched refs in FETCH_HEAD (default)
199 +
  --no-write-fetch-head                         # Do not write FETCH_HEAD
200 +
  --force(-f)                                   # Always update the local branch
201 +
  --keep(-k)                                    # Keep downloaded pack
202 +
  --multiple                                    # Allow several arguments to be specified
203 +
  --auto-maintenance                            # Run 'git maintenance run --auto' at the end (default)
204 +
  --no-auto-maintenance                         # Don't run 'git maintenance' at the end
205 +
  --auto-gc                                     # Run 'git maintenance run --auto' at the end (default)
206 +
  --no-auto-gc                                  # Don't run 'git maintenance' at the end
207 +
  --write-commit-graph                          # Write a commit-graph after fetching
208 +
  --no-write-commit-graph                       # Don't write a commit-graph after fetching
209 +
  --prefetch                                    # Place all refs into the refs/prefetch/ namespace
210 +
  --prune(-p)                                   # Remove obsolete remote-tracking references
211 +
  --prune-tags(-P)                              # Remove any local tags that do not exist on the remote
212 +
  --no-tags(-n)                                 # Disable automatic tag following
213 +
  --refmap: string                              # Use this refspec to map the refs to remote-tracking branches
214 +
  --tags(-t)                                    # Fetch all tags
215 +
  --recurse-submodules: string                  # Fetch new commits of populated submodules (yes/on-demand/no)
216 +
  --jobs(-j): int                               # Number of parallel children
217 +
  --no-recurse-submodules                       # Disable recursive fetching of submodules
218 +
  --set-upstream                                # Add upstream (tracking) reference
219 +
  --submodule-prefix: string                    # Prepend to paths printed in informative messages
220 +
  --upload-pack: string                         # Non-default path for remote command
221 +
  --quiet(-q)                                   # Silence internally used git commands
222 +
  --verbose(-v)                                 # Be verbose
223 +
  --progress                                    # Report progress on stderr
224 +
  --server-option(-o): string                   # Pass options for the server to handle
225 +
  --show-forced-updates                         # Check if a branch is force-updated
226 +
  --no-show-forced-updates                      # Don't check if a branch is force-updated
227 +
  -4                                            # Use IPv4 addresses, ignore IPv6 addresses
228 +
  -6                                            # Use IPv6 addresses, ignore IPv4 addresses
229 +
]
230 +
231 +
# Push changes
232 +
export extern "git push" [
233 +
  remote?: string@"nu-complete git remotes",         # the name of the remote
234 +
  ...refs: string@"nu-complete git local branches"   # the branch / refspec
235 +
  --all                                              # push all refs
236 +
  --atomic                                           # request atomic transaction on remote side
237 +
  --delete(-d)                                       # delete refs
238 +
  --dry-run(-n)                                      # dry run
239 +
  --exec: string                                     # receive pack program
240 +
  --follow-tags                                      # push missing but relevant tags
241 +
  --force-with-lease                                 # require old value of ref to be at this value
242 +
  --force(-f)                                        # force updates
243 +
  --ipv4(-4)                                         # use IPv4 addresses only
244 +
  --ipv6(-6)                                         # use IPv6 addresses only
245 +
  --mirror                                           # mirror all refs
246 +
  --no-verify                                        # bypass pre-push hook
247 +
  --porcelain                                        # machine-readable output
248 +
  --progress                                         # force progress reporting
249 +
  --prune                                            # prune locally removed refs
250 +
  --push-option(-o): string                          # option to transmit
251 +
  --quiet(-q)                                        # be more quiet
252 +
  --receive-pack: string                             # receive pack program
253 +
  --recurse-submodules: string                       # control recursive pushing of submodules
254 +
  --repo: string                                     # repository
255 +
  --set-upstream(-u)                                 # set upstream for git pull/status
256 +
  --signed: string                                   # GPG sign the push
257 +
  --tags                                             # push tags (can't be used with --all or --mirror)
258 +
  --thin                                             # use thin pack
259 +
  --verbose(-v)                                      # be more verbose
260 +
]
261 +
262 +
# Pull changes
263 +
export extern "git pull" [
264 +
  remote?: string@"nu-complete git remotes",         # the name of the remote
265 +
  ...refs: string@"nu-complete git local branches",  # the branch / refspec
266 +
  --rebase(-r): string@"nu-complete git pull rebase",    # rebase current branch on top of upstream after fetching
267 +
  --quiet(-q)                                        # suppress output during transfer and merge
268 +
  --verbose(-v)                                      # be more verbose
269 +
  --commit                                           # perform the merge and commit the result
270 +
  --no-commit                                        # perform the merge but do not commit the result
271 +
  --edit(-e)                                         # edit the merge commit message
272 +
  --no-edit                                          # use the auto-generated merge commit message
273 +
  --cleanup: string                                  # specify how to clean up the merge commit message
274 +
  --ff                                               # fast-forward if possible
275 +
  --no-ff                                            # create a merge commit in all cases
276 +
  --gpg-sign(-S)                                     # GPG-sign the resulting merge commit
277 +
  --no-gpg-sign                                      # do not GPG-sign the resulting merge commit
278 +
  --log: int                                         # include log messages from merged commits
279 +
  --no-log                                           # do not include log messages from merged commits
280 +
  --signoff                                          # add Signed-off-by trailer
281 +
  --no-signoff                                       # do not add Signed-off-by trailer
282 +
  --stat(-n)                                         # show a diffstat at the end of the merge
283 +
  --no-stat                                          # do not show a diffstat at the end of the merge
284 +
  --squash                                           # produce working tree and index state as if a merge happened
285 +
  --no-squash                                        # perform the merge and commit the result
286 +
  --verify                                           # run pre-merge and commit-msg hooks
287 +
  --no-verify                                        # do not run pre-merge and commit-msg hooks
288 +
  --strategy(-s): string                             # use the given merge strategy
289 +
  --strategy-option(-X): string                      # pass merge strategy-specific option
290 +
  --verify-signatures                                # verify the tip commit of the side branch being merged
291 +
  --no-verify-signatures                             # do not verify the tip commit of the side branch being merged
292 +
  --summary                                          # show a summary of the merge
293 +
  --no-summary                                       # do not show a summary of the merge
294 +
  --autostash                                        # create a temporary stash entry before the operation
295 +
  --no-autostash                                     # do not create a temporary stash entry before the operation
296 +
  --allow-unrelated-histories                        # allow merging histories without a common ancestor
297 +
  --no-rebase                                        # do not rebase the current branch on top of the upstream branch
298 +
  --all                                              # fetch all remotes
299 +
  --append(-a)                                       # append fetched refs to existing contents of FETCH_HEAD
300 +
  --atomic                                           # use an atomic transaction to update local refs
301 +
  --depth: int                                       # limit fetching to the specified number of commits
302 +
  --deepen: int                                      # deepen the history by the specified number of commits
303 +
  --shallow-since: string                            # deepen or shorten the history since a specified date
304 +
  --shallow-exclude: string                          # exclude commits reachable from a specified branch or tag
305 +
  --unshallow                                        # convert a shallow repository to a complete one
306 +
  --update-shallow                                   # update .git/shallow with new refs
307 +
  --tags(-t)                                         # fetch all tags from the remote
308 +
  --jobs(-j): int                                    # number of parallel children for fetching
309 +
  --set-upstream                                     # add upstream (tracking) reference
310 +
  --upload-pack: string                              # specify non-default path for upload-pack on the remote
311 +
  --progress                                         # force progress status even if stderr is not a terminal
312 +
  --server-option(-o): string                        # transmit the given string to the server
313 +
]
314 +
315 +
# Switch between branches and commits
316 +
export extern "git switch" [
317 +
  switch?: string@"nu-complete git switch"        # name of branch to switch to
318 +
  --create(-c)                                    # create a new branch
319 +
  --detach(-d): string@"nu-complete git log"      # switch to a commit in a detached state
320 +
  --force-create(-C): string                      # forces creation of new branch, if it exists then the existing branch will be reset to starting point
321 +
  --force(-f)                                     # alias for --discard-changes
322 +
  --guess                                         # if there is no local branch which matches then name but there is a remote one then this is checked out
323 +
  --ignore-other-worktrees                        # switch even if the ref is held by another worktree
324 +
  --merge(-m)                                     # attempts to merge changes when switching branches if there are local changes
325 +
  --no-guess                                      # do not attempt to match remote branch names
326 +
  --no-progress                                   # do not report progress
327 +
  --no-recurse-submodules                         # do not update the contents of sub-modules
328 +
  --no-track                                      # do not set "upstream" configuration
329 +
  --orphan: string                                # create a new orphaned branch
330 +
  --progress                                      # report progress status
331 +
  --quiet(-q)                                     # suppress feedback messages
332 +
  --recurse-submodules                            # update the contents of sub-modules
333 +
  --track(-t)                                     # set "upstream" configuration
334 +
]
335 +
336 +
# Apply the change introduced by an existing commit
337 +
export extern "git cherry-pick" [
338 +
  commit?: string@"nu-complete git commits all" # The commit ID to be cherry-picked
339 +
  --edit(-e)                                    # Edit the commit message prior to committing
340 +
  --no-commit(-n)                               # Apply changes without making any commit
341 +
  --signoff(-s)                                 # Add Signed-off-by line to the commit message
342 +
  --ff                                          # Fast-forward if possible
343 +
  --continue                                    # Continue the operation in progress
344 +
  --abort                                       # Cancel the operation
345 +
  --skip                                        # Skip the current commit and continue with the rest of the sequence
346 +
]
347 +
348 +
# Rebase the current branch
349 +
export extern "git rebase" [
350 +
  branch?: string@"nu-complete git rebase"    # name of the branch to rebase onto
351 +
  upstream?: string@"nu-complete git rebase"  # upstream branch to compare against
352 +
  --continue                                  # restart rebasing process after editing/resolving a conflict
353 +
  --abort                                     # abort rebase and reset HEAD to original branch
354 +
  --quit                                      # abort rebase but do not reset HEAD
355 +
  --interactive(-i)                           # rebase interactively with list of commits in editor
356 +
  --onto?: string@"nu-complete git rebase"    # starting point at which to create the new commits
357 +
  --root                                      # start rebase from root commit
358 +
]
359 +
360 +
# List or change branches
361 +
export extern "git branch" [
362 +
  branch?: string@"nu-complete git local branches"               # name of branch to operate on
363 +
  --abbrev                                                       # use short commit hash prefixes
364 +
  --edit-description                                             # open editor to edit branch description
365 +
  --merged                                                       # list reachable branches
366 +
  --no-merged                                                    # list unreachable branches
367 +
  --set-upstream-to: string@"nu-complete git available upstream" # set upstream for branch
368 +
  --unset-upstream                                               # remote upstream for branch
369 +
  --all                                                          # list both remote and local branches
370 +
  --copy                                                         # copy branch together with config and reflog
371 +
  --format                                                       # specify format for listing branches
372 +
  --move                                                         # rename branch
373 +
  --points-at                                                    # list branches that point at an object
374 +
  --show-current                                                 # print the name of the current branch
375 +
  --verbose                                                      # show commit and upstream for each branch
376 +
  --color                                                        # use color in output
377 +
  --quiet                                                        # suppress messages except errors
378 +
  --delete(-d)                                                   # delete branch
379 +
  --list                                                         # list branches
380 +
  --contains: string@"nu-complete git commits all"               # show only branches that contain the specified commit
381 +
  --no-contains                                                  # show only branches that don't contain specified commit
382 +
  --track(-t)                                                    # when creating a branch, set upstream
383 +
]
384 +
385 +
# List or change tracked repositories
386 +
export extern "git remote" [
387 +
  --verbose(-v)                            # Show URL for remotes
388 +
]
389 +
390 +
# Add a new tracked repository
391 +
export extern "git remote add" [
392 +
]
393 +
394 +
# Rename a tracked repository
395 +
export extern "git remote rename" [
396 +
  remote: string@"nu-complete git remotes"             # remote to rename
397 +
  new_name: string                                     # new name for remote
398 +
]
399 +
400 +
# Remove a tracked repository
401 +
export extern "git remote remove" [
402 +
  remote: string@"nu-complete git remotes"             # remote to remove
403 +
]
404 +
405 +
# Get the URL for a tracked repository
406 +
export extern "git remote get-url" [
407 +
  remote: string@"nu-complete git remotes"             # remote to get URL for
408 +
]
409 +
410 +
# Set the URL for a tracked repository
411 +
export extern "git remote set-url" [
412 +
  remote: string@"nu-complete git remotes"             # remote to set URL for
413 +
  url: string                                          # new URL for remote
414 +
]
415 +
416 +
# Show changes between commits, working tree etc
417 +
export extern "git diff" [
418 +
  rev1_or_file?: string@"nu-complete git files-or-refs"
419 +
  rev2?: string@"nu-complete git refs"
420 +
  --cached                                             # show staged changes
421 +
  --name-only                                          # only show names of changed files
422 +
  --name-status                                        # show changed files and kind of change
423 +
  --no-color                                           # disable color output
424 +
]
425 +
426 +
# Commit changes
427 +
export extern "git commit" [
428 +
  --all(-a)                                           # automatically stage all modified and deleted files
429 +
  --amend                                             # amend the previous commit rather than adding a new one
430 +
  --message(-m): string                               # specify the commit message rather than opening an editor
431 +
  --no-edit                                           # don't edit the commit message (useful with --amend)
432 +
  --reuse-message(-C): string                         # reuse the message from a previous commit
433 +
  --reedit-message(-c): string                        # reuse and edit message from a commit
434 +
  --fixup: string                                     # create a fixup/amend commit
435 +
  --squash: string                                    # squash commit for autosquash rebase
436 +
  --reset-author                                      # reset author information
437 +
  --short                                             # short-format output for dry-run
438 +
  --branch                                            # show branch info in short-format
439 +
  --porcelain                                         # porcelain-ready format for dry-run
440 +
  --long                                              # long-format output for dry-run
441 +
  --null(-z)                                          # use NUL instead of LF in output
442 +
  --file(-F): string                                  # read commit message from file
443 +
  --author: string                                    # override commit author
444 +
  --date: string                                      # override author date
445 +
  --template(-t): string                              # use commit message template file
446 +
  --signoff(-s)                                       # add Signed-off-by trailer
447 +
  --no-signoff                                        # do not add Signed-off-by trailer
448 +
  --trailer: string                                   # add trailer to commit message
449 +
  --no-verify(-n)                                     # bypass pre-commit and commit-msg hooks
450 +
  --verify                                            # do not bypass pre-commit and commit-msg hooks
451 +
  --allow-empty                                       # allow commit with no changes
452 +
  --allow-empty-message                               # allow commit with empty message
453 +
  --cleanup: string                                   # cleanup commit message
454 +
  --edit(-e)                                          # edit commit message
455 +
  --no-edit                                           # do not edit commit message
456 +
  --include(-i)                                       # include given paths in commit
457 +
  --only(-o)                                          # commit only specified paths
458 +
  --pathspec-from-file: string                        # read pathspec from file
459 +
  --pathspec-file-nul                                 # use NUL character for pathspec file
460 +
  --untracked-files(-u): string                       # show untracked files
461 +
  --verbose(-v)                                       # show diff in commit message template
462 +
  --quiet(-q)                                         # suppress commit summary
463 +
  --dry-run                                           # show paths to be committed without committing
464 +
  --status                                            # include git-status output in commit message
465 +
  --no-status                                         # do not include git-status output
466 +
  --gpg-sign(-S):string                               # GPG-sign commit
467 +
  --no-gpg-sign                                       # do not GPG-sign commit
468 +
  ...pathspec: string                                 # commit files matching pathspec
469 +
]
470 +
471 +
# List commits
472 +
export extern "git log" [
473 +
  # Ideally we'd allow completion of revisions here, but that would make completion of filenames not work.
474 +
  -U                                                  # show diffs
475 +
  --follow                                            # show history beyond renames (single file only)
476 +
  --grep: string                                      # show log entries matching supplied regular expression
477 +
]
478 +
479 +
# Show or change the reflog
480 +
export extern "git reflog" [
481 +
]
482 +
483 +
# Stage files
484 +
export extern "git add" [
485 +
  ...file: string@"nu-complete git add"               # file to add
486 +
  --all(-A)                                           # add all files
487 +
  --dry-run(-n)                                       # don't actually add the file(s), just show if they exist and/or will be ignored
488 +
  --edit(-e)                                          # open the diff vs. the index in an editor and let the user edit it
489 +
  --force(-f)                                         # allow adding otherwise ignored files
490 +
  --interactive(-i)                                   # add modified contents in the working tree interactively to the index
491 +
  --patch(-p)                                         # interactively choose hunks to stage
492 +
  --verbose(-v)                                       # be verbose
493 +
]
494 +
495 +
# Delete file from the working tree and the index
496 +
export extern "git rm" [
497 +
  -r                                                   # recursive
498 +
  --force(-f)                                          # override the up-to-date check
499 +
  --dry-run(-n)                                        # Don't actually remove any file(s)
500 +
  --cached                                             # unstage and remove paths only from the index
501 +
]
502 +
503 +
# Show the working tree status
504 +
export extern "git status" [
505 +
  --verbose(-v)                                       # be verbose
506 +
  --short(-s)                                         # show status concisely
507 +
  --branch(-b)                                        # show branch information
508 +
  --show-stash                                        # show stash information
509 +
]
510 +
511 +
# Stash changes for later
512 +
export extern "git stash push" [
513 +
  --patch(-p)                                         # interactively choose hunks to stash
514 +
]
515 +
516 +
# Unstash previously stashed changes
517 +
export extern "git stash pop" [
518 +
  stash?: string@"nu-complete git stash-list"          # stash to pop
519 +
  --index(-i)                                          # try to reinstate not only the working tree's changes, but also the index's ones
520 +
]
521 +
522 +
# List stashed changes
523 +
export extern "git stash list" [
524 +
]
525 +
526 +
# Show a stashed change
527 +
export extern "git stash show" [
528 +
  stash?: string@"nu-complete git stash-list"
529 +
  -U                                                  # show diff
530 +
]
531 +
532 +
# Drop a stashed change
533 +
export extern "git stash drop" [
534 +
  stash?: string@"nu-complete git stash-list"
535 +
]
536 +
537 +
# Create a new git repository
538 +
export extern "git init" [
539 +
  --initial-branch(-b): string                         # initial branch name
540 +
]
541 +
542 +
# List or manipulate tags
543 +
export extern "git tag" [
544 +
  --delete(-d): string@"nu-complete git tags"         # delete a tag
545 +
]
546 +
547 +
# Prune all unreachable objects
548 +
export extern "git prune" [
549 +
  --dry-run(-n)                                       # dry run
550 +
  --expire: string                                    # expire objects older than
551 +
  --progress                                          # show progress
552 +
  --verbose(-v)                                       # report all removed objects
553 +
]
554 +
555 +
# Start a binary search to find the commit that introduced a bug
556 +
export extern "git bisect start" [
557 +
  bad?: string                 # a commit that has the bug
558 +
  good?: string                # a commit that doesn't have the bug
559 +
]
560 +
561 +
# Mark the current (or specified) revision as bad
562 +
export extern "git bisect bad" [
563 +
]
564 +
565 +
# Mark the current (or specified) revision as good
566 +
export extern "git bisect good" [
567 +
]
568 +
569 +
# Skip the current (or specified) revision
570 +
export extern "git bisect skip" [
571 +
]
572 +
573 +
# End bisection
574 +
export extern "git bisect reset" [
575 +
]
576 +
577 +
# Show help for a git subcommand
578 +
export extern "git help" [
579 +
  command: string@"nu-complete git subcommands"       # subcommand to show help for
580 +
]
581 +
582 +
# git worktree
583 +
export extern "git worktree" [
584 +
  --help(-h)            # display the help message for this command
585 +
  ...args
586 +
]
587 +
588 +
# create a new working tree
589 +
export extern "git worktree add" [
590 +
  path: path            # directory to clone the branch
591 +
  branch: string@"nu-complete git available upstream" # Branch to clone
592 +
  --help(-h)            # display the help message for this command
593 +
  --force(-f)           # checkout <branch> even if already checked out in other worktree
594 +
  -b                    # create a new branch
595 +
  -B                    # create or reset a branch
596 +
  --detach(-d)          # detach HEAD at named commit
597 +
  --checkout            # populate the new working tree
598 +
  --lock                # keep the new working tree locked
599 +
  --reason              # reason for locking
600 +
  --quiet(-q)           # suppress progress reporting
601 +
  --track               # set up tracking mode (see git-branch(1))
602 +
  --guess-remote        # try to match the new branch name with a remote-tracking branch
603 +
  ...args
604 +
]
605 +
606 +
# list details of each worktree
607 +
export extern "git worktree list" [
608 +
  --help(-h)            # display the help message for this command
609 +
  --porcelain           # machine-readable output
610 +
  --verbose(-v)         # show extended annotations and reasons, if available
611 +
  --expire              # add 'prunable' annotation to worktrees older than <time>
612 +
  -z                    # terminate records with a NUL character
613 +
  ...args
614 +
]
615 +
616 +
def "nu-complete worktree list" [] {
617 +
  ^git worktree list | to text | parse --regex '(?P<value>\S+)\s+(?P<commit>\w+)\s+(?P<description>\S.*)'
618 +
}
619 +
620 +
# prevent a working tree from being pruned
621 +
export extern "git worktree lock" [
622 +
  worktree: string@"nu-complete worktree list"
623 +
  --reason: string      # reason because the tree is locked
624 +
  --help(-h)            # display the help message for this command
625 +
  --reason              # reason for locking
626 +
  ...args
627 +
]
628 +
629 +
# move a working tree to a new location
630 +
export extern "git worktree move" [
631 +
  --help(-h)            # display the help message for this command
632 +
  --force(-f)           # force move even if worktree is dirty or locked
633 +
  ...args
634 +
]
635 +
636 +
# prune working tree information
637 +
export extern "git worktree prune" [
638 +
  --help(-h)            # display the help message for this command
639 +
  --dry-run(-n)         # do not remove, show only
640 +
  --verbose(-v)         # report pruned working trees
641 +
  --expire              # expire working trees older than <time>
642 +
  ...args
643 +
]
644 +
645 +
# remove a working tree
646 +
export extern "git worktree remove" [
647 +
  worktree: string@"nu-complete worktree list"
648 +
  --help(-h)            # display the help message for this command
649 +
  --force(-f)           # force removal even if worktree is dirty or locked
650 +
]
651 +
652 +
# allow working tree to be pruned, moved or deleted
653 +
export extern "git worktree unlock" [
654 +
  worktree: string@"nu-complete worktree list"
655 +
  ...args
656 +
]
657 +
658 +
# clones a repo
659 +
export extern "git clone" [
660 +
  --help(-h)                    # display the help message for this command
661 +
  --local(-l)                   # cloning from the local machine
662 +
  --no-local                    # use the git transport mechanism even if cloning from a local path
663 +
  --no-hardlinks                # force git to copy files when cloning from the local machine
664 +
  --shared(-s)                  # setup .git/objects/info/alternates to share objects with the source local repo
665 +
  --reference: string           # setup .git/objects/info/alternates to share objects with the =<reference> local repo
666 +
  --reference-if-able: string   # same as --reference, but skips empty folders
667 +
  --dissociate                  # borrow objects from the referenced repo (--reference)
668 +
  --quiet(-q)                   # suppress progress reporting
669 +
  --verbose(-v)                 # be verbose
670 +
  --progress                    # report progress unless --quiet
671 +
  --server-option: string       # transmit the =<option> to the server
672 +
  --no-checkout(-n)             # no checkout of HEAD
673 +
  --reject-shallow              # reject shallow repository as source
674 +
  --no-reject-shallow           # do not reject shallow repository as source
675 +
  --bare                        # make a bare git repo
676 +
  --sparse                      # initialize the sparse-checkout file
677 +
  --filter: string              # partial clone using the given =<filter-spec>
678 +
  --mirror                      # mirror the source repo
679 +
  --origin(-o): string          # use <name> as the name for the remote origin
680 +
  --branch(-b): string          # point HEAD to <name> branch
681 +
  --upload-pack(-u): string     # use <upload-pack> as the path in the other end when using ssh
682 +
  --template: string            # use <template-dir> as the templates directory
683 +
  --config(-c): string          # set a <key>=<value> config variable
684 +
  --depth: int                  # shallow clone <depth> commits
685 +
  --shallow-since: string       # shallow clone commits newer than =<date>
686 +
  --shallow-exclude: string     # do not clone commits reachable from <revision> (branch or tag)
687 +
  --single-branch               # clone commit history from a single branch
688 +
  --no-single-Branch            # do not clone only one branch
689 +
  --no-tags                     # do not clone any tags
690 +
  --recurse-submodules: string  # clone the submodules
691 +
  --shallow-submodules          # shallow clone submodules with depth 1
692 +
  --no-shallow-submodules       # do not shallow clone submodules
693 +
  --remote-submodules           # submodules are updating using their remote tracking branch
694 +
  --no-remote-submodules        # do not track submodules remote
695 +
  --separate-git-dir: string    # place the clone at =<git dir> and link it here
696 +
  --jobs(-j): int               # number of simultaneous submodules fetch
697 +
  ...args
698 +
]
699 +
700 +
# Restores files in working tree or index to previous versions
701 +
export extern "git restore" [
702 +
  --help(-h)                                    # Display the help message for this command
703 +
  --source(-s)                                  # Restore the working tree files with the content from the given tree
704 +
  --patch(-p)                                   # Interactively choose hunks to restore
705 +
  --worktree(-W)                                # Restore working tree (default if neither --worktree or --staged is used)
706 +
  --staged(-S)                                  # Restore index
707 +
  --quiet(-q)                                   # Quiet, suppress feedback messages
708 +
  --progress                                    # Force progress reporting
709 +
  --no-progress                                 # Suppress progress reporting
710 +
  --ours                                        # Restore from index using our version for unmerged files
711 +
  --theirs                                      # Restore from index using their version for unmerged files
712 +
  --merge(-m)                                   # Restore from index and recreate the conflicted merge in unmerged files
713 +
  --conflict: string                            # Like --merge but changes the conflict presentation with =<style>
714 +
  --ignore-unmerged                             # Restore from index and ignore unmerged entries (unmerged files are left as is)
715 +
  --ignore-skip-worktree-bits                   # Ignore sparse checkout patterns and unconditionally restores any files in <pathspec>
716 +
  --recurse-submodules                          # Restore the contents of sub-modules in working tree
717 +
  --no-recurse-submodules                       # Do not restore the contents of sub-modules in working tree (default)
718 +
  --overlay                                     # Do not remove files that don't exist when restoring from tree with --source
719 +
  --no-overlay                                  # Remove files that don't exist when restoring from tree with --source (default)
720 +
  --pathspec-from-file: string                  # Read pathspec from file
721 +
  --pathspec-file-nul                           # Separate pathspec elements with NUL character when reading from file
722 +
  ...pathspecs: string@"nu-complete git files"  # Target pathspecs to restore
723 +
]
724 +
725 +
# Print lines matching a pattern
726 +
export extern "git grep" [
727 +
  --help(-h)                            # Display the help message for this command
728 +
  --cached                              # Search blobs registered in the index file instead of worktree
729 +
  --untracked                           # Include untracked files in search
730 +
  --no-index                            # Similar to `grep -r`, but with additional benefits, such as using pathspec patterns to limit paths; Cannot be used together with --cached or --untracked
731 +
  --no-exclude-standard                 # Include ignored files in search (only useful with --untracked)
732 +
  --exclude-standard                    # No not include ignored files in search (only useful with --no-index)
733 +
  --recurse-submodules                  # Recursively search in each submodule that is active and checked out
734 +
  --text(-a)                            # Process binary files as if they were text
735 +
  --textconv                            # Honor textconv filter settings
736 +
  --no-textconv                         # Do not honor textconv filter settings (default)
737 +
  --ignore-case(-i)                     # Ignore case differences between patterns and files
738 +
  -I                                    # Don’t match the pattern in binary files
739 +
  --max-depth: int                      # Max <depth> to descend down directories for each pathspec. A value of -1 means no limit.
740 +
  --recursive(-r)                       # Same as --max-depth=-1
741 +
  --no-recursive                        # Same as --max-depth=0
742 +
  --word-regexp(-w)                     # Match the pattern only at word boundary
743 +
  --invert-match(-v)                    # Select non-matching lines
744 +
  -H                                    # Suppress filename in output of matched lines
745 +
  --full-name                           # Force relative path to filename from top directory
746 +
  --extended-regexp(-E)                 # Use POSIX extended regexp for patterns
747 +
  --basic-regexp(-G)                    # Use POSIX basic regexp for patterns (default)
748 +
  --perl-regexp(-P)                     # Use Perl-compatible regular expressions for patterns
749 +
  --line-number(-n)                     # Prefix the line number to matching lines
750 +
  --column                              # Prefix the 1-indexed byte-offset of the first match from the start of the matching line
751 +
  --files-with-matches(-l)              # Print filenames of files that contains matches
752 +
  --name-only                           # Same as --files-with-matches
753 +
  --files-without-match(-L)             # Print filenames of files that do not contain matches
754 +
  --null(-z)                            # Use \0 as the delimiter for pathnames in the output, and print them verbatim
755 +
  --only-matching(-o)                   # Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line
756 +
  --count(-c)                           # Instead of showing every matched line, show the number of lines that match
757 +
  --no-color                            # Same as --color=never
758 +
  --break                               # Print an empty line between matches from different files.
759 +
  --heading                             # Show the filename above the matches in that file instead of at the start of each shown line.
760 +
  --show-function(-p)                   # Show the preceding line that contains the function name of the match, unless the matching line is a function name itself.
761 +
  --context(-C): int                    # Show <num> leading and trailing lines, and place a line containing -- between contiguous groups of matches.
762 +
  --after-context(-A): int              # Show <num> trailing lines, and place a line containing -- between contiguous groups of matches.
763 +
  --before-context(-B): int             # Show <num> leading lines, and place a line containing -- between contiguous groups of matches.
764 +
  --function-context(-W)                # Show the surrounding text from the previous line containing a function name up to the one before the next function name
765 +
  --max-count(-m): int                  # Limit the amount of matches per file. When using the -v or --invert-match option, the search stops after the specified number of non-matches.
766 +
  --threads: int                        # Number of grep worker threads to use. Use --help for more information on grep threads.
767 +
  -f: string                            # Read patterns from <file>, one per line.
768 +
  -e: string                            # Next parameter is the pattern. Multiple patterns are combined by --or.
769 +
  --and                                 # Search for lines that match multiple patterns.
770 +
  --or                                  # Search for lines that match at least one of multiple patterns. --or is implied between patterns without --and or --not.
771 +
  --not                                 # Search for lines that does not match pattern.
772 +
  --all-match                           # When giving multiple pattern expressions combined with --or, this flag is specified to limit the match to files that have lines to match all of them.
773 +
  --quiet(-q)                           # Do not output matched lines; instead, exit with status 0 when there is a match and with non-zero status when there isn’t.
774 +
  ...pathspecs: string                  # Target pathspecs to limit the scope of the search.
775 +
]
nushell/zoxide.nu +59 −1
1 -
/Users/stevedylandev/.config/nushell/zoxide.nu
1 +
# Code generated by zoxide. DO NOT EDIT.
2 +
3 +
# =============================================================================
4 +
#
5 +
# Hook configuration for zoxide.
6 +
#
7 +
8 +
# Initialize hook to add new entries to the database.
9 +
  $env.__zoxide_hooked = true
10 +
  $env.config = ($env | default {} config).config
11 +
  $env.config = ($env.config | default {} hooks)
12 +
  $env.config = ($env.config | update hooks ($env.config.hooks | default {} env_change))
13 +
  $env.config = ($env.config | update hooks.env_change ($env.config.hooks.env_change | default [] PWD))
14 +
  $env.config = ($env.config | update hooks.env_change.PWD ($env.config.hooks.env_change.PWD | append {|_, dir|
15 +
    zoxide add -- $dir
16 +
  }))
17 +
18 +
# =============================================================================
19 +
#
20 +
# When using zoxide with --no-cmd, alias these internal functions as desired.
21 +
#
22 +
23 +
# Jump to a directory using only keywords.
24 +
def --env --wrapped __zoxide_z [...rest:string] {
25 +
  let arg0 = ($rest | append '~').0
26 +
  let arg0_is_dir = (try {$arg0 | path expand | path type}) == 'dir'
27 +
  let path = if (($rest | length) <= 1) and ($arg0 == '-' or $arg0_is_dir) {
28 +
    $arg0
29 +
  } else {
30 +
    (zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n")
31 +
  }
32 +
  cd $path
33 +
}
34 +
35 +
# Jump to a directory using interactive search.
36 +
def --env --wrapped __zoxide_zi [...rest:string] {
37 +
  cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")'
38 +
}
39 +
40 +
# =============================================================================
41 +
#
42 +
# Commands for zoxide. Disable these using --no-cmd.
43 +
#
44 +
45 +
alias z = __zoxide_z
46 +
alias zi = __zoxide_zi
47 +
48 +
# =============================================================================
49 +
#
50 +
# Add this to your env file (find it by running `$nu.env-path` in Nushell):
51 +
#
52 +
#   zoxide init nushell | save -f ~/.zoxide.nu
53 +
#
54 +
# Now, add this to the end of your config file (find it by running
55 +
# `$nu.config-path` in Nushell):
56 +
#
57 +
#   source ~/.zoxide.nu
58 +
#
59 +
# Note: zoxide only supports Nushell v0.89.0+.
nvim/init.lua +15 −1
1 -
/Users/stevedylandev/.config/nvim/init.lua
1 +
-- Suppress vim.tbl_islist deprecation warning
2 +
local original_deprecate = vim.deprecate
3 +
---@diagnostic disable-next-line: duplicate-set-field
4 +
vim.deprecate = function(name, alternative, version, plugin, backtrace)
5 +
  if name == "vim.tbl_islist" then
6 +
    return
7 +
  end
8 +
  return original_deprecate(name, alternative, version, plugin, backtrace)
9 +
end
10 +
11 +
require("config.options")
12 +
require("core.lazy")
13 +
require("core.lsp")
14 +
require("config.keymaps")
15 +
require("config.autocmds")
nvim/lazy-lock.json +23 −1
1 -
/Users/stevedylandev/.config/nvim/lazy-lock.json
1 +
{
2 +
  "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
3 +
  "LuaSnip": { "branch": "master", "commit": "faf3c94a44508cec1b961406d36cc65113ff3b98" },
4 +
  "base16-nvim": { "branch": "master", "commit": "f9ce7474c54803cb0fa308b0b91549d394a07940" },
5 +
  "blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" },
6 +
  "conform.nvim": { "branch": "master", "commit": "6feb2f28f9a9385e401857b21eeac3c1b66dd628" },
7 +
  "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
8 +
  "gitsigns.nvim": { "branch": "main", "commit": "8bdaccdb897945a3c99c1ad8df94db0ddf5c8790" },
9 +
  "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
10 +
  "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
11 +
  "lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
12 +
  "neo-tree.nvim": { "branch": "v3.x", "commit": "f481de16a0eb59c985abac8985e3f2e2f75b4875" },
13 +
  "nui.nvim": { "branch": "main", "commit": "7cd18e73cfbd70e1546931b7268b3eebaeff9391" },
14 +
  "nvim-surround": { "branch": "main", "commit": "8dd9150ca7eae5683660ea20cec86edcd5ca4046" },
15 +
  "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
16 +
  "nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
17 +
  "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
18 +
  "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
19 +
  "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" },
20 +
  "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
21 +
  "vim-startuptime": { "branch": "master", "commit": "b6f0d93f6b8cf6eee0b4c94450198ba2d6a05ff6" },
22 +
  "vim-tmux-navigator": { "branch": "master", "commit": "96da8e10ce83b754f442c3e25d1bf74451d220f2" }
23 +
}
nvim/lsp (deleted) +0 −1
1 -
/Users/stevedylandev/.config/nvim/lsp
nvim/lsp/gopls.lua (added) +97 −0
1 +
return {
2 +
	cmd = { "gopls" },                                   -- Command to start the language server
3 +
	filetypes = { "go", "gomod", "gowork", "gotmpl", "gosum" }, -- File types that this server will handle
4 +
	root_markers = { "go.mod", "go.work", ".git" },      -- Markers to identify the root of the project
5 +
	settings = {                                         -- Settings for the language server
6 +
		gopls = {
7 +
			gofumpt = true,
8 +
			codelenses = {
9 +
				gc_details = false,
10 +
				generate = true,
11 +
				regenerate_cgo = true,
12 +
				run_govulncheck = true,
13 +
				test = true,
14 +
				tidy = true,
15 +
				upgrade_dependency = true,
16 +
				vendor = true,
17 +
			},
18 +
			hints = {
19 +
				assignVariableTypes = false,
20 +
				compositeLiteralFields = false,
21 +
				compositeLiteralTypes = false,
22 +
				constantValues = false,
23 +
				functionTypeParameters = false,
24 +
				parameterNames = false,
25 +
				rangeVariableTypes = false,
26 +
			},
27 +
			analyses = {
28 +
				nilness = true,
29 +
				unusedparams = true,
30 +
				unusedwrite = true,
31 +
				useany = true,
32 +
				unreachable = true,
33 +
				modernize = true,
34 +
				stylecheck = true,
35 +
				appends = true,
36 +
				asmdecl = true,
37 +
				assign = true,
38 +
				atomic = true,
39 +
				bools = true,
40 +
				buildtag = true,
41 +
				cgocall = true,
42 +
				composite = true,
43 +
				contextcheck = true,
44 +
				deba = true,
45 +
				atomicalign = true,
46 +
				composites = true,
47 +
				copylocks = true,
48 +
				deepequalerrors = true,
49 +
				defers = true,
50 +
				deprecated = true,
51 +
				directive = true,
52 +
				embed = true,
53 +
				errorsas = true,
54 +
				fillreturns = true,
55 +
				framepointer = true,
56 +
				gofix = true,
57 +
				hostport = true,
58 +
				infertypeargs = true,
59 +
				lostcancel = true,
60 +
				httpresponse = true,
61 +
				ifaceassert = true,
62 +
				loopclosure = true,
63 +
				nilfunc = true,
64 +
				nonewvars = true,
65 +
				noresultvalues = true,
66 +
				printf = true,
67 +
				shadow = true,
68 +
				shift = true,
69 +
				sigchanyzer = true,
70 +
				simplifycompositelit = true,
71 +
				simplifyrange = true,
72 +
				simplifyslice = true,
73 +
				slog = true,
74 +
				sortslice = true,
75 +
				stdmethods = true,
76 +
				stdversion = true,
77 +
				stringintconv = true,
78 +
				structtag = true,
79 +
				testinggoroutine = true,
80 +
				tests = true,
81 +
				timeformat = true,
82 +
				unmarshal = true,
83 +
				unsafeptr = true,
84 +
				unusedfunc = true,
85 +
				unusedresult = true,
86 +
				waitgroup = true,
87 +
				yield = true,
88 +
				unusedvariable = true,
89 +
			},
90 +
			usePlaceholders = true,
91 +
			completeUnimported = true,
92 +
			staticcheck = true,
93 +
			directoryFilters = { "-.git", "-.vscode", "-.idea", "-.vscode-test", "-node_modules" },
94 +
			semanticTokens = true,
95 +
		},
96 +
	},
97 +
}
nvim/lsp/lua_ls.lua (added) +28 −0
1 +
return {
2 +
	cmd = {
3 +
		"lua-language-server",
4 +
	},
5 +
	filetypes = {
6 +
		"lua",
7 +
	},
8 +
	root_markers = {
9 +
		".git",
10 +
		".luacheckrc",
11 +
		".luarc.json",
12 +
		".luarc.jsonc",
13 +
		".stylua.toml",
14 +
		"selene.toml",
15 +
		"selene.yml",
16 +
		"stylua.toml",
17 +
	},
18 +
	-- settings = {
19 +
	--     Lua = {
20 +
	--         diagnostics = {
21 +
	--             --     disable = { "missing-parameters", "missing-fields" },
22 +
	--         },
23 +
	--     },
24 +
	-- },
25 +
26 +
	single_file_support = true,
27 +
	log_level = vim.lsp.protocol.MessageType.Warning,
28 +
}
nvim/lsp/tsserver.lua (added) +25 −0
1 +
return {
2 +
	cmd = {
3 +
		"vtsls", "--stdio"
4 +
	},
5 +
	filetypes = {
6 +
		'javascript',
7 +
		'javascriptreact',
8 +
		'javascript.jsx',
9 +
		'typescript',
10 +
		'typescriptreact',
11 +
		'typescript.tsx',
12 +
	},
13 +
	root_markers = {
14 +
		'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
15 +
	-- settings = {
16 +
	--     Lua = {
17 +
	--         diagnostics = {
18 +
	--             --     disable = { "missing-parameters", "missing-fields" },
19 +
	--         },
20 +
	--     },
21 +
	-- },
22 +
23 +
	single_file_support = true,
24 +
	log_level = vim.lsp.protocol.MessageType.Warning,
25 +
}
nvim/lua (deleted) +0 −1
1 -
/Users/stevedylandev/.config/nvim/lua
nvim/lua/config/autocmds.lua (added) +82 −0
1 +
vim.api.nvim_create_autocmd('TextYankPost', {
2 +
  desc = 'Highlight when yanking (copying) text',
3 +
  group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
4 +
  callback = function()
5 +
    vim.highlight.on_yank()
6 +
  end,
7 +
})
8 +
9 +
vim.api.nvim_create_autocmd("LspAttach", {
10 +
  group = vim.api.nvim_create_augroup('lsp-attach', { clear = true }),
11 +
  callback = function(event)
12 +
    local map = function(keys, func, desc)
13 +
      vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
14 +
    end
15 +
16 +
    -- defaults:
17 +
    -- https://neovim.io/doc/user/news-0.11.html#_defaults
18 +
19 +
    map("gl", vim.diagnostic.open_float, "Open Diagnostic Float")
20 +
    map("K", vim.lsp.buf.hover, "Hover Documentation")
21 +
    map("gs", vim.lsp.buf.signature_help, "Signature Documentation")
22 +
    map("gD", vim.lsp.buf.declaration, "Goto Declaration")
23 +
    map("<leader>la", vim.lsp.buf.code_action, "Code Action")
24 +
    map("<leader>lr", vim.lsp.buf.rename, "Rename all references")
25 +
    map("<leader>lf", vim.lsp.buf.format, "Format")
26 +
    map("<leader>v", "<cmd>vsplit | lua vim.lsp.buf.definition()<cr>", "Goto Definition in Vertical Split")
27 +
    map("<leader>d", "<cmd>Telescope diagnostics bufnr=0<CR>", "Open diagnostsics in telescope")
28 +
29 +
    local function client_supports_method(client, method, bufnr)
30 +
      if vim.fn.has 'nvim-0.11' == 1 then
31 +
        return client:supports_method(method, bufnr)
32 +
      else
33 +
        return client.supports_method(method, { bufnr = bufnr })
34 +
      end
35 +
    end
36 +
37 +
    local client = vim.lsp.get_client_by_id(event.data.client_id)
38 +
    if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then
39 +
      local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', { clear = false })
40 +
41 +
      -- When cursor stops moving: Highlights all instances of the symbol under the cursor
42 +
      -- When cursor moves: Clears the highlighting
43 +
      vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
44 +
        buffer = event.buf,
45 +
        group = highlight_augroup,
46 +
        callback = vim.lsp.buf.document_highlight,
47 +
      })
48 +
      vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
49 +
        buffer = event.buf,
50 +
        group = highlight_augroup,
51 +
        callback = vim.lsp.buf.clear_references,
52 +
      })
53 +
54 +
      -- When LSP detaches: Clears the highlighting
55 +
      vim.api.nvim_create_autocmd('LspDetach', {
56 +
        group = vim.api.nvim_create_augroup('lsp-detach', { clear = true }),
57 +
        callback = function(event2)
58 +
          vim.lsp.buf.clear_references()
59 +
          vim.api.nvim_clear_autocmds { group = 'lsp-highlight', buffer = event2.buf }
60 +
        end,
61 +
      })
62 +
    end
63 +
  end,
64 +
65 +
})
66 +
67 +
vim.api.nvim_create_autocmd("VimEnter", {
68 +
  callback = function()
69 +
    if vim.fn.argv(0) == "" then
70 +
      require("telescope.builtin").find_files()
71 +
    end
72 +
  end,
73 +
})
74 +
75 +
76 +
require("conform").setup({
77 +
  format_on_save = {
78 +
    -- These options will be passed to conform.format()
79 +
    timeout_ms = 500,
80 +
    lsp_format = "fallback",
81 +
  },
82 +
})
nvim/lua/config/keymaps.lua (added) +58 −0
1 +
local opts = { noremap = true, silent = true }
2 +
local map = vim.api.nvim_set_keymap
3 +
4 +
-- format
5 +
-- Fast saving
6 +
map("n", "++", "<cmd>write!<CR>", opts)
7 +
8 +
-- Some useful quickfix shortcuts for quickfix
9 +
map("n", "<C-n>", "<cmd>cnext<CR>zz", opts)
10 +
map("n", "<C-m>", "<cmd>cprev<CR>zz", opts)
11 +
map("n", "<leader>a", "<cmd>cclose<CR>", opts)
12 +
13 +
-- Exit on jj and jk
14 +
map("n", "j", "gj", opts)
15 +
map("n", "k", "gk", opts)
16 +
17 +
-- Exit on jj and jk
18 +
map("i", "jj", "<ESC>", opts)
19 +
map("i", "jk", "<ESC>", opts)
20 +
21 +
-- Remove search highlight
22 +
map("n", "<leader>h", "<cmd>nohlsearch<CR>", opts)
23 +
24 +
-- Grab text between curly braces
25 +
map("n", "YY", "va{Vy", opts)
26 +
27 +
-- goodies
28 +
map("n", "n", "nzzzv", opts)
29 +
map("n", "N", "Nzzzv", opts)
30 +
map("n", "J", "mzJ`z", opts)
31 +
map("n", "<C-d>", "<C-d>zz", opts)
32 +
map("n", "<C-u>", "<C-u>zz", opts)
33 +
34 +
-- Navigate buffers
35 +
map("n", "<S-l>", ":bnext<CR>", opts)
36 +
map("n", "<S-h>", ":bprevious<CR>", opts)
37 +
38 +
-- If I visually select words and paste from clipboard, don't replace my
39 +
-- clipboard with the selected word, instead keep my old word in the
40 +
-- clipboard
41 +
map("x", "p", '"_dP', opts)
42 +
43 +
-- Better split switching
44 +
-- map("n", "<C-h>", "<C-w>h", opts)
45 +
-- map("n", "<C-j>", "<C-w>j", opts)
46 +
-- map("n", "<C-k>", "<C-w>k", opts)
47 +
-- map("n", "<C-l>", "<C-w>l", opts)
48 +
49 +
-- Visual --
50 +
-- Stay in indent mode
51 +
map("v", "<", "<gv", opts)
52 +
map("v", ">", ">gv", opts)
53 +
54 +
-- Visually select lines, and move them up/down
55 +
map("v", "J", ":m '>+1<CR>gv=gv", opts)
56 +
map("v", "K", ":m '<-2<CR>gv=gv", opts)
57 +
58 +
map("n", "<leader>c", ":bd<cr>", opts)
nvim/lua/config/options.lua (added) +73 −0
1 +
vim.g.mapleader = " "
2 +
vim.g.maplocalleader = "\\"
3 +
4 +
vim.g.autoformat = true
5 +
6 +
vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
7 +
8 +
local opt = vim.opt
9 +
10 +
vim.opt.swapfile = false
11 +
opt.autowrite = true           -- Enable auto write
12 +
opt.clipboard = "unnamedplus"  -- Sync with system clipboard
13 +
opt.completeopt = "menu,menuone,noselect"
14 +
opt.conceallevel = 3           -- Hide * markup for bold and italic
15 +
opt.confirm = true             -- Confirm to save changes before exiting modified buffer
16 +
opt.cursorline = true          -- Enable highlighting of the current line
17 +
opt.expandtab = true           -- Use spaces instead of tabs
18 +
opt.formatoptions = "jcroqlnt" -- tcqj
19 +
opt.grepformat = "%f:%l:%c:%m"
20 +
opt.grepprg = "rg --vimgrep"
21 +
opt.ignorecase = true      -- Ignore case
22 +
opt.inccommand = "nosplit" -- preview incremental substitute
23 +
opt.laststatus = 3         -- global statusline
24 +
opt.list = true            -- Show some invisible characters (tabs...
25 +
opt.mouse = "a"            -- Enable mouse mode
26 +
opt.number = true          -- Print line number
27 +
opt.pumblend = 10          -- Popup blend
28 +
opt.pumheight = 10         -- Maximum number of entries in a popup
29 +
opt.relativenumber = true  -- Relative line numbers
30 +
opt.scrolloff = 4          -- Lines of context
31 +
opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp", "folds" }
32 +
opt.shiftround = true      -- Round indent
33 +
opt.shiftwidth = 2         -- Size of an indent
34 +
opt.shortmess:append({ W = true, I = true, c = true, C = true })
35 +
opt.showmode = false       -- Dont show mode since we have a statusline
36 +
opt.sidescrolloff = 8      -- Columns of context
37 +
opt.signcolumn = "yes"     -- Always show the signcolumn, otherwise it would shift the text each time
38 +
opt.smartcase = true       -- Don't ignore case with capitals
39 +
opt.smartindent = true     -- Insert indents automatically
40 +
opt.spelllang = { "en" }
41 +
opt.splitbelow = true      -- Put new windows below current
42 +
opt.splitkeep = "screen"
43 +
opt.splitright = true      -- Put new windows right of current
44 +
opt.tabstop = 2            -- Number of spaces tabs count for
45 +
opt.termguicolors = true   -- True color support
46 +
opt.timeoutlen = 300
47 +
opt.undofile = true
48 +
opt.undolevels = 10000
49 +
opt.updatetime = 200               -- Save swap file and trigger CursorHold
50 +
opt.virtualedit = "block"          -- Allow cursor to move where there is no text in visual block mode
51 +
opt.wildmode = "longest:full,full" -- Command-line completion mode
52 +
opt.winminwidth = 5                -- Minimum window width
53 +
opt.wrap = false                   -- Disable line wrap
54 +
opt.fillchars = {
55 +
  foldopen = "",
56 +
  foldclose = "",
57 +
  -- fold = "⸱",
58 +
  fold = " ",
59 +
  foldsep = " ",
60 +
  diff = "╱",
61 +
  eob = " ",
62 +
}
63 +
opt.list = false
64 +
65 +
if vim.fn.has("nvim-0.10") == 1 then
66 +
  opt.smoothscroll = true
67 +
end
68 +
69 +
-- Fix markdown indentation settings
70 +
vim.g.markdown_recommended_style = 0
71 +
vim.filetype.add({ extension = { mdx = "mdx", }, })
72 +
vim.treesitter.language.register("markdown", "mdx")
73 +
nvim/lua/core/lazy.lua (added) +38 −0
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 +
        error('Error cloning lazy.nvim:\n' .. out)
7 +
    end
8 +
end ---@diagnostic disable-next-line: undefined-field
9 +
vim.opt.rtp:prepend(lazypath)
10 +
11 +
require("lazy").setup({ import = "plugins" }, {
12 +
    install = {
13 +
        missing = true,
14 +
        colorscheme = { "habamax" }
15 +
    },
16 +
    checker = {
17 +
        enabled = true,
18 +
        notify = false,
19 +
    },
20 +
    change_detection = {
21 +
        enabled = true,
22 +
        notify = false,
23 +
    },
24 +
    ui = {
25 +
        -- border = "rounded"
26 +
    },
27 +
    performance = {
28 +
        rtp = {
29 +
            disabled_plugins = {
30 +
                "gzip",
31 +
                "tarPlugin",
32 +
                "tohtml",
33 +
                "tutor",
34 +
                "zipPlugin",
35 +
            },
36 +
        },
37 +
    },
38 +
})
nvim/lua/core/lsp.lua (added) +29 −0
1 +
vim.lsp.enable({
2 +
    "gopls",
3 +
    "lua_ls",
4 +
    "tsserver"
5 +
})
6 +
7 +
vim.diagnostic.config({
8 +
    virtual_lines = false,
9 +
    -- virtual_text = true,
10 +
    underline = true,
11 +
    update_in_insert = false,
12 +
    severity_sort = true,
13 +
    float = {
14 +
        border = "rounded",
15 +
        source = true,
16 +
    },
17 +
    signs = {
18 +
        text = {
19 +
            [vim.diagnostic.severity.ERROR] = "󰅚 ",
20 +
            [vim.diagnostic.severity.WARN] = "󰀪 ",
21 +
            [vim.diagnostic.severity.INFO] = "󰋽 ",
22 +
            [vim.diagnostic.severity.HINT] = "󰌶 ",
23 +
        },
24 +
        numhl = {
25 +
            [vim.diagnostic.severity.ERROR] = "ErrorMsg",
26 +
            [vim.diagnostic.severity.WARN] = "WarningMsg",
27 +
        },
28 +
    },
29 +
})
nvim/lua/plugins/blink.lua (added) +63 −0
1 +
return {
2 +
    { "L3MON4D3/LuaSnip", keys = {} },
3 +
    {
4 +
        "saghen/blink.cmp",
5 +
        event = "InsertEnter", -- Only load when entering insert mode
6 +
        dependencies = {
7 +
            "rafamadriz/friendly-snippets",
8 +
        },
9 +
        version = "*",
10 +
        config = function()
11 +
            require("blink.cmp").setup({
12 +
                snippets = { preset = "default" },
13 +
                signature = { enabled = true },
14 +
                appearance = {
15 +
                    use_nvim_cmp_as_default = false,
16 +
                    nerd_font_variant = "normal",
17 +
                },
18 +
                sources = {
19 +
                    default = { "lsp", "path", "snippets", "buffer" },
20 +
                    providers = {
21 +
                        cmdline = {
22 +
                            min_keyword_length = 2,
23 +
                        },
24 +
                    },
25 +
                },
26 +
                keymap = {
27 +
                    ["<C-f>"] = {},
28 +
                },
29 +
                cmdline = {
30 +
                    enabled = false,
31 +
                    completion = { menu = { auto_show = true } },
32 +
                    keymap = {
33 +
                        ["<CR>"] = { "accept_and_enter", "fallback" },
34 +
                    },
35 +
                },
36 +
                completion = {
37 +
                    menu = {
38 +
                        border = nil,
39 +
                        scrolloff = 1,
40 +
                        scrollbar = false,
41 +
                        draw = {
42 +
                            columns = {
43 +
                                { "kind_icon" },
44 +
                                { "label",      "label_description", gap = 1 },
45 +
                                { "kind" },
46 +
                                { "source_name" },
47 +
                            },
48 +
                        },
49 +
                    },
50 +
                    documentation = {
51 +
                        window = {
52 +
                            border = nil,
53 +
                            scrollbar = false,
54 +
                            winhighlight = 'Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,EndOfBuffer:BlinkCmpDoc',
55 +
                        },
56 +
                        auto_show = true,
57 +
                        auto_show_delay_ms = 500,
58 +
                    },
59 +
                },
60 +
            })
61 +
        end,
62 +
    },
63 +
}
nvim/lua/plugins/colorschemes.lua (added) +8 −0
1 +
return {
2 +
	"RRethy/base16-nvim",
3 +
	lazy = false,
4 +
	priority = 1000,
5 +
	config = function()
6 +
		vim.cmd.colorscheme "base16-black-metal-bathory"
7 +
	end,
8 +
}
nvim/lua/plugins/comments.lua (added) +8 −0
1 +
return {
2 +
  "numToStr/Comment.nvim",
3 +
  opts = {},
4 +
  config = function()
5 +
    require("Comment").setup()
6 +
  end,
7 +
}
8 +
nvim/lua/plugins/conform.lua (added) +16 −0
1 +
return {
2 +
	"stevearc/conform.nvim",
3 +
	opts = {},
4 +
	config = function()
5 +
		require("conform").setup({
6 +
			formatters_by_ft = {
7 +
				lua = { "stylua" },
8 +
				go = { "goimports", "golines", "gofmt" },
9 +
			},
10 +
			-- format_on_save = {
11 +
			--     lsp_fallback = true,
12 +
			--     async = false,
13 +
			-- },
14 +
		})
15 +
	end,
16 +
}
nvim/lua/plugins/formatter.lua (added) +14 −0
1 +
return {
2 +
  "stevearc/conform.nvim",
3 +
  config = function()
4 +
    require("conform").setup({
5 +
      formatters_by_ft = {
6 +
        lua = { "lua_ls" },
7 +
        -- Conform will run multiple formatters sequentially
8 +
        python = { "isort", "black" },
9 +
        -- Use a sub-list to run only the first available formatter
10 +
        javascript = { { "prettier" } },
11 +
      },
12 +
    })
13 +
  end,
14 +
}
nvim/lua/plugins/gitsigns.lua (added) +15 −0
1 +
return {
2 +
    "lewis6991/gitsigns.nvim",
3 +
    config = function()
4 +
        require("gitsigns").setup({
5 +
            signs = {
6 +
                add = { text = "+" },
7 +
                change = { text = "~" },
8 +
                delete = { text = "-" },
9 +
                topdelete = { text = "" },
10 +
                changedelete = { text = "▎" },
11 +
                untracked = { text = "+" },
12 +
            },
13 +
        })
14 +
    end,
15 +
}
nvim/lua/plugins/lazydev.lua (added) +30 −0
1 +
return {
2 +
    {
3 +
        "folke/lazydev.nvim",
4 +
        ft = "lua", -- only load on lua files
5 +
        opts = {
6 +
            library = {
7 +
                -- See the configuration section for more details
8 +
                -- Load luvit types when the `vim.uv` word is found
9 +
                { path = "${3rd}/luv/library", words = { "vim%.uv" } },
10 +
            },
11 +
        },
12 +
    },
13 +
    {
14 +
        "saghen/blink.cmp",
15 +
        opts = {
16 +
            sources = {
17 +
                -- add lazydev to your completion providers
18 +
                default = { "lazydev", "lsp", "path", "snippets", "buffer" },
19 +
                providers = {
20 +
                    lazydev = {
21 +
                        name = "LazyDev",
22 +
                        module = "lazydev.integrations.blink",
23 +
                        -- make lazydev completions top priority (see `:h blink.cmp`)
24 +
                        score_offset = 100,
25 +
                    },
26 +
                },
27 +
            },
28 +
        },
29 +
    }
30 +
}
nvim/lua/plugins/lualine.lua (added) +80 −0
1 +
return {
2 +
  "nvim-lualine/lualine.nvim",
3 +
  enabled = true,
4 +
  lazy = true,
5 +
  event = { "BufReadPost", "BufNewFile", "VeryLazy" },
6 +
  config = function()
7 +
    require("lualine").setup({
8 +
      options = {
9 +
        theme = "auto",
10 +
        icons_enabled = true,
11 +
        section_separators = "",
12 +
        component_separators = "",
13 +
        disabled_filetypes = {
14 +
          statusline = {
15 +
            "help",
16 +
            "startify",
17 +
            "dashboard",
18 +
            "neo-tree",
19 +
            "packer",
20 +
            "neogitstatus",
21 +
            "NvimTree",
22 +
            "Trouble",
23 +
            "alpha",
24 +
            "lir",
25 +
            "Outline",
26 +
            "spectre_panel",
27 +
            "toggleterm",
28 +
            "qf",
29 +
          },
30 +
          winbar = {},
31 +
        },
32 +
      },
33 +
      sections = {
34 +
        lualine_a = {},
35 +
        lualine_b = {},
36 +
        lualine_c = {
37 +
          -- "filename",
38 +
          {
39 +
            "filetype",
40 +
            icon_only = true,
41 +
            separator = "",
42 +
            padding = {
43 +
              left = 1,
44 +
              right = 0,
45 +
            },
46 +
          },
47 +
          {
48 +
            "filename",
49 +
            path = 1,
50 +
            symbols = {
51 +
              modified = "  ",
52 +
              readonly = "",
53 +
              unnamed = "",
54 +
            },
55 +
          },
56 +
          { "diagnostics", sources = { "nvim_lsp" }, symbols = { error = " ", warn = " ", info = " " } },
57 +
          { "diff" },
58 +
          { "searchcount" },
59 +
        },
60 +
        lualine_x = { { "b:gitsigns_head", icon = "" } },
61 +
        lualine_y = { "progress" },
62 +
        lualine_z = {
63 +
          -- function()
64 +
          --   return " " .. os.date("%R")
65 +
          -- end,
66 +
        },
67 +
      },
68 +
      inactive_sections = {
69 +
        lualine_a = {},
70 +
        lualine_b = {},
71 +
        lualine_c = { "filename" },
72 +
        lualine_x = { "location" },
73 +
        lualine_y = {},
74 +
        lualine_z = {},
75 +
      },
76 +
      tabline = {},
77 +
      extensions = { "neo-tree", "lazy" },
78 +
    })
79 +
  end,
80 +
}
nvim/lua/plugins/neotree.lua (added) +47 −0
1 +
return {
2 +
	"nvim-neo-tree/neo-tree.nvim",
3 +
	branch = "v3.x",
4 +
	dependencies = {
5 +
		"nvim-lua/plenary.nvim",
6 +
		"nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
7 +
		"MunifTanjim/nui.nvim",
8 +
		-- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information
9 +
	},
10 +
	config = function()
11 +
		local opts = { noremap = true, silent = true }
12 +
		local map = vim.api.nvim_set_keymap
13 +
		map("n", "<leader>e", ":Neotree toggle<CR>", opts)
14 +
		require("neo-tree").setup({
15 +
			popup_border_style = "rounded",
16 +
			enable_git_status = true,
17 +
			window = {
18 +
				position = "float",
19 +
			},
20 +
			filesystem = {
21 +
				filtered_items = {
22 +
					hide_dotfiles = false,
23 +
					always_show = {
24 +
						"*.env",
25 +
					},
26 +
				},
27 +
			},
28 +
			default_component_configs = {
29 +
				git_status = {
30 +
					symbols = {
31 +
						-- Change type
32 +
						added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name
33 +
						modified = "", -- or "", but this is redundant info if you use git_status_colors on the name
34 +
						deleted = "✖", -- this can only be used in the git_status source
35 +
						renamed = "󰁕", -- this can only be used in the git_status source
36 +
						-- Status type
37 +
						untracked = "",
38 +
						ignored = "",
39 +
						unstaged = "󰄱",
40 +
						staged = "",
41 +
						conflict = "",
42 +
					},
43 +
				},
44 +
			},
45 +
		})
46 +
	end,
47 +
}
nvim/lua/plugins/nvim-surround.lua (added) +9 −0
1 +
return {
2 +
    "kylechui/nvim-surround",
3 +
    version = "*", -- Use for stability; omit to use `main` branch for the latest features
4 +
    config = function()
5 +
        require("nvim-surround").setup({
6 +
            -- Configuration here, or leave empty to use defaults
7 +
        })
8 +
    end
9 +
}
nvim/lua/plugins/telescope.lua (added) +194 −0
1 +
return {
2 +
  "nvim-telescope/telescope.nvim",
3 +
  tag = "0.1.5",
4 +
  config = function()
5 +
    local builtin = require('telescope.builtin')
6 +
    vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
7 +
    vim.keymap.set('n', '<leader>/', builtin.live_grep, {})
8 +
    vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
9 +
    vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
10 +
    vim.keymap.set('n', '<leader>sd', ":Telescope diagnostics bufnr=0<cr>", {})
11 +
    vim.keymap.set('n', "<leader>sD", "<cmd>Telescope diagnostics<cr>", {})
12 +
    vim.keymap.set('n', "<Leader>o", ":Telescope buffers theme=dropdown<CR>", {})
13 +
    vim.keymap.set('n', "<leader><leader>", ":Telescope smart_open<CR>", {})
14 +
    vim.keymap.set('n', "<leader>gc", "<cmd>Telescope git_commits<CR>", {})
15 +
    vim.keymap.set('n', "<leader>gs", "<cmd>Telescope git_status<CR>", {})
16 +
    vim.keymap.set('n', "<leader>sb", "<cmd>Telescope current_buffer_fuzzy_find<cr>", {})
17 +
18 +
19 +
20 +
    local telescope = require("telescope")
21 +
    local actions = require("telescope.actions")
22 +
    telescope.setup({
23 +
      file_ignore_patterns = { "%.git/.", "node_modules" },
24 +
      defaults = {
25 +
        mappings = {
26 +
          i = {
27 +
            ["<esc>"] = actions.close,
28 +
          },
29 +
        },
30 +
        previewer = false,
31 +
        hidden = true,
32 +
        prompt_prefix = "   ",
33 +
        file_ignore_patterns = { "node_modules", "package-lock.json" },
34 +
        initial_mode = "insert",
35 +
        select_strategy = "reset",
36 +
        sorting_strategy = "ascending",
37 +
        -- layout_strategy = "horizontal",
38 +
        layout_config = {
39 +
          --   width = 0.5,
40 +
          --   height = 0.4,
41 +
          prompt_position = "top",
42 +
          preview_cutoff = 120,
43 +
        },
44 +
      },
45 +
      pickers = {
46 +
        find_files = {
47 +
          -- theme = "dropdown",
48 +
          previewer = true,
49 +
          layout_config = {
50 +
            -- width = 0.5,
51 +
            height = 0.8,
52 +
            prompt_position = "top",
53 +
            preview_cutoff = 120,
54 +
          },
55 +
        },
56 +
        git_files = {
57 +
          previewer = true,
58 +
          layout_config = {
59 +
            height = 0.8,
60 +
            prompt_position = "top",
61 +
            preview_cutoff = 120,
62 +
          },
63 +
        },
64 +
        buffers = {
65 +
          mappings = {
66 +
            i = {
67 +
              ["<c-d>"] = actions.delete_buffer,
68 +
              ["<c-j>"] = actions.move_selection_next,
69 +
              ["<c-k>"] = actions.move_selection_previous,
70 +
            },
71 +
            n = {
72 +
              ["<c-d>"] = actions.delete_buffer,
73 +
              ["<c-j>"] = actions.move_selection_next,
74 +
              ["<c-k>"] = actions.move_selection_previous,
75 +
            },
76 +
          },
77 +
          previewer = false,
78 +
          initial_mode = "insert",
79 +
          theme = "dropdown",
80 +
          layout_config = {
81 +
            width = 0.5,
82 +
            height = 0.4,
83 +
            prompt_position = "top",
84 +
            preview_cutoff = 120,
85 +
          },
86 +
        },
87 +
        current_buffer_fuzzy_find = {
88 +
          previewer = true,
89 +
          -- theme = "dropdown",
90 +
          layout_config = {
91 +
            -- width = 0.5,
92 +
            height = 0.8,
93 +
            prompt_position = "top",
94 +
            preview_cutoff = 120,
95 +
          },
96 +
        },
97 +
        live_grep = {
98 +
          file_ignore_patterns = { "node_modules", "package-lock.json" },
99 +
          only_sort_text = true,
100 +
          previewer = true,
101 +
          layout_config = {
102 +
            horizontal = {
103 +
              width = 0.9,
104 +
              height = 0.75,
105 +
              preview_width = 0.6,
106 +
            },
107 +
          },
108 +
        },
109 +
        grep_string = {
110 +
          only_sort_text = true,
111 +
          previewer = true,
112 +
          layout_config = {
113 +
            horizontal = {
114 +
              width = 0.9,
115 +
              height = 0.75,
116 +
              preview_width = 0.6,
117 +
            },
118 +
          },
119 +
        },
120 +
        lsp_references = {
121 +
          show_line = false,
122 +
          previewer = true,
123 +
          layout_config = {
124 +
            horizontal = {
125 +
              width = 0.9,
126 +
              height = 0.75,
127 +
              preview_width = 0.6,
128 +
            },
129 +
          },
130 +
        },
131 +
        treesitter = {
132 +
          show_line = false,
133 +
          previewer = true,
134 +
          layout_config = {
135 +
            horizontal = {
136 +
              width = 0.9,
137 +
              height = 0.75,
138 +
              preview_width = 0.6,
139 +
            },
140 +
          },
141 +
        },
142 +
      },
143 +
      extensions = {
144 +
        fzf = {
145 +
          fuzzy = true,                   -- false will only do exact matching
146 +
          override_generic_sorter = true, -- override the generic sorter
147 +
          override_file_sorter = true,    -- override the file sorter
148 +
          case_mode = "smart_case",       -- or "ignore_case" or "respect_case"
149 +
        },
150 +
        ["ui-select"] = {
151 +
          require("telescope.themes").get_dropdown({
152 +
            previewer = false,
153 +
            initial_mode = "normal",
154 +
            sorting_strategy = "ascending",
155 +
            layout_strategy = "horizontal",
156 +
            layout_config = {
157 +
              horizontal = {
158 +
                width = 0.5,
159 +
                height = 0.4,
160 +
                preview_width = 0.6,
161 +
              },
162 +
            },
163 +
          }),
164 +
        },
165 +
        frecency = {
166 +
          default_workspace = "CWD",
167 +
          show_scores = true,
168 +
          show_unindexed = true,
169 +
          disable_devicons = false,
170 +
          ignore_patterns = {
171 +
            "*.git/*",
172 +
            "*/tmp/*",
173 +
            "*/lua-language-server/*",
174 +
          },
175 +
        },
176 +
        -- file_browser = {
177 +
        --   -- theme = "",
178 +
        --   previewer = true,
179 +
        --   -- disables netrw and use telescope-file-browser in its place
180 +
        --   hijack_netrw = true,
181 +
        --   -- mappings = {
182 +
        --   --   ["i"] = {
183 +
        --   --     -- your custom insert mode mappings
184 +
        --   --   },
185 +
        --   --   ["n"] = {
186 +
        --   --     -- your custom normal mode mappings
187 +
        --   --   },
188 +
        --   -- },
189 +
        -- },
190 +
      },
191 +
    })
192 +
    -- telescope.load_extension("file_browser")
193 +
  end,
194 +
}
nvim/lua/plugins/tmux-navigator.lua (added) +9 −0
1 +
return {
2 +
    "christoomey/vim-tmux-navigator",
3 +
    config = function()
4 +
        vim.keymap.set("n", "<C-h>", "<cmd>TmuxNavigateLeft<CR>", opts)
5 +
        vim.keymap.set("n", "<C-j>", "<cmd>TmuxNavigateDown<CR>", opts)
6 +
        vim.keymap.set("n", "<C-k>", "<cmd>TmuxNavigateUp<CR>", opts)
7 +
        vim.keymap.set("n", "<C-l>", "<cmd>TmuxNavigateRight<CR>", opts)
8 +
    end,
9 +
}
nvim/lua/plugins/treesitter.lua (added) +103 −0
1 +
return {
2 +
	"nvim-treesitter/nvim-treesitter",
3 +
	version = false,
4 +
	build = ":TSUpdate",
5 +
	event = { "BufReadPost", "BufNewFile" },
6 +
	dependencies = {
7 +
		"nvim-treesitter/nvim-treesitter-textobjects",
8 +
	},
9 +
	config = function()
10 +
		require("nvim-treesitter.configs").setup({
11 +
			sync_install = false,
12 +
			ignore_install = { "javascript" },
13 +
			modules = {},
14 +
			highlight = {
15 +
				enable = true,
16 +
				additional_vim_regex_highlighting = false,
17 +
			},
18 +
			indent = { enable = true },
19 +
			auto_install = true,
20 +
			ensure_installed = {
21 +
				"bash",
22 +
				"c",
23 +
				"html",
24 +
				"javascript",
25 +
				"json",
26 +
				"lua",
27 +
				"luadoc",
28 +
				"luap",
29 +
				"query",
30 +
				"regex",
31 +
				"vim",
32 +
				"vimdoc",
33 +
				"yaml",
34 +
				"rust",
35 +
				"go",
36 +
				"gomod",
37 +
				"gowork",
38 +
				"gosum",
39 +
			},
40 +
			incremental_selection = {
41 +
				enable = true,
42 +
				keymaps = {
43 +
					init_selection = "<leader>vv",
44 +
					node_incremental = "+",
45 +
					scope_incremental = false,
46 +
					node_decremental = "_",
47 +
				},
48 +
			},
49 +
			textobjects = {
50 +
				select = {
51 +
					enable = true,
52 +
					lookahead = true,
53 +
54 +
					keymaps = {
55 +
						-- You can use the capture groups defined in textobjects.scm
56 +
						["af"] = { query = "@function.outer", desc = "around a function" },
57 +
						["if"] = { query = "@function.inner", desc = "inner part of a function" },
58 +
						["ac"] = { query = "@class.outer", desc = "around a class" },
59 +
						["ic"] = { query = "@class.inner", desc = "inner part of a class" },
60 +
						["ai"] = { query = "@conditional.outer", desc = "around an if statement" },
61 +
						["ii"] = { query = "@conditional.inner", desc = "inner part of an if statement" },
62 +
						["al"] = { query = "@loop.outer", desc = "around a loop" },
63 +
						["il"] = { query = "@loop.inner", desc = "inner part of a loop" },
64 +
						["ap"] = { query = "@parameter.outer", desc = "around parameter" },
65 +
						["ip"] = { query = "@parameter.inner", desc = "inside a parameter" },
66 +
					},
67 +
					selection_modes = {
68 +
						["@parameter.outer"] = "v", -- charwise
69 +
						["@parameter.inner"] = "v", -- charwise
70 +
						["@function.outer"] = "v", -- charwise
71 +
						["@conditional.outer"] = "V", -- linewise
72 +
						["@loop.outer"] = "V",  -- linewise
73 +
						["@class.outer"] = "<c-v>", -- blockwise
74 +
					},
75 +
					include_surrounding_whitespace = false,
76 +
				},
77 +
				move = {
78 +
					enable = true,
79 +
					set_jumps = true, -- whether to set jumps in the jumplist
80 +
					goto_previous_start = {
81 +
						["[f"] = { query = "@function.outer", desc = "Previous function" },
82 +
						["[c"] = { query = "@class.outer", desc = "Previous class" },
83 +
						["[p"] = { query = "@parameter.inner", desc = "Previous parameter" },
84 +
					},
85 +
					goto_next_start = {
86 +
						["]f"] = { query = "@function.outer", desc = "Next function" },
87 +
						["]c"] = { query = "@class.outer", desc = "Next class" },
88 +
						["]p"] = { query = "@parameter.inner", desc = "Next parameter" },
89 +
					},
90 +
				},
91 +
				swap = {
92 +
					enable = true,
93 +
					swap_next = {
94 +
						["<leader>a"] = "@parameter.inner",
95 +
					},
96 +
					swap_previous = {
97 +
						["<leader>A"] = "@parameter.inner",
98 +
					},
99 +
				},
100 +
			},
101 +
		})
102 +
	end,
103 +
}
nvim/lua/plugins/vim-sleuth.lua (added) +3 −0
1 +
return {
2 +
    "tpope/vim-sleuth",
3 +
}