Removed redundant defaults from nushell config,
moved completions to a module.
This commit is contained in:
		
							parent
							
								
									d6c331b940
								
							
						
					
					
						commit
						4468f7045b
					
				
					 10 changed files with 66 additions and 928 deletions
				
			
		
							
								
								
									
										4
									
								
								modules/home-manager/terminal/nushell/completions/mod.nu
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								modules/home-manager/terminal/nushell/completions/mod.nu
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
export use git-completions.nu *
 | 
			
		||||
export use cargo-completions.nu *
 | 
			
		||||
export use just-completions.nu *
 | 
			
		||||
export use make-completions.nu *
 | 
			
		||||
| 
						 | 
				
			
			@ -2,249 +2,23 @@
 | 
			
		|||
#
 | 
			
		||||
# version = "0.91.0"
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# let fish_completer = {|spans|
 | 
			
		||||
#     fish --command $'complete "--do-complete=($spans | str join " ")"'
 | 
			
		||||
#     | $"value(char tab)description(char newline)" + $in
 | 
			
		||||
#     | from tsv --flexible --no-infer
 | 
			
		||||
# }
 | 
			
		||||
#
 | 
			
		||||
# let carapace_completer = {|spans: list<string>|
 | 
			
		||||
#     carapace $spans.0 nushell ...$spans
 | 
			
		||||
#     | from json
 | 
			
		||||
#     | if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null }
 | 
			
		||||
# }
 | 
			
		||||
#
 | 
			
		||||
# let zoxide_completer = {|spans|
 | 
			
		||||
#     $spans | skip 1 | zoxide query -l $in | lines | where {|x| $x != $env.PWD}
 | 
			
		||||
# }
 | 
			
		||||
#
 | 
			
		||||
# # This completer will use carapace by default
 | 
			
		||||
let external_completer = null
 | 
			
		||||
# The default config record. This is where much of your global configuration is setup.
 | 
			
		||||
$env.config = {
 | 
			
		||||
    show_banner: true # 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: rounded # 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: "sqlite" # "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: "fuzzy"    # 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: $external_completer # check 'carapace_completer' above as an example
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    filesize: {
 | 
			
		||||
        metric: true # 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: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
 | 
			
		||||
        vi_normal: blink_block # 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: vi # 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.
 | 
			
		||||
| 
						 | 
				
			
			@ -252,606 +26,6 @@ $env.config = {
 | 
			
		|||
    # Zellij does not modify the term var, so we have to special-case it.
 | 
			
		||||
    use_kitty_protocol: ($env.TERM == 'xterm-kitty' and $env.ZELLIJ? == null)
 | 
			
		||||
    highlight_resolved_externals: true # 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_forward
 | 
			
		||||
            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 }
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alias please = sudo (history | last | get command)
 | 
			
		||||
| 
						 | 
				
			
			@ -892,9 +66,4 @@ def git-authors [] {
 | 
			
		|||
    git-log --all | select name date | histogram name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# source the conditional config file that contains
 | 
			
		||||
# all the definitions, aliases, and env vars we want to set conditionally.
 | 
			
		||||
const conditional_config = ($nu.temp-path | path join 'conditional-config.nu')
 | 
			
		||||
# open $conditional_config | print
 | 
			
		||||
source $conditional_config
 | 
			
		||||
rm $conditional_config
 | 
			
		||||
use completions *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  home.file = {
 | 
			
		||||
    ".config/nushell/scripts".source = ./scripts;
 | 
			
		||||
    ".config/nushell/completions".source = ./completions;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  programs.yazi.enableNushellIntegration = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,44 +1,6 @@
 | 
			
		|||
# Nushell Environment Config File
 | 
			
		||||
#
 | 
			
		||||
# version = "0.91.0"
 | 
			
		||||
 | 
			
		||||
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 green_bold })
 | 
			
		||||
    let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
 | 
			
		||||
    let path_segment = $"($path_color)($dir)"
 | 
			
		||||
 | 
			
		||||
    $path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 '%x %X') # 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, (char space), $time_segment] | str join)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# 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 = {|| "> " }
 | 
			
		||||
| 
						 | 
				
			
			@ -46,62 +8,9 @@ $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
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
def is-installed [ app: string ] {
 | 
			
		||||
  ((which $app | length) > 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const conditional_config = ($nu.temp-path | path join 'conditional-config.nu')
 | 
			
		||||
'# This file is an ugly hack to conditionally source files and define aliases/custom commands.
 | 
			
		||||
' | save --force $conditional_config
 | 
			
		||||
 | 
			
		||||
# 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')
 | 
			
		||||
# $env.PATH = ($env.PATH | split row (char esep) | append ($nu.home-path | path join ".local/bin/"))
 | 
			
		||||
# $env.PATH = ($env.PATH | split row (char esep) | append ($nu.home-path | path join ".cargo/bin/"))
 | 
			
		||||
# $env.PATH = ($env.PATH | split row (char esep) | append ($nu.home-path | path join "opt"))
 | 
			
		||||
# An alternate way to add entries to $env.PATH is to use the custom command `path add`
 | 
			
		||||
# which is built into the nushell stdlib:
 | 
			
		||||
# home managers path, shell aliases, and env vars are not applied to nushell.
 | 
			
		||||
use std "path add"
 | 
			
		||||
$env.PATH = ($env.PATH | split row (char esep))
 | 
			
		||||
# $env.PATH = ($env.PATH | split row (char esep))
 | 
			
		||||
path add ($env.HOME | path join ".cargo " "bin")
 | 
			
		||||
path add ($env.HOME | path join ".local" "bin")
 | 
			
		||||
path add ($env.HOME | path join ".nix-profile" "bin")
 | 
			
		||||
| 
						 | 
				
			
			@ -114,5 +23,7 @@ $env.PIPENV_VENV_IN_PROJECT = 1
 | 
			
		|||
$env.POETRY_VIRTUALENVS_IN_PROJECT = 1
 | 
			
		||||
$env.SSH_AUTH_SOCK = $"($env.XDG_RUNTIME_DIR)/ssh-agent"
 | 
			
		||||
 | 
			
		||||
ls (($nu.default-config-dir | path join ('scripts/**/*.nu')) | into glob) | 
 | 
			
		||||
each { |it| $"source ($it.name)\n" | save --append $conditional_config} | ignore
 | 
			
		||||
$env.NU_LIB_DIRS = [
 | 
			
		||||
    ...
 | 
			
		||||
    $nu.default-config-dir
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,5 +35,6 @@
 | 
			
		|||
  imports = [
 | 
			
		||||
    ./rainbow-delimiters.nix
 | 
			
		||||
    ./arial.nix
 | 
			
		||||
    ./tree-sitter-nu.nix
 | 
			
		||||
  ];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
{
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}: {
 | 
			
		||||
  config =
 | 
			
		||||
    lib.mkIf config.host.nvim.enable-treesitter
 | 
			
		||||
    {
 | 
			
		||||
      programs.nixvim = let
 | 
			
		||||
        nu-grammar = pkgs.tree-sitter.buildGrammar {
 | 
			
		||||
          language = "nu";
 | 
			
		||||
          version = "0.0.0+rev=358c4f5";
 | 
			
		||||
          src = pkgs.fetchFromGitHub {
 | 
			
		||||
            owner = "nushell";
 | 
			
		||||
            repo = "tree-sitter-nu";
 | 
			
		||||
            rev = "c5b7816043992b1cdc1462a889bc74dc08576fa6";
 | 
			
		||||
            hash = "sha256-P+ixE359fAW7R5UJLwvMsmju7UFmJw5SN+kbMEw7Kz0=";
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      in {
 | 
			
		||||
        # Set filetype to "nu" for files named "*.nu"
 | 
			
		||||
        filetype.extension.nu = "nu";
 | 
			
		||||
 | 
			
		||||
        # Add our nu parser to treesitter and associate it with nu filetype.
 | 
			
		||||
        extraConfigLua = ''
 | 
			
		||||
          local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
 | 
			
		||||
          parser_config.nu = {
 | 
			
		||||
            filetype = "nu",
 | 
			
		||||
          }
 | 
			
		||||
        '';
 | 
			
		||||
 | 
			
		||||
        # Add the nu injections
 | 
			
		||||
        extraFiles = {
 | 
			
		||||
          "/queries/nu/highlights.scm" = builtins.readFile "${nu-grammar}/queries/nu/highlights.scm";
 | 
			
		||||
          "/queries/nu/injections.scm" = builtins.readFile "${nu-grammar}/queries/nu/injections.scm";
 | 
			
		||||
          "/queries/nu/indents.scm" = builtins.readFile "${nu-grammar}/queries/nu/indents.scm";
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        plugins = {
 | 
			
		||||
          treesitter = {
 | 
			
		||||
            # Register the nu parser for files with "nu" filetype
 | 
			
		||||
            languageRegister.nu = "nu";
 | 
			
		||||
            grammarPackages =
 | 
			
		||||
              [
 | 
			
		||||
                nu-grammar
 | 
			
		||||
              ]
 | 
			
		||||
              ++ pkgs.vimPlugins.nvim-treesitter.allGrammars;
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue