feat: add notnet crate and YubikeySource, thread Tailscale into notstrap

- New crates/notnet: TailscaleOptions, ensure_connected(), auth key chain
  (TS_AUTHKEY env → YubiKey PIV 9d → interactive prompt), install via
  apt/brew/pacman or official install.sh, peer reachability verification
- notsecrets: YubikeySource implementing IdentitySource, reads age key from
  PIV slot 9c; gated behind optional `yubikey` feature
- notstrap: Tailscale step inserted between prerequisites and clone;
  BootstrapOptions.tailscale controls override/skip; NotstrapConfig gains
  optional [tailscale] section; dotfiles_repo is now Option<String> (Tailscale
  gitea_url takes precedence); identity chain adds YubikeySource before
  Bitwarden
- Updated workspace Cargo.toml: notnet added to members and workspace deps
- Integration tests: tailscale: Some(None) to skip Tailscale in all test opts
This commit is contained in:
Joseph O'Brien
2026-04-17 00:01:50 -04:00
parent dfdd9ca6d3
commit c7c074d48b
20 changed files with 797 additions and 6 deletions

17
crates/notnet/Cargo.toml Normal file
View File

@@ -0,0 +1,17 @@
[package]
name = "notnet"
version = "0.1.0"
edition = "2024"
license.workspace = true
description = "Tailscale network presence management for notstrap"
[dependencies]
anyhow = { workspace = true }
thiserror = { workspace = true }
rpassword = { workspace = true }
serde = { workspace = true }
yubikey = { version = "0.8", optional = true }
[features]
default = []
yubikey = ["dep:yubikey"]