diff --git a/.nix-helpers/nixops.nix b/.nix-helpers/nixops.nix
new file mode 100644
--- /dev/null
+++ b/.nix-helpers/nixops.nix
@@ -0,0 +1,110 @@
+# This file can be used with `nixops` to create a virtual machine that has
+# Termonad installed.
+#
+# I use this to test out Termonad in a desktop environment with a menubar.
+#
+# On my development machine, I use XMonad as a Window Manager, so there are
+# no Window decorations for any X application.  This file creates a VM
+# with Termonad installed in Gnome 3.  This lets you see what Termonad
+# looks like when it has Window decorations, a title bar, etc.
+#
+# A virtual machine can be created based on this file with the following
+# commands:
+#
+# $ nixops create --deployment termonad-test .nix-helpers/nixops.nix
+# $ nixops deploy --deployment termonad-test
+#
+# This should open up a VirtualBox machine and start installing Gnome 3,
+# Termonad, etc.
+#
+# You should be able to login with the username "myuser" and password "foobar".
+#
+# When you are done you can destroy the machine and delete the deployment:
+#
+# $ nixops destroy --deployment termonad-test
+# $ nixops delete --deployment termonad-test
+#
+
+{
+  network.description = "Gnome With Termonad";
+
+  termonad-machine =
+    { config, pkgs, ...}:
+    {
+      imports = [ ];
+
+      deployment = {
+        targetEnv = "virtualbox";
+        virtualbox = {
+          disks.disk1.size = 20480;
+          headless = false;
+          memorySize = 2024;
+          vcpu = 1;
+        };
+      };
+
+      environment = {
+        systemPackages =
+          let
+            pkgList = with pkgs; [
+              acpi aspell aspellDicts.en autojump bash bash-completion bc
+              chromium curl dmenu emacs evince file firefoxWrapper gcc geeqie
+              gimp gitAndTools.gitFull gitAndTools.hub gnumake gnupg hexchat
+              htop imagemagick jq k2pdfopt ltrace manpages ncurses
+              nix-bash-completions nixops p7zip pkgconfig psmisc python3
+              redshift roxterm screen strace tree unzip usbutils vimHugeX wget
+              wirelesstools xfce.terminal xorg.xbacklight xorg.xmodmap
+              xscreensaver xterm zlib
+            ];
+            termonad = import ../default.nix { };
+          in [ termonad ] ++ pkgList;
+        variables.EDITOR = "vim";
+      };
+
+      fonts.fonts = with pkgs; [
+        dejavu_fonts ipafont source-code-pro ttf_bitstream_vera
+      ];
+
+      i18n = {
+        consoleFont = "Lat2-Terminus16";
+        consoleKeyMap = "us";
+        defaultLocale = "en_US.UTF-8";
+        inputMethod = {
+          enabled = "fcitx";
+          fcitx.engines = with pkgs.fcitx-engines; [ mozc ];
+        };
+      };
+
+      programs.bash.enableCompletion = true;
+
+      services = {
+        xserver = {
+          enable = true;
+          layout = "us";
+          desktopManager.gnome3.enable = true;
+        };
+        openssh = {
+          enable = true;
+          forwardX11 = true;
+          challengeResponseAuthentication = true;
+          passwordAuthentication = true;
+          permitRootLogin = "yes";
+        };
+      };
+
+      security.sudo = {
+        enable = true;
+        extraConfig = ''
+          %wheel      ALL=(ALL:ALL) NOPASSWD: ${pkgs.systemd}/bin/poweroff
+          %wheel      ALL=(ALL:ALL) NOPASSWD: ${pkgs.systemd}/bin/reboot
+          %wheel      ALL=(ALL:ALL) NOPASSWD: ${pkgs.systemd}/bin/systemctl suspend
+        '';
+      };
+
+      users.extraUsers.myuser = {
+        extraGroups = [ "audio" "systemd-journal" "video" "wheel" ];
+        initialPassword = "foobar";
+        isNormalUser = true;
+      };
+    };
+}
diff --git a/.nix-helpers/nixpkgs.nix b/.nix-helpers/nixpkgs.nix
new file mode 100644
--- /dev/null
+++ b/.nix-helpers/nixpkgs.nix
@@ -0,0 +1,11 @@
+# This file pins the version of nixpkgs to a known good version.
+# It is imported from various other files.
+
+let
+  nixpkgsTarball = builtins.fetchTarball {
+    # recent version of nixpkgs as of 2018-07-29
+    url = "https://github.com/NixOS/nixpkgs/archive/a2c6dbe370160ffea5537f64dda04489184c5ce1.tar.gz";
+    sha256 = "1x993g9343yv5wyp29i6vskdcc3rl42xipv79nwmmrj8ay2yhh3b";
+  };
+in
+import nixpkgsTarball { }
diff --git a/.nix-helpers/running-termonad.nix b/.nix-helpers/running-termonad.nix
new file mode 100644
--- /dev/null
+++ b/.nix-helpers/running-termonad.nix
@@ -0,0 +1,26 @@
+# Running `nix-shell .nix-helpers/running-termonad.nix` will put us in an environment
+# with termonad available, as well as GHC and a few other packages (lens and colour).
+#
+# If you run `termonad` while in this environment, `termonad` should be able to see
+# GHC and all the Haskell libraries listed below.  This will let `termonad` be able to
+# recompile the `~/.config/termonad/termonad.hs` file.
+#
+# This file is really only used when you want to run termonad in an environment where it
+# has access to specific libraries.
+
+{ compiler ? "ghc843" }:
+
+let
+  nixpkgs = import ./nixpkgs.nix;
+
+  termonad = nixpkgs.callPackage ../. { inherit compiler; };
+
+  ghcStuff = nixpkgs.pkgs.haskell.packages.${compiler}.ghcWithPackages (pkgs: [
+    pkgs.colour
+    pkgs.lens
+    termonad
+  ]);
+
+in
+
+nixpkgs.runCommand "dummy" { buildInputs = [ ghcStuff termonad ]; } ""
diff --git a/.nix-helpers/stack-nix-shell.nix b/.nix-helpers/stack-nix-shell.nix
new file mode 100644
--- /dev/null
+++ b/.nix-helpers/stack-nix-shell.nix
@@ -0,0 +1,36 @@
+# This is the shell file specified in the stack.yaml file.
+# This forces stack to use ghc-8.0.2 and stack-lts-9.yaml to compile termonad.
+
+let
+  nixpkgsTarball = builtins.fetchTarball {
+    # 17.09 (this works)
+    #url = "https://github.com/NixOS/nixpkgs/archive/39cd40f7bea40116ecb756d46a687bfd0d2e550e.tar.gz";
+    #sha256 = "0kpx4h9p1lhjbn1gsil111swa62hmjs9g93xmsavfiki910s73sh";
+
+    # 18.03
+    url = "https://github.com/NixOS/nixpkgs/archive/120b013e0c082d58a5712cde0a7371ae8b25a601.tar.gz";
+    sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f";
+
+    # recent version of nixpkgs as of 2018-07-25 (this only seems to sometimes work...?))
+    #url = "https://github.com/NixOS/nixpkgs/archive/4ccaa7de8eb34a0bb140f109a0e88095480118eb.tar.gz";
+    #sha256 = "0szbxfrzmlmxrgkqz5wnfgmsjp82vaddgz7mhdz7jj0jhd0hza4i";
+  };
+  nixpkgs = import nixpkgsTarball { };
+in
+
+with nixpkgs;
+
+haskell.lib.buildStackProject {
+  name = "termonad";
+  buildInputs = [
+    cairo
+    gnome3.vte
+    gobjectIntrospection
+    gtk3
+    zlib
+  ];
+  ghc = haskell.compiler.ghc802;
+  extraArgs = [
+    "--stack-yaml stack-lts-9.yaml"
+  ];
+}
diff --git a/.nix-helpers/termonad.nix b/.nix-helpers/termonad.nix
new file mode 100644
--- /dev/null
+++ b/.nix-helpers/termonad.nix
@@ -0,0 +1,34 @@
+{ mkDerivation, base, Cabal, cabal-doctest, classy-prelude, colour
+, constraints, data-default, doctest, dyre, gi-gdk, gi-gio, gi-glib
+, gi-gtk, gi-pango, gi-vte, gtk3, haskell-gi-base, hedgehog, lens
+, pretty-simple, QuickCheck, stdenv, tasty, tasty-hedgehog
+, template-haskell, xml-conduit, xml-html-qq
+}:
+mkDerivation {
+  pname = "termonad";
+  version = "0.2.0.0";
+  src = builtins.filterSource (path: type:
+    baseNameOf path != ".git" &&
+    baseNameOf path != "result" &&
+    baseNameOf path != ".stack-work" &&
+    baseNameOf path != "dist") ./..;
+  isLibrary = true;
+  isExecutable = true;
+  doCheck = false;
+  enableSeparateDataOutput = true;
+  setupHaskellDepends = [ base Cabal cabal-doctest ];
+  libraryHaskellDepends = [
+    base classy-prelude colour constraints data-default dyre gi-gdk
+    gi-gio gi-glib gi-gtk gi-pango gi-vte haskell-gi-base lens
+    pretty-simple QuickCheck xml-conduit xml-html-qq
+  ];
+  libraryPkgconfigDepends = [ gtk3 ];
+  executableHaskellDepends = [ base ];
+  testHaskellDepends = [
+    base doctest hedgehog lens QuickCheck tasty tasty-hedgehog
+    template-haskell
+  ];
+  homepage = "https://github.com/cdepillabout/termonad";
+  description = "Terminal emulator configurable in Haskell";
+  license = stdenv.lib.licenses.bsd3;
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+
+## 0.2.1.0
+
+* Make sure the window title is set to "Termonad".
+* Relabel tabs when termonad is started.
+
 ## 0.2.0.0
 
 * Open dialog asking if you want to quit when you try to use your WM to quit.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -12,6 +12,8 @@
 customizable and provides hooks to modify the default behavior.  It can be
 thought of as the "XMonad" of terminal emulators.
 
+![image of Termonad](./img/termonad.png)
+
 <!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
 **Table of Contents**
 
@@ -20,24 +22,34 @@
         - [Arch Linux](#arch-linux)
         - [Ubuntu / Debian](#ubuntu--debian)
         - [NixOS](#nixos)
+        - [Mac OS X](#mac-os-x)
+        - [Windows](#windows)
     - [How to use Termonad](#how-to-use-termonad)
+        - [Configuring Termonad](#configuring-termonad)
+        - [Compiling Local Settings](#compiling-local-settings)
+            - [Running with `stack`](#running-with-stack)
+            - [Running with `nix`](#running-with-nix)
     - [Goals](#goals)
+    - [Contributions](#contributions)
     - [Maintainers](#maintainers)
 
 <!-- markdown-toc end -->
 
 ## Installation
 
-Termonad can be able to be installed on any system as long as the necessary GTK
-libraries are installed.  The following lists instructions for a few
-distributions.  If the given steps don't work for you, or you want to add
-instructions for an additional distribution, please send a pull request.
+Termonad can be installed on any system as long as the necessary GTK libraries
+are available.  The following are instructions for installing Termonad on a few
+different distributions and systems.  If the given steps don't work for you, or
+you want to add instructions for an additional system, please send a pull
+request.
 
 The following steps use the
 [`stack`](https://docs.haskellstack.org/en/stable/README/) build tool to build
-Termonad, but [`cabal`](https://www.haskell.org/cabal/) can be used as well.
-If `cabal` doesn't work for you, please open an issue or send a pull request.
+Termonad, but [`cabal`](https://www.haskell.org/cabal/) can be used as well. Steps for
+installing `stack` can be found on
+[this page](https://docs.haskellstack.org/en/stable/install_and_upgrade/).
 
+
 ### Arch Linux
 
 First, you must install the required GTK system libraries:
@@ -46,10 +58,6 @@
 $ pacman -S vte3
 ```
 
-You must have `stack` to be able to build Termonad.  Steps for
-installing `stack` can be found on
-[this page](https://docs.haskellstack.org/en/stable/install_and_upgrade/).
-
 In order to install Termonad, clone this repository and run `stack install`.
 This will install the `termonad` binary to `~/.local/bin/`:
 
@@ -67,10 +75,6 @@
 $ apt-get install gobject-introspection libgirepository1.0-dev libgtk-3-dev libvte-2.91-dev
 ```
 
-You must have `stack` to be able to build Termonad.  Steps for
-installing `stack` can be found on
-[this page](https://docs.haskellstack.org/en/stable/install_and_upgrade/).
-
 In order to install Termonad, clone this repository and run `stack install`.
 This will install the `termonad` binary to `~/.local/bin/`:
 
@@ -103,6 +107,14 @@
 $ nix-build
 ```
 
+### Mac OS X
+
+(*currently no instructions available.  please send a PR adding instructions if you get termonad to build.*)
+
+### Windows
+
+(*currently no instructions available.  please send a PR adding instructions if you get termonad to build.*)
+
 ## How to use Termonad
 
 Termonad is similar to XMonad. The above steps will install a `termonad` binary
@@ -181,7 +193,120 @@
   defaultMain termonadConf
 ```
 
+### Compiling Local Settings
+
+If you lauch Termonad by calling `~/.local/bin/termonad`, it will try to
+compile the `~/.config/termonad/termonad.hs` file if it exists.  The problem is
+that `~/.local/bin/termonad` needs to be able to see GHC and the required
+Haskell libraries to be able to compile `~/.config/termonad/termonad.hs`.
+
+There are a couple solutions to this problem, listed in the sections below.
+
+(These steps are definitely confusing, and I would love to figure out a better
+way to do this.  Please submit an issue or PR if you have a good idea about
+how to fix this.)
+
+#### Running with `stack`
+
+If you originally compiled Termonad with `stack`, you can use `stack` to
+execute Termonad.  First, you must change to the directory with the Termonad
+source code.  From there, you can run `stack exec`:
+
+```sh
+$ cd termonad/  # change to the termonad source code directory
+$ stack exec -- termonad
+```
+
+`stack` will pick up the correct GHC version and libraries from the
+`stack.yaml` and `termonad.cabal` file.  `termonad` will be run in an
+environment with GHC available.  `termonad` will use this GHC and libraries to
+compile your `~/.config/termonad/termonad.hs` file.  It if succeeds, it should
+create a `~/.cache/termonad/termonad-linux-x86_64` binary.
+
+If you need extra Haskell libraries available when compiling your
+`~/.config/termonad/termonad.hs` file, you can specify them to `stack exec`:
+
+```sh
+$ stack exec --package lens --package conduit -- termonad
+```
+
+The problem with this is that `stack exec` changes quite a few of your
+environment variables.  It is not recommended to actually run Termonad from
+within `stack exec`.  After you run `stack exec -- termonad` and let it
+recompile your `~/.config/termonad/termonad.hs` file, exit Termonad.
+Re-run Termonad by calling it directly.  Termonad will notice that
+`~/.config/termonad/termonad.hs` hasn't changed since
+`~/.cache/termonad/termonad-linux-x86_64` has been recompiled, so it will
+directly execute `~/.cache/termonad/termonad-linux-x86_64`.
+
+#### Running with `nix`
+
+If you originally compiled Termonad with `nix`, you can use `nix` to create
+an environment with GHC and specified Haskell libraries available.
+
+There is a `.nix` file available you can use to do this:
+
+[`.nix-helpers/running-termonad.nix`](./.nix-helpers/running-termonad.nix)
+
+This file will give us an environment with `termonad`, GHC, and a few Haskell
+libraries installed.  You can enter this environment using `nix-shell`:
+
+```sh
+$ cd termonad/  # change to the termonad source code directory
+$ nix-shell ./.nix-helpers/running-termonad.nix
+```
+
+From within this environment, you can run `termonad`.  It will find the
+`~/.config/termonad/termonad.hs` file and compile it, outputting the
+`.cache/termonad/termonad-linux-x86_64` binary.  Termonad will then re-exec
+this binary.
+
+The problem with this is that `nix-shell` may change your environment variables
+in ways you do not want.  I recommend running `termonad` to get it to
+recompile your `~/.config/termonad/termonad.hs` file, then exit the nix-shell environment and
+rerun Termonad by calling it directly.  Termonad will notice that
+`~/.config/termonad/termonad.hs` hasn't been changed since
+`~/.cache/termonad/termonad-linux-x86_64` has been recompiled, so it will
+directly execute `~/.cache/termonad/termonad-linux-x86_64`.
+
 ## Goals
+
+Termonad has the following goals:
+
+* fully configurable in Haskell
+
+  There are already
+  [many](https://gnometerminator.blogspot.com/p/introduction.html)
+  [good](https://www.enlightenment.org/about-terminology.md)
+  [terminal](http://software.schmorp.de/pkg/rxvt-unicode.html)
+  [emulators](https://launchpad.net/sakura).  However, there are no terminal
+  emulators fully configurable in Haskell.  Termonad fills this niche.
+
+* flexible
+
+  Most people only need a terminal emulator that lets you change the font-size,
+  cursor color, etc.  They don't need tons of configuration options.
+  Termonad should be for people that like lots of configuration options.
+  Termonad should provide many hooks to allow the user to change it's behavior.
+
+* stable
+
+  Termonad should be able to be used as everyday as your main terminal
+  emulator.  It should not crash for any reason.  If you experience a crash,
+  please file an issue or a pull request!
+
+* good documentation
+
+  The [documentation](https://hackage.haskell.org/package/termonad) for
+  Termonad on Hackage should be good.  You shouldn't have to guess at what
+  certain data types or functions do.  If you have a hard time understanding
+  anything in the documentation, please submit an issue or PR.
+
+## Contributions
+
+Contributions are highly appreciated.  Termonad is currently missing many
+helpful configuration options and behavior hooks.  If there is something you
+would like to add, please submit an issue or PR.
 
 ## Maintainers
 
diff --git a/default.nix b/default.nix
new file mode 100644
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,32 @@
+# This is the main nix file for termonad.  It will just build the termonad binary.
+# It can be built with the command `nix-build` in the main top directory.
+#
+# The termonad binary will be created at `result/bin/termonad`.
+
+{ compiler ? "ghc843" }:
+
+let
+  nixpkgs = import ./.nix-helpers/nixpkgs.nix;
+
+  set-gi-vte-version = _: {
+    version = "2.91.19";
+    sha256 = "1hnhidjr7jh7i826lj6kdn264i592sfl5kwvymnpiycmcb37dd4y";
+  };
+
+  set-gi-gtk-version = _: {
+    version = "3.0.24";
+    sha256 = "14cyj1acxs39avciyzqqb1qa5dr4my8rv3mfwv1kv92wa9a5i97v";
+  };
+
+  allHaskellPackages = nixpkgs.pkgs.haskell.packages.${compiler}.override {
+    overrides = self: super: let lib = nixpkgs.pkgs.haskell.lib; in {
+      gi-gtk = lib.overrideCabal super.gi-gtk set-gi-gtk-version;
+      gi-vte = lib.overrideCabal (lib.addPkgconfigDepend (super.gi-vte.override { vte = nixpkgs.gnome3.vte; }) nixpkgs.gnome3.gtk) set-gi-vte-version;
+    };
+  };
+
+in
+
+allHaskellPackages.callPackage .nix-helpers/termonad.nix {
+  inherit (nixpkgs.gnome3) gtk3;
+}
diff --git a/img/termonad.png b/img/termonad.png
new file mode 100644
Binary files /dev/null and b/img/termonad.png differ
diff --git a/shell.nix b/shell.nix
new file mode 100644
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,16 @@
+# This is a file that allows you to jump into an environment to be able to build termonad.
+# You can jump into this environment by running the command `nix-shell`.
+#
+# This also installs cabal, so you should be able to build termonad by running `cabal new-build`.
+#
+# In general, if you prefer to use `stack`, you probably won't use this file.
+
+{ compiler ? "ghc843" }:
+
+let
+  nixpkgs = import .nix-helpers/nixpkgs.nix;
+in
+
+(import ./default.nix { inherit compiler; }).env.overrideAttrs (oldAttrs: rec {
+  nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ nixpkgs.pkgs.haskell.packages.${compiler}.cabal-install ];
+})
diff --git a/src/Termonad/App.hs b/src/Termonad/App.hs
--- a/src/Termonad/App.hs
+++ b/src/Termonad/App.hs
@@ -57,6 +57,7 @@
   , windowClose
   , windowPresent
   , windowSetDefaultIconFromFile
+  , windowSetTitle
   , windowSetTransientFor
   )
 import qualified GI.Gtk as Gtk
@@ -325,6 +326,8 @@
   menuBuilder <- builderNewFromString menuText $ fromIntegral (length menuText)
   menuModel <- objFromBuildUnsafe menuBuilder "menubar" MenuModel
   applicationSetMenubar app (Just menuModel)
+
+  windowSetTitle win "Termonad"
 
   void $ onWidgetDeleteEvent win $ \_ -> do
     userRequestedExit <- getUserRequestedExit mvarTMState
diff --git a/src/Termonad/Term.hs b/src/Termonad/Term.hs
--- a/src/Termonad/Term.hs
+++ b/src/Termonad/Term.hs
@@ -184,7 +184,8 @@
 relabelTab :: Notebook -> Label -> ScrolledWindow -> Terminal -> IO ()
 relabelTab notebook label scrolledWin term' = do
   pageNum <- notebookPageNum notebook scrolledWin
-  title <- terminalGetWindowTitle term'
+  maybeTitle <- terminalGetWindowTitle term'
+  let title = fromMaybe "bash" maybeTitle
   labelSetLabel label $ tshow (pageNum + 1) <> ". " <> title
 
 showScrollbarToPolicy :: ShowScrollbar -> PolicyType
@@ -301,6 +302,7 @@
             notebookSetCurrentPage note pageIndex
       pure (newTMState, setCurrPageAction)
   setCurrPageAction
+  relabelTab (tmNotebook currNote) tabLabel scrolledWin vteTerm
   void $ onTerminalWindowTitleChanged vteTerm $ do
     TMState{tmStateNotebook} <- readMVar mvarTMState
     let notebook = tmNotebook tmStateNotebook
diff --git a/termonad.cabal b/termonad.cabal
--- a/termonad.cabal
+++ b/termonad.cabal
@@ -1,5 +1,5 @@
 name:                termonad
-version:             0.2.0.0
+version:             0.2.1.0
 synopsis:            Terminal emulator configurable in Haskell
 description:         Please see <https://github.com/cdepillabout/termonad#readme README.md>.
 homepage:            https://github.com/cdepillabout/termonad
@@ -13,6 +13,14 @@
 cabal-version:       >=1.12
 extra-source-files:  README.md
                    , CHANGELOG.md
+                   , default.nix
+                   , img/termonad.png
+                   , .nix-helpers/nixops.nix
+                   , .nix-helpers/nixpkgs.nix
+                   , .nix-helpers/running-termonad.nix
+                   , .nix-helpers/stack-nix-shell.nix
+                   , .nix-helpers/termonad.nix
+                   , shell.nix
 data-files:          img/termonad-lambda.png
 custom-setup
   setup-depends:     base
@@ -45,7 +53,7 @@
                      , gi-glib
                      , gi-gtk >= 3.0.24
                      , gi-pango
-                     , gi-vte >= 2.91.18
+                     , gi-vte >= 2.91.19
                      , haskell-gi-base
                      , lens
                      , pretty-simple
