nushell dump

This commit is contained in:
Bloxx12 2025-07-15 21:31:31 +02:00
commit 655dfe3d48
Signed by: faukah
SSH key fingerprint: SHA256:Uj2AXqvtdCA4hn5Hq0ZonhIAyUqI1q4w2sMG3Z1TH7E
6 changed files with 187 additions and 206 deletions

46
nushell/completions.nu Normal file
View file

@ -0,0 +1,46 @@
$env.config.completions = {
algorithm: prefix
sort: smart
case_sensitive: false
quick: true
partial: true
use_ls_colors: true
external: {
enable: true
max_results: 10
completer: {|spans: list<string>|
# if the current command is an alias, get it's expansion
let expanded_alias = (scope aliases | where name == $spans.0 | get -i 0 | get -i expansion)
# overwrite
let spans = (if $expanded_alias != null {
# put the first word of the expanded alias first in the span
$spans | skip 1 | prepend ($expanded_alias | split row " " | take 1)
} else {
$spans | skip 1 | prepend ($spans.0)
})
carapace $spans.0 nushell ...$spans
| from json
}
}
}
$env.config.menus ++= [
{
marker: $"(ansi yellow)┣ "
name: completion_menu
only_buffer_difference: false
style: {
description_text: yellow
selected_text: red_reverse
text: yellow
}
type: {
col_padding: 2
col_width: 20
columns: 1
layout: columnar
}
}
]

View file

@ -1,6 +1,6 @@
$env.config = { $env.config = {
bracketed_paste: true bracketed_paste: true
buffer_editor: "" buffer_editor: "hx"
datetime_format: {} datetime_format: {}
edit_mode: vi edit_mode: vi
error_style: fancy error_style: fancy
@ -22,65 +22,6 @@ $env.config = {
} }
} }
$env.config.color_config = {
binary: white
block: white
bool: {|| if $in { "light_green" } else { "light_red" } }
cell-path: white
date: purple
duration: white
empty: blue
filesize: cyan
float: white
header: green_bold
hints: dark_gray
int: white
list: white
nothing: white
range: white
record: white
row_index: green_bold
search_result: { bg: red fg: white }
separator: white
string: {|| if $in =~ "^(#|0x)[a-fA-F0-9]+$" { ($in | str replace "0x" "#") } else { "white" } }
leading_trailing_space_bg: { attr: n }
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_filepath: cyan
shape_flag: blue_bold
shape_float: purple_bold
shape_garbage: { fg: white bg: red attr: b}
shape_globpattern: cyan_bold
shape_int: purple_bold
shape_internalcall: cyan_bold
shape_list: cyan_bold
shape_literal: blue
shape_match_pattern: green
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_table: blue_bold
shape_vardecl: purple
shape_variable: purple
shape_matching_brackets: { attr: u }
shape_string_interpolation: cyan_bold
}
$env.config.ls = { $env.config.ls = {
clickable_links: true clickable_links: true
use_ls_colors: true use_ls_colors: true
@ -125,46 +66,14 @@ $env.config.history = {
sync_on_enter: true sync_on_enter: true
} }
$env.config.completions = {
algorithm: prefix
case_sensitive: false
partial: true
quick: true
external: {
enable: true
max_results: 100
completer: {|tokens: list<string>|
let expanded = scope aliases | where name == $tokens.0 | get --ignore-errors expansion.0
mut expanded_tokens = if $expanded != null and $tokens.0 != "cd" {
$expanded | split row " " | append ($tokens | skip 1)
} else {
$tokens
}
$expanded_tokens.0 = ($expanded_tokens.0 | str trim --left --char "^")
fish --command $"complete '--do-complete=($expanded_tokens | str join ' ')'"
| $"value(char tab)description(char newline)" + $in
| from tsv --flexible --no-infer
}
}
}
$env.config.cursor_shape = { $env.config.cursor_shape = {
vi_insert: block vi_insert: line
vi_normal: block vi_normal: block
} }
$env.config.hooks = { $env.config.hooks = {
command_not_found: {||} command_not_found: {||}
display_output: {
tee { table --expand | print }
| $env.last = $in
}
pre_execution: [ pre_execution: [
{ {
let prompt = commandline | str trim let prompt = commandline | str trim
@ -193,50 +102,15 @@ $env.config.hooks = {
] ]
} }
# Retrieve the output of the last command.
def _ []: nothing -> any {
$env.last
}
$env.config.menus = [ $env.config.menus = [
{ {
marker: "| " marker: $"(ansi yellow)╋ "
name: completion_menu
only_buffer_difference: false
style: {
description_text: yellow
selected_text: green_reverse
text: green
}
type: {
col_padding: 2
col_width: 20
columns: 4
layout: columnar
}
}
{
marker: "? "
name: history_menu
only_buffer_difference: true
style: {
description_text: yellow
selected_text: green_reverse
text: green
}
type: {
layout: list
page_size: 10
}
}
{
marker: "? "
name: help_menu name: help_menu
only_buffer_difference: true only_buffer_difference: true
style: { style: {
description_text: yellow description_text: yellow
selected_text: green_reverse selected_text: red_reverse
text: green text: yellow
} }
type: { type: {
col_padding: 2 col_padding: 2
@ -257,7 +131,7 @@ $env.config.keybindings = [
mode: [ vi_normal vi_insert ] mode: [ vi_normal vi_insert ]
event: { event: {
send: executehostcommand send: executehostcommand
cmd: 'commandline | nu-highlight | $"```ansi\n($in)\n```" | copy' cmd: 'commandline | nu-highlight | $"```ansi\n($in)\n```" | wl-copy $in'
} }
} }
{ {
@ -273,13 +147,6 @@ $env.config.keybindings = [
] ]
} }
} }
{
name: history_menu
modifier: control
keycode: char_h
mode: [ vi_insert vi_normal ]
event: { send: menu name: history_menu }
}
{ {
name: escape name: escape
modifier: none modifier: none
@ -434,29 +301,17 @@ $env.config.keybindings = [
} }
] ]
source ~/.config/nushell/atuin.nu source ./atuin.nu
source ./zoxide.nu
source ./source_profile.nu
source ./completions.nu
source ./prompt.nu
source ~/.config/nushell/zoxide.nu # fix sudo by prepending /run/wrappers/bin to the PATH.
# source ~/.config/nushell/source_profile.nu $env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin')
$env.LS_COLORS = (vivid generate lava)
# fix sudo by prepending /run/wrappers/bin to the PATH $env.EDITOR = "hx"
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin') $env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense'
$env.STARSHIP_SHELL = "nu"
def create_left_prompt [] {
starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)'
}
# Use nushell functions to define your right and left prompt
$env.PROMPT_COMMAND = { || create_left_prompt }
$env.PROMPT_COMMAND_RIGHT = ""
# The prompt indicators are environmental variables that represent # The prompt indicators are environmental variables that represent
# the state of the prompt # the state of the prompt.
$env.PROMPT_INDICATOR = ""
$env.PROMPT_INDICATOR_VI_INSERT = ": "
$env.PROMPT_INDICATOR_VI_NORMAL = "〉"
$env.PROMPT_MULTILINE_INDICATOR = "::: "

View file

@ -1,26 +0,0 @@
# env.nu
#
# Installed by:
# version = "0.102.0"
#
# Previously, environment variables were typically configured in `env.nu`.
# In general, most configuration can and should be performed in `config.nu`
# or one of the autoload directories.
#
# This file is generated for backwards compatibility for now.
# It is loaded before config.nu and login.nu
#
# See https://www.nushell.sh/book/configuration.html
#
# Also see `help config env` for more options.
#
# You can remove these comments if you want or leave
# them for future reference.
#
# def --wrapped sudo [...rest] {
# let escaped_args = $rest
# | 1..
# | each { || to nuon }
# | str join ' '
# ^sudo env XDG_RUNTIME_DIR=/run/user/0 nu --login --commands $'($rest.0) ($escaped_args)'
# }

80
nushell/prompt.nu Normal file
View file

@ -0,0 +1,80 @@
use std null_device
export-env { load-env {
PROMPT_COMMAND: {||
let exit_code = $env.LAST_EXIT_CODE
let jj_root = try { ^jj root err> $null_device } catch { "" }
$env.LAST_EXIT_CODE = 0
let vcs_root = if not ($jj_root | is-empty ) { $jj_root } else {""}
mut path_segment = ""
if not (($vcs_root | is-empty) or ($env.PWD == $vcs_root)) {
# vcs_root is not empty, we're not in the vcs_root of the project
$path_segment = [($vcs_root | path basename), ($env.PWD | path basename)] | str join " @ "
} else {
$path_segment = $env.PWD | path basename
}
let exit_code_segment = if ($exit_code == 0) {
""
} else {
$"(ansi yellow)━┫(ansi red)($exit_code)(ansi yellow)┣━"
}
[$"(ansi yellow)┏",$exit_code_segment,"━ ", $path_segment, "\n"] | str join
}
TRANSIENT_PROMPT_COMMAND: {||
let path_segment = $env.PWD | path basename
let exit_code_segment = if ($env.LAST_EXIT_CODE == 0) {
""
} else {
$"(ansi yellow)━┫(ansi red)($env.LAST_EXIT_CODE)(ansi yellow)┣━"
}
[$"(ansi yellow)━",$exit_code_segment,"━ ", $path_segment] | str join
}
PROMPT_INDICATOR_VI_INSERT: $"(ansi yellow)┃ "
PROMPT_INDICATOR_VI_NORMAL: $"(ansi yellow)┋ "
# PROMPT_MULTILINE_INDICATOR: "::: "
PROMPT_MULTILINE_INDICATOR: $"(ansi yellow)┃ "
TRANSIENT_PROMPT_INDICATOR_VI_INSERT: " "
TRANSIENT_PROMPT_INDICATOR_VI_NORMAL: " "
TRANSIENT_PROMPT_MULTILINE_INDICATOR: $"(ansi yellow)┃ "
config: ($env.config? | default {} | merge {
render_right_prompt_on_last_line: true
})
PROMPT_COMMAND_RIGHT: {||
let jj_status = try {
jj --quiet --color always --ignore-working-copy log --no-graph --revisions @ --template '
separate(
" ",
if(empty, label("empty", "(empty)")),
coalesce(
surround(
"\"",
"\"",
if(
description.first_line().substr(0, 24).starts_with(description.first_line()),
description.first_line().substr(0, 24),
description.first_line().substr(0, 23) ++ "…"
)
),
label(if(empty, "empty"), description_placeholder)
),
bookmarks.join(", "),
change_id.shortest(),
commit_id.shortest(),
if(conflict, label("conflict", "(conflict)")),
if(divergent, label("divergent prefix", "(divergent)")),
if(hidden, label("hidden prefix", "(hidden)")),
)
' err> $null_device
} catch {
""
}
$jj_status
}}}

23
nushell/source_profile.nu Executable file
View file

@ -0,0 +1,23 @@
#! /usr/bin/env nu
let env_vars_file = '/tmp/nushell-env-vars'
if not ($env_vars_file | path exists) {
open /etc/profile
| lines
| select 11
| str trim
| split column ' ' del path
| get path.0
| open $in
| str trim
| lines
| parse 'export {name}="{value}"'
| transpose --header-row --as-record
| tee {load-env $in}
| to nuon
| save --force $env_vars_file
} else {
open $env_vars_file
| from nuon
| load-env $in
}

View file

@ -1,8 +1,3 @@
# =============================================================================
#
# Hook configuration for zoxide.
#
# Initialize hook to add new entries to the database. # Initialize hook to add new entries to the database.
export-env { export-env {
$env.config = ( $env.config = (
@ -23,13 +18,28 @@ export-env {
} }
} }
# ============================================================================= def "nu-complete zoxide path" [context: string] {
# let parts = $context | split row -r "[ /]" | skip 1
# When using zoxide with --no-cmd, alias these internal functions as desired. {
# options: {
sort: false,
completion_algorithm: substring,
case_sensitive: false,
},
completions: (
^zoxide query --list --exclude $env.PWD -- ...$parts
| lines
| first 10
| each {|p| $p | path relative-to $env.PWD | $"($in)/"}
# | each {|p| echo p | path basename}
)
# | each {|p| echo p | path basename | $"($in)/"}),
}
}
# Jump to a directory using only keywords. # Jump to a directory using only keywords.
def --env --wrapped __zoxide_z [...rest: string] { def --env --wrapped __zoxide_z [...rest: string@"nu-complete zoxide path"] {
let path = match $rest { let path = match $rest {
[] => {'~'}, [] => {'~'},
[ '-' ] => {'-'}, [ '-' ] => {'-'},
@ -42,16 +52,9 @@ def --env --wrapped __zoxide_z [...rest: string] {
} }
# Jump to a directory using interactive search. # Jump to a directory using interactive search.
def --env --wrapped __zoxide_zi [...rest:string] { def --env --wrapped __zoxide_zi [...rest:string@"nu-complete zoxide path"] {
cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")' cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")'
} }
# =============================================================================
#
# Commands for zoxide. Disable these using --no-cmd.
#
alias cd = __zoxide_z alias cd = __zoxide_z
alias ci = __zoxide_zi alias ci = __zoxide_zi
# =============================================================================