diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,26 +4,40 @@
 
 ![screenshot](https://raw.githubusercontent.com/andys8/git-brunch/master/screenshot.png)
 
+## Usage
+
+Run `git-brunch` or `git brunch`.
+
+## Git alias (optional)
+
+```sh
+git config --global alias.b brunch
+```
+
 ## Installation
 
-### Binary
+### Download binary
 
-Download from [releases](https://github.com/andys8/git-brunch/releases) and add to `PATH`.
+Download from [releases](https://github.com/andys8/git-brunch/releases), rename to `git-brunch` and add to `PATH`.
 
-### Stack
+### Install with `stack`
 
 ```sh
 stack install --resolver=lts-14 git-brunch
 ```
 
-### From source
+### Clone and install with `nix`
 
 ```sh
 git clone https://github.com/andys8/git-brunch.git
 cd git-brunch
-stack install
+nix-env -if default.nix
 ```
 
-## Usage
+### Clone and install with `stack` from source
 
-Run `git-brunch` or `git brunch`.
+```sh
+git clone https://github.com/andys8/git-brunch.git
+cd git-brunch
+stack install
+```
diff --git a/git-brunch.cabal b/git-brunch.cabal
--- a/git-brunch.cabal
+++ b/git-brunch.cabal
@@ -1,14 +1,16 @@
-cabal-version: 1.12
+cabal-version: 2.0
 
 -- This file has been generated from package.yaml by hpack version 0.31.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d70efa64b6a528e6d0a5907b591f7fa5b06d5bcb4e5bfcf949728db4d69a87e8
+-- hash: 7c82c894fbea0ccfeedcbfed2d569c22a055ae960da4e1df61049777feaa0671
 
 name:           git-brunch
-version:        1.0.2.0
+version:        1.0.3.0
+synopsis:       git checkout command-line tool
 description:    Please see the README on GitHub at <https://github.com/andys8/git-brunch#readme>
+category:       Git
 homepage:       https://github.com/andys8/git-brunch#readme
 bug-reports:    https://github.com/andys8/git-brunch/issues
 author:         andys8
@@ -24,7 +26,7 @@
   type: git
   location: https://github.com/andys8/git-brunch
 
-library
+library git-brunch-lib
   exposed-modules:
       Git
       GitBrunch
@@ -33,6 +35,7 @@
       Paths_git_brunch
   hs-source-dirs:
       src
+  ghc-options: -Wall
   build-depends:
       base >=4.7 && <5
     , brick
@@ -46,13 +49,15 @@
   main-is: Main.hs
   other-modules:
       Paths_git_brunch
+  autogen-modules:
+      Paths_git_brunch
   hs-source-dirs:
       app
-  ghc-options: -threaded -O2 -rtsopts -with-rtsopts=-N
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       base >=4.7 && <5
     , brick
-    , git-brunch
+    , git-brunch-lib
     , microlens
     , process
     , vector
@@ -70,7 +75,7 @@
   build-depends:
       base >=4.7 && <5
     , brick
-    , git-brunch
+    , git-brunch-lib
     , microlens
     , process
     , vector
diff --git a/src/Git.hs b/src/Git.hs
--- a/src/Git.hs
+++ b/src/Git.hs
@@ -8,7 +8,6 @@
 import           System.Process
 import           Data.List
 import           Data.Char                                ( isSpace )
-import           Data.Either
 import           System.Exit
 
 data Branch = BranchLocal String
@@ -39,10 +38,10 @@
 toBranches input = filter (not . isHead) $ toBranch <$> lines input
 
 toBranch :: String -> Branch
-toBranch line = toBranch $ head $ words $ drop 2 line
+toBranch line = toBranch' $ head $ words $ drop 2 line
  where
   isCurrent = "*" `isPrefixOf` line
-  toBranch name
+  toBranch' name
     | isCurrent = BranchCurrent name
     | otherwise = case stripPrefix "remotes/" name of
       Just rest -> parseRemoteBranch rest
@@ -53,13 +52,13 @@
 checkout branch = toEither <$> execGitCheckout (branchName branch)
  where
   execGitCheckout name = readProcessWithExitCode "git" ["checkout", name] []
-  toEither (ExitSuccess  , stdout, stderr) = Right $ dropWhile isSpace stdout
-  toEither (ExitFailure _, stdout, stderr) = Left $ dropWhile isSpace stderr
+  toEither (ExitSuccess  , stdout, _     ) = Right $ dropWhile isSpace stdout
+  toEither (ExitFailure _, _     , stderr) = Left $ dropWhile isSpace stderr
 
 
 parseRemoteBranch :: String -> Branch
-parseRemoteBranch str = BranchRemote remote branchName
-  where (remote, _ : branchName) = span ('/' /=) str
+parseRemoteBranch str = BranchRemote remote name
+  where (remote, _ : name) = span ('/' /=) str
 
 --- Helper
 
diff --git a/src/GitBrunch.hs b/src/GitBrunch.hs
--- a/src/GitBrunch.hs
+++ b/src/GitBrunch.hs
@@ -1,29 +1,24 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RankNTypes #-}
-module GitBrunch where
+module GitBrunch
+  ( main
+  )
+where
 
-import           Control.Monad                            ( void )
 import           Data.Maybe                               ( fromMaybe )
-import           Data.Monoid
-import           Debug.Trace
 import qualified Graphics.Vty                  as V
 import           Lens.Micro                               ( (^.) -- view
                                                           , (.~) -- set
                                                           , (%~) -- over
                                                           , (&)
                                                           , Lens'
-                                                          , Lens
                                                           , lens
                                                           )
 
-import qualified Brick.AttrMap                 as A
 import qualified Brick.Main                    as M
 import           Brick.Types                              ( Widget )
 import           Brick.Themes                             ( themeToAttrMap )
 import qualified Brick.Types                   as T
-import           Brick.Util                               ( fg
-                                                          , on
-                                                          )
 import qualified Brick.Widgets.Border          as B
 import qualified Brick.Widgets.Border.Style    as BS
 import qualified Brick.Widgets.Center          as C
@@ -31,7 +26,6 @@
                                                           , str
                                                           , vBox
                                                           , hBox
-                                                          , vLimit
                                                           , padLeft
                                                           , withAttr
                                                           , padRight
@@ -41,7 +35,6 @@
                                                           )
 import qualified Brick.Widgets.List            as L
 import qualified Data.Vector                   as Vec
-import           Data.Maybe                    as Maybe
 import           Data.List
 import           Data.Char
 
@@ -57,12 +50,12 @@
 main = do
   branches   <- Git.listBranches
   finalState <- M.defaultMain app (initialState branches)
-  print =<< checkout (selectedBranch finalState)
+  printResult =<< checkoutBranch (selectedBranch finalState)
  where
-  print (Left  e  ) = putStr e
-  print (Right msg) = putStr msg
-  checkout (Just b) = Git.checkout b
-  checkout Nothing  = pure $ Left "No branch selected."
+  printResult (Left  err) = putStr err
+  printResult (Right msg) = putStr msg
+  checkoutBranch (Just b) = Git.checkout b
+  checkoutBranch Nothing  = pure $ Left "No branch selected."
 
 
 app :: M.App State e Name
@@ -90,7 +83,7 @@
       ]
   ]
  where
-  toBranchList lens = state ^. lens & (\l -> drawBranchList (hasFocus l) l)
+  toBranchList lens' = state ^. lens' & (\l -> drawBranchList (hasFocus l) l)
   hasFocus = (_focus state ==) . L.listName
 
 
@@ -107,7 +100,7 @@
 
 
 drawListElement :: Bool -> Branch -> Widget Name
-drawListElement selected branch =
+drawListElement _ branch =
   padLeft (T.Pad 1) $ padRight T.Max $ highlight branch $ str $ show branch
  where
   highlight (BranchCurrent _) = withAttr "current"
@@ -181,15 +174,11 @@
 -- Lens
 
 focussedBranchesL :: Lens' State (L.List Name Branch)
-focussedBranchesL = lens
-  (\s -> case (^. focusL) s of
-    Local  -> (^. localBranchesL) s
-    Remote -> (^. remoteBranchesL) s
-  )
-  (\s bs -> case (^. focusL) s of
-    Local  -> (.~) localBranchesL bs s
-    Remote -> (.~) remoteBranchesL bs s
-  )
+focussedBranchesL =
+  let branchLens s = case s ^. focusL of
+        Local  -> localBranchesL
+        Remote -> remoteBranchesL
+  in  lens (\s -> s ^. branchLens s) (\s bs -> (branchLens s .~ bs) s)
 
 
 localBranchesL :: Lens' State (L.List Name Branch)
