diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,9 +4,13 @@
 life-sync uses [PVP Versioning][1].
 The change log is available [on GitHub][2].
 
-[1]: https://pvp.haskell.org
-[2]: https://github.com/kowainik/life-sync/releases
+# 1.0.1
 
+* Switch to `relude`.
+
 # 1.0
 
 * Initially created.
+
+[1]: https://pvp.haskell.org
+[2]: https://github.com/kowainik/life-sync/releases
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@
 [![Stackage LTS](http://stackage.org/package/life-sync/badge/lts)](http://stackage.org/lts/package/life-sync)
 [![Stackage Nightly](http://stackage.org/package/life-sync/badge/nightly)](http://stackage.org/nightly/package/life-sync)
 
-`life-sync` is a CLI tool that makes it easier to synchronize `dotfiles`
-repository with personal configs across multiple machines.
+`life-sync` is a CLI tool that makes it easier to synchronize a repository of 
+personal config files across multiple machines.
 
 ## Motivation
 
@@ -18,24 +18,30 @@
 2. Useful bash aliases and other miscellaneous shell settings.
 3. Git configuration.
 
-And much more! But sometimes you start working from a new fresh machine without
-having your settings within touch, like in these situations:
+And much more! But sometimes you start working from a fresh machine without
+having your settings within reach, as in these situations:
 
 1. You bought a new PC or laptop.
-2. You might reinstall your system on your working machine.
+2. You reinstalled the operating system on your machine.
 3. You were given a new laptop at work.
 
 Every time this happens, you need to walk through the tedious process of copying
 your data again. It's a well-known practice to
-[store configs in `dotfiles` GitHub repository](https://dotfiles.github.io/).
+[store configs in a `dotfiles` GitHub repository](https://dotfiles.github.io/).
 And `life-sync` makes it much easier to maintain this repository! With a single
-command, your can copy every file and directory from `dotfiles` repository to
+command, your can copy every file and directory from your `dotfiles` repository to
 your machine. Or update your remote `dotfiles` repository after multiple local
 changes to different files.
 
+## Prerequisites
+
+* [`git`](https://git-scm.com)
+* [`hub`](https://github.com/github/hub)
+* SSH access to Github configured
+
 ## Installation
 
-Installation process can be done with one simple command:
+Install with one simple command:
 
 ```shell
 $ cabal install life-sync
@@ -47,7 +53,7 @@
 $ stack install life-sync-1.0
 ```
 
-You can turn on the bash auto-completion by running the following command:
+You can turn on bash auto-completion by running the following command:
 
 ```
 $ source <(life --bash-completion-script `which life`)
@@ -55,10 +61,7 @@
 
 ## Usage
 
-> **NOTE:** make sure you configured SSH for your Github. `life-sync` assumes
-> that you have SSH configured.
-
-After installing `life-sync` you need to call command `life` with specified options:
+After installing `life-sync` you need to call the command `life` with specified options:
 
 ```
 $ life --help
@@ -98,25 +101,25 @@
 
 ```
 
-> **NOTE:** If some command takes a path to a file or a directory as an
+> **NOTE:** If a command takes a path to a file or a directory as an
 > argument, the path should be specifed relative to the home directory.
 
 `life-sync` keeps the structure of your `dotfiles` repository in its own file
-called `.life` which is stored in `dotfiles` repository as well.
+called `.life` which is also stored in your `dotfiles` repository.
 
-You can see an example of `dotfiles` repository maintained by `life-sync` here:
+You can see an example of a `dotfiles` repository maintained by `life-sync` here:
 
 * [ChShersh/dotfiles](https://github.com/ChShersh/dotfiles)
 
 ## Examples
 
-### Create `dotfiles` repository for the first time
+### Create a `dotfiles` repository for the first time
 
 ```
 $ life init MyGithubName
 ```
 
-### Track new file or directory
+### Track a new file or directory
 
 To track a file:
 
@@ -130,15 +133,15 @@
 $ life add -d path/to/dir/relative/from/home
 ```
 
-To stop tracking some file, use `life remove` command instead.
+To stop tracking some file, use `life remove` instead.
 
-### Push all changes to remote repository
+### Push all changes to the remote repository
 
 ```
 $ life push
 ```
 
-### Pull all changes from remote repository
+### Pull all changes from the remote repository
 
 To pull every file and directory:
 
diff --git a/life-sync.cabal b/life-sync.cabal
--- a/life-sync.cabal
+++ b/life-sync.cabal
@@ -1,5 +1,5 @@
 name:                life-sync
-version:             1.0
+version:             1.0.1
 description:         Synchronize personal configs across multiple machines
 homepage:            https://github.com/kowainik/life-sync
 bug-reports:         https://github.com/kowainik/life-sync/issues
@@ -40,14 +40,15 @@
                      , ansi-terminal
                      , bytestring
                      , containers
+                     , exceptions
                      , fmt
                      , microlens-platform
                      , path
                      , path-io
                      , process
+                     , relude >= 0.1.0
                      , text >= 1.2
-                     , tomland >= 0.2.1
-                     , universum >= 1.2.0
+                     , tomland ^>= 0.3
 
   ghc-options:         -Wall
   default-language:    Haskell2010
diff --git a/src/Life/Configuration.hs b/src/Life/Configuration.hs
--- a/src/Life/Configuration.hs
+++ b/src/Life/Configuration.hs
@@ -33,18 +33,19 @@
        , writeGlobalLife
        ) where
 
+import Control.Monad.Catch (MonadThrow (..))
 import Fmt (indentF, unlinesF, (+|), (|+))
-import Lens.Micro.Platform (makeFields)
+import Lens.Micro.Platform (makeFields, (.~), (^.))
 import Path (Dir, File, Path, Rel, fromAbsFile, parseRelDir, parseRelFile, toFilePath, (</>))
-import Toml (BiToml, Valuer (..), (.=))
+import Toml (AnyValue (..), BiToml, Prism (..), (.=))
 
 import Life.Shell (lifePath, relativeToHome, repoName)
 
 import qualified Data.Set as Set
+import qualified Data.Text as T
 import qualified Text.Show as Show
 import qualified Toml
 
-
 -- | Data type to represent either file or directory.
 data LifePath = File FilePath | Dir FilePath
     deriving (Show)
@@ -102,11 +103,14 @@
 
 corpseConfiguationT :: BiToml CorpseConfiguration
 corpseConfiguationT = CorpseConfiguration
-    <$> Toml.arrayOf stringV "files"       .= corpseFiles
-    <*> Toml.arrayOf stringV "directories" .= corpseDirectories
+    <$> Toml.arrayOf _String "files"       .= corpseFiles
+    <*> Toml.arrayOf _String "directories" .= corpseDirectories
   where
-    stringV :: Valuer 'Toml.TString String
-    stringV = Valuer (Toml.matchText >=> pure . toString) (Toml.String . toText)
+    _String :: Prism AnyValue String
+    _String = Prism
+        { preview = \(AnyValue t) -> Toml.matchText t >>= pure . toString
+        , review = AnyValue . Toml.Text . toText
+        }
 
 resurrect :: MonadThrow m => CorpseConfiguration -> m LifeConfiguration
 resurrect CorpseConfiguration{..} = do
@@ -131,7 +135,7 @@
     render :: Text -> Set (Path b t) -> Maybe Text
     render key paths = do
         let prefix = key <> " = "
-        let array  = renderStringArray (length prefix) (map show $ toList paths)
+        let array  = renderStringArray (T.length prefix) (map show $ toList paths)
 
         if not printIfEmpty && null paths
         then Nothing
diff --git a/src/Life/Github.hs b/src/Life/Github.hs
--- a/src/Life/Github.hs
+++ b/src/Life/Github.hs
@@ -21,7 +21,7 @@
        , updateFromRepo
        ) where
 
-import Control.Exception (throwIO)
+import Control.Exception (catch, throwIO)
 import Path (Abs, Dir, File, Path, Rel, toFilePath, (</>))
 import Path.IO (copyDirRecur, copyFile, getHomeDir, withCurrentDir)
 import System.IO.Error (IOError, isDoesNotExistError)
@@ -67,7 +67,7 @@
 ----------------------------------------------------------------------------
 
 -- | Executes action with 'repoName' set as pwd.
-insideRepo :: (MonadIO m, MonadMask m) => m a -> m a
+insideRepo :: IO a -> IO a
 insideRepo action = do
     repoPath <- relativeToHome repoName
     withCurrentDir repoPath action
diff --git a/src/Life/Main/Add.hs b/src/Life/Main/Add.hs
--- a/src/Life/Main/Add.hs
+++ b/src/Life/Main/Add.hs
@@ -6,6 +6,7 @@
        ( lifeAdd
        ) where
 
+import Lens.Micro.Platform (Lens', (%~))
 import Path (Abs, Dir, File, Path, Rel, parent, toFilePath, (</>))
 import Path.IO (copyDirRecur, copyFile, doesDirExist, doesFileExist, ensureDir, getHomeDir,
                 makeRelative, resolveDir, resolveFile)
diff --git a/src/Life/Main/Init.hs b/src/Life/Main/Init.hs
--- a/src/Life/Main/Init.hs
+++ b/src/Life/Main/Init.hs
@@ -89,7 +89,7 @@
          )
 
 partitionM :: forall f m a . (Monad m, Foldable f) => (a -> m Bool) -> f a -> m ([a], [a])
-partitionM check = foldM partitionAction ([], [])
+partitionM check = foldlM partitionAction ([], [])
   where
     partitionAction :: ([a], [a]) -> a -> m ([a], [a])
     partitionAction (ifTrue, ifFalse) a = check a >>= \case
diff --git a/src/Life/Main/Push.hs b/src/Life/Main/Push.hs
--- a/src/Life/Main/Push.hs
+++ b/src/Life/Main/Push.hs
@@ -6,6 +6,7 @@
        ( lifePush
        ) where
 
+import Lens.Micro.Platform ((^.))
 import Path (Abs, Path, Rel, toFilePath, (</>))
 import Path.IO (doesDirExist, doesFileExist, removeDirRecur, removeFile)
 
diff --git a/src/Life/Main/Remove.hs b/src/Life/Main/Remove.hs
--- a/src/Life/Main/Remove.hs
+++ b/src/Life/Main/Remove.hs
@@ -6,6 +6,7 @@
        ( lifeRemove
        ) where
 
+import Lens.Micro.Platform (Lens', (%~))
 import Path (Abs, Path, Rel)
 import Path.IO (getHomeDir, makeRelative, removeDirRecur, removeFile, resolveDir, resolveFile)
 
diff --git a/src/Life/Message.hs b/src/Life/Message.hs
--- a/src/Life/Message.hs
+++ b/src/Life/Message.hs
@@ -23,7 +23,7 @@
 import System.IO (hFlush)
 
 import qualified Data.Text as T
-import qualified Universum.Unsafe as Unsafe
+import qualified Relude.Unsafe as Unsafe
 
 ----------------------------------------------------------------------------
 -- Ansi-terminal
@@ -65,7 +65,7 @@
 promptNonEmpty :: IO Text
 promptNonEmpty = do
     res <- T.strip <$> prompt
-    if null res
+    if T.null res
         then warningMessage "The answer shouldn't be empty" >> promptNonEmpty
         else pure res
 
diff --git a/src/Prelude.hs b/src/Prelude.hs
--- a/src/Prelude.hs
+++ b/src/Prelude.hs
@@ -1,7 +1,7 @@
--- | Uses @universum@ as default prelude.
+-- | Uses @relude@ as default prelude.
 
 module Prelude
-       ( module Universum
+       ( module Relude
        ) where
 
-import Universum
+import Relude
diff --git a/test/Test/Roundtrip.hs b/test/Test/Roundtrip.hs
--- a/test/Test/Roundtrip.hs
+++ b/test/Test/Roundtrip.hs
@@ -1,5 +1,6 @@
 module Test.Roundtrip where
 
+import Data.Foldable (foldr1)
 import Hedgehog (Gen, Property, forAll, property, tripping)
 import Path.Internal (Path (Path))
 import System.FilePath (pathSeparator, (</>))
