diff --git a/shh-extras.cabal b/shh-extras.cabal
--- a/shh-extras.cabal
+++ b/shh-extras.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                shh-extras
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Utility functions for using shh
 description:         Provides useful functions for setting up Shh as an
                      interactive shell.
@@ -26,3 +26,13 @@
     hostname
   hs-source-dirs:      src
   default-language:    Haskell2010
+
+test-suite shh-extra-tests
+  ghc-options: -threaded -with-rtsopts=-N
+  default-language: Haskell2010
+  build-depends:
+    base >=4.9,
+    tasty
+  hs-source-dirs: test
+  main-is: Main.hs
+  type: exitcode-stdio-1.0
diff --git a/src/Shh/Prompt.hs b/src/Shh/Prompt.hs
--- a/src/Shh/Prompt.hs
+++ b/src/Shh/Prompt.hs
@@ -6,6 +6,7 @@
 import System.Environment
 import Network.HostName
 import Data.Time
+import Data.List
 
 -- | The type of GHCi prompt functions
 type PromptFn = [String] -> Int -> IO String
@@ -35,7 +36,7 @@
             format :: String -> IO String
             format ('%' : '%' : rest) = ('%':) <$> format rest
             format ('%' : 'u' : rest) = insertEnv "USER" rest
-            format ('%' : 'w' : rest) = insertEnv "PWD" rest
+            format ('%' : 'w' : rest) = insertIO prettyPwd rest
             format ('%' : 'h' : rest) = insertIO getHostName rest
             format ('%' : 't' : rest) = insertIO getTime rest
             format ( x  : rest) = (x:) <$> format rest
@@ -51,3 +52,12 @@
             getTime = formatTime defaultTimeLocale "%H:%M:%S" <$>
                 (utcToLocalTime <$> getCurrentTimeZone <*> getCurrentTime)
 
+            prettyPwd :: IO String
+            prettyPwd = do
+                pwd  <- getEnv "PWD"
+                home <- getEnv "HOME"
+                if home `isPrefixOf` pwd
+                then
+                    pure $ "~" <> drop (length home) pwd
+                else
+                    pure pwd
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,4 @@
+module Main where
+
+main :: IO ()
+main = pure ()
