diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for simple-cmd
 
+## 0.1.1 -- 2018-10-02
+- cmdLines
+- Git: grepGitConfig
+- new Rpm: rpmspec
+
 ## 0.1.0.0  -- 2018-09-13
 
 - Initial release, providing:
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,11 +1,39 @@
 [![Build Status](https://travis-ci.org/juhp/simple-cmd.png)](https://travis-ci.org/juhp/simple-cmd)
+[![Hackage](http://img.shields.io/hackage/v/simple-cmd.png)](http://hackage.haskell.org/package/simple-cmd)
 
 # simple-cmd
 
 Some simple String wrappers of `readProcess`, `readProcessWithExitCode`,
 `rawSystem` from the Haskell `process` library.
 
-It can also be used as a copy library.
+## Usage
 
-## Examples
+```haskell
+import SimpleCmd
+```
 
+```haskell
+cmd_ :: String -> [String] -> IO ()
+```
+outputs to stdout. For example
+
+```haskell
+cmd_ "git" ["clone", url]
+```
+This can shortened to `git_ "clone" [url]`.
+
+```haskell
+cmd :: String -> [String] -> IO String
+```
+returns stdout as a `String`.
+
+There are also `cmdBool`, `cmdMaybe`, `cmdList`, `shell`, and others.
+
+Other examples:
+```haskell
+gitBranch :: IO String
+grep_ pat file :: IO Bool
+sudo c args :: IO ()
+```
+
+See the library documentation for more details.
diff --git a/SimpleCmd.hs b/SimpleCmd.hs
--- a/SimpleCmd.hs
+++ b/SimpleCmd.hs
@@ -2,6 +2,7 @@
   cmd, cmd_,
   cmdBool,
   cmdIgnoreErr,
+  cmdLines,
   cmdlog,
   cmdMaybe,
   cmdN,
@@ -65,6 +66,11 @@
     ExitSuccess -> return $ Just $ removeTrailingNewline out
     ExitFailure _ -> return Nothing
 
+-- | Run command, return list of stdout lines
+-- | since 0.1.1
+cmdLines :: String -> [String] -> IO [String]
+cmdLines c args = lines <$> cmd c args
+
 -- | Run a command, passing input string as stdin, and return stdout
 cmdStdIn :: String -> [String] -> String -> IO String
 cmdStdIn c args inp = removeTrailingNewline <$> readProcess c args inp
@@ -127,6 +133,10 @@
 cmdIgnoreErr c args input = do
   (_exit, out, _err) <- readProcessWithExitCode c args input
   return out
+
+-- grep :: String -> FilePath -> IO [String]
+-- grep pat file =
+--   cmdLines "grep" [pat, file]
 
 -- | grep a pattern in file and return Boolean status
 grep_ :: String -> FilePath -> IO Bool
diff --git a/SimpleCmd/Git.hs b/SimpleCmd/Git.hs
--- a/SimpleCmd/Git.hs
+++ b/SimpleCmd/Git.hs
@@ -2,14 +2,15 @@
   git,
   git_,
   gitBranch,
+  grepGitConfig,
   isGitDir,
   rwGitDir) where
 
 import Data.List (isPrefixOf)
-import System.Directory (doesDirectoryExist, getCurrentDirectory)
+import System.Directory (doesDirectoryExist)
 import System.FilePath ((</>))
 
-import SimpleCmd (cmd, cmd_, egrep_, removePrefix)
+import SimpleCmd (cmd, cmd_, cmdLines, egrep_, removePrefix)
 
 #if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
 #else
@@ -33,13 +34,18 @@
 -- | Return the git branch of the current directory
 gitBranch :: IO String
 gitBranch =
-  removePrefix "* " . head . filter (isPrefixOf "* ") . lines <$> cmd "git" ["branch"]
+  removePrefix "* " . head . filter (isPrefixOf "* ") <$> cmdLines "git" ["branch"]
 
 -- | Check if a git repo is under ssh
 rwGitDir :: IO Bool
-rwGitDir = do
-  gitDir <- getCurrentDirectory >>= isGitDir
-  if gitDir
-    then egrep_ "url = (ssh://|git@)" ".git/config"
-    else return False
+rwGitDir =
+  grepGitConfig "url = (ssh://|git@)"
 
+-- | grep ".git/config"
+-- | since 0.1.1
+grepGitConfig :: String -> IO Bool
+grepGitConfig key = do
+  gitdir <- isGitDir "."
+  if gitdir
+    then egrep_ key ".git/config"
+    else return False
diff --git a/SimpleCmd/Rpm.hs b/SimpleCmd/Rpm.hs
new file mode 100644
--- /dev/null
+++ b/SimpleCmd/Rpm.hs
@@ -0,0 +1,12 @@
+module SimpleCmd.Rpm (
+  rpmspec
+  ) where
+
+import SimpleCmd (cmdLines)
+
+-- | Run rpmspec query on file with optional args, a newline is appended to any queryformat
+-- | since 0.1.1
+rpmspec :: [String] -> Maybe String -> FilePath -> IO [String]
+rpmspec args mqf spec = do
+  let qf = maybe [] (\ q -> ["--queryformat", q ++ "\n"]) mqf
+  cmdLines "rpmspec" (["-q"] ++ args ++ qf ++ [spec])
diff --git a/simple-cmd.cabal b/simple-cmd.cabal
--- a/simple-cmd.cabal
+++ b/simple-cmd.cabal
@@ -1,12 +1,12 @@
 name:                simple-cmd
-version:             0.1.0.0
+version:             0.1.1
 synopsis:            Simple String-based process commands
 description:
-            Thin wrappers over the System.Process (readProcess,
-            readProcessWithExitCode, and rawSystem). The idea is just
-            to provide some simple common idioms for easy calling out
-            to commands from programs.  For proper shell-scripting
-            please use turtle, shelly, command, etc.
+            Thin wrappers over System.Process (readProcess,
+            readProcessWithExitCode, and rawSystem). The idea is to provide
+            some simple common idioms for easy calling out to commands
+            from programs.  For more advanced shell-scripting or streaming
+            use turtle, shelly, command, etc.
 license:             BSD3
 license-file:        LICENSE
 author:              Jens Petersen
@@ -17,7 +17,8 @@
 cabal-version:       >=1.10
 extra-source-files:  README.md ChangeLog.md TODO
 tested-with:         GHC == 7.0.4, GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4,
-                     GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3
+                     GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3,
+                     GHC == 8.6.1
 
 source-repository head
   type:     git
@@ -25,7 +26,8 @@
 
 library
   exposed-modules:     SimpleCmd,
-                       SimpleCmd.Git
+                       SimpleCmd.Git,
+                       SimpleCmd.Rpm
   build-depends:       base < 5, directory, filepath, process
   default-language:    Haskell2010
   default-extensions:  CPP
