This library is unmaintained and obsolete.
Code: https://john-millikin.com/code/haskell-gnome-keyring (GitHub mirror)
{-# LANGUAGE OverloadedStrings #-} import Gnome.Keyring as GK import System.Glib.Utils as GLib import System.Glib.MainLoop as GLib import Control.Monad import System.Exit main :: IO () main = do -- the Keyring sometimes prompts the user for information (passwords, -- confirmations, etc); when it does so, the GLib application and -- program names will be displayed. GLib.setApplicationName "GNOME Keyring example" GLib.setProgramName "/path/to/binary" -- most keyring operations can be run either synchronously or -- asynchronously. -- -- synchronous operations can be run without a main loop ok <- GK.available when (not ok) $ do putStrLn "Can't connect to the Keyring; make sure it's running" exitFailure names <- sync_ listKeyringNames putStrLn ("Available keyrings: " ++ show names) defName <- sync_ getDefaultKeyring putStrLn $ case defName of Just name -> " default: " ++ show name _ -> " no default" -- async example: a keyring-enabled Cabal might query a username -- and password to use when uploading packages. putStrLn "Searching for haskell.com passwords" let loc = network { networkProtocol = Just "http" , networkDomain = Just "haskell.com" } async (findNetworkPassword loc) (\err -> putStrLn (" error: " ++ show err)) (\passwords -> putStrLn (" found: " ++ show passwords)) -- async operations require a Glib main loop loop <- GLib.mainLoopNew Nothing False GLib.timeoutAdd (GLib.mainLoopQuit loop << return False) 500 GLib.mainLoopRun loop