Compare commits
	
		
			No commits in common. "607eb41d72c39d27b00baca4ed020e14ec8ff0da" and "158e01a90f1908d31b2d827cb2cbbc444743ab5d" have entirely different histories.
		
	
	
		
			607eb41d72
			...
			158e01a90f
		
	
		| 
						 | 
					@ -5,4 +5,3 @@ fish/fish_variables
 | 
				
			||||||
*.log
 | 
					*.log
 | 
				
			||||||
# hlctl config file
 | 
					# hlctl config file
 | 
				
			||||||
herbstluftwm/hlctl.toml
 | 
					herbstluftwm/hlctl.toml
 | 
				
			||||||
nushell/history.txt
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import = ["/home/emilis/.config/alacritty/themes/dark.toml"]
 | 
					import = ["/home/emilis/.config/alacritty/themes/xterm.toml"]
 | 
				
			||||||
live_config_reload = true
 | 
					live_config_reload = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[colors]
 | 
					[colors]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,27 +0,0 @@
 | 
				
			||||||
[colors.bright]
 | 
					 | 
				
			||||||
black = "0x7f7f7f"
 | 
					 | 
				
			||||||
blue = "0x79c0ff"
 | 
					 | 
				
			||||||
cyan = "0x39c5cf"
 | 
					 | 
				
			||||||
green = "0x79c0ff"
 | 
					 | 
				
			||||||
magenta = "0xbc8cff"
 | 
					 | 
				
			||||||
red = "0xfdac54"
 | 
					 | 
				
			||||||
white = "0xb1bac4"
 | 
					 | 
				
			||||||
yellow = "0xe3b341"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[colors.cursor]
 | 
					 | 
				
			||||||
cursor = "0xc9d1d9"
 | 
					 | 
				
			||||||
text = "0x0d1117"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[colors.normal]
 | 
					 | 
				
			||||||
black = "0x000000"
 | 
					 | 
				
			||||||
blue = "0x58a6ff"
 | 
					 | 
				
			||||||
cyan = "0x39c5cf"
 | 
					 | 
				
			||||||
green = "0x58a6ff"
 | 
					 | 
				
			||||||
magenta = "0xbc8cff"
 | 
					 | 
				
			||||||
red = "0xec8e2c"
 | 
					 | 
				
			||||||
white = "0xb1bac4"
 | 
					 | 
				
			||||||
yellow = "0xd29922"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[colors.primary]
 | 
					 | 
				
			||||||
background = "0x000000"
 | 
					 | 
				
			||||||
foreground = "0xffffff"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ set fish_greeting ""
 | 
				
			||||||
# Add local bin paths
 | 
					# Add local bin paths
 | 
				
			||||||
fish_add_path $HOME/.cargo/bin
 | 
					fish_add_path $HOME/.cargo/bin
 | 
				
			||||||
fish_add_path $HOME/.bin
 | 
					fish_add_path $HOME/.bin
 | 
				
			||||||
 | 
					fish_add_path $HOME/go/bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Local per-machine changes
 | 
					# Local per-machine changes
 | 
				
			||||||
source $HOME/.fishrc || true
 | 
					source $HOME/.fishrc
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ else
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
for directory in *
 | 
					for directory in */
 | 
				
			||||||
    if test -L (string sub -e -1 $config_dir/$directory)
 | 
					    if test -L (string sub -e -1 $config_dir/$directory)
 | 
				
			||||||
        echo "already have a simlink for <$(string sub -e -1 $directory)>"
 | 
					        echo "already have a simlink for <$(string sub -e -1 $directory)>"
 | 
				
			||||||
        continue
 | 
					        continue
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,841 +0,0 @@
 | 
				
			||||||
# Nushell Config File
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# version = "0.91.1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# For more information on defining custom themes, see
 | 
					 | 
				
			||||||
# https://www.nushell.sh/book/coloring_and_theming.html
 | 
					 | 
				
			||||||
# And here is the theme collection
 | 
					 | 
				
			||||||
# https://github.com/nushell/nu_scripts/tree/main/themes
 | 
					 | 
				
			||||||
let dark_theme = {
 | 
					 | 
				
			||||||
    # color for nushell primitives
 | 
					 | 
				
			||||||
    separator: white
 | 
					 | 
				
			||||||
    leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
 | 
					 | 
				
			||||||
    header: green_bold
 | 
					 | 
				
			||||||
    empty: blue
 | 
					 | 
				
			||||||
    # Closures can be used to choose colors for specific values.
 | 
					 | 
				
			||||||
    # The value (in this case, a bool) is piped into the closure.
 | 
					 | 
				
			||||||
    # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
 | 
					 | 
				
			||||||
    bool: light_cyan
 | 
					 | 
				
			||||||
    int: white
 | 
					 | 
				
			||||||
    filesize: cyan
 | 
					 | 
				
			||||||
    duration: white
 | 
					 | 
				
			||||||
    date: purple
 | 
					 | 
				
			||||||
    range: white
 | 
					 | 
				
			||||||
    float: white
 | 
					 | 
				
			||||||
    string: white
 | 
					 | 
				
			||||||
    nothing: white
 | 
					 | 
				
			||||||
    binary: white
 | 
					 | 
				
			||||||
    cell-path: white
 | 
					 | 
				
			||||||
    row_index: green_bold
 | 
					 | 
				
			||||||
    record: white
 | 
					 | 
				
			||||||
    list: white
 | 
					 | 
				
			||||||
    block: white
 | 
					 | 
				
			||||||
    hints: dark_gray
 | 
					 | 
				
			||||||
    search_result: { bg: red fg: white }
 | 
					 | 
				
			||||||
    shape_and: purple_bold
 | 
					 | 
				
			||||||
    shape_binary: purple_bold
 | 
					 | 
				
			||||||
    shape_block: blue_bold
 | 
					 | 
				
			||||||
    shape_bool: light_cyan
 | 
					 | 
				
			||||||
    shape_closure: green_bold
 | 
					 | 
				
			||||||
    shape_custom: green
 | 
					 | 
				
			||||||
    shape_datetime: cyan_bold
 | 
					 | 
				
			||||||
    shape_directory: cyan
 | 
					 | 
				
			||||||
    shape_external: cyan
 | 
					 | 
				
			||||||
    shape_externalarg: green_bold
 | 
					 | 
				
			||||||
    shape_external_resolved: light_yellow_bold
 | 
					 | 
				
			||||||
    shape_filepath: cyan
 | 
					 | 
				
			||||||
    shape_flag: blue_bold
 | 
					 | 
				
			||||||
    shape_float: purple_bold
 | 
					 | 
				
			||||||
    # shapes are used to change the cli syntax highlighting
 | 
					 | 
				
			||||||
    shape_garbage: { fg: white bg: red attr: b}
 | 
					 | 
				
			||||||
    shape_globpattern: cyan_bold
 | 
					 | 
				
			||||||
    shape_int: purple_bold
 | 
					 | 
				
			||||||
    shape_internalcall: cyan_bold
 | 
					 | 
				
			||||||
    shape_keyword: cyan_bold
 | 
					 | 
				
			||||||
    shape_list: cyan_bold
 | 
					 | 
				
			||||||
    shape_literal: blue
 | 
					 | 
				
			||||||
    shape_match_pattern: green
 | 
					 | 
				
			||||||
    shape_matching_brackets: { attr: u }
 | 
					 | 
				
			||||||
    shape_nothing: light_cyan
 | 
					 | 
				
			||||||
    shape_operator: yellow
 | 
					 | 
				
			||||||
    shape_or: purple_bold
 | 
					 | 
				
			||||||
    shape_pipe: purple_bold
 | 
					 | 
				
			||||||
    shape_range: yellow_bold
 | 
					 | 
				
			||||||
    shape_record: cyan_bold
 | 
					 | 
				
			||||||
    shape_redirection: purple_bold
 | 
					 | 
				
			||||||
    shape_signature: green_bold
 | 
					 | 
				
			||||||
    shape_string: green
 | 
					 | 
				
			||||||
    shape_string_interpolation: cyan_bold
 | 
					 | 
				
			||||||
    shape_table: blue_bold
 | 
					 | 
				
			||||||
    shape_variable: purple
 | 
					 | 
				
			||||||
    shape_vardecl: purple
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let light_theme = {
 | 
					 | 
				
			||||||
    # color for nushell primitives
 | 
					 | 
				
			||||||
    separator: dark_gray
 | 
					 | 
				
			||||||
    leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
 | 
					 | 
				
			||||||
    header: green_bold
 | 
					 | 
				
			||||||
    empty: blue
 | 
					 | 
				
			||||||
    # Closures can be used to choose colors for specific values.
 | 
					 | 
				
			||||||
    # The value (in this case, a bool) is piped into the closure.
 | 
					 | 
				
			||||||
    # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
 | 
					 | 
				
			||||||
    bool: dark_cyan
 | 
					 | 
				
			||||||
    int: dark_gray
 | 
					 | 
				
			||||||
    filesize: cyan_bold
 | 
					 | 
				
			||||||
    duration: dark_gray
 | 
					 | 
				
			||||||
    date: purple
 | 
					 | 
				
			||||||
    range: dark_gray
 | 
					 | 
				
			||||||
    float: dark_gray
 | 
					 | 
				
			||||||
    string: dark_gray
 | 
					 | 
				
			||||||
    nothing: dark_gray
 | 
					 | 
				
			||||||
    binary: dark_gray
 | 
					 | 
				
			||||||
    cell-path: dark_gray
 | 
					 | 
				
			||||||
    row_index: green_bold
 | 
					 | 
				
			||||||
    record: dark_gray
 | 
					 | 
				
			||||||
    list: dark_gray
 | 
					 | 
				
			||||||
    block: dark_gray
 | 
					 | 
				
			||||||
    hints: dark_gray
 | 
					 | 
				
			||||||
    search_result: { fg: white bg: red }
 | 
					 | 
				
			||||||
    shape_and: purple_bold
 | 
					 | 
				
			||||||
    shape_binary: purple_bold
 | 
					 | 
				
			||||||
    shape_block: blue_bold
 | 
					 | 
				
			||||||
    shape_bool: light_cyan
 | 
					 | 
				
			||||||
    shape_closure: green_bold
 | 
					 | 
				
			||||||
    shape_custom: green
 | 
					 | 
				
			||||||
    shape_datetime: cyan_bold
 | 
					 | 
				
			||||||
    shape_directory: cyan
 | 
					 | 
				
			||||||
    shape_external: cyan
 | 
					 | 
				
			||||||
    shape_externalarg: green_bold
 | 
					 | 
				
			||||||
    shape_external_resolved: light_purple_bold
 | 
					 | 
				
			||||||
    shape_filepath: cyan
 | 
					 | 
				
			||||||
    shape_flag: blue_bold
 | 
					 | 
				
			||||||
    shape_float: purple_bold
 | 
					 | 
				
			||||||
    # shapes are used to change the cli syntax highlighting
 | 
					 | 
				
			||||||
    shape_garbage: { fg: white bg: red attr: b}
 | 
					 | 
				
			||||||
    shape_globpattern: cyan_bold
 | 
					 | 
				
			||||||
    shape_int: purple_bold
 | 
					 | 
				
			||||||
    shape_internalcall: cyan_bold
 | 
					 | 
				
			||||||
    shape_keyword: cyan_bold
 | 
					 | 
				
			||||||
    shape_list: cyan_bold
 | 
					 | 
				
			||||||
    shape_literal: blue
 | 
					 | 
				
			||||||
    shape_match_pattern: green
 | 
					 | 
				
			||||||
    shape_matching_brackets: { attr: u }
 | 
					 | 
				
			||||||
    shape_nothing: light_cyan
 | 
					 | 
				
			||||||
    shape_operator: yellow
 | 
					 | 
				
			||||||
    shape_or: purple_bold
 | 
					 | 
				
			||||||
    shape_pipe: purple_bold
 | 
					 | 
				
			||||||
    shape_range: yellow_bold
 | 
					 | 
				
			||||||
    shape_record: cyan_bold
 | 
					 | 
				
			||||||
    shape_redirection: purple_bold
 | 
					 | 
				
			||||||
    shape_signature: green_bold
 | 
					 | 
				
			||||||
    shape_string: green
 | 
					 | 
				
			||||||
    shape_string_interpolation: cyan_bold
 | 
					 | 
				
			||||||
    shape_table: blue_bold
 | 
					 | 
				
			||||||
    shape_variable: purple
 | 
					 | 
				
			||||||
    shape_vardecl: purple
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# External completer example
 | 
					 | 
				
			||||||
# let carapace_completer = {|spans|
 | 
					 | 
				
			||||||
#     carapace $spans.0 nushell ...$spans | from json
 | 
					 | 
				
			||||||
# }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The default config record. This is where much of your global configuration is setup.
 | 
					 | 
				
			||||||
$env.config = {
 | 
					 | 
				
			||||||
    show_banner: false # true or false to enable or disable the welcome banner at startup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ls: {
 | 
					 | 
				
			||||||
        use_ls_colors: true # use the LS_COLORS environment variable to colorize output
 | 
					 | 
				
			||||||
        clickable_links: true # enable or disable clickable links. Your terminal has to support links.
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    rm: {
 | 
					 | 
				
			||||||
        always_trash: false # always act as if -t was given. Can be overridden with -p
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    table: {
 | 
					 | 
				
			||||||
        mode: dots # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
 | 
					 | 
				
			||||||
        index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
 | 
					 | 
				
			||||||
        show_empty: true # show 'empty list' and 'empty record' placeholders for command output
 | 
					 | 
				
			||||||
        padding: { left: 1, right: 1 } # a left right padding of each column in a table
 | 
					 | 
				
			||||||
        trim: {
 | 
					 | 
				
			||||||
            methodology: wrapping # wrapping or truncating
 | 
					 | 
				
			||||||
            wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
 | 
					 | 
				
			||||||
            truncating_suffix: "..." # A suffix used by the 'truncating' methodology
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        header_on_separator: false # show header text on separator/border line
 | 
					 | 
				
			||||||
        # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # datetime_format determines what a datetime rendered in the shell would look like.
 | 
					 | 
				
			||||||
    # Behavior without this configuration point will be to "humanize" the datetime display,
 | 
					 | 
				
			||||||
    # showing something like "a day ago."
 | 
					 | 
				
			||||||
    datetime_format: {
 | 
					 | 
				
			||||||
        # normal: '%a, %d %b %Y %H:%M:%S %z'    # shows up in displays of variables or other datetime's outside of tables
 | 
					 | 
				
			||||||
        # 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
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    explore: {
 | 
					 | 
				
			||||||
        status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" },
 | 
					 | 
				
			||||||
        command_bar_text: { fg: "#C4C9C6" },
 | 
					 | 
				
			||||||
        highlight: { fg: "black", bg: "yellow" },
 | 
					 | 
				
			||||||
        status: {
 | 
					 | 
				
			||||||
            error: { fg: "white", bg: "red" },
 | 
					 | 
				
			||||||
            warn: {}
 | 
					 | 
				
			||||||
            info: {}
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        table: {
 | 
					 | 
				
			||||||
            split_line: { fg: "#404040" },
 | 
					 | 
				
			||||||
            selected_cell: { bg: light_blue },
 | 
					 | 
				
			||||||
            selected_row: {},
 | 
					 | 
				
			||||||
            selected_column: {},
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    history: {
 | 
					 | 
				
			||||||
        max_size: 100_000 # Session has to be reloaded for this to take effect
 | 
					 | 
				
			||||||
        sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
 | 
					 | 
				
			||||||
        file_format: "plaintext" # "sqlite" or "plaintext"
 | 
					 | 
				
			||||||
        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.
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    completions: {
 | 
					 | 
				
			||||||
        case_sensitive: false # set to true to enable case-sensitive completions
 | 
					 | 
				
			||||||
        quick: true    # set this to false to prevent auto-selecting completions when only one remains
 | 
					 | 
				
			||||||
        partial: true    # set this to false to prevent partial filling of the prompt
 | 
					 | 
				
			||||||
        algorithm: "prefix"    # prefix or fuzzy
 | 
					 | 
				
			||||||
        external: {
 | 
					 | 
				
			||||||
            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
 | 
					 | 
				
			||||||
            max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
 | 
					 | 
				
			||||||
            completer: null # check 'carapace_completer' above as an example
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    filesize: {
 | 
					 | 
				
			||||||
        metric: false # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
 | 
					 | 
				
			||||||
        format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cursor_shape: {
 | 
					 | 
				
			||||||
        emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default)
 | 
					 | 
				
			||||||
        vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
 | 
					 | 
				
			||||||
        vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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
 | 
					 | 
				
			||||||
    use_grid_icons: true
 | 
					 | 
				
			||||||
    footer_mode: "25" # always, never, number_of_rows, auto
 | 
					 | 
				
			||||||
    float_precision: 2 # the precision for displaying floats in tables
 | 
					 | 
				
			||||||
    buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
 | 
					 | 
				
			||||||
    use_ansi_coloring: true
 | 
					 | 
				
			||||||
    bracketed_paste: true # enable bracketed paste, currently useless on windows
 | 
					 | 
				
			||||||
    edit_mode: emacs # emacs, vi
 | 
					 | 
				
			||||||
    shell_integration: true # enables terminal shell integration. Off by default, as some terminals have issues with this.
 | 
					 | 
				
			||||||
    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.
 | 
					 | 
				
			||||||
    use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this.
 | 
					 | 
				
			||||||
    highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    hooks: {
 | 
					 | 
				
			||||||
        pre_prompt: [{ null }] # run before the prompt is shown
 | 
					 | 
				
			||||||
        pre_execution: [{ null }] # run before the repl input is run
 | 
					 | 
				
			||||||
        env_change: {
 | 
					 | 
				
			||||||
            PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
 | 
					 | 
				
			||||||
        command_not_found: { null } # return an error message when a command is not found
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    menus: [
 | 
					 | 
				
			||||||
        # Configuration for default nushell menus
 | 
					 | 
				
			||||||
        # Note the lack of source parameter
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: completion_menu
 | 
					 | 
				
			||||||
            only_buffer_difference: false
 | 
					 | 
				
			||||||
            marker: "| "
 | 
					 | 
				
			||||||
            type: {
 | 
					 | 
				
			||||||
                layout: columnar
 | 
					 | 
				
			||||||
                columns: 4
 | 
					 | 
				
			||||||
                col_width: 20     # Optional value. If missing all the screen width is used to calculate column width
 | 
					 | 
				
			||||||
                col_padding: 2
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
                text: green
 | 
					 | 
				
			||||||
                selected_text: { attr: r }
 | 
					 | 
				
			||||||
                description_text: yellow
 | 
					 | 
				
			||||||
                match_text: { attr: u }
 | 
					 | 
				
			||||||
                selected_match_text: { attr: ur }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: ide_completion_menu
 | 
					 | 
				
			||||||
            only_buffer_difference: false
 | 
					 | 
				
			||||||
            marker: "| "
 | 
					 | 
				
			||||||
            type: {
 | 
					 | 
				
			||||||
                layout: ide
 | 
					 | 
				
			||||||
                min_completion_width: 0,
 | 
					 | 
				
			||||||
                max_completion_width: 50,
 | 
					 | 
				
			||||||
                max_completion_height: 10, # will be limited by the available lines in the terminal
 | 
					 | 
				
			||||||
                padding: 0,
 | 
					 | 
				
			||||||
                border: true,
 | 
					 | 
				
			||||||
                cursor_offset: 0,
 | 
					 | 
				
			||||||
                description_mode: "prefer_right"
 | 
					 | 
				
			||||||
                min_description_width: 0
 | 
					 | 
				
			||||||
                max_description_width: 50
 | 
					 | 
				
			||||||
                max_description_height: 10
 | 
					 | 
				
			||||||
                description_offset: 1
 | 
					 | 
				
			||||||
                # If true, the cursor pos will be corrected, so the suggestions match up with the typed text
 | 
					 | 
				
			||||||
                #
 | 
					 | 
				
			||||||
                # C:\> str
 | 
					 | 
				
			||||||
                #      str join
 | 
					 | 
				
			||||||
                #      str trim
 | 
					 | 
				
			||||||
                #      str split
 | 
					 | 
				
			||||||
                correct_cursor_pos: false
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
                text: green
 | 
					 | 
				
			||||||
                selected_text: { attr: r }
 | 
					 | 
				
			||||||
                description_text: yellow
 | 
					 | 
				
			||||||
                match_text: { attr: u }
 | 
					 | 
				
			||||||
                selected_match_text: { attr: ur }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: history_menu
 | 
					 | 
				
			||||||
            only_buffer_difference: true
 | 
					 | 
				
			||||||
            marker: "? "
 | 
					 | 
				
			||||||
            type: {
 | 
					 | 
				
			||||||
                layout: list
 | 
					 | 
				
			||||||
                page_size: 10
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
                text: green
 | 
					 | 
				
			||||||
                selected_text: green_reverse
 | 
					 | 
				
			||||||
                description_text: yellow
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: help_menu
 | 
					 | 
				
			||||||
            only_buffer_difference: true
 | 
					 | 
				
			||||||
            marker: "? "
 | 
					 | 
				
			||||||
            type: {
 | 
					 | 
				
			||||||
                layout: description
 | 
					 | 
				
			||||||
                columns: 4
 | 
					 | 
				
			||||||
                col_width: 20     # Optional value. If missing all the screen width is used to calculate column width
 | 
					 | 
				
			||||||
                col_padding: 2
 | 
					 | 
				
			||||||
                selection_rows: 4
 | 
					 | 
				
			||||||
                description_rows: 10
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
                text: green
 | 
					 | 
				
			||||||
                selected_text: green_reverse
 | 
					 | 
				
			||||||
                description_text: yellow
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    keybindings: [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: completion_menu
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: tab
 | 
					 | 
				
			||||||
            mode: [emacs vi_normal vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menu name: completion_menu }
 | 
					 | 
				
			||||||
                    { send: menunext }
 | 
					 | 
				
			||||||
                    { edit: complete }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: ide_completion_menu
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_n
 | 
					 | 
				
			||||||
            mode: [emacs vi_normal vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menu name: ide_completion_menu }
 | 
					 | 
				
			||||||
                    { send: menunext }
 | 
					 | 
				
			||||||
                    { edit: complete }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: history_menu
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_r
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert, vi_normal]
 | 
					 | 
				
			||||||
            event: { send: menu name: history_menu }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: help_menu
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: f1
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert, vi_normal]
 | 
					 | 
				
			||||||
            event: { send: menu name: help_menu }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: completion_previous_menu
 | 
					 | 
				
			||||||
            modifier: shift
 | 
					 | 
				
			||||||
            keycode: backtab
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: menuprevious }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: next_page_menu
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_x
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { send: menupagenext }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: undo_or_previous_page_menu
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_z
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menupageprevious }
 | 
					 | 
				
			||||||
                    { edit: undo }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: escape
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: escape
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: esc }    # NOTE: does not appear to work
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cancel_command
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_c
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: ctrlc }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: quit_shell
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_d
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: ctrld }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: clear_screen
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_l
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: clearscreen }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: search_history
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_q
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: searchhistory }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: open_command_editor
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_o
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { send: openeditor }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_up
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: up
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menuup }
 | 
					 | 
				
			||||||
                    { send: up }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_down
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: down
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menudown }
 | 
					 | 
				
			||||||
                    { send: down }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_left
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: left
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menuleft }
 | 
					 | 
				
			||||||
                    { send: left }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_right_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: right
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintcomplete }
 | 
					 | 
				
			||||||
                    { send: menuright }
 | 
					 | 
				
			||||||
                    { send: right }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_left
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: left
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: movewordleft }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_right_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: right
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintwordcomplete }
 | 
					 | 
				
			||||||
                    { edit: movewordright }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_start
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: home
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: movetolinestart }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_start
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_a
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: movetolinestart }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_end_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: end
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintcomplete }
 | 
					 | 
				
			||||||
                    { edit: movetolineend }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_end_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_e
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintcomplete }
 | 
					 | 
				
			||||||
                    { edit: movetolineend }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_start
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: home
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: movetolinestart }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_to_line_end
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: end
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: movetolineend }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_up
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_p
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menuup }
 | 
					 | 
				
			||||||
                    { send: up }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_down
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_t
 | 
					 | 
				
			||||||
            mode: [emacs, vi_normal, vi_insert]
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menudown }
 | 
					 | 
				
			||||||
                    { send: down }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_character_backward
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: backspace
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: backspace }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_word_backward
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: backspace
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: backspaceword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_character_forward
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: delete
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: delete }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_character_forward
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: delete
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: delete }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_character_backward
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_h
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: backspace }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_word_backward
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_w
 | 
					 | 
				
			||||||
            mode: [emacs, vi_insert]
 | 
					 | 
				
			||||||
            event: { edit: backspaceword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_left
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: backspace
 | 
					 | 
				
			||||||
            mode: vi_normal
 | 
					 | 
				
			||||||
            event: { edit: moveleft }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: newline_or_run_command
 | 
					 | 
				
			||||||
            modifier: none
 | 
					 | 
				
			||||||
            keycode: enter
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { send: enter }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_left
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_b
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: menuleft }
 | 
					 | 
				
			||||||
                    { send: left }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_right_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_f
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintcomplete }
 | 
					 | 
				
			||||||
                    { send: menuright }
 | 
					 | 
				
			||||||
                    { send: right }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: redo_change
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_g
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: redo }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: undo_change
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_z
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: undo }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: paste_before
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_y
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: pastecutbufferbefore }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cut_word_left
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_w
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: cutwordleft }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cut_line_to_end
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_k
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: cuttoend }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cut_line_from_start
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_u
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: cutfromstart }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: swap_graphemes
 | 
					 | 
				
			||||||
            modifier: control
 | 
					 | 
				
			||||||
            keycode: char_t
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: swapgraphemes }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_left
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: left
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: movewordleft }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_right_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: right
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintwordcomplete }
 | 
					 | 
				
			||||||
                    { edit: movewordright }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_left
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_b
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: movewordleft }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: move_one_word_right_or_take_history_hint
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_f
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: {
 | 
					 | 
				
			||||||
                until: [
 | 
					 | 
				
			||||||
                    { send: historyhintwordcomplete }
 | 
					 | 
				
			||||||
                    { edit: movewordright }
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_word_forward
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: delete
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: deleteword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_word_backward
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: backspace
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: backspaceword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: delete_one_word_backward
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_m
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: backspaceword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cut_word_to_right
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_d
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: cutwordright }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: upper_case_word
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_u
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: uppercaseword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: lower_case_word
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_l
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: lowercaseword }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: capitalize_char
 | 
					 | 
				
			||||||
            modifier: alt
 | 
					 | 
				
			||||||
            keycode: char_c
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: capitalizechar }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: copy_selection
 | 
					 | 
				
			||||||
            modifier: control_shift
 | 
					 | 
				
			||||||
            keycode: char_c
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: copyselection }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: cut_selection
 | 
					 | 
				
			||||||
            modifier: control_shift
 | 
					 | 
				
			||||||
            keycode: char_x
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: cutselection }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: select_all
 | 
					 | 
				
			||||||
            modifier: control_shift
 | 
					 | 
				
			||||||
            keycode: char_a
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: selectall }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            name: paste
 | 
					 | 
				
			||||||
            modifier: control_shift
 | 
					 | 
				
			||||||
            keycode: char_v
 | 
					 | 
				
			||||||
            mode: emacs
 | 
					 | 
				
			||||||
            event: { edit: pastecutbufferbefore }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										149
									
								
								nushell/env.nu
								
								
								
								
							
							
						
						
									
										149
									
								
								nushell/env.nu
								
								
								
								
							| 
						 | 
					@ -1,149 +0,0 @@
 | 
				
			||||||
# Nushell Environment Config File
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# version = "0.91.1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def git_prompt [] {
 | 
					 | 
				
			||||||
	if (do --ignore-errors { git rev-parse --abbrev-ref HEAD } | is-empty) {
 | 
					 | 
				
			||||||
		return 
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	let status = git --no-optional-locks status --porcelain=2 --branch | lines
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	let head = $status | where ($it | str starts-with '# branch.head') | str join | parse '# branch.head {branch}' | get branch | first
 | 
					 | 
				
			||||||
	let result = [$"(ansi magenta2a)($head)"];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	let ahead_behind = $status | where ($it | str starts-with '# branch.ab') | str join | parse "# branch.ab +{ahead} -{behind}"
 | 
					 | 
				
			||||||
	let ahead = $ahead_behind | get ahead | first
 | 
					 | 
				
			||||||
	let behind = $ahead_behind | get behind | first
 | 
					 | 
				
			||||||
	let ahead = if ($ahead != '0') { $"↑($ahead)" } else {}
 | 
					 | 
				
			||||||
	let behind = if ($behind != '0') { $"↓($behind)" } else {}
 | 
					 | 
				
			||||||
	let result = $result | append ([$ahead, $behind] | where not ($it | is-empty) | str join (char space))
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	let untracked = $status | where ($it | str starts-with '?') | length
 | 
					 | 
				
			||||||
	let unstaged = $status | where ($it =~ '1 \..+' ) | length
 | 
					 | 
				
			||||||
	let staged = $status | where ($it =~ '1 .\..+' ) | length
 | 
					 | 
				
			||||||
	let file_states = file_state_to_string [
 | 
					 | 
				
			||||||
		[value, str, color];
 | 
					 | 
				
			||||||
		[$untracked, $"…($untracked)", (ansi paleturquoise1)],
 | 
					 | 
				
			||||||
		[$unstaged, $"✚($unstaged)", (ansi orange3)],
 | 
					 | 
				
			||||||
		[$staged, $"●($staged)", (ansi darkseagreen1b)]
 | 
					 | 
				
			||||||
	] 
 | 
					 | 
				
			||||||
	let result = $result | append $file_states
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	let result = $result | where not ($it | is-empty) | str join $" (ansi reset)"
 | 
					 | 
				
			||||||
	$"(ansi lub)\(($result)(ansi lub)\)"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def file_state_to_string [$states: table] -> string {
 | 
					 | 
				
			||||||
	$states | each {|itm| 
 | 
					 | 
				
			||||||
		if ($itm.value != 0) {
 | 
					 | 
				
			||||||
			let str = $itm.str
 | 
					 | 
				
			||||||
			let color = $itm.color
 | 
					 | 
				
			||||||
			$"($color)($str)"
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			""
 | 
					 | 
				
			||||||
		} 
 | 
					 | 
				
			||||||
	} | where not ($it | is-empty) | str join ' '
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def create_left_prompt [] {
 | 
					 | 
				
			||||||
    let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {
 | 
					 | 
				
			||||||
        null => $env.PWD
 | 
					 | 
				
			||||||
        '' => '~'
 | 
					 | 
				
			||||||
        $relative_pwd => ([~ $relative_pwd] | path join)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let path_color = (if (is-admin) { ansi red_bold } else { ansi pb })
 | 
					 | 
				
			||||||
    let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi pb })
 | 
					 | 
				
			||||||
	let user_color = (if (is-admin) {ansi red} else { ansi xterm_magenta1 })
 | 
					 | 
				
			||||||
    let path_segment = $"($user_color)[($env.USER)] ($path_color)($dir)(git_prompt)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def hostname [] -> string {
 | 
					 | 
				
			||||||
	$"(ansi lmi)((sys).host | get hostname)(ansi reset)"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def create_right_prompt [] {
 | 
					 | 
				
			||||||
    # create a right prompt in magenta with green separators and am/pm underlined
 | 
					 | 
				
			||||||
    let time_segment = ([
 | 
					 | 
				
			||||||
        (ansi reset)
 | 
					 | 
				
			||||||
        (ansi magenta)
 | 
					 | 
				
			||||||
        (date now | format date '%H:%M') # try to respect user's locale
 | 
					 | 
				
			||||||
    ] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
 | 
					 | 
				
			||||||
        str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
 | 
					 | 
				
			||||||
        (ansi rb)
 | 
					 | 
				
			||||||
        ($env.LAST_EXIT_CODE)
 | 
					 | 
				
			||||||
    ] | str join)
 | 
					 | 
				
			||||||
    } else { "" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ([$last_exit_code, (hostname), $time_segment] | str join (char space))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use nushell functions to define your right and left prompt
 | 
					 | 
				
			||||||
$env.PROMPT_COMMAND = {|| create_left_prompt }
 | 
					 | 
				
			||||||
# FIXME: This default is not implemented in rust code as of 2023-09-08.
 | 
					 | 
				
			||||||
$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The prompt indicators are environmental variables that represent
 | 
					 | 
				
			||||||
# the state of the prompt
 | 
					 | 
				
			||||||
$env.PROMPT_INDICATOR = {|| "> " }
 | 
					 | 
				
			||||||
$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " }
 | 
					 | 
				
			||||||
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
 | 
					 | 
				
			||||||
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# If you want previously entered commands to have a different prompt from the usual one,
 | 
					 | 
				
			||||||
# you can uncomment one or more of the following lines.
 | 
					 | 
				
			||||||
# This can be useful if you have a 2-line prompt and it's taking up a lot of space
 | 
					 | 
				
			||||||
# because every command entered takes up 2 lines instead of 1. You can then uncomment
 | 
					 | 
				
			||||||
# the line below so that previously entered commands show with a single `🚀`.
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_COMMAND = {|| "🚀 " }
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_INDICATOR = {|| "" }
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = {|| "" }
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = {|| "" }
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = {|| "" }
 | 
					 | 
				
			||||||
# $env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| "" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Specifies how environment variables are:
 | 
					 | 
				
			||||||
# - converted from a string to a value on Nushell startup (from_string)
 | 
					 | 
				
			||||||
# - converted from a value back to a string when running external commands (to_string)
 | 
					 | 
				
			||||||
# Note: The conversions happen *after* config.nu is loaded
 | 
					 | 
				
			||||||
$env.ENV_CONVERSIONS = {
 | 
					 | 
				
			||||||
    "PATH": {
 | 
					 | 
				
			||||||
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
 | 
					 | 
				
			||||||
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    "Path": {
 | 
					 | 
				
			||||||
        from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
 | 
					 | 
				
			||||||
        to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Directories to search for scripts when calling source or use
 | 
					 | 
				
			||||||
# The default for this is $nu.default-config-dir/scripts
 | 
					 | 
				
			||||||
$env.NU_LIB_DIRS = [
 | 
					 | 
				
			||||||
    ($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Directories to search for plugin binaries when calling register
 | 
					 | 
				
			||||||
# The default for this is $nu.default-config-dir/plugins
 | 
					 | 
				
			||||||
$env.NU_PLUGIN_DIRS = [
 | 
					 | 
				
			||||||
    ($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
 | 
					 | 
				
			||||||
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
 | 
					 | 
				
			||||||
# An alternate way to add entries to $env.PATH is to use the custom command `path add`
 | 
					 | 
				
			||||||
# which is built into the nushell stdlib:
 | 
					 | 
				
			||||||
# use std "path add"
 | 
					 | 
				
			||||||
# $env.PATH = ($env.PATH | split row (char esep))
 | 
					 | 
				
			||||||
# path add /some/path
 | 
					 | 
				
			||||||
# path add ($env.CARGO_HOME | path join "bin")
 | 
					 | 
				
			||||||
# path add ($env.HOME | path join ".local" "bin")
 | 
					 | 
				
			||||||
# $env.PATH = ($env.PATH | uniq)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# To load from a custom file you can use:
 | 
					 | 
				
			||||||
# source ($nu.default-config-dir | path join 'custom.nu')
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue