36 lines
1 KiB
Nix
Executable file
36 lines
1 KiB
Nix
Executable file
{ pkgs }:
|
|
|
|
pkgs.writeShellApplication {
|
|
name = "unmounter";
|
|
|
|
runtimeInputs = with pkgs; [
|
|
cryptsetup
|
|
dmenu
|
|
gawk
|
|
libnotify
|
|
util-linux
|
|
];
|
|
|
|
text = ''
|
|
lsblk_output="$(lsblk -nrpo "name,type,size,mountpoint")"
|
|
mounted_drives="$(echo "$lsblk_output" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')"
|
|
|
|
all_unmountable="$(echo "$mounted_drives" | sed "/^$/d;s/ *$//")"
|
|
test -n "$all_unmountable"
|
|
|
|
selected="$(echo "$all_unmountable" | dmenu -i -p "Unmount which drive?")"
|
|
selected="''${selected%% *}"
|
|
test -n "$selected"
|
|
|
|
sudo -A umount -l "/''${selected#*/}"
|
|
notify-send "Device unmounted" "$selected has been unmounted."
|
|
|
|
# Close the selected drive if decrypted.
|
|
cryptid="$(echo "$lsblk_output" | grep "/''${selected#*/}$")"
|
|
cryptid="''${cryptid%% *}"
|
|
test -b /dev/mapper/"''${cryptid##*/}"
|
|
sudo -A cryptsetup close "$cryptid"
|
|
|
|
notify-send "Device dencryption closed" "Drive is now securely locked again."
|
|
'';
|
|
}
|