diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+1.0.16
+
+* [Accept realised store paths as input](https://github.com/Gabriel439/nix-diff/pull/47)
+  * `nix-diff` will attempt to find the corresponding derivations using
+    `nix-store --query --deriver` if you provide a realised store path as input
+
 1.0.15
 
 * [Fix non-exhaustive pattern match](https://github.com/Gabriel439/nix-diff/pull/45)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -77,6 +77,13 @@
 
 ![](https://i.imgur.com/KUB4rXx.png)
 
+It's also possible to pass store paths or links to store paths, for example:
+
+```ShellSession
+$ nix-build example.nix
+$ nix-diff /run/current-system ./result
+```
+
 ## Development status
 
 [![Build Status](https://travis-ci.org/Gabriel439/nix-diff.png)](https://travis-ci.org/Gabriel439/nix-diff)
diff --git a/nix-diff.cabal b/nix-diff.cabal
--- a/nix-diff.cabal
+++ b/nix-diff.cabal
@@ -1,5 +1,5 @@
 name:                nix-diff
-version:             1.0.15
+version:             1.0.16
 synopsis:            Explain why two Nix derivations differ
 description:         This package provides a @nix-diff@ executable which
                      explains why two Nix derivations (i.e. @*.drv@ files)
@@ -30,6 +30,8 @@
                      , text                 >= 1.2      && < 1.3
                      , unix                                < 2.8
                      , vector               >= 0.12     && < 0.13
+                     , process                             < 1.7
+                     , filepath                            < 1.5
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options:         -Wall
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -15,6 +15,7 @@
 import Control.Monad.Reader (MonadReader, ReaderT, ask, local)
 import Control.Monad.State (MonadState, StateT, get, put)
 import Data.Attoparsec.Text (IResult(..))
+import Data.List.NonEmpty (NonEmpty(..))
 import Data.Map (Map)
 import Data.Monoid ((<>))
 import Data.Set (Set)
@@ -29,8 +30,10 @@
 import qualified Control.Monad.State
 import qualified Data.Attoparsec.Text
 import qualified Data.Char            as Char
+import qualified Data.List.NonEmpty
 import qualified Data.Map
 import qualified Data.Set
+import qualified Data.String          as String
 import qualified Data.Text            as Text
 import qualified Data.Text.IO         as Text.IO
 import qualified Data.Vector
@@ -39,8 +42,10 @@
 import qualified Options.Applicative
 import qualified Patience
 import qualified System.Directory     as Directory
+import qualified System.FilePath      as FilePath
 import qualified System.Posix.IO
 import qualified System.Posix.Terminal
+import qualified System.Process       as Process
 
 #if MIN_VERSION_base(4,9,0)
 import Control.Monad.Fail (MonadFail)
@@ -214,6 +219,22 @@
         _ -> do
             fail ("Could not parse a derivation from this file: " ++ string)
 
+-- | Read and parse a derivation from a store path that can be a derivation
+-- (.drv) or a realized path, in which case the corresponding derivation is
+-- queried.
+readInput :: FilePath -> Diff (Derivation FilePath Text)
+readInput path =
+    if FilePath.isExtensionOf ".drv" path
+    then readDerivation path
+    else do
+        let string = path
+        result <- liftIO (Process.readProcess "nix-store" [ "--query", "--deriver", string ] [])
+        case String.lines result of
+            [] -> fail ("Could not obtain the derivation of " ++ string)
+            l : ls -> do
+                let drv_path = Data.List.NonEmpty.last (l :| ls)
+                readDerivation drv_path
+
 {-| Join two `Map`s on shared keys, discarding keys which are not present in
     both `Map`s
 -}
@@ -623,8 +644,8 @@
         then do
             echo (explain "The requested outputs do not match")
         else do
-            leftDerivation  <- readDerivation leftPath
-            rightDerivation <- readDerivation rightPath
+            leftDerivation  <- readInput leftPath
+            rightDerivation <- readInput rightPath
 
             let leftOuts = Nix.Derivation.outputs leftDerivation
             let rightOuts = Nix.Derivation.outputs rightDerivation
