• Operand
  • # (b)ring mi - belles.

gram:build

> ./config/nushell/disc.nu

Lenses
(coming soon!)


def disc [] { nix-shell -p diskonaut --command diskonaut; }

def discs [] {
  findmnt |
  lines |
  str replace -a -r "^ +" "" |
  str replace -a "└─" "" |
  str replace -a "├─" "" |
  str replace -a "│" "" |
  split column -r " +" |
  to csv -n | lines | uniq | str join "\n" | from csv |
  table -c
}

def "disc graph" [] {
  nix-shell -p xorg.xhost --command 'xhost +'
  nix-shell -p gparted --command 'sudo gparted'; }

def "disc ls" [] { (ls /dev/sd*) ++ (ls /dev/nvme*); }

def "disc size" [] { df | lines | split column --regex ' +' | headers }

def "disc image" [] {
  nix-shell -p xorg.xhost --command 'xhost +'
  nix-shell -p rpi-imager --command 'sudo rpi-imager'; }

def "disc bind" [ label:string ] {
  let place = $"($env.HOME)/disc/(basename $label)"; mkdir $place
  let source = $"/dev/(basename $label)"
  sudo mount $source $place; }

def "disc chec" [label:string] { findmnt | lines }

def "disc prepare" [
  disc: string,
  name: string,
] {
  let source = [ /dev $disc ] | path join
  let label  = $"vg-($name)"

  nsh cryptsetup sudo cryptsetup luksFormat $source
  nsh cryptsetup sudo cryptsetup open $source $name
  sudo pvcreate ([/dev/mapper $name]|path join)
  sudo vgcreate $label ([/dev/mapper $name]|path join)
  sudo lvcreate -l 100%FREE -n $name $label
  sudo mkfs.ext4 -L $name ([/dev $label $name]|path join)
  nsh cryptsetup sudo cryptsetup luksDump $source

  disc open $disc ([ ~/disc $name ] | path join)
}

def "disc space" [] {
  let discs = df -h | lines | split column -r " +"
  $discs | rename ...(($discs.0 | transpose).column1) | drop nth 0 | sort-by Mounted
}

def "disc open" [
  disc: string,
  label: string,
] {

  let source  = [ /dev $disc                 ] | path join | path expand # | tee{print}
  let mediary = [ /dev $"vg-($label)" $label ] | path join | path expand # | tee{print}
  let place   = [ ~/disc $label              ] | path join | path expand # | tee{print}

  if ($mediary | path exists) == false {
    print (nsh cryptsetup sudo cryptsetup open $source $label)
  }
  if ($place | path exists) == false   {
    mkdir $place;
    sleep 4sec; sudo mount $mediary $place
  }
  print $place
  lsblk | print }

def scan [
  node: path,
  --dura (-d): duration = 8sec
] { loop { clear
  try { ls $node | get name | path basename | print }
sleep $dura } }

def "disc scan" [
  --dura (-d): duration = 8sec
] { loop { clear; disc space | print; sleep $dura } }

def serial [] {
  print "Here are your discs:"; ls ~/disc | print
  print "recognizable plugged-in media:"; lsblk | print; print ''
  print "recognizable serial channels:"; lsusb | print; print ''
}

## miscellaneous recipes:

# nsh cryptsetup sudo cryptsetup luksOpen $source
# sleep 2sec

# nsh cryptsetup sudo cryptsetup luksFormat /dev/sdb2
# nsh cryptsetup sudo cryptsetup luksOpen /dev/sdb1

# ls
# ls /dev/vg-rec/
# ls /dev/vg-rec/rec/
# mkdir ~/disc/rec
# sudo mount /dev/vg-rec/rec rec