diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -21,6 +21,18 @@
  1. Pressing **'s'** in the results list will toggle the sort order
  1. Escape to exit
  1. Search-ahead is enable for any type search longer than ~3 characters
+ 1. When a result is selected `p` yanks the package name
+ 1. When a result is selected `m` yanks the module name
+
+
+## Settings
+
+Location: ~/.config/bhoogle/bhoogle.conf 
+
+Eg:
+
+    yank=xclip
+    yankArgs=-selection c
 
 
 Note that the version described in the [blog](http://www.andrevdm.com/posts/2018-01-15-bhoogle.html) is on the [blog](https://github.com/andrevdm/bhoogle/tree/blog) branch.
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -8,9 +8,12 @@
 import           Protolude
 import           Control.Lens ((^.), (.~), (%~))
 import           Control.Lens.TH (makeLenses)
+import qualified Data.Map as Map
 import qualified Data.List as Lst
 import qualified Data.Time as Tm
 import qualified Data.Text as Txt
+import qualified Data.Text.Encoding as TxtE
+import qualified Data.ByteString as BS
 import qualified Data.Vector as Vec
 import           Brick ((<+>), (<=>))
 import qualified Brick as B
@@ -27,7 +30,8 @@
 import           System.FilePath ((</>))
 import qualified System.Directory as Dir
 import qualified Hoogle as H
-
+import qualified System.Process.Typed as PT
+import qualified Data.ByteString.Lazy as BSL
 
 
 -- | Events that can be sent
@@ -48,14 +52,16 @@
 
 
 -- | State of the brick app. Contains the controls and any other required state
-data BrickState = BrickState { _stEditType :: !(BE.Editor Text Name) -- ^ Editor for the type to search for
-                             , _stEditText :: !(BE.Editor Text Name) -- ^ Editor for a text search in the results
-                             , _stTime :: !Tm.LocalTime              -- ^ The current time
-                             , _stFocus :: !(BF.FocusRing Name)      -- ^ Focus ring - a circular list of focusable controls
-                             , _stResults :: [H.Target]              -- ^ The last set of search results from hoohle
+data BrickState = BrickState { _stEditType :: !(BE.Editor Text Name)      -- ^ Editor for the type to search for
+                             , _stEditText :: !(BE.Editor Text Name)      -- ^ Editor for a text search in the results
+                             , _stTime :: !Tm.LocalTime                   -- ^ The current time
+                             , _stFocus :: !(BF.FocusRing Name)           -- ^ Focus ring - a circular list of focusable controls
+                             , _stResults :: [H.Target]                   -- ^ The last set of search results from hoohle
                              , _stResultsList :: !(BL.List Name H.Target) -- ^ List for the search results
                              , _stSortResults :: SortBy                   -- ^ Current sort order for the results
                              , _stDbPath :: FilePath                      -- ^ Hoogle DB path
+                             , _yankCommand :: Text                       -- ^ Command to run to copy text to the clipboard 
+                             , _yankArgs :: Text                          -- ^ Args for the yank command
                              }
 
 makeLenses ''BrickState
@@ -103,6 +109,9 @@
   -- Initial current time value
   t <- getTime
 
+  -- Settings
+  settings <- loadSettings
+
   -- Construct the initial state values
   let st = BrickState { _stEditType = BE.editor TypeSearch (Just 1) ""
                       , _stEditText = BE.editor TextSearch (Just 1) ""
@@ -112,6 +121,8 @@
                       , _stResults = []
                       , _stSortResults = SortNone
                       , _stDbPath = dbPath
+                      , _yankCommand = Map.findWithDefault "xclip" "yank" settings
+                      , _yankArgs = Map.findWithDefault "" "yankArgs" settings
                       }
           
   -- And run brick
@@ -191,7 +202,12 @@
                   let sorter = if sortDir == SortDec then (Lst.sortBy $ flip compareType) else (Lst.sortBy compareType) in
                   B.continue . filterResults $ st & stResults %~ sorter
                                                   & stSortResults .~ sortDir
-
+                K.KChar 'p' -> do
+                  let selected = BL.listSelectedElement $ st ^. stResultsList
+                  B.suspendAndResume (yankPackage st selected)
+                K.KChar 'm' -> do
+                  let selected = BL.listSelectedElement $ st ^. stResultsList
+                  B.suspendAndResume (yankModule st selected)
                 _ -> do
                   -- Let the list handle all other events
                   -- Using handleListEventVi which adds vi-style keybindings for navigation
@@ -212,6 +228,28 @@
       liftIO $ searchHoogle (st' ^. stDbPath) (Txt.strip . Txt.concat $ BE.getEditContents (st' ^. stEditType))
 
 
+yank :: (H.Target -> Maybe Text) -> BrickState -> Maybe (Int, H.Target) -> IO BrickState
+yank getText st selected = 
+  case getText <<$>> selected of
+    Just (_, Just s') -> do
+      let cmd = (st ^. yankCommand) <> " " <> (st ^. yankArgs)
+      PT.runProcess_ $ PT.setStdin (PT.byteStringInput (BSL.fromStrict . TxtE.encodeUtf8 $ s')) (PT.shell (Txt.unpack cmd))
+      pure st
+
+    _ ->
+      pure st
+
+
+yankPackage :: BrickState -> Maybe (Int, H.Target) -> IO BrickState
+yankPackage st selected = 
+  yank (\t -> Txt.pack . fst <$> H.targetPackage t) st selected
+
+
+yankModule :: BrickState -> Maybe (Int, H.Target) -> IO BrickState
+yankModule st selected = 
+  yank (\t -> Txt.pack . fst <$> H.targetModule t) st selected
+
+
 -- | Search ahead for type strings longer than 3 chars.
 searchAhead :: (BrickState -> IO [H.Target]) -> BrickState -> IO BrickState
 searchAhead search st =
@@ -342,7 +380,7 @@
   
 -- | Search hoogle using the default hoogle database
 searchHoogle :: FilePath -> Text -> IO [H.Target]
-searchHoogle path f = do
+searchHoogle path f = 
   H.withDatabase path (\x -> pure $ H.searchDatabase x (Txt.unpack f))
   
 
@@ -375,3 +413,39 @@
 stripTags ('<' : xs) = stripTags $ drop 1 $ dropWhile (/= '>') xs
 stripTags (x : xs)   = x : stripTags xs
 
+----------------------------------------------------------------------------------------------------
+
+loadSettings :: IO (Map Text Text)
+loadSettings = do
+  p <- getSettingsFilePath
+
+  Dir.doesFileExist p >>= \case
+    True -> do
+      cfgLines1 <- Txt.lines . TxtE.decodeUtf8 <$> BS.readFile p
+      let cfgLines2 = Txt.strip <$> cfgLines1
+      let cfgLines3 = filter (not . Txt.isPrefixOf "#") cfgLines2
+      let cfg1 = Txt.breakOn "=" <$> cfgLines3
+      let cfg2 = filter (not . Txt.null . snd) cfg1
+      let cfg3 = (\(k, v) -> (Txt.strip k, Txt.strip . Txt.drop 1 $ v)) <$> cfg2
+      pure $ Map.fromList cfg3
+    False ->
+      pure Map.empty
+
+saveSettings :: Map Text Text -> IO ()
+saveSettings settings = do
+  p <- getSettingsFilePath
+  let ss = Txt.intercalate "\n" $ (\(k, v) -> k <> "=" <> v) <$> Map.toList settings
+  BS.writeFile p . TxtE.encodeUtf8 $ ss
+
+
+getSettingsFilePath :: IO FilePath
+getSettingsFilePath = do
+  p <- getSettingsRootPath
+  pure $ p </> "bhoogle.conf"
+
+
+getSettingsRootPath :: IO FilePath
+getSettingsRootPath = do
+  p <- Dir.getXdgDirectory Dir.XdgConfig "bhoogle"
+  Dir.createDirectoryIfMissing True p
+  pure p
diff --git a/bhoogle.cabal b/bhoogle.cabal
--- a/bhoogle.cabal
+++ b/bhoogle.cabal
@@ -1,5 +1,5 @@
 name:                bhoogle
-version:             0.1.2.7
+version:             0.1.2.9
 synopsis:            Simple terminal GUI for local hoogle.
 description:         bhoogle is a terminal GUI layer over local hoogle. It provides search ahead and sub-string filtering in addition to the usual type-search.
 homepage:            https://github.com/andrevdm/bhoogle#readme
@@ -31,6 +31,7 @@
                      , bytestring >= 0.10.8.1
                      , time >= 1.6.0.1
                      , hoogle >= 5.0.14
+                     , typed-process >= 0.2.2
   default-language:    Haskell2010
 
 source-repository head
