{ config, pkgs, ... }: let mount-vault = pkgs.writeTextFile { name = "mount-vault"; executable = true; destination = "/bin/mount-vault"; text = '' #!/usr/bin/env bash set -e set -o pipefail VERACRYPT="veracrypt" if [[ "$OSTYPE" == "darwin"* ]]; then VERACRYPT="/Applications/VeraCrypt.app/Contents/MacOS/VeraCrypt" fi MOUNT_TARGET=$2 if [[ -z "$MOUNT_TARGET" ]]; then MOUNT_TARGET=$HOME/.vault fi sudo chown $USER "$MOUNT_TARGET" mkdir -p "$MOUNT_TARGET" MOUNT_SOURCE=$1 if [[ -z "$MOUNT_SOURCE" ]]; then MOUNT_SOURCE="$HOME/vaults/vault.vera" fi chmod a+x "$MOUNT_SOURCE" if [[ -z "$VAULT_PASSWORD" ]]; then echo "interactive mount" $VERACRYPT -t --mount "$MOUNT_SOURCE" "$MOUNT_TARGET" else echo "non-interactive mount of '$MOUNT_SOURCE' to '$MOUNT_TARGET'" sudo $VERACRYPT -t --non-interactive -p $VAULT_PASSWORD --mount "$MOUNT_SOURCE" "$MOUNT_TARGET" fi echo "mounted" sudo chown $USER "$MOUNT_TARGET" echo "chowned" echo "$MOUNT_SOURCE -> $MOUNT_TARGET" if [[ -z $NO_INSTALL_VAULT ]]; then "$MOUNT_TARGET/install" fi ''; }; in { home.packages = with pkgs; [mount-vault]; }