diff --git a/nushell/config.nu b/nushell/config.nu index 946de15..5dbf84d 100644 --- a/nushell/config.nu +++ b/nushell/config.nu @@ -1,233 +1,11 @@ -source ~/.config/nushell/init.nu - -# Change default config -$env.config.keybindings = (echo $env.config.keybindings | append { - name: newline_or_run_command_2 - modifier: CONTROL - keycode: char_j - mode: emacs - event: {send: enter} -}) - -$env.config.show_banner = false -$env.config.use_grid_icons = false -$env.config.cursor_shape.emacs = block -$env.config.history.max_size = 1_000_000_000_000_000 -$env.config.history.file_format = "sqlite" -$env.config.history.isolation = true -$env.config.filesize.metric = false -$env.config.table.mode = light - -# remove extension shortcut -def rm-ext [] { - $in | path parse | udpate extension "" | get parent stem | str join "/" -} - -# ls aliases -alias _ls = ls - -def _ls_format_mode [mode: string] { - let chars = $mode | split chars - let r1 = if ($chars | get 0) == "r" { [(ansi yellow_bold), "r", (ansi reset)] } else { [(ansi grey), "-"] } - let w1 = if ($chars | get 1) == "w" { [(ansi red_bold), "w", (ansi reset)] } else { [(ansi grey), "-"] } - let x1 = if ($chars | get 2) == "x" { [(ansi green_bold), "x", (ansi reset)] } else { [(ansi grey), "-"] } - let r2 = if ($chars | get 3) == "r" { [(ansi yellow), "r", (ansi reset)] } else { [(ansi grey), "-"] } - let w2 = if ($chars | get 4) == "w" { [(ansi red), "w"] } else { [(ansi grey), "-"] } - let x2 = if ($chars | get 5) == "x" { [(ansi green), "x"] } else { [(ansi grey), "-"] } - let r3 = if ($chars | get 6) == "r" { [(ansi yellow), "r", (ansi reset)] } else { [(ansi grey), "-"] } - let w3 = if ($chars | get 7) == "w" { [(ansi red), "w"] } else { [(ansi grey), "-"] } - let x3 = if ($chars | get 8) == "x" { [(ansi green), "x"] } else { [(ansi grey), "-"] } - [$r1, $w1, $x1, $r2, $w2, $x2, $r3, $w3, $x3] | each { $in | str join } | str join -} - -def l [dir?: string] { - let output = _ls (if $dir == null { "" } else { $dir }) | sort-by type name -i - if ($output | length) == 0 { "" | cat } else { $output | grid -c -s " " | cat } -} - -def ls [dir?: string] { - let output = _ls (if $dir == null { "" } else { $dir }) | sort-by type name -i - if ($output | length) == 0 { "" | cat } else { $output | grid -c -s " " | cat } -} - -def la [dir?: string] { - _ls -al (if $dir == null { "" } else { $dir }) - | sort-by type name -i - | each { $in | update mode (_ls_format_mode $in.mode) } - | select mode name target user size modified -} - -def ll [dir?: string] { - _ls -l (if $dir == null { "" } else { $dir }) - | each { $in | update mode (_ls_format_mode $in.mode) } - | sort-by type name -i - | select mode name target user size modified -} - -# cool du (don't display everything) -alias _du = du -def du [...args] { - let parsed_args = if ($args | is-empty) { ["*"] } else { $args } - $parsed_args | each { _du -a $in | select path apparent physical } | flatten -} - -# cool df -def df [] { - ^df -h - | str replace "Sys. de fichiers" "@" - | str replace "Monté sur" "@" - | detect columns - | rename "Sys. de fichiers" "Taille" "Utilisé" "Dispo" "Uti%" "Monté sur" -} - -# easy markdown formamtter -def to-md [] { - let arg = $in - $env.config.table.mode = markdown; - echo $arg -} - -# vim aliases -alias v = nvim - -# git aliases -alias g = git -alias ga = git add -alias gaa = git add --all -alias gco = git checkout -alias gcb = git checkout -b -alias gc = git commit --verbose -alias gca = git commit --verbose --all -alias gd = git diff -alias glog = git log --oneline --decorate --graph -alias gl = git pull -alias gp = git push -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 { $in | split row " " | get 1 } -} - -export extern "ssh" [ - host?: string@_ssh_hosts -] - -# update completion -def _update_args [] { - [ - system - rust - wasm - npm - dotfiles - neovim - check - startup - last-update - postpone - force-unlock - ] -} - -def u [arg?: string@_update_args] { - if $arg == null { - ^update - } else { - ^update $arg - } -} - -# gclone aliases -def _gclone_dirs [] { - let slashes = ($env.GCLONE_PATH | split row "/" | length) + 2 - open ([$env.GCLONE_PATH, .cdgcache] | path join) - | lines - | where { ($in | split row "/" | length) >= $slashes } - | each { $in | split row "/" | last } - | sort - | uniq -} - -def-env cdg [key: string@_gclone_dirs] { cd (CLICOLOR_FORCE=1 pgd $key) } - -# pass aliases / completion -def _pass_completion [] { - _ls ~/.password-store/**/* | each { |x| - if $x.type == "file" { - $x.name - | path parse - | update extension "" - | get parent stem - | str join "/" - } else { - $x.name + "/" - } - | split row '/' - | skip 4 - | str join "/" - } - | prepend git - | prepend insert -} - -export extern "pass" [ host?: string@_pass_completion ] -def p [ arg: string@_pass_completion ] { pass $arg } -def pc [ arg: string@_pass_completion ] { pass --clip $arg } - -# 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")} - } - - $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 rg = rg -uu -def-env mkcd [dir: string] { mkdir $dir; cd $dir } +source ~/.config/nushell/config/init.nu +source ~/.config/nushell/config/config.nu +source ~/.config/nushell/config/aliases.nu +source ~/.config/nushell/config/git.nu +source ~/.config/nushell/config/update.nu +source ~/.config/nushell/config/gclone.nu +source ~/.config/nushell/config/pass.nu +source ~/.config/nushell/config/docker.nu # Start tfetch tfetch diff --git a/nushell/config/aliases.nu b/nushell/config/aliases.nu new file mode 100644 index 0000000..49651fd --- /dev/null +++ b/nushell/config/aliases.nu @@ -0,0 +1,75 @@ +# remove extension shortcut +def rm-ext [] { + $in | path parse | udpate extension "" | get parent stem | str join "/" +} + +# ls aliases +alias _ls = ls + +def _ls_format_mode [mode: string] { + let chars = $mode | split chars + let r1 = if ($chars | get 0) == "r" { [(ansi yellow_bold), "r", (ansi reset)] } else { [(ansi grey), "-"] } + let w1 = if ($chars | get 1) == "w" { [(ansi red_bold), "w", (ansi reset)] } else { [(ansi grey), "-"] } + let x1 = if ($chars | get 2) == "x" { [(ansi green_bold), "x", (ansi reset)] } else { [(ansi grey), "-"] } + let r2 = if ($chars | get 3) == "r" { [(ansi yellow), "r", (ansi reset)] } else { [(ansi grey), "-"] } + let w2 = if ($chars | get 4) == "w" { [(ansi red), "w"] } else { [(ansi grey), "-"] } + let x2 = if ($chars | get 5) == "x" { [(ansi green), "x"] } else { [(ansi grey), "-"] } + let r3 = if ($chars | get 6) == "r" { [(ansi yellow), "r", (ansi reset)] } else { [(ansi grey), "-"] } + let w3 = if ($chars | get 7) == "w" { [(ansi red), "w"] } else { [(ansi grey), "-"] } + let x3 = if ($chars | get 8) == "x" { [(ansi green), "x"] } else { [(ansi grey), "-"] } + [$r1, $w1, $x1, $r2, $w2, $x2, $r3, $w3, $x3] | each { $in | str join } | str join +} + +def l [dir?: string] { + let output = _ls (if $dir == null { "" } else { $dir }) | sort-by type name -i + if ($output | length) == 0 { "" | cat } else { $output | grid -c -s " " | cat } +} + +def ls [dir?: string] { + let output = _ls (if $dir == null { "" } else { $dir }) | sort-by type name -i + if ($output | length) == 0 { "" | cat } else { $output | grid -c -s " " | cat } +} + +def la [dir?: string] { + _ls -al (if $dir == null { "" } else { $dir }) + | sort-by type name -i + | each { $in | update mode (_ls_format_mode $in.mode) } + | select mode name target user size modified +} + +def ll [dir?: string] { + _ls -l (if $dir == null { "" } else { $dir }) + | each { $in | update mode (_ls_format_mode $in.mode) } + | sort-by type name -i + | select mode name target user size modified +} + +# cool du (don't display everything) +alias _du = du +def du [...args] { + let parsed_args = if ($args | is-empty) { ["*"] } else { $args } + $parsed_args | each { _du -a $in | select path apparent physical } | flatten +} + +# cool df +def df [] { + ^df -h + | str replace "Sys. de fichiers" "@" + | str replace "Monté sur" "@" + | detect columns + | rename "Sys. de fichiers" "Taille" "Utilisé" "Dispo" "Uti%" "Monté sur" +} + +# easy markdown formamtter +def to-md [] { + let arg = $in + $env.config.table.mode = markdown; + echo $arg +} + +# Useful aliases +alias v = nvim +alias :q = exit +alias pdf = evince +alias rg = rg -uu +def-env mkcd [dir: string] { mkdir $dir; cd $dir } diff --git a/nushell/config/config.nu b/nushell/config/config.nu new file mode 100644 index 0000000..9d1b69f --- /dev/null +++ b/nushell/config/config.nu @@ -0,0 +1,17 @@ +# Change default config +$env.config.keybindings = (echo $env.config.keybindings | append { + name: newline_or_run_command_2 + modifier: CONTROL + keycode: char_j + mode: emacs + event: {send: enter} +}) + +$env.config.show_banner = false +$env.config.use_grid_icons = false +$env.config.cursor_shape.emacs = block +$env.config.history.max_size = 1_000_000_000_000_000 +$env.config.history.file_format = "sqlite" +$env.config.history.isolation = true +$env.config.filesize.metric = false +$env.config.table.mode = light diff --git a/nushell/config/docker.nu b/nushell/config/docker.nu new file mode 100644 index 0000000..b2cdf9c --- /dev/null +++ b/nushell/config/docker.nu @@ -0,0 +1,43 @@ +# 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")} + } + + $kube_config | save -f ([$kubes_path, current-cube] | path join) + $env.KUBECONFIG = $kube_config +} + +alias kns = k9s + diff --git a/nushell/config/gclone.nu b/nushell/config/gclone.nu new file mode 100644 index 0000000..611f233 --- /dev/null +++ b/nushell/config/gclone.nu @@ -0,0 +1,13 @@ +# gclone aliases +def _gclone_dirs [] { + let slashes = ($env.GCLONE_PATH | split row "/" | length) + 2 + open ([$env.GCLONE_PATH, .cdgcache] | path join) + | lines + | where { ($in | split row "/" | length) >= $slashes } + | each { $in | split row "/" | last } + | sort + | uniq +} + +def-env cdg [key: string@_gclone_dirs] { cd (CLICOLOR_FORCE=1 pgd $key) } + diff --git a/nushell/config/git.nu b/nushell/config/git.nu new file mode 100644 index 0000000..7c1812d --- /dev/null +++ b/nushell/config/git.nu @@ -0,0 +1,15 @@ +# git aliases +alias g = git +alias ga = git add +alias gaa = git add --all +alias gco = git checkout +alias gcb = git checkout -b +alias gc = git commit --verbose +alias gca = git commit --verbose --all +alias gd = git diff +alias glog = git log --oneline --decorate --graph +alias gl = git pull +alias gp = git push +alias gst = git status +alias gs = git status +def gpsup [] { git push --set-upstream origin (git rev-parse --abbrev-ref HEAD) } diff --git a/nushell/init.nu b/nushell/config/init.nu similarity index 100% rename from nushell/init.nu rename to nushell/config/init.nu diff --git a/nushell/config/pass.nu b/nushell/config/pass.nu new file mode 100644 index 0000000..853eccc --- /dev/null +++ b/nushell/config/pass.nu @@ -0,0 +1,24 @@ +# pass aliases / completion +def _pass_completion [] { + _ls ~/.password-store/**/* | each { |x| + if $x.type == "file" { + $x.name + | path parse + | update extension "" + | get parent stem + | str join "/" + } else { + $x.name + "/" + } + | split row '/' + | skip 4 + | str join "/" + } + | prepend git + | prepend insert +} + +export extern "pass" [ host?: string@_pass_completion ] +def p [ arg: string@_pass_completion ] { pass $arg } +def pc [ arg: string@_pass_completion ] { pass --clip $arg } + diff --git a/nushell/config/ssh.nu b/nushell/config/ssh.nu new file mode 100644 index 0000000..ba8263b --- /dev/null +++ b/nushell/config/ssh.nu @@ -0,0 +1,11 @@ +# ssh completion +def _ssh_hosts [] { + open ~/.ssh/config + | lines + | find -ir "host " + | each { $in | split row " " | get 1 } +} + +export extern "ssh" [ + host?: string@_ssh_hosts +] diff --git a/nushell/config/update.nu b/nushell/config/update.nu new file mode 100644 index 0000000..199e145 --- /dev/null +++ b/nushell/config/update.nu @@ -0,0 +1,24 @@ +# update completion +def _update_args [] { + [ + system + rust + wasm + npm + dotfiles + neovim + check + startup + last-update + postpone + force-unlock + ] +} + +def u [arg?: string@_update_args] { + if $arg == null { + ^update + } else { + ^update $arg + } +}