usb_authorization_config_value() { local config="$1" key="$2" local awk_command=(awk) if [[ ! -r $config ]]; then if [[ $config == "/etc/usbguard/usbguard-daemon.conf" ]]; then awk_command=(sudo awk) else echo "Cannot read USBGuard configuration: $config" >&2 return 1 fi fi "${awk_command[@]}" -F= -v key="$key" ' /^[[:space:]]*#/ { next } $1 ~ "^[[:space:]]*" key "[[:space:]]*$" { value=$0 sub(/^[^=]*=[[:space:]]*/, "", value) sub(/[[:space:]]*$/, "", value) print value exit } ' "$config" } usb_authorization_rules_present() { local rules="$1" if [[ -r $rules ]]; then [[ -s $rules ]] elif [[ $rules == "/etc/usbguard/rules.conf" ]]; then sudo test -s "$rules" else return 1 fi } usb_authorization_require_secure_setting() { local config="$1" key="$2" expected="$3" actual actual=$(usb_authorization_config_value "$config" "$key") if [[ $actual != "$expected" ]]; then echo "USBGuard's $key must be '$expected' before Omarchy enables it." >&2 echo "Current value: ${actual:-} in $config" >&2 return 1 fi } usb_authorization_require_secure_settings() { local config="$1" usb_authorization_require_secure_setting "$config" ImplicitPolicyTarget block usb_authorization_require_secure_setting "$config" PresentDevicePolicy apply-policy usb_authorization_require_secure_setting "$config" InsertedDevicePolicy apply-policy usb_authorization_require_secure_setting "$config" AuthorizedDefault none usb_authorization_require_secure_setting "$config" RestoreControllerDeviceState false } usb_authorization_generate_policy() { local policy="$1" usbguard generate-policy >"$policy" if [[ ! -s $policy ]] || ! grep -q '^allow ' "$policy"; then echo "USBGuard did not generate a usable policy; nothing was enabled." >&2 return 1 fi } usb_authorization_add_user() { local user="$1" # This user can inspect USBGuard events and approve the device named by an # event. Policy and daemon parameters remain unavailable through the IPC ACL. usbguard add-user "$user" \ --devices=list,listen,modify \ --policy=list \ --exceptions=listen } usb_authorization_trust_present_devices() { local line id local count=0 local -a devices mapfile -t devices < <(usbguard list-devices) for line in "${devices[@]}"; do if [[ $line =~ ^([0-9]+):[[:space:]] ]]; then id="${BASH_REMATCH[1]}" usbguard allow-device --permanent "$id" (( ++count )) fi done if (( count == 0 )); then echo "USBGuard did not report any connected USB devices; boot authorization was not enabled." >&2 return 1 fi }