diff --git a/.nix-helpers/nixpkgs.nix b/.nix-helpers/nixpkgs.nix
--- a/.nix-helpers/nixpkgs.nix
+++ b/.nix-helpers/nixpkgs.nix
@@ -20,13 +20,13 @@
     if isNull nixpkgs
       then
         builtins.fetchTarball {
-          # Recent version of nixpkgs-19.09 as of 2019-09-16.
-          url = "https://github.com/NixOS/nixpkgs/archive/64e38f246aebc1fcd800952322c08f92d1420660.tar.gz";
-          sha256 = "sha256:16cjhck691f8dhb996rx0xvcwsqxrxs4lfajgqjnv0zfr8f76srm";
+          # Recent version of nixpkgs master as of 2020-03-01.
+          url = "https://github.com/NixOS/nixpkgs/archive/4f36e9f9a33da034327188ddebc3aecb3633e4d7.tar.gz";
+          sha256 = "sha256:0aa3aldp6m962hx0qzkizkwvamwv2c4yijk6g515dx7h7f5xrary";
         }
       else nixpkgs;
 
-  compilerVersion = if isNull compiler then "ghc865" else compiler;
+  compilerVersion = if isNull compiler then "ghc882" else compiler;
 
   # An overlay that adds termonad to all haskell package sets.
   haskellPackagesOverlay = self: super: {
@@ -60,9 +60,9 @@
                   src
                   extraCabal2nixOptions
                   {
-                    inherit (self.gnome3) gtk3;
+                    inherit (self) gtk3;
                     libpcre2 = self.pcre2;
-                    vte_291 = self.gnome3.vte;
+                    vte_291 = self.vte;
                   };
             in
             termonadDrv;
diff --git a/.nix-helpers/stack-fhs-env.nix b/.nix-helpers/stack-fhs-env.nix
deleted file mode 100644
--- a/.nix-helpers/stack-fhs-env.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-# This is a nix derivation that gives us a `stack` binary that will run in a
-# chroot.  This is needed to workaround
-# https://github.com/cdepillabout/termonad/issues/99.
-#
-# This is nice to use if you're having trouble running `stack` on nixos
-# normally.  It generally shouldn't be needed any other time.
-#
-# You can use this by starting a `nix-shell` with it:
-#
-# $ nix-shell --pure .nix-helpers/stack-fhs-env.nix
-#
-# From here, you can run `stack` normally.
-
-with (import ./nixpkgs.nix {});
-
-# stack needs to be version 1.9.3, because versions greater than two can't be
-# re-execed in a nix shell:
-#
-#https://github.com/commercialhaskell/stack/issues/5000
-
-let
-  nixpkgs-19-03-tarball = builtins.fetchTarball {
-    # Channel nixos-19.03 as of 2019/08/12.
-    url = "https://github.com/NixOS/nixpkgs/archive/56d94c8c69f8cac518027d191e2f8de678b56088.tar.gz";
-    sha256 = "1c812ssgmnmh97sarmp8jcykk0g57m8rsbfjg9ql9996ig6crsmi";
-  };
-
-  nixpkgs-19-03 = import nixpkgs-19-03-tarball {};
-
-  stack = nixpkgs-19-03.stack;
-
-  fhsStack =
-    buildFHSUserEnv {
-      name = "stack";
-      runScript = "stack";
-      targetPkgs = pkgs: (with pkgs; [
-          binutils
-          cairo
-          cairo.dev
-          git
-          gnome3.atk
-          gnome3.gdk_pixbuf
-          gnome3.glib
-          gnome3.gtk
-          gnome3.vte
-          gnutls
-          gobjectIntrospection
-          gtk3
-          iana-etc
-          pango
-          pcre2
-          pkgconfig
-          # stack
-          termonadKnownWorkingHaskellPkgSet.ghc
-          zlib
-      ]) ++ [
-        stack
-      ] ++
-        stdenv.lib.optional
-          (stdenv.hostPlatform.libc == "glibc")
-          glibcLocales;
-      profile = ''
-        export STACK_IN_NIX_SHELL=1
-        export GI_TYPELIB_PATH=/usr/lib/girepository-1.0
-        export XDG_DATA_DIRS=/usr/share:$XDG_DATA_DIRS
-      '';
-      extraOutputsToInstall = ["dev"];
-    };
-in
-
-mkShell {
-  buildInputs = [
-    fhsStack
-    gitAndTools.gitFull
-    gitAndTools.hub
-  ];
-}
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 3.1.0.0
+
+* Fix up deprecated functions used in Setup.hs.  This should allow Termonad to
+  be compiled with Cabal-3.0.0.0 (which is used by default in GHC-8.8).
+  [#144](https://github.com/cdepillabout/termonad/pull/144) Thanks
+  [mdorman](https://github.com/mdorman)!
+
+* Fully update to LTS-15 and GHC-8.8.  Termonad now requires GHC-8.8 in order
+  to be compiled. [#145](https://github.com/cdepillabout/termonad/pull/145).
 
 ## 3.0.0.0
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -107,6 +107,9 @@
 $ stack --nix install
 ```
 
+(_edit_: Building with `stack` using Nix-integration does not currently work.
+See [#99](https://github.com/cdepillabout/termonad/issues/99).)
+
 The second is using the normal `nix-build` machinery.  The following commands
 clone this repository and build the `termonad` binary at `./result/bin/`:
 
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -5,18 +5,18 @@
 -- are compiled with.
 
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedLists #-}
 {-# OPTIONS_GHC -Wall #-}
 module Main (main) where
 
 import Data.Maybe (catMaybes)
-import Data.Monoid ((<>))
-import Data.Version (Version)
 import Distribution.PackageDescription (HookedBuildInfo, cppOptions, emptyBuildInfo)
 import Distribution.Simple (UserHooks, defaultMainWithHooks, preBuild, preRepl, simpleUserHooks)
-import Distribution.Simple.Program (configureProgram, defaultProgramConfiguration, getDbProgramOutput, pkgConfigProgram)
+import Distribution.Simple.Program (configureProgram, defaultProgramDb, getDbProgramOutput, pkgConfigProgram)
 import Distribution.Text (simpleParse)
 import Distribution.Verbosity (normal)
+import Distribution.Version (Version, mkVersion)
 
 #ifndef MIN_VERSION_cabal_doctest
 #define MIN_VERSION_cabal_doctest(x,y,z) 0
@@ -103,7 +103,7 @@
   -> [String]
 createVteVersionCPPOpts vers =
   catMaybes $
-    [ if vers >= [0,44] then Just "-DVTE_VERSION_GEQ_0_44" else Nothing
+    [ if vers >= mkVersion [0,44] then Just "-DVTE_VERSION_GEQ_0_44" else Nothing
     ]
 
 -- | Based on the version of the GTK3 library as reported by @pkg-config@, return
@@ -117,12 +117,12 @@
   -> [String] -- ^ A list of CPP macros to show the GTK version.
 createGtkVersionCPPOpts gtkVersion =
   catMaybes $
-    [ if gtkVersion >= [3,22] then Just "-DGTK_VERSION_GEQ_3_22" else Nothing
+    [ if gtkVersion >= mkVersion [3,22] then Just "-DGTK_VERSION_GEQ_3_22" else Nothing
     ]
 
 getPkgConfigVersionFor :: String -> IO (Maybe Version)
 getPkgConfigVersionFor program = do
-  pkgDb <- configureProgram normal pkgConfigProgram defaultProgramConfiguration
+  pkgDb <- configureProgram normal pkgConfigProgram defaultProgramDb
   pkgConfigOutput <-
     getDbProgramOutput normal pkgConfigProgram pkgDb ["--modversion", program]
   -- Drop the newline on the end of the pkgConfigOutput.
diff --git a/example-config/ExampleColourExtension.hs b/example-config/ExampleColourExtension.hs
--- a/example-config/ExampleColourExtension.hs
+++ b/example-config/ExampleColourExtension.hs
@@ -4,7 +4,7 @@
 
 module Main where
 
-import Data.Singletons (sing)
+import Data.Singletons (Sing, sing)
 import Termonad
   ( CursorBlinkMode(CursorBlinkModeOff), Option(Set)
   , ShowScrollbar(ShowScrollbarNever), TMConfig, confirmExit, cursorBlinkMode
@@ -17,7 +17,7 @@
   , foregroundColour, palette
   )
 import Termonad.Config.Vec
-  ( N4, N8, Sing, Vec((:*), EmptyVec), fin_, setAtVec, unsafeFromListVec_
+  ( N4, N8, Vec((:*), EmptyVec), fin_, setAtVec, unsafeFromListVec_
   )
 
 -- This is our main 'TMConfig'.  It holds all of the non-colour settings
diff --git a/example-config/ExampleSolarizedColourExtension.hs b/example-config/ExampleSolarizedColourExtension.hs
--- a/example-config/ExampleSolarizedColourExtension.hs
+++ b/example-config/ExampleSolarizedColourExtension.hs
@@ -4,15 +4,30 @@
 module Main where
 
 import Termonad
-  ( CursorBlinkMode(CursorBlinkModeOff), Option(Set)
-  , ShowScrollbar(ShowScrollbarNever), TMConfig, confirmExit, cursorBlinkMode
-  , defaultConfigOptions, defaultTMConfig, options, showMenu, showScrollbar
+  ( CursorBlinkMode(CursorBlinkModeOff)
+  , Option(Set)
+  , ShowScrollbar(ShowScrollbarNever)
+  , TMConfig
+  , confirmExit
+  , cursorBlinkMode
+  , defaultConfigOptions
+  , defaultTMConfig
+  , options
+  , showMenu
+  , showScrollbar
   , start
   )
 import Termonad.Config.Colour
-  ( AlphaColour, ColourConfig, Palette(ExtendedPalette), addColourExtension
-  , createColour, createColourExtension, defaultColourConfig
-  , foregroundColour, palette
+  ( AlphaColour
+  , ColourConfig
+  , Palette(ExtendedPalette)
+  , addColourExtension
+  , createColour
+  , createColourExtension
+  , defaultColourConfig
+  , backgroundColour
+  , foregroundColour
+  , palette
   )
 import Termonad.Config.Vec (Vec((:*), EmptyVec), N8)
 
@@ -38,13 +53,14 @@
   defaultColourConfig
     -- Set the default foreground colour of text of the terminal.
     { foregroundColour = Set (createColour 131 148 150) -- base0
+    , backgroundColour = Set (createColour   0  43  54) -- base03
     -- Set the extended palette that has 2 Vecs of 8 Solarized palette colours
     , palette = ExtendedPalette solarizedDark1 solarizedDark2
     }
   where
     solarizedDark1 :: Vec N8 (AlphaColour Double)
     solarizedDark1 =
-         createColour   0  43  54 -- base03, background
+         createColour   7  54  66 -- base02, background highlights
       :* createColour 220  50  47 -- red
       :* createColour 133 153   0 -- green
       :* createColour 181 137   0 -- yellow
@@ -56,7 +72,7 @@
 
     solarizedDark2 :: Vec N8 (AlphaColour Double)
     solarizedDark2 =
-         createColour   7  54  66 -- base02, background highlights
+         createColour   0  43  54 -- base03, background
       :* createColour 203  75  22 -- orange
       :* createColour  88 110 117 -- base01, comments / secondary text
       :* createColour 131 148 150 -- base0, body text / default code / primary content
@@ -72,6 +88,7 @@
   defaultColourConfig
     -- Set the default foreground colour of text of the terminal.
     { foregroundColour = Set (createColour 101 123 131) -- base00
+    , backgroundColour = Set (createColour 253 246 227) -- base3
     -- Set the extended palette that has 2 Vecs of 8 Solarized palette colours
     , palette = ExtendedPalette solarizedLight1 solarizedLight2
     }
diff --git a/src/Termonad/App.hs b/src/Termonad/App.hs
--- a/src/Termonad/App.hs
+++ b/src/Termonad/App.hs
@@ -5,7 +5,8 @@
 import Termonad.Prelude
 
 import Config.Dyre (defaultParams, projectName, realMain, showError, wrapMain)
-import Control.Lens ((&), (.~), (^.), (^..), over, set, view)
+import Control.Lens ((.~), (^.), (^..), over, set, view)
+import Control.Monad.Fail (fail)
 import Data.FocusList (focusList, moveFromToFL, updateFocusFL)
 import Data.Sequence (findIndexR)
 import GI.Gdk (castTo, managedForeignPtr, screenGetDefault)
diff --git a/src/Termonad/Config/Vec.hs b/src/Termonad/Config/Vec.hs
--- a/src/Termonad/Config/Vec.hs
+++ b/src/Termonad/Config/Vec.hs
@@ -216,10 +216,12 @@
   -> Fin total
 fin_ n = toFinIFin $ ifin_ n
 
-data instance Sing (z :: Fin n) where
-  SFZ :: Sing 'FZ
-  SFS :: Sing x -> Sing ('FS x)
+data SFin :: forall n. Fin n -> Type where
+  SFZ :: SFin 'FZ
+  SFS :: SFin n -> SFin ('FS n)
 
+type instance Sing @(Fin n) = SFin
+
 instance SingI 'FZ where
   sing = SFZ
 
@@ -238,10 +240,10 @@
     case toSing fin' of
       SomeSing n -> SomeSing (SFS n)
 
-instance Show (Sing 'FZ) where
+instance Show (SFin 'FZ) where
   show SFZ = "SFZ"
 
-instance Show (Sing n) => Show (Sing ('FS n)) where
+instance Show (SFin n) => Show (SFin ('FS n)) where
   showsPrec d (SFS n) =
     showParen (d > 10) $
     showString "SFS " . showsPrec 11 n
@@ -291,11 +293,14 @@
   -> IFin total n
 ifin_ = ifin sing
 
-data instance Sing (z :: IFin n m) where
-  SIFZ :: Sing 'IFZ
-  SIFS :: Sing x -> Sing ('IFS x)
+data SIFin :: forall n m. IFin n m -> Type where
+  SIFZ :: SIFin 'IFZ
+  SIFS :: SIFin x -> SIFin ('IFS x)
 
+type instance Sing @(IFin n m) = SIFin
+
 instance SingI 'IFZ where
+  sing :: Sing 'IFZ
   sing = SIFZ
 
 instance SingI n => SingI ('IFS n) where
@@ -313,10 +318,10 @@
     case toSing fin' of
       SomeSing n -> SomeSing (SIFS n)
 
-instance Show (Sing 'IFZ) where
+instance Show (SIFin 'IFZ) where
   show SIFZ = "SIFZ"
 
-instance Show (Sing n) => Show (Sing ('IFS n)) where
+instance Show (SIFin n) => Show (SIFin ('IFS n)) where
   showsPrec d (SIFS n) =
     showParen (d > 10) $
     showString "SIFS " . showsPrec 11 n
diff --git a/src/Termonad/Gtk.hs b/src/Termonad/Gtk.hs
--- a/src/Termonad/Gtk.hs
+++ b/src/Termonad/Gtk.hs
@@ -4,6 +4,7 @@
 
 import Termonad.Prelude
 
+import Control.Monad.Fail (MonadFail, fail)
 import Data.GI.Base (ManagedPtr, withManagedPtr)
 import GHC.Stack (HasCallStack)
 import GI.Gdk
@@ -37,7 +38,7 @@
 -- This can fail for different reasons, one of which being that application
 -- name does not have a period in it.
 appNew ::
-     (HasCallStack, MonadIO m)
+     (HasCallStack, MonadIO m, MonadFail m)
   => Maybe Text
   -- ^ The application name.  Must have a period in it if specified.  If passed
   -- as 'Nothing', then no application name will be used.
diff --git a/src/Termonad/Term.hs b/src/Termonad/Term.hs
--- a/src/Termonad/Term.hs
+++ b/src/Termonad/Term.hs
@@ -4,7 +4,7 @@
 
 import Termonad.Prelude
 
-import Control.Lens ((^.), (&), (.~), set, to)
+import Control.Lens ((^.), (.~), set, to)
 import Data.Colour.SRGB (Colour, RGB(RGB), toSRGB)
 import Data.FocusList (appendFL, deleteFL, getFocusItemFL)
 import GI.Gdk
@@ -92,7 +92,6 @@
   , terminalSpawnSync
   , terminalSetWordCharExceptions
   )
-import System.FilePath ((</>))
 import System.Directory (getSymbolicLinkTarget)
 import System.Environment (lookupEnv)
 
diff --git a/src/Termonad/Types.hs b/src/Termonad/Types.hs
--- a/src/Termonad/Types.hs
+++ b/src/Termonad/Types.hs
@@ -4,6 +4,7 @@
 
 import Termonad.Prelude
 
+import Control.Monad.Fail (fail)
 import Data.FocusList (FocusList, emptyFL, singletonFL, getFocusItemFL, lengthFL)
 import Data.Unique (Unique, hashUnique, newUnique)
 import Data.Yaml
@@ -27,7 +28,7 @@
 import GI.Pango (FontDescription)
 import GI.Vte (Terminal, CursorBlinkMode(..))
 import Text.Pretty.Simple (pPrint)
-import Text.Show (Show(showsPrec), ShowS, showParen, showString)
+import Text.Show (ShowS, showParen, showString)
 
 import Termonad.Gtk (widgetEq)
 
diff --git a/termonad.cabal b/termonad.cabal
--- a/termonad.cabal
+++ b/termonad.cabal
@@ -1,5 +1,5 @@
 name:                termonad
-version:             3.0.0.0
+version:             3.1.0.0
 synopsis:            Terminal emulator configurable in Haskell
 description:         Please see <https://github.com/cdepillabout/termonad#readme README.md>.
 homepage:            https://github.com/cdepillabout/termonad
@@ -10,7 +10,7 @@
 copyright:           2017 Dennis Gosnell
 category:            Text
 build-type:          Custom
-cabal-version:       >=1.12
+cabal-version:       1.12
 extra-source-files:  README.md
                    , CHANGELOG.md
                    , default.nix
@@ -19,7 +19,6 @@
                    , img/termonad.png
                    , .nix-helpers/nixops.nix
                    , .nix-helpers/nixpkgs.nix
-                   , .nix-helpers/stack-fhs-env.nix
                    , .nix-helpers/stack-shell.nix
                    , .nix-helpers/termonad-with-packages.nix
                    , shell.nix
@@ -55,7 +54,7 @@
                      , Termonad.Types
                      , Termonad.XML
   other-modules:       Paths_termonad
-  build-depends:       base >= 4.11 && < 5
+  build-depends:       base >= 4.13 && < 5
                      , adjunctions
                      , classy-prelude
                      , colour
diff --git a/test/readme/README.lhs b/test/readme/README.lhs
--- a/test/readme/README.lhs
+++ b/test/readme/README.lhs
@@ -107,6 +107,9 @@
 $ stack --nix install
 ```
 
+(_edit_: Building with `stack` using Nix-integration does not currently work.
+See [#99](https://github.com/cdepillabout/termonad/issues/99).)
+
 The second is using the normal `nix-build` machinery.  The following commands
 clone this repository and build the `termonad` binary at `./result/bin/`:
 
