diff --git a/.nix-helpers/nixpkgs.nix b/.nix-helpers/nixpkgs.nix
--- a/.nix-helpers/nixpkgs.nix
+++ b/.nix-helpers/nixpkgs.nix
@@ -1,95 +1,57 @@
 # This file pins the version of nixpkgs to a known good version. The nixpkgs is
-# imported with an overlay overriding haskellPackages to generate haddocks for
-# GI dependencies, and to use the GHC, VTE, GTK and open-haddock versions we
-# want. It is imported from various other files.
+# imported with an overlay adding Termonad. It is imported from various other
+# files.
 
-{ compiler ? null, nixpkgs ? null }:
+{ # String representing a GHC version to use.  Normally something like
+  # "ghc865".  If null, then use a known-working GHC version.
+  compiler ? null
+, # A path to nixpkgs.  This will be imported.  If null, use a known-working
+  # nixpkgs version.
+  nixpkgs ? null
+, # Additional overlays to apply when importing nixpkgs.
+  additionalOverlays ? []
+}:
 
 let
   nixpkgsSrc =
     if isNull nixpkgs
       then
         builtins.fetchTarball {
-          # version of nixpkgs as of 2018-11-21
-          url = "https://github.com/NixOS/nixpkgs/archive/a370bd1fed5fcce0bb260fb6a5213911f1441eac.tar.gz";
-          sha256 = "17zj2yay3wgmgh1pwmgh6fcpqnrw7fl9riv852z3l38711by5ar4";
+          # Recent version of nixpkgs-19.03 as of 2019-06-25.
+          url = "https://github.com/NixOS/nixpkgs/archive/8634c3b619909db7fc747faf8c03592986626e21.tar.gz";
+          sha256 = "sha256:0hcpy4q64vbqmlmnfcavfxilyygyzpwdsss8g3p73ikpic0j6ziq";
         }
-      else
-        nixpkgs;
+      else nixpkgs;
 
-  compilerVersion = if isNull compiler then "ghc844" else compiler;
+  compilerVersion = if isNull compiler then "ghc865" else compiler;
 
-  # The termonad derivation is generated automatically with `cabal2nix`.
-  termonadOverride =
-    stdenvLib: gnome3: callCabal2nix: overrideCabal:
-      let
-        src =
-          builtins.filterSource
-            (path: type: with stdenvLib;
-              ! elem (baseNameOf path) [ ".git" "result" ".stack-work" ".nix-helpers" ] &&
-              ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ]
-            )
-            ./..;
-        termonad = callCabal2nix "termonad" src {
-          inherit (gnome3) gtk3;
-          vte_291 = gnome3.vte;
+  # An overlay that adds termonad to all haskell package sets.
+  haskellPackagesOverlay = self: super: {
+    haskell = super.haskell // {
+      packageOverrides = hself: hsuper:
+        super.haskell.packageOverrides hself hsuper // {
+          termonad =
+            let
+              src =
+                builtins.filterSource
+                  (path: type: with self.stdenv.lib;
+                    ! elem (baseNameOf path) [ ".git" "result" ".stack-work" ".nix-helpers" ] &&
+                    ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ]
+                  )
+                  ./..;
+            in
+            hself.callCabal2nix "termonad" src {
+              inherit (self.gnome3) gtk3;
+              vte_291 = self.gnome3.vte;
+            };
         };
-      in
-      overrideCabal termonad (oldAttrs: {
-        # For some reason the doctests fail when running with nix.
-        # https://github.com/cdepillabout/termonad/issues/15
-        doCheck = false;
-      });
-
-  # This is only used when older versions of nixpkgs are being used that don't have
-  # the focuslist package yet.  Eventually this can probably be completely dropped
-  # around July of 2019 or so.
-  #
-  # Also, if Termonad starts depending on a newer version of focuslist, this will
-  # have to be updated.
-  myfocuslist = callCabal2nix:
-    let
-      src = builtins.fetchTarball {
-        url = "https://github.com/cdepillabout/focuslist/archive/80bd865e82ab4499ccebcd89989d2dbb221bb381.tar.gz";
-        sha256 = "1b7da9ngk34jc2w4hhqq6qv20pkch5vvi34kr81xpmr3mmiwqmai";
-      };
-    in callCabal2nix "focuslist" src {};
-
-  haskellPackagesOverlay = self: super: with super.haskell.lib; {
-    haskellPackages = super.haskell.packages.${compilerVersion}.override {
-      overrides = hself: hsuper: {
-        # Only override the version of foculist if it doesn't already exist in
-        # the haskell package set.
-        focuslist = hsuper.focuslist or (myfocuslist hself.callCabal2nix);
-
-        termonad =
-          termonadOverride
-            self.stdenv.lib
-            self.gnome3
-            hself.callCabal2nix
-            self.haskell.lib.overrideCabal;
-
-        # This is a tool to use to easily open haddocks in the browser.
-        open-haddock = hsuper.open-haddock.overrideAttrs (oa: {
-          src = super.fetchFromGitHub {
-            owner = "jml";
-            repo = "open-haddock";
-            rev = "472d10d61d7b9262626171af0484a65365863fa6";
-            sha256 = "072d680j1k3n0vkzsbghhnah2p799yxrm7mhvr0nkdvr7iy04gcz";
-          };
-        });
-      };
     };
 
-    # Darwin needs a patch to gobject-introspection:
-    # https://github.com/NixOS/nixpkgs/pull/46310
-    gobjectIntrospection = super.gobjectIntrospection.overrideAttrs (oldAttrs: {
-      patches =
-        oldAttrs.patches ++
-        (if self.stdenv.isDarwin
-          then [ ./macos-gobject-introspection-rpath.patch ]
-          else [ ]);
-    });
+    # A Haskell package set where we know the GHC version works to compile
+    # Termonad.  This is basically just a shortcut so that other Nix files
+    # don't need to figure out the correct compiler version to use when it is
+    # not given by the user.
+    termonadKnownWorkingHaskellPkgSet = self.haskell.packages.${compilerVersion};
   };
 
-in import nixpkgsSrc { overlays = [ haskellPackagesOverlay ]; }
+in import nixpkgsSrc { overlays = [ haskellPackagesOverlay ] ++ additionalOverlays; }
diff --git a/.nix-helpers/stack-fhs-env.nix b/.nix-helpers/stack-fhs-env.nix
--- a/.nix-helpers/stack-fhs-env.nix
+++ b/.nix-helpers/stack-fhs-env.nix
@@ -11,60 +11,45 @@
 #
 # From here, you can run `stack` normally.
 
-let
-  # recent version of nixpkgs master as of 2018-12-23
-  nixpkgsTarball = builtins.fetchTarball {
-    url = "https://github.com/NixOS/nixpkgs/archive/c31c0558ddad7161a4025117694197264cda9750.tar.gz";
-    sha256 = "09xl8fshyyddcm5nw5fkl6fbjlh5szjcdm43ii6jsvykdr516ghp";
-  };
-
-  # Additional packages or fixes for individual packages.
-  pkgOverlay = self: pkgs: {
-    fhsStack =
-      self.buildFHSUserEnv {
-        name = "stack";
-        runScript = "stack";
-        targetPkgs = _: with self; [
-            binutils
-            cairo
-            ghc
-            git
-            gnome3.atk
-            gnome3.gdk_pixbuf
-            gnome3.glib
-            gnome3.gtk
-            gnome3.vte
-            gnutls
-            gobjectIntrospection
-            gtk3
-            haskell.compiler.ghc863
-            iana-etc
-            pango
-            pcre2
-            pkgconfig
-            stack
-            zlib
-        ] ++
-          self.stdenv.lib.optional
-            (self.stdenv.hostPlatform.libc == "glibc")
-            self.glibcLocales;
-        profile = ''
-          export STACK_IN_NIX_SHELL=1
-          export GI_TYPELIB_PATH=/usr/lib/girepository-1.0
-        '';
-        extraOutputsToInstall = ["dev"];
-      };
-  };
-
-  nixpkgs = import nixpkgsTarball {
-    overlays = [
-      pkgOverlay
-    ];
-  };
+with (import ./nixpkgs.nix {});
 
+let
+  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
+      ] ++
+        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
-
-with nixpkgs;
 
 mkShell {
   buildInputs = [
diff --git a/.nix-helpers/stack-shell.nix b/.nix-helpers/stack-shell.nix
--- a/.nix-helpers/stack-shell.nix
+++ b/.nix-helpers/stack-shell.nix
@@ -1,25 +1,7 @@
 # This is the shell file specified in the stack.yaml file.
 # This runs stack commands in an environment created with nix.
 
-let
-  # recent version of nixpkgs master as of 2018-12-23
-  nixpkgsTarball = builtins.fetchTarball {
-    url = "https://github.com/NixOS/nixpkgs/archive/c31c0558ddad7161a4025117694197264cda9750.tar.gz";
-    sha256 = "09xl8fshyyddcm5nw5fkl6fbjlh5szjcdm43ii6jsvykdr516ghp";
-  };
-
-  # Fixes for individual packages.  Currently none needed.
-  pkgFixes = self: pkgs: {
-  };
-
-  nixpkgs = import nixpkgsTarball {
-    overlays = [
-      pkgFixes
-    ];
-  };
-in
-
-with nixpkgs;
+with (import ./nixpkgs.nix {});
 
 haskell.lib.buildStackProject {
   name = "termonad";
@@ -31,7 +13,7 @@
     gtk3
     zlib
   ];
-  ghc = haskell.compiler.ghc863;
+  ghc = termonadKnownWorkingHaskellPkgSet.ghc;
   extraArgs = [
     "--stack-yaml stack-lts-13.yaml"
   ];
diff --git a/.nix-helpers/termonad-with-packages.nix b/.nix-helpers/termonad-with-packages.nix
--- a/.nix-helpers/termonad-with-packages.nix
+++ b/.nix-helpers/termonad-with-packages.nix
@@ -91,7 +91,7 @@
   # Default Haskell packages that you can use in your Termonad configuration.
   # This is only used if the user doesn't specify the extraHaskellPackages
   # option.
-  defaultPackages = haskellPackages: with haskellPackages; [
+  defaultPackages = hpkgs: with hpkgs; [
     colour
     lens
   ];
@@ -100,27 +100,35 @@
 { extraHaskellPackages ? defaultPackages
 , compiler ? null
 , nixpkgs ? null
-}:
+, additionalOverlays ? []
+}@args:
 
-with (import ./nixpkgs.nix { inherit compiler nixpkgs; });
+with (import ./nixpkgs.nix { inherit compiler nixpkgs additionalOverlays; });
 
 let
-  env = haskellPackages.ghcWithPackages (self: [
-    self.termonad
-  ] ++ extraHaskellPackages self);
+  # GHC environment that has termonad available, as well as the packages
+  # specified above in extraHaskellPackages.
+  env =
+    termonadKnownWorkingHaskellPkgSet.ghcWithPackages
+      (hpkgs: [ hpkgs.termonad ] ++ extraHaskellPackages hpkgs);
 in
 
 stdenv.mkDerivation {
   name = "termonad-with-packages-${env.version}";
-  buildInputs = [ gnome3.adwaita-icon-theme hicolor-icon-theme ];
+  buildInputs = [ gdk_pixbuf gnome3.adwaita-icon-theme hicolor-icon-theme ];
   nativeBuildInputs = [ wrapGAppsHook ];
-  buildCommand = ''
+  dontBuild = true;
+  unpackPhase = ":";
+  # Using installPhase instead of buildCommand was recommended here:
+  # https://github.com/cdepillabout/termonad/pull/109
+  installPhase = ''
+    runHook preInstall
     mkdir -p $out/bin
     ln -sf ${env}/bin/termonad $out/bin/termonad
     gappsWrapperArgs+=(
       --set NIX_GHC "${env}/bin/ghc"
     )
-    wrapGAppsHook
+    runHook postInstall
   '';
   preferLocalBuild = true;
   allowSubstitutes = false;
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 1.2.0.0
+
+* Got the code for setting the backgroud color of the terminal actually
+  working.  Thanks @dakotaclemenceplaza.
+  [#111](https://github.com/cdepillabout/termonad/pull/111)
+  * This changes the type of `ColourConfig` to make the foreground and
+    background colors of the terminal optional.
+* Various cleanup in the nix files.
 
 ## 1.1.0.0
 
diff --git a/default.nix b/default.nix
--- a/default.nix
+++ b/default.nix
@@ -17,7 +17,7 @@
 #
 # $ nix-env --file default.nix --install
 
-{ compiler ? null, nixpkgs ? null }:
+{ compiler ? null, nixpkgs ? null, additionalOverlays ? [] }@args:
 
-import .nix-helpers/termonad-with-packages.nix { inherit compiler nixpkgs; }
+import .nix-helpers/termonad-with-packages.nix args
 
diff --git a/example-config/ExampleColourExtension.hs b/example-config/ExampleColourExtension.hs
--- a/example-config/ExampleColourExtension.hs
+++ b/example-config/ExampleColourExtension.hs
@@ -45,7 +45,7 @@
     -- cursor.
     { cursorBgColour = Set (sRGB24 120 80 110) -- purple
     -- Set the default foreground colour of text of the terminal.
-    , foregroundColour = sRGB24 220 180 210 -- light pink
+    , foregroundColour = Set (sRGB24 220 180 210) -- light pink
     -- Set the extended palette that has 8 colours standard colors and then 8
     -- light colors.
     , palette = ExtendedPalette myStandardColours myLightColours
diff --git a/example-config/ExampleSolarizedColourExtension.hs b/example-config/ExampleSolarizedColourExtension.hs
--- a/example-config/ExampleSolarizedColourExtension.hs
+++ b/example-config/ExampleSolarizedColourExtension.hs
@@ -39,7 +39,7 @@
 solarizedDark =
   defaultColourConfig
     -- Set the default foreground colour of text of the terminal.
-    { foregroundColour = sRGB24 131 148 150 -- base0
+    { foregroundColour = Set (sRGB24 131 148 150) -- base0
     -- Set the extended palette that has 2 Vecs of 8 Solarized pallette colours
     , palette = ExtendedPalette solarizedDark1 solarizedDark2
     }
@@ -73,7 +73,7 @@
 solarizedLight =
   defaultColourConfig
     -- Set the default foreground colour of text of the terminal.
-    { foregroundColour = sRGB24 101 123 131 -- base00
+    { foregroundColour = Set (sRGB24 101 123 131) -- base00
     -- Set the extended palette that has 2 Vecs of 8 Solarized pallette colours
     , palette = ExtendedPalette solarizedLight1 solarizedLight2
     }
diff --git a/shell.nix b/shell.nix
--- a/shell.nix
+++ b/shell.nix
@@ -24,27 +24,37 @@
 # will also index the Termonad libraries, however this will mean the environment
 # will need to be rebuilt every time the termonad source changes.
 
-{ compiler ? null, indexTermonad ? false, nixpkgs ? null }:
+{ compiler ? null, indexTermonad ? false, nixpkgs ? null, additionalOverlays ? [] }:
 
-with (import .nix-helpers/nixpkgs.nix { inherit compiler nixpkgs; });
+with (import .nix-helpers/nixpkgs.nix { inherit compiler nixpkgs additionalOverlays; });
 
 let
-  termonadEnv = haskellPackages.termonad.env;
-  nativeBuildTools = with haskellPackages; [ cabal-install ghcid open-haddock ];
+  # A Haskell package set for a version of GHC that is known working.
+  haskPkgSet = termonadKnownWorkingHaskellPkgSet;
+
+  # Nix-shell environment for hacking on termonad.
+  termonadEnv = haskPkgSet.termonad.env;
+
+  # Haskell build tools that are nice to have.  It is okay to get these from
+  # any Haskell package set, since they do not depend on the GHC version we are
+  # using.  We get these from the normal haskellPackages pkg set because then
+  # they don't have to be compiled from scratch.
+  nativeBuildTools = with haskellPackages; [ cabal-install ghcid ];
 in
 
 if indexTermonad
   then
     termonadEnv.overrideAttrs (oldAttrs: {
       nativeBuildInputs =
-        oldAttrs.nativeBuildInputs ++
-        nativeBuildTools ++
-        [ (haskellPackages.ghcWithHoogle (haskellPackages: with haskellPackages; [ termonad ]))
-        ];
+        let
+          ghcEnvWithTermonad =
+            haskPkgSet.ghcWithHoogle (hpkgs: [ hpkgs.termonad ]);
+        in
+        oldAttrs.nativeBuildInputs ++ nativeBuildTools ++ [ ghcEnvWithTermonad ];
     })
   else
-    haskellPackages.shellFor {
+    haskPkgSet.shellFor {
       withHoogle = true;
-      packages = haskellPackages: [ haskellPackages.termonad ];
+      packages = hpkgs: [ hpkgs.termonad ];
       nativeBuildInputs = termonadEnv.nativeBuildInputs ++ nativeBuildTools;
     }
diff --git a/src/Termonad/App.hs b/src/Termonad/App.hs
--- a/src/Termonad/App.hs
+++ b/src/Termonad/App.hs
@@ -72,8 +72,7 @@
   , fontDescriptionSetAbsoluteSize
   )
 import GI.Vte
-  ( Terminal
-  , terminalCopyClipboard
+  ( terminalCopyClipboard
   , terminalPasteClipboard
   , terminalSetFont
   )
@@ -180,15 +179,17 @@
   let currFontSz =
         if currAbsolute
           then FontSizeUnits $ fromIntegral currSize / fromIntegral SCALE
-          else FontSizePoints $ round (fromIntegral currSize / fromIntegral SCALE)
+          else
+            let fontRatio :: Double = fromIntegral currSize / fromIntegral SCALE
+            in FontSizePoints $ round fontRatio
   let newFontSz = f currFontSz
   setFontDescSize fontDesc newFontSz
 
 modifyFontSizeForAllTerms :: (FontSize -> FontSize) -> TMState -> IO ()
-modifyFontSizeForAllTerms modFontSize mvarTMState = do
+modifyFontSizeForAllTerms modFontSizeFunc mvarTMState = do
   tmState <- readMVar mvarTMState
   let fontDesc = tmState ^. lensTMStateFontDesc
-  adjustFontDescSize modFontSize fontDesc
+  adjustFontDescSize modFontSizeFunc fontDesc
   let terms =
         tmState ^..
           lensTMStateNotebook .
diff --git a/src/Termonad/Config.hs b/src/Termonad/Config.hs
--- a/src/Termonad/Config.hs
+++ b/src/Termonad/Config.hs
@@ -56,8 +56,6 @@
   , CursorBlinkMode(..)
   ) where
 
-import Termonad.Prelude hiding ((\\), index)
-
 import GI.Vte (CursorBlinkMode(..))
 
 import Termonad.Types
diff --git a/src/Termonad/Config/Colour.hs b/src/Termonad/Config/Colour.hs
--- a/src/Termonad/Config/Colour.hs
+++ b/src/Termonad/Config/Colour.hs
@@ -57,7 +57,7 @@
 import Data.Colour (Colour, black, affineCombo)
 import Data.Colour.SRGB (RGB(RGB), toSRGB, sRGB24, sRGB24show)
 import qualified Data.Foldable
-import GI.Gdk (RGBA, newZeroRGBA, setRGBABlue, setRGBAGreen, setRGBARed)
+import GI.Gdk (RGBA, newZeroRGBA, setRGBABlue, setRGBAGreen, setRGBARed, setRGBAAlpha)
 import GI.Vte
   ( Terminal
   , terminalSetColors
@@ -65,7 +65,7 @@
 #ifdef VTE_VERSION_GEQ_0_44
   , terminalSetColorCursorForeground
 #endif
---, terminalSetColorBackground
+  , terminalSetColorBackground
   , terminalSetColorForeground
   )
 import Text.Show (showString)
@@ -317,23 +317,18 @@
 -- | The configuration for the colors used by Termonad.
 --
 -- 'foregroundColour' and 'backgroundColour' allow you to set the color of the
--- foreground text and background of the terminal (although see the __WARNING__
--- below).  Most people use a black background and a light foreground for their
--- terminal, so this is the default.
+-- foreground text and background of the terminal.
 --
 -- 'palette' allows you to set the full color palette used by the terminal.
 -- See 'Palette' for more information.
 --
+-- If you don't set 'foregroundColour', 'backgroundColour', or 'palette', the
+-- defaults from VTE are used.
+--
 -- If you want to use a terminal with a white (or light) background and a black
 -- foreground, it may be a good idea to change some of the colors in the
 -- 'Palette' as well.
 --
--- (__WARNING__: Currently due to issues either with VTE or the bindings generated for
--- Haskell, background colour cannot be set independently of the palette.
--- The @backgroundColour@ field will be ignored and the 0th colour in the
--- palette (by default black) will be used as the background colour. See
--- <https://github.com/cdepillabout/termonad/issues/29 this issue>.
---
 -- VTE works as follows: if you don't explicitly set a background or foreground color,
 -- it takes the 0th colour from the 'palette' to be the background color, and the 7th
 -- colour from the 'palette' to be the foreground color.  If you notice oddities with
@@ -393,35 +388,32 @@
 --
 -- See 'defaultColourConfig' for the defaults for 'ColourConfig' used in Termonad.
 data ColourConfig c = ColourConfig
-  { cursorFgColour :: !(Option c) -- ^ Foreground color of the cursor.  This is
-                                  -- the color of the text that the cursor is
-                                  -- over.  This is not supported on older
-                                  -- versions of VTE.
-  , cursorBgColour :: !(Option c) -- ^ Background color of the cursor.  This is
-                                  -- the color of the cursor itself.
-  , foregroundColour :: !c -- ^ Color of the default default foreground text in
-                           -- the terminal.
-  , backgroundColour :: !c -- ^ Background color for the terminal, however, See
-                           -- the __WARNING__ above.
-  , palette :: !(Palette c) -- ^ Color palette for the terminal.  See 'Palette'.
+  { cursorFgColour :: !(Option c)
+    -- ^ Foreground color of the cursor.  This is the color of the text that
+    -- the cursor is over.  This is not supported on older versions of VTE.
+  , cursorBgColour :: !(Option c)
+    -- ^ Background color of the cursor.  This is the color of the cursor
+    -- itself.
+  , foregroundColour :: !(Option c)
+    -- ^ Color of the default default foreground text in the terminal.
+  , backgroundColour :: !(Option c)
+    -- ^ Background color for the terminal
+  , palette :: !(Palette c)
+    -- ^ Color palette for the terminal.  See 'Palette'.
   } deriving (Eq, Show, Functor)
 
--- | Default setting for a 'ColourConfig'.  The cursor colors are left at their
--- default for VTE.  The foreground text for the terminal is grey and the
--- background of the terminal is black.  The palette is left as the default for
--- VTE.
+-- | Default setting for a 'ColourConfig'.  The cursor colors, font foreground
+-- color, background color, and color palette are all left at the defaults set
+-- by VTE.
 --
--- >>> let fgGrey = sRGB24 192 192 192
--- >>> let bgBlack = sRGB24 0 0 0
--- >>> let defCC = ColourConfig { cursorFgColour = Unset, cursorBgColour = Unset, foregroundColour = fgGrey, backgroundColour = bgBlack, palette = NoPalette }
--- >>> defaultColourConfig == defCC
--- True
+-- >>> defaultColourConfig
+-- ColourConfig {cursorFgColour = Unset, cursorBgColour = Unset, foregroundColour = Unset, backgroundColour = Unset, palette = NoPalette}
 defaultColourConfig :: ColourConfig (Colour Double)
 defaultColourConfig = ColourConfig
   { cursorFgColour = Unset
   , cursorBgColour = Unset
-  , foregroundColour = sRGB24 192 192 192
-  , backgroundColour = black
+  , foregroundColour = Unset
+  , backgroundColour = Unset
   , palette = NoPalette
   }
 
@@ -455,28 +447,29 @@
 colourHook :: MVar (ColourConfig (Colour Double)) -> TMState -> Terminal -> IO ()
 colourHook mvarColourConf _ vteTerm = do
   colourConf <- readMVar mvarColourConf
-  terminalSetColors vteTerm Nothing Nothing . Just
-    =<< traverse toRGBA (paletteToList . palette $ colourConf)
-  -- PR #28 / issue #29: Setting the background colour is broken in gi-vte or VTE.  If
-  -- this next line is called, then you are no longer able to set the
-  -- background color using the palette.
-  -- terminalSetColorBackground vteTerm =<< toRGBA (backgroundColour colourConf)
-  terminalSetColorForeground vteTerm =<< toRGBA (foregroundColour colourConf)
-  let optPerform setC cField = whenSet (cField colourConf) $ \c ->
-        setC vteTerm . Just =<< toRGBA c
-  optPerform terminalSetColorCursor cursorBgColour
+  let paletteColourList = paletteToList $ palette colourConf
+  rgbaPaletteColourList <- traverse colourToRgba paletteColourList
+  terminalSetColors vteTerm Nothing Nothing (Just rgbaPaletteColourList)
+  whenSet (backgroundColour colourConf) $
+    terminalSetColorBackground vteTerm <=< colourToRgba
+  whenSet (foregroundColour colourConf) $
+    terminalSetColorForeground vteTerm <=< colourToRgba
+  whenSet (cursorBgColour colourConf) $
+    terminalSetColorCursor vteTerm . Just <=< colourToRgba
 #ifdef VTE_VERSION_GEQ_0_44
-  optPerform terminalSetColorCursorForeground cursorFgColour
+  whenSet (cursorFgColour colourConf) $
+    terminalSetColorCursorForeground vteTerm . Just <=< colourToRgba
 #endif
-  where
-    toRGBA :: Colour Double -> IO RGBA
-    toRGBA colour = do
-      let RGB red green blue = toSRGB colour
-      rgba <- newZeroRGBA
-      setRGBARed rgba red
-      setRGBAGreen rgba green
-      setRGBABlue rgba blue
-      pure rgba
+
+colourToRgba :: Colour Double -> IO RGBA
+colourToRgba colour = do
+  let RGB red green blue = toSRGB colour
+  rgba <- newZeroRGBA
+  setRGBARed rgba red
+  setRGBAGreen rgba green
+  setRGBABlue rgba blue
+  setRGBAAlpha rgba 1
+  pure rgba
 
 -- | Create a 'ColourExtension' based on a given 'ColourConfig'.
 --
diff --git a/termonad.cabal b/termonad.cabal
--- a/termonad.cabal
+++ b/termonad.cabal
@@ -1,5 +1,5 @@
 name:                termonad
-version:             1.1.0.0
+version:             1.2.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
