# passgo This repository includes Go code to interact with pass, the Unix password manager. Library code is provided to open a password store, list saved passwords, and decrypt specified passwords. The library provides a simple passphrase input function, or, if gpg-agent is running (on MacOS), it will connect automatically to request your GPG passphrase. On Android, `passgo` connects to OpenKeychain. MacOS and Android users can also ask passgo to copy a password directly to the clipboard. ```go store := passgo.Store{} // directory defaults to ~/.password-store, or set it manually here: // store.Dir = "/home/me/.pw-store" err := passgo.GetStore(&store) if err != nil { ... } passlist := store.List() for _,x := range passlist { if x.Pathname == "myPass" { p, err := store.Decrypt(x.Pathname) if err == nil { passgo.Clip(p) // put on the clipboard } else { log.Fatal("Cannot decrypt ", x.Pathname) } } } /// or just do: p, err := store.Decrypt("myPass") ... ``` Also included is a simple GUI front-end using [Gio](https://gioui.org) that works on MacOS and Android. See `cmd/passgo-gui`. ## Building the Android APK Use `scripts/build.sh` — do not build by hand: ```sh ./scripts/build.sh phone # build + install on the phone ./scripts/build.sh phone --no-install ./scripts/build.sh emu # emulator build (amd64) ``` It outputs `cmd/passgo-gui/passgo-gui.apk` (APKs are git-ignored and regenerated by the script). The script, in order: 1. `gogio -target android -targetsdk 34` (from `~/go/bin`; packages the Go code plus the `*.jar` JNI classes found in `cmd/passgo-gui/`), 2. apktool decode → inject `MANAGE_EXTERNAL_STORAGE` into the manifest (gogio's hardcoded permission table lacks it, and without it the system "All files access" toggle is grayed out on Android 11+) → apktool rebuild, 3. sign with the debug keystore (`~/.android/debug.keystore`), 4. `adb install -r`. Prereqs: JDK, Go + gogio, Android SDK at `~/android-sdk` (platform-tools + build-tools 35.0.0). apktool v3.0.3 is auto-downloaded to `~/android-sdk/tools/apktool.jar` if missing. The script checks each prereq and says what is missing. The phone is reached via adb over the WireGuard address (see the global AGENTS.md).