From 8e4f32e9b919aecfa517e236f8c0db093e7ad58f Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Tue, 7 Nov 2023 23:41:30 +0100 Subject: [PATCH] Working on nushell --- nushell/config.nu | 94 ++++++++++++++++++++++++++++++++++++++++++----- nushell/env.nu | 81 ++++++++++++++++++++++++++-------------- 2 files changed, 137 insertions(+), 38 deletions(-) diff --git a/nushell/config.nu b/nushell/config.nu index fcbc53a..5a6f5df 100644 --- a/nushell/config.nu +++ b/nushell/config.nu @@ -20,30 +20,37 @@ $env.config.filesize = { } # ls aliases -alias builtin_ls = ls +alias _ls = ls def l [dir?: string] { - builtin_ls (if $dir == null { "" } else { $dir }) | sort-by type name -i | grid -c + _ls (if $dir == null { "" } else { $dir }) + | sort-by type name -i | grid -c } def ls [dir?: string] { - builtin_ls (if $dir == null { "" } else { $dir }) | sort-by type name -i | grid -c + _ls (if $dir == null { "" } else { $dir }) + | sort-by type name -i | grid -c } def la [dir?: string] { - builtin_ls -al (if $dir == null { "" } else { $dir }) | sort-by type name -i | select mode name target user size modified + _ls -al (if $dir == null { "" } else { $dir }) + | sort-by type name -i + | select mode name target user size modified } def ll [dir?: string] { - builtin_ls -l (if $dir == null { "" } else { $dir }) | sort-by type name -i | select name type target user size modified + _ls -l (if $dir == null { "" } else { $dir }) + | sort-by type name -i + | select name type target user size modified } # cool df def df [] { ^df -h - | str replace "Mounted on" "@" + | str replace "Sys. de fichiers" "@" + | str replace "Monté sur" "@" | detect columns - | rename "Filesystem" "Size" "Used" "Avail" "Use%" "Mounted on" + | rename "Sys. de fichiers" "Taille" "Utilisé" "Dispo" "Uti%" "Monté sur" } # vim aliases @@ -65,15 +72,82 @@ alias gst = git status alias gs = git status def gpsup [] { git push --set-upstream origin (git rev-parse --abbrev-ref HEAD) } +# ssh completion +def _ssh_hosts [] { + open .ssh/config + | lines + | find -ir "host " + | each {|x| echo $x | split row " " | get 1 } +} + +export extern "ssh" [ + host?: string@_ssh_hosts +] + +# gclone aliases +def _gclone_dirs [] { + let slashes = ($env.GCLONE_PATH | split row "/" | length) + 2 + open ([$env.GCLONE_PATH, .cdgcache] | path join) + | lines + | where {|x| (echo $x | split row "/" | length) >= $slashes } + | each {|x| $x | split row "/" | last } + | sort + | uniq +} + +def-env cdg [key: string@_gclone_dirs] { cd (CLICOLOR_FORCE=1 pgd $key) } + +# docker aliases +alias ld = lazydocker +alias dc = docker-compose +alias dcb = docker-compose build +def dcp [] { docker-compose build; docker-compose push } +alias dcu = docker-compose up -d --build --remove-orphans +alias dcd = docker-compose down +def dcr [] { docker-compose down; docker-compose up -d --build --remove-orphans } + +# kubernetes aliases +$env.KUBECONFIG = if ([$env.HOME, .kubes, current-cube] | path join | path exists) { + open ([$env.HOME, .kubes, current-cube] | path join) +} else { + "" +} + +def _kube_kubes [] { + _ls ~/.kubes | where type == dir | get name | path basename +} + +def-env kube [name?: string@_kube_kubes] { + use assert + + let kubes_path = [$env.HOME, .kubes] | path join + + if $name == null { + rm ([$kubes_path, current-cube] | path join) + $env.KUBECONFIG = "" + return + } + + let kube_config = [$kubes_path, $name, config] | path join + + if not ($kube_config | path exists) { + error make {msg: ([$kube_config, " does not exist"] | str join)} + } + + echo $kube_config | save -f ([$kubes_path, current-cube] | path join) + $env.KUBECONFIG = $kube_config +} + +alias kns = k9s + # Useful aliases alias :q = exit alias pdf = evince -alias u = update +alias u = ^update alias rg = rg -uu alias p = pass alias pc = pass --clip -export def-env mkcd [dir: string] { mkdir $dir; cd $dir } -export def-env cdg [key: string] { cd (CLICOLOR_FORCE=1 pgd $key) } +def-env mkcd [dir: string] { mkdir $dir; cd $dir } # Start tfetch tfetch diff --git a/nushell/env.nu b/nushell/env.nu index 4adebfd..e2a557d 100644 --- a/nushell/env.nu +++ b/nushell/env.nu @@ -21,27 +21,38 @@ def create_left_prompt [] { } ) - # create a right prompt in magenta with green separators and am/pm underlined - let time_color = ansi magenta_bold - let time_segment = date now | format date ' [%H:%M] ' + # Arrow of prompt + let arrow_color = if "SSH_CLIENT" in $env { + ansi green_bold + } else { + ansi magenta_bold + } - let arrow_color = ansi magenta_bold let first_line_arrow = "┌──" let second_line_arrow = "└▷" + # Time + let time_color = ansi magenta_bold + let time_segment = date now | format date ' [%H:%M] ' + + # Name of the current user let username_color = ansi magenta_bold let username = $env.USER + # Delimiter between user and hostname, then hostname and cwd let delimiter_color = ansi yellow_bold let first_delimiter = "@" let second_delimiter = "::" + # Hostname let hostname_color = ansi green_bold let hostname = (sys).host.hostname + # Current director let dir_color = ansi blue_bold let reset_ansi = ansi reset + # Current git branch, with * if things are not commited let git_color = [(ansi reset), (ansi yellow)] | str join let git_branch = do { git rev-parse --abbrev-ref HEAD } | complete @@ -50,37 +61,48 @@ def create_left_prompt [] { let git_status = do { git status -s } | complete | get stdout | str trim -c "\n" let git_changed = if $git_status == "" { - "" + "" } else { - "*" + "*" } let git_branch_content = if $git_branch.exit_code == 0 { - [$git_color, " ‹", $git_branch.stdout, $git_changed, "› "] | str join + [$git_color, " ‹", $git_branch.stdout, $git_changed, "›"] | str join } else { - "" + "" + } + + # Current kube + let kube_color = ansi cyan_bold + let kube = if (echo ~/.kubes/current-cube | path exists) { + let kube_name = open ~/.kubes/current-cube | path dirname | path basename + [$kube_color, " ‹", $kube_name, "›"] | str join + + } else { + "" } [ - $arrow_color - $first_line_arrow - $time_color - $time_segment - $username_color - $username - $delimiter_color - $first_delimiter - $hostname_color - $hostname - $delimiter_color - $second_delimiter - $dir_color - $dir - $git_branch_content - "\n" - $reset_ansi - $arrow_color - $second_line_arrow + $arrow_color + $first_line_arrow + $time_color + $time_segment + $username_color + $username + $delimiter_color + $first_delimiter + $hostname_color + $hostname + $delimiter_color + $second_delimiter + $dir_color + $dir + $git_branch_content + $kube + "\n" + $reset_ansi + $arrow_color + $second_line_arrow ] | str join } @@ -153,6 +175,9 @@ $env.NU_PLUGIN_DIRS = [ ($nu.default-config-dir | path join 'plugins') # add /plugins ] +# French by default +$env.LANG = fr_FR.UTF-8 + # Text file editor $env.EDITOR = nvim @@ -160,7 +185,7 @@ $env.EDITOR = nvim $env.RUST_BACKTRACE = full # Gclone env -$env.GCLONE_PATH = '/home/thomas/.git' +$env.GCLONE_PATH = '/home/thomas/git' $env.GCLONE_FORCE_SSH = 'true' # Python virtual env