Kyle Isom ea7e09bdfb M1: make mount/unmount idempotent
mount now detects already-unlocked and already-mounted devices, returning
the existing mount point instead of failing. unmount handles already-locked
devices gracefully and skips unmount if not mounted before locking.

Adds IsMounted helper to udisks client. Updates PLAN.md with refined
v1.0.0 milestones.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 07:58:25 -07:00
2026-03-24 07:58:25 -07:00
2026-03-24 07:58:25 -07:00

arca

A CLI tool for mounting and unmounting LUKS-encrypted volumes. Latin for "strongbox."

arca talks to udisks2 over D-Bus, so no root privileges are required. It handles the unlock-then-mount and unmount-then-lock sequences as single commands.

Usage

arca mount /dev/sda1          # unlock + mount by device path
arca mount backup              # unlock + mount by config alias
arca unmount backup            # unmount + lock
arca status                    # show unlocked LUKS volumes

Configuration

Optional. Without a config file, arca works with device paths directly.

~/.config/arca/config.yaml:

devices:
  backup:
    uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    mountpoint: "/mnt/backup"  # optional — udisks2 picks if omitted
    methods:                   # optional — default: [passphrase]
      - fido2
      - passphrase
  media:
    uuid: "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
    methods:
      - keyfile
      - passphrase
    keyfile: "/path/to/media.key"

Aliases let you refer to devices by name and ensure stable identification via UUID regardless of device path changes.

The methods list defines the unlock strategies to try in order. If the first method fails (e.g., FIDO2 key not present), arca tries the next. Supported methods: passphrase, keyfile, fido2, tpm2.

Installation

Nix flake

# flake.nix
inputs.arca.url = "git+https://git.wntrmute.dev/kyle/arca";

# in your NixOS config or home packages
environment.systemPackages = [ inputs.arca.packages.${system}.default ];

From source

go install git.wntrmute.dev/kyle/arca@latest

Requirements

  • Linux with udisks2 running (standard on most desktop distributions)
  • D-Bus session or system bus access
Description
No description provided
Readme 1.7 MiB
Languages
Go 97.8%
Nix 1.9%
Makefile 0.3%