diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,11 @@
 
+90000.1.1
+=========
+
+Bug fixes:
+* Matterhorn now allows the client configuration's
+  `EnableSignUpWithGitLab` to be omitted. (#852)
+
 90000.1.0
 =========
 
diff --git a/matterhorn.cabal b/matterhorn.cabal
--- a/matterhorn.cabal
+++ b/matterhorn.cabal
@@ -1,5 +1,5 @@
 name:                matterhorn
-version:             90000.1.0
+version:             90000.1.1
 synopsis:            Terminal client for the Mattermost chat system
 description:         This is a terminal client for the Mattermost chat
                      system. Please see the README for a list of
@@ -170,7 +170,7 @@
     ghc-options: -fhide-source-paths
 
   build-depends:       base                 >=4.8      && <5
-                     , mattermost-api       == 90000.0.0
+                     , mattermost-api       == 90000.1.1
                      , base-compat          >= 0.9     && < 0.13
                      , unordered-containers >= 0.2     && < 0.3
                      , containers           >= 0.5.7   && < 0.7
diff --git a/src/Matterhorn/App.hs b/src/Matterhorn/App.hs
--- a/src/Matterhorn/App.hs
+++ b/src/Matterhorn/App.hs
@@ -7,7 +7,7 @@
 import           Prelude ()
 import           Matterhorn.Prelude
 
-import           Brick
+import qualified Brick as B
 import           Control.Monad.Trans.Except ( runExceptT )
 import qualified Control.Exception as E
 import qualified Graphics.Vty as Vty
@@ -30,21 +30,21 @@
 import           Matterhorn.Types
 
 
-app :: App ChatState MHEvent Name
+app :: B.App ChatState MHEvent Name
 app =
-    App { appDraw         = draw
-        , appHandleEvent  = Events.onEvent
-        , appAttrMap      = (^.csResources.crTheme)
-        , appChooseCursor = \s cs -> do
-            tId <- s^.csCurrentTeamId
-            cursorByMode cs s tId (teamMode $ s^.csTeam(tId))
-        , appStartEvent = do
-            vty <- getVtyHandle
-            (w, h) <- liftIO $ Vty.displayBounds $ Vty.outputIface vty
-            runMHEvent $ Events.setWindowSize w h
-        }
+    B.App { B.appDraw         = draw
+          , B.appHandleEvent  = Events.onEvent
+          , B.appAttrMap      = (^.csResources.crTheme)
+          , B.appChooseCursor = \s cs -> do
+              tId <- s^.csCurrentTeamId
+              cursorByMode cs s tId (teamMode $ s^.csTeam(tId))
+          , B.appStartEvent = do
+              vty <- B.getVtyHandle
+              (w, h) <- liftIO $ Vty.displayBounds $ Vty.outputIface vty
+              runMHEvent $ Events.setWindowSize w h
+          }
 
-cursorByMode :: [CursorLocation Name] -> ChatState -> TeamId -> Mode -> Maybe (CursorLocation Name)
+cursorByMode :: [B.CursorLocation Name] -> ChatState -> TeamId -> Mode -> Maybe (B.CursorLocation Name)
 cursorByMode cs s tId mode =
     case mode of
         Main -> case s^.csTeam(tId).tsMessageInterfaceFocus of
@@ -52,24 +52,24 @@
                 cId <- s^.csCurrentChannelId(tId)
                 mi <- s^?maybeChannelMessageInterface(cId)
                 cur <- messageInterfaceCursor mi
-                showCursorNamed cur cs
+                B.showCursorNamed cur cs
             FocusThread -> do
                 ti <- s^.csTeam(tId).tsThreadInterface
                 cur <- messageInterfaceCursor ti
-                showCursorNamed cur cs
+                B.showCursorNamed cur cs
         LeaveChannelConfirm           -> Nothing
         DeleteChannelConfirm          -> Nothing
         MessageSelectDeleteConfirm {} -> Nothing
-        (PostListWindow {})           -> Nothing
+        PostListWindow {}             -> Nothing
         ViewMessage                   -> Nothing
-        (ShowHelp {})                 -> Nothing
+        ShowHelp {}                   -> Nothing
         EditNotifyPrefs               -> Nothing
-        ChannelSelect                 -> showFirstCursor s cs
-        UserListWindow                -> showFirstCursor s cs
-        ReactionEmojiListWindow       -> showFirstCursor s cs
-        ChannelListWindow             -> showFirstCursor s cs
-        ThemeListWindow               -> showFirstCursor s cs
-        ChannelTopicWindow            -> showCursorNamed (ChannelTopicEditor tId) cs
+        ChannelSelect                 -> B.showFirstCursor s cs
+        UserListWindow                -> B.showFirstCursor s cs
+        ReactionEmojiListWindow       -> B.showFirstCursor s cs
+        ChannelListWindow             -> B.showFirstCursor s cs
+        ThemeListWindow               -> B.showFirstCursor s cs
+        ChannelTopicWindow            -> B.showCursorNamed (ChannelTopicEditor tId) cs
 
 applicationMaxCPUs :: Int
 applicationMaxCPUs = 2
@@ -93,22 +93,32 @@
             Vty.installUnicodeWidthTable wMap `E.catch`
                 (\(_::Vty.TableInstallException) -> return ())
 
+vtyModes :: Config -> [(Vty.Mode, Bool)]
+vtyModes config =
+    [ (Vty.BracketedPaste, True)
+    , (Vty.Hyperlink, configHyperlinkingMode config)
+    , (Vty.Mouse, configMouseMode config)
+    ]
+
+vtyBuilder :: Config -> IO Vty.Vty
+vtyBuilder config = do
+    vty <- Vty.mkVty Vty.defaultConfig
+    let output = Vty.outputIface vty
+
+    forM_ (vtyModes config) $ \(mode, val) ->
+        Vty.setMode output mode val
+
+    return vty
+
 runMatterhorn :: Options -> Config -> IO ChatState
 runMatterhorn opts config = do
     setupCpuUsage config
-
     setupCharWidthMap config
 
-    let mkVty = do
-          vty <- Vty.mkVty Vty.defaultConfig
-          let output = Vty.outputIface vty
-          Vty.setMode output Vty.BracketedPaste True
-          Vty.setMode output Vty.Hyperlink $ configHyperlinkingMode config
-          Vty.setMode output Vty.Mouse $ configMouseMode config
-          return vty
+    let builder = vtyBuilder config
 
-    (st, vty) <- setupState mkVty (optLogLocation opts) config
-    finalSt <- customMain vty mkVty (Just $ st^.csResources.crEventQueue) app st
+    (st, vty) <- setupState builder (optLogLocation opts) config
+    finalSt <- B.customMain vty builder (Just $ st^.csResources.crEventQueue) app st
 
     case st^.csResources.crSpellChecker of
         Nothing -> return ()
@@ -132,7 +142,7 @@
 
   where
     logIfError action msg = do
-      done <- runExceptT $ convertIOException $ action
+      done <- runExceptT $ convertIOException action
       case done of
         Left err -> putStrLn $ msg <> ": " <> err
         Right _  -> return ()
diff --git a/src/Matterhorn/Clipboard.hs b/src/Matterhorn/Clipboard.hs
--- a/src/Matterhorn/Clipboard.hs
+++ b/src/Matterhorn/Clipboard.hs
@@ -15,7 +15,7 @@
 
 copyToClipboard :: Text -> MH ()
 copyToClipboard txt = do
-  result <- liftIO (try (setClipboard (T.unpack txt)))
+  result <- liftIO $ try $ setClipboard $ T.unpack txt
   case result of
     Left e -> do
       let errMsg = case e of
diff --git a/src/Matterhorn/State/UserListWindow.hs b/src/Matterhorn/State/UserListWindow.hs
--- a/src/Matterhorn/State/UserListWindow.hs
+++ b/src/Matterhorn/State/UserListWindow.hs
@@ -66,7 +66,7 @@
 enterDMSearchUserList myTId = do
     myId <- gets myUserId
     config <- use csClientConfig
-    let restrictTeam = case MM.clientConfigRestrictDirectMessage <$> config of
+    let restrictTeam = case MM.clientConfigRestrictDirectMessage =<< config of
             Just MM.RestrictTeam -> Just myTId
             _ -> Nothing
     enterUserListMode myTId (AllUsers restrictTeam) Nothing
diff --git a/src/Matterhorn/Types.hs b/src/Matterhorn/Types.hs
--- a/src/Matterhorn/Types.hs
+++ b/src/Matterhorn/Types.hs
@@ -351,8 +351,6 @@
   , getEditedMessageCutoff
 
   , HighlightSet(..)
-  , UserSet
-  , ChannelSet
   , getHighlightSet
   , emptyHSet
 
@@ -2166,9 +2164,6 @@
 getUsers = use csUsers
 
 -- * HighlightSet
-
-type UserSet = Set Text
-type ChannelSet = Set Text
 
 -- | The set of usernames, channel names, and language names used for
 -- highlighting when rendering messages.
