Command line and GUI interface to pass, the Unix password manager.
Go to file
Greg Pomerantz dc7661e226 Android: launch the 'All files access' settings screen at startup.
MANAGE_EXTERNAL_STORAGE (needed to read the store at
/storage/emulated/0/...) cannot be requested with a runtime
permission dialog; the user must toggle it in system settings.
Port the mechanism from the pad app:

- Permissions.java: a Fragment registered at window attach that
  launches Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
  (per-app settings screen) when Environment.isExternalStorageManager()
  is false on API 30+ (runtime READ_EXTERNAL_STORAGE request on
  older APIs). The guard means the screen appears only until the
  user grants it.
- The compiled classes ship in PgpConnect.jar's directory jar
  (Permissions.jar); gogio picks *.jar up from the package dir and
  dexes them. go:generate now rebuilds it.
- jni_android.c/h: registerPermissionsFragment(), mirroring
  registerFragment() for PgpConnect.
- Impl wiring: call it from the AndroidViewEvent handler right
  after InitPgp.

Verified on the x86_64 emulator: with the appop denied the system
settings screen opens automatically on launch; after granting it,
launch is clean and list + OpenKeychain decryption from
/sdcard/Pass work end to end.
2026-08-21 14:44:38 -04:00
cmd Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
.gitignore Complete the Gio v0.10.2 GUI migration (working on Android). 2026-08-21 13:00:35 -04:00
go.mod Bump dependencies: gioui.org v0.10.2, fsnotify v1.8.0, go 1.24. 2026-08-21 12:59:51 -04:00
go.sum Bump dependencies: gioui.org v0.10.2, fsnotify v1.8.0, go 1.24. 2026-08-21 12:59:51 -04:00
impl_android.go Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
impl_darwin.go passgo package: modernize for go 1.24; reset store.Empty in GetStore. 2026-08-21 13:00:04 -04:00
impl_linux.go passgo package: modernize for go 1.24; reset store.Empty in GetStore. 2026-08-21 13:00:04 -04:00
impl_shared.go passgo package: modernize for go 1.24; reset store.Empty in GetStore. 2026-08-21 13:00:04 -04:00
jni_android.c Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
jni_android.go passgo package: modernize for go 1.24; reset store.Empty in GetStore. 2026-08-21 13:00:04 -04:00
jni_android.h Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
main.go GUI: fix invisible text on Linux, tiny button hit-areas, missing labels. 2026-08-21 13:48:14 -04:00
openpgp-api.jar Start of Android implementation. 2019-11-20 11:52:19 -05:00
Permissions.jar Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
Permissions.java Android: launch the 'All files access' settings screen at startup. 2026-08-21 14:44:38 -04:00
PgpConnect.jar passgo package: modernize for go 1.24; reset store.Empty in GetStore. 2026-08-21 13:00:04 -04:00
PgpConnect.java Migrating to new Gio version (non-working version). 2020-08-31 17:03:07 -04:00
README.md Documentation. 2019-11-26 13:31:21 -05:00

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.

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 that works on MacOS and Android. See cmd/passgo-gui.