diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,6 +4,10 @@
 
 # Install
 
-Use the [chromatin] plugin manager with the spec `hackage:proteome`.
+Use the [chromatin] plugin manager with the spec `hackage:proteome`:
+
+```vim
+let g:chromatin_rplugins += [{ 'spec': 'hackage:proteome', 'name': 'proteome' }]
+```
 
 [chromatin]: https://github.com/tek/chromatin.nvim
diff --git a/lib/Proteome/Config.hs b/lib/Proteome/Config.hs
--- a/lib/Proteome/Config.hs
+++ b/lib/Proteome/Config.hs
@@ -70,3 +70,4 @@
 proReadConfig = do
   main <- Ribo.inspect Env.mainProject
   readConfig "project" main
+  readConfig "project_after" main
diff --git a/lib/Proteome/Init.hs b/lib/Proteome/Init.hs
--- a/lib/Proteome/Init.hs
+++ b/lib/Proteome/Init.hs
@@ -13,10 +13,13 @@
 import Neovim.Context.Internal (Neovim)
 import UnliftIO.STM (TVar, newTVarIO)
 import Ribosome.Config.Settings (setting, settingE, updateSetting)
-import Ribosome.Data.Ribo
+import Ribosome.Data.Ribo (Ribo)
+import qualified Ribosome.Data.Ribo as Ribo (inspect)
 import Ribosome.Data.Ribosome (Ribosome(Ribosome))
+import Ribosome.File (canonicalPaths)
 import Ribosome.Internal.IO (retypeNeovim)
 import Proteome.Data.Env (Env(Env))
+import qualified Proteome.Data.Env as Env (mainProject)
 import Proteome.Data.Proteome
 import Proteome.Data.Project (
   Project(meta),
@@ -26,6 +29,8 @@
   ProjectMetadata(DirProject),
   )
 import Proteome.Project.Resolve (resolveProject)
+import Proteome.Config (readConfig)
+import Proteome.Log
 import qualified Proteome.Settings as S
 
 pathData :: MonadIO m => Either String FilePath -> m (ProjectRoot, ProjectName, ProjectType)
@@ -42,7 +47,7 @@
 mainProject = do
   mainDir <- settingE S.mainProjectDir
   (root, name, tpe) <- pathData mainDir
-  baseDirs <- setting S.projectBaseDirs
+  baseDirs <- (canonicalPaths <=< setting) S.projectBaseDirs
   -- typeDirs <- setting S.projectTypeDirs
   explicit <- setting S.projects
   config <- setting S.projectConfig
@@ -63,6 +68,7 @@
 
 initWithMain :: Project -> Ribo e Env
 initWithMain main = do
+  debugS $ "initializing with main project: " ++ show main
   loadPersistedBuffers main
   setProjectVars (meta main)
   return $ Env main [] def
@@ -79,7 +85,11 @@
   newTVarIO env
 
 proteomeStage2 :: Proteome ()
-proteomeStage2 = return ()
+proteomeStage2 = do
+  main <- Ribo.inspect Env.mainProject
+  readConfig "project" main
 
 proteomeStage4 :: Proteome ()
-proteomeStage4 = return ()
+proteomeStage4 = do
+  main <- Ribo.inspect Env.mainProject
+  readConfig "project_after" main
diff --git a/lib/Proteome/Project/Resolve.hs b/lib/Proteome/Project/Resolve.hs
--- a/lib/Proteome/Project/Resolve.hs
+++ b/lib/Proteome/Project/Resolve.hs
@@ -40,7 +40,7 @@
 byProjectTypeName specs name tpe = find (hasProjectTypeName tpe name) specs
 
 byProjectBases :: [FilePath] -> ProjectRoot -> Bool
-byProjectBases baseDirs (ProjectRoot root) = elem ((takeDirectory . takeDirectory) root) baseDirs
+byProjectBases baseDirs (ProjectRoot root) = (takeDirectory . takeDirectory) root `elem` baseDirs
 
 virtualProject :: ProjectName -> Project
 virtualProject name = Project (VirtualProject name) [] Nothing []
diff --git a/lib/Ribosome/File.hs b/lib/Ribosome/File.hs
new file mode 100644
--- /dev/null
+++ b/lib/Ribosome/File.hs
@@ -0,0 +1,23 @@
+module Ribosome.File(
+  canonicalPathWithHome,
+  canonicalPath,
+  canonicalPaths,
+) where
+
+import Control.Monad.IO.Class (MonadIO, liftIO)
+import Data.String.Utils (replace)
+import System.Directory (getHomeDirectory, canonicalizePath)
+
+canonicalPathWithHome :: FilePath -> FilePath -> FilePath
+canonicalPathWithHome = replace "~"
+
+canonicalPath :: MonadIO m => FilePath -> m FilePath
+canonicalPath path = do
+  home <- liftIO getHomeDirectory
+  return $ canonicalPathWithHome home path
+
+canonicalPaths :: MonadIO m => [FilePath] -> m [FilePath]
+canonicalPaths paths = do
+  home <- liftIO getHomeDirectory
+  let withHome = fmap (canonicalPathWithHome home) paths
+  liftIO $ mapM canonicalizePath withHome
diff --git a/proteome.cabal b/proteome.cabal
--- a/proteome.cabal
+++ b/proteome.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: aeb4f9fc4dda14d1efb906445e7ff9e84fd39b5cf2bcf984c395b23c604c14fb
+-- hash: f32ec9d6b642269ce47df16a64625c3790d331489866939c1d0b07b3a38bc26d
 
 name:           proteome
-version:        0.2.0.0
+version:        0.2.1.0
 synopsis:       neovim project manager
 description:    Please see the README on GitHub at <https://github.com/tek/proteome-hs>
 category:       Neovim
@@ -51,6 +51,7 @@
       Ribosome.Data.Maybe
       Ribosome.Data.Ribo
       Ribosome.Data.Ribosome
+      Ribosome.File
       Ribosome.Internal.IO
       Ribosome.Internal.NvimObject
       Ribosome.Log
@@ -90,7 +91,7 @@
     , utf8-string
   default-language: Haskell2010
 
-executable proteome-exe
+executable proteome
   main-is: Main.hs
   other-modules:
       Paths_proteome
@@ -170,6 +171,7 @@
   main-is: SpecMain.hs
   other-modules:
       Config
+      ResolveSpec
       TagsSpec
       Paths_proteome
   hs-source-dirs:
diff --git a/test/u/ResolveSpec.hs b/test/u/ResolveSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/u/ResolveSpec.hs
@@ -0,0 +1,20 @@
+{-# OPTIONS_GHC -F -pgmF htfpp #-}
+
+module ResolveSpec(
+  htf_thisModulesTests
+) where
+
+import Test.Framework
+import Ribosome.File (canonicalPaths)
+
+paths :: [FilePath]
+paths = [
+  "~/../test/dir",
+  "~"
+  ]
+
+test_canonicalPaths :: IO ()
+test_canonicalPaths = do
+  canon <- canonicalPaths paths
+  print canon
+  assertNotEqual canon paths
diff --git a/test/u/SpecMain.hs b/test/u/SpecMain.hs
--- a/test/u/SpecMain.hs
+++ b/test/u/SpecMain.hs
@@ -3,6 +3,7 @@
 module Main where
 
 import {-@ HTF_TESTS @-} TagsSpec
+import {-@ HTF_TESTS @-} ResolveSpec
 import Test.Framework
 import Test.Framework.BlackBoxTest ()
 
