summaryrefslogtreecommitdiff
path: root/features/user/cli/shells/nushell/prompt.nu
blob: cfdd4789c2cf3fc41d2b4ded68675b803a24ba5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# +---------------+
# | Prompt Config |
# +---------------+

# define segmants
def path_segment [] {
  let current_dir = pwd
  let truncated_current_dir = $current_dir
  return (pwd | str replace $env.home '~')
}
def git_segment [] {
  return (gitprompt-rs)
}
let do_newline = false # whether to do the newline thing
$env.PROMPT_COMMAND = {||
  # add a newline at the beginning if it isn't the first prompt
  mut newline = ""
  if ($env.CMD_DURATION_MS != '0823') and $do_newline {
    $newline = "\n"
  }
  # define the prompt
  return $"($newline)(ansi white) ╭ (ansi green_bold)(path_segment)(ansi reset) (git_segment)\n "
}

# remove right prompt section
$env.PROMPT_COMMAND_RIGHT = { "" }

# set default prompt indicator
$env.PROMPT_INDICATOR = $'(ansi white)╰ (ansi red_bold)> '
# $env.TRANSIENT_PROMPT_INDICATOR = $' (ansi red_bold)> '
$env.PROMPT_MULTILINE_INDICATOR = "   : "

# change prompt to a lambda if in a nix shell
let in_nix_shell = $env.path | str contains "/nix/store" | any {|el| $el}
if $in_nix_shell {
  $env.PROMPT_INDICATOR = $'(ansi white)╰ (ansi red_bold)λ '
}

# replace vi insert and normal mode prompt indicators with cursor changes
$env.PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR
$env.PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR
$env.config.cursor_shape.vi_insert = "line"
$env.config.cursor_shape.vi_normal = "block"

$env.config.cursor_shape.emacs = "line"

# customize menus to match
$env.config.menus = [
  {
    name: help_menu
    only_buffer_difference: true # Search is done on the text written after activating the menu
    marker: $env.PROMPT_INDICATOR                 # Indicator that appears with the menu is active
    type: {
      layout: description      # Type of menu
      columns: 4               # Number of columns where the options are displayed
      col_width: 20            # Optional value. If missing all the screen width is used to calculate column width
      col_padding: 2           # Padding between columns
      selection_rows: 4        # Number of rows allowed to display found options
      description_rows: 10     # Number of rows allowed to display command description
    }
    style: {
      text: green                   # Text style
      selected_text: green_reverse  # Text style for selected option
      description_text: yellow      # Text style for description
    }
  }
  {
    name: completion_menu
    only_buffer_difference: false # Search is done on the text written after activating the menu
    marker: $env.PROMPT_INDICATOR                  # Indicator that appears with the menu is active
    type: {
      layout: columnar          # Type of menu
      columns: 4                # Number of columns where the options are displayed
      col_width: 20             # Optional value. If missing all the screen width is used to calculate column width
      col_padding: 2            # Padding between columns
    }
    style: {
      text: green                   # Text style
      selected_text: green_reverse  # Text style for selected option
      description_text: yellow      # Text style for description
    }
  }
  {
    name: history_menu
    only_buffer_difference: true # Search is done on the text written after activating the menu
    marker: $env.PROMPT_INDICATOR                 # Indicator that appears with the menu is active
    type: {
      layout: list             # Type of menu
      page_size: 10            # Number of entries that will presented when activating the menu
    }
    style: {
      text: green                   # Text style
      selected_text: green_reverse  # Text style for selected option
      description_text: yellow      # Text style for description
    }
  }
]