$env.config = {
  buffer_editor: "nvim"
  edit_mode: "vi"
  show_banner: false

  hooks: {
    pre_prompt: [{ ||
      if (which direnv | is-empty) {
        return
      }

      direnv export json | from json | default {} | load-env
      if 'ENV_CONVERSIONS' in $env and 'PATH' in $env.ENV_CONVERSIONS {
        $env.PATH = do $env.ENV_CONVERSIONS.PATH.from_string $env.PATH
      }
    }]
  }

  keybindings: [
    {
      name: fuzzy_history_fzf
      modifier: control
      keycode: char_r
      mode: [emacs , vi_normal, vi_insert]
      event: {
        send: executehostcommand
        cmd: "commandline edit --replace (
          history
            | get command
            | reverse
            | uniq
            | str join (char -i 0)
            | fzf --scheme=history --read0 --tiebreak=chunk --layout=reverse --preview='echo {..}' --preview-window='bottom:3:wrap' --bind alt-up:preview-up,alt-down:preview-down --height=70% -q (commandline) --preview='echo -n {} | nu --stdin -c nu-highlight'
            | decode utf-8
            | str trim
        )"
      }
    }
  ]
}

mkdir ($nu.data-dir | path join "vendor/autoload")
starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu")

source ~/.zoxide.nu

source ~/.cache/carapace/init.nu

# gitignore.io command
def _gitignoreio_list [] {
  http get https://www.toptal.com/developers/gitignore/api/list
  | str replace -a "\n" ","
  | split row ","
  | str trim
  | where {|x| $x != ""}
}

def "nu-complete gi" [] {
  let fixed = ["list"]
  let templates = _gitignoreio_list
  $fixed ++ $templates
}

def gi [...args: string@"nu-complete gi"] {
  if ($args | where {|x| $x == "list"} | length) > 0 {
    return (_gitignoreio_list)
  }

  # Join templates with commas and fetch .gitignore
  let joined = ($args | sort | str join ",")
  http get $"https://www.toptal.com/developers/gitignore/api/($joined)"
}

# secret copy command
def sc [path: string] {
  ["/run/secrets" ($path)]
  | path join
  | open
  | wl-copy
}
