diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # dickinson
 
+## 1.2.0.0
+
+  * Remove `dir` subcommand
+  * `emd` now looks for libraries in `$HOME/.emd` if extant
+
 ## 1.1.0.3
 
   * More sensible completions in REPL
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,14 +4,20 @@
 
 ## Installation
 
-### Binaries
+### Binary Releases
 
 Binaries for some platforms are available on the [releases
 page](https://github.com/vmchale/dickinson/releases).
 
+Unpack the distribution, then:
+
+```
+make install
+```
+
 ### Source
 
-To install, first download [cabal-install](https://www.haskell.org/cabal/) and
+To install, get [cabal-install](https://www.haskell.org/cabal/) and
 [GHC](https://www.haskell.org/ghc/download.html). Then:
 
 ```
diff --git a/examples/fortune.dck b/examples/fortune.dck
--- a/examples/fortune.dck
+++ b/examples/fortune.dck
@@ -54,7 +54,7 @@
       ('''
        No more pennies to fill my pockets
        ''', "Arrow de Wilde"))
-    ; (| $ quote ("God save the prom queen", "Molly Kate Kestner"))
+    (| $ quote ("\"I never made it with moderation.\"", "Florence Welch"))
     (| $ quote ("« Le beau est ce qu'on désire sans vouloir le manger. »", "Simone Weil"))
     (| $ quote ("\"You're more likely to get cut with a dull tool than a sharp one.\"", "Fiona Apple"))
     (| $ quote ("\"You forgot the difference between equanimity and passivity.\"", "Fiona Apple"))
diff --git a/language-dickinson.cabal b/language-dickinson.cabal
--- a/language-dickinson.cabal
+++ b/language-dickinson.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               language-dickinson
-version:            1.1.0.3
+version:            1.2.0.0
 license:            BSD3
 license-file:       LICENSE
 copyright:          Copyright: (c) 2020 Vanessa McHale
@@ -8,7 +8,7 @@
 author:             Vanessa McHale
 tested-with:
     ghc ==8.0.2 ghc ==8.2.2 ghc ==8.4.4 ghc ==8.6.5 ghc ==8.8.4
-    ghc ==8.10.1
+    ghc ==8.10.2
 
 synopsis:           A language for generative literature
 description:        Dickinson is a language for generative (random) literature
@@ -111,8 +111,10 @@
         Paths_language_dickinson
         Language.Dickinson.Lib.Get
         Language.Dickinson.Pattern
+        Language.Dickinson.Check.Common
         Control.Monad.Ext
         Data.Foldable.Ext
+        Data.List.Ext
 
     autogen-modules:  Paths_language_dickinson
     default-language: Haskell2010
diff --git a/run/Main.hs b/run/Main.hs
--- a/run/Main.hs
+++ b/run/Main.hs
@@ -20,7 +20,6 @@
          | Format !FilePath Bool
          | Man
          | Ide !FilePath ![FilePath]
-         | Dir
 
 main :: IO ()
 main = run =<< execParser wrapper
@@ -33,10 +32,9 @@
     <> command "lint" (info lintP (progDesc "Examine a file for common errors."))
     <> command "fmt" (info formatP (progDesc "Format Dickinson code"))
     <> command "man" (info (pure Man) (progDesc "Dump path to manpages"))
-    <> command "ide" (info ide (progDesc "Run all checks and lints"))
-    -- ide and dir should be hidden?
-    <> command "dir" (info (pure Dir) (progDesc "Show library install directory"))
-    ) <|> runP
+    )
+    <|> hsubparser (command "ide" (info ide (progDesc "Run all checks and lints")) <> internal)
+    <|> runP
 
 formatP :: Parser Act
 formatP = Format
@@ -99,4 +97,3 @@
 run (Format fp True)  = fmtInplace fp
 run Man               = putStrLn . (</> "emd.1") . (</> "man") =<< getDataDir
 run (Ide fp is)       = do { is' <- modIs is ; validateFile is' fp ; warnFile fp }
-run Dir               = putStrLn =<< getDataDir
diff --git a/src/Data/List/Ext.hs b/src/Data/List/Ext.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/List/Ext.hs
@@ -0,0 +1,11 @@
+module Data.List.Ext ( anyA
+                     , allA
+                     ) where
+
+-- TODO: does this short-circuit appropriately with state monad?
+anyA :: (Traversable t, Applicative f) => (a -> f Bool) -> t a -> f Bool
+anyA p = fmap or . traverse p
+
+-- TODO: does this short-circuit appropriately with state monad?
+allA :: (Traversable t, Applicative f) => (a -> f Bool) -> t a -> f Bool
+allA p = fmap and . traverse p
diff --git a/src/Language/Dickinson/Check/Common.hs b/src/Language/Dickinson/Check/Common.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Dickinson/Check/Common.hs
@@ -0,0 +1,8 @@
+module Language.Dickinson.Check.Common ( mapSumM
+                                       ) where
+
+import           Control.Applicative (Alternative)
+import           Data.Foldable       (asum)
+
+mapSumM :: (Traversable t, Alternative f, Applicative m) => (a -> m (f b)) -> t a -> m (f b)
+mapSumM = (fmap asum .) . traverse
diff --git a/src/Language/Dickinson/Check/Scope.hs b/src/Language/Dickinson/Check/Scope.hs
--- a/src/Language/Dickinson/Check/Scope.hs
+++ b/src/Language/Dickinson/Check/Scope.hs
@@ -5,11 +5,12 @@
                                       , checkScopeDeclWith
                                       ) where
 
-import           Control.Applicative              (Alternative, (<|>))
+import           Control.Applicative              ((<|>))
 import           Control.Monad.Except             (MonadError)
 import           Control.Monad.State              (State, evalState, get, modify)
-import           Data.Foldable                    (asum, traverse_)
+import           Data.Foldable                    (traverse_)
 import qualified Data.IntSet                      as IS
+import           Language.Dickinson.Check.Common
 import           Language.Dickinson.Check.Pattern
 import           Language.Dickinson.Error
 import           Language.Dickinson.Name
@@ -97,6 +98,3 @@
     let ns = traversePattern p
     traverse_ insertName ns
     checkExpr e <* traverse_ deleteName ns
-
-mapSumM :: (Traversable t, Alternative f, Applicative m) => (a -> m (f b)) -> t a -> m (f b)
-mapSumM = (fmap asum .) . traverse
diff --git a/src/Language/Dickinson/Lib.hs b/src/Language/Dickinson/Lib.hs
--- a/src/Language/Dickinson/Lib.hs
+++ b/src/Language/Dickinson/Lib.hs
@@ -13,9 +13,19 @@
 splitEnv :: String -> [FilePath]
 splitEnv = splitWhen (== ':')
 
+preludeLibPath :: FilePath -> [FilePath] -> [FilePath]
+preludeLibPath fp = (preludeDir :) . (libDir :)
+    where preludeDir = fp </> "prelude"
+          libDir = fp </> "lib"
+
+homeMod :: IO ([FilePath] -> [FilePath])
+homeMod = do
+    mHome <- lookupEnv "HOME"
+    pure $ case mHome of
+        Just h  -> preludeLibPath (h </> ".emd")
+        Nothing -> id
+
 defaultLibPath :: IO ([FilePath] -> [FilePath])
 defaultLibPath = do
     datadir <- getDataDir
-    let preludeDir = datadir </> "prelude"
-        libDir = datadir </> "lib"
-    pure $ (preludeDir :) . (libDir :)
+    (.) (preludeLibPath datadir) <$> homeMod
diff --git a/src/Language/Dickinson/Type.hs b/src/Language/Dickinson/Type.hs
--- a/src/Language/Dickinson/Type.hs
+++ b/src/Language/Dickinson/Type.hs
@@ -26,9 +26,8 @@
 import           GHC.Generics                  (Generic)
 import           Language.Dickinson.Lexer
 import           Language.Dickinson.Name
-import           Prettyprinter                 (Doc, Pretty (pretty), align, brackets, colon, concatWith, dquotes,
-                                                encloseSep, group, hardline, hsep, indent, lparen, parens, pipe, rangle,
-                                                rparen, tupled, vsep, (<+>))
+import           Prettyprinter                 (Doc, Pretty (pretty), align, brackets, colon, concatWith, dquotes, encloseSep, group, hardline, hsep, indent,
+                                                line, lparen, parens, pipe, rangle, rparen, tupled, vsep, (<+>))
 import           Prettyprinter.Internal        (unsafeTextWithoutNewlines)
 
 data Dickinson a = Dickinson { modImports :: [Import a]
@@ -109,7 +108,7 @@
 
 instance Pretty (Declaration a) where
     pretty (Define _ n e)  = parens (":def" <+> pretty n <#> indent 2 (pretty e))
-    pretty (TyDecl _ n cs) = "tydecl" <+> pretty n <+> "=" <+> concatWith (\x y -> x <+> pipe <+> y) (toList (pretty <$> cs))
+    pretty (TyDecl _ n cs) = "tydecl" <+> pretty n <+> align ("=" <+> group (concatWith (\x y -> x <> line <> pipe <+> y) (toList (pretty <$> cs))))
 
 instance Pretty (Import a) where
     pretty = prettyImport pretty
