diff --git a/configuration/common.nix b/configuration/common.nix
index 30a3fd1bcfa5a40c3ac9eaa6601ecc0d79064043..c5c6d7d76eabf8e373043f939254c91fb5702db4 100644
--- a/configuration/common.nix
+++ b/configuration/common.nix
@@ -15,10 +15,68 @@ final: prev: {
       ];
     });
 
+  hasql-th = overrideCabal
+    prev.hasql-th
+    (_:
+      {
+        patches = [
+          ./patches/hasql-th-01.patch
+      ];
+    });
+
+  hasql-transaction = overrideCabal
+    prev.hasql-transaction
+    (_:
+      {
+        patches = [
+          ./patches/hasql-transaction-01.patch
+          ./patches/hasql-transaction-02.patch
+      ];
+    });
+
+  headed-megaparsec = overrideCabal
+    prev.headed-megaparsec
+    (_:
+      {
+        patches = [
+          ./patches/headed-megaparsec-01.patch
+      ];
+    });
+
+  html-entities = overrideCabal
+    prev.html-entities
+    (_:
+      {
+        patches = [
+          ./patches/html-entities-01.patch
+      ];
+    });
+
   libsodium = prev.callPackage ../pkgs/libsodium.nix { inherit (pkgs) libsodium; };
 
+  linear-generics = overrideCabal
+    prev.linear-generics
+    (_:
+      {
+        patches = [
+          ./patches/linear-generics-01.patch
+          ./patches/linear-generics-02.patch
+      ];
+    });
+
+  postgresql-syntax = overrideCabal
+    prev.postgresql-syntax
+    (_:
+      {
+        patches = [
+          ./patches/postgresql-syntax-01.patch
+      ];
+    });
+
   saltine = addPkgconfigDepend prev.saltine pkgs.libsodium;
 
+  sandwich = null;
+
   text-icu = prev.callPackage ../pkgs/text-icu.nix { icu-i18n = pkgs.icu; };
 
   xml-conduit-writer = overrideCabal
diff --git a/configuration/patches/hasql-th-01.patch b/configuration/patches/hasql-th-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..deb6803c8a67287605a3695988a0bf6da85f3119
--- /dev/null
+++ b/configuration/patches/hasql-th-01.patch
@@ -0,0 +1,19 @@
+commit e724581275f1dd3a673ccbff1b32f458b5b4589f
+Author: Daniel Firth <dan.firth@homotopic.tech>
+Date:   Sun Dec 3 09:31:56 2023 +0000
+
+    hide unzip
+
+diff --git a/library/Hasql/TH/Prelude.hs b/library/Hasql/TH/Prelude.hs
+index 60d73db..d01d39e 100644
+--- a/library/Hasql/TH/Prelude.hs
++++ b/library/Hasql/TH/Prelude.hs
+@@ -29,7 +29,7 @@ import Data.Either as Exports
+ import Data.Fixed as Exports
+ import Data.Foldable as Exports
+ import Data.Function as Exports hiding (id, (.))
+-import Data.Functor as Exports
++import Data.Functor as Exports hiding (unzip)
+ import Data.Functor.Contravariant as Exports
+ import Data.Functor.Contravariant.Divisible as Exports
+ import Data.Functor.Identity as Exports
diff --git a/configuration/patches/hasql-transaction-01.patch b/configuration/patches/hasql-transaction-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9a75605d3fb645f59211bb944a313ab9c9d33f79
--- /dev/null
+++ b/configuration/patches/hasql-transaction-01.patch
@@ -0,0 +1,507 @@
+commit d4bcbb5bdb361b828717962bab085f95b5feb60d
+Author: Nikita Volkov <nikita.y.volkov@mail.ru>
+Date:   Wed Nov 23 20:22:52 2022 +0300
+
+    Format and isolate config
+
+diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs
+index 4ac6101..b12fbb6 100644
+--- a/conflicts-test/Main.hs
++++ b/conflicts-test/Main.hs
+@@ -1,14 +1,13 @@
+ module Main where
+ 
+-import Prelude
++import qualified Control.Concurrent.Async as F
+ import qualified Hasql.Connection as A
+ import qualified Hasql.Session as B
+ import qualified Hasql.Transaction as C
+ import qualified Hasql.Transaction.Sessions as G
+ import qualified Main.Statements as D
+ import qualified Main.Transactions as E
+-import qualified Control.Concurrent.Async as F
+-
++import Prelude
+ 
+ main =
+   bracket acquire release use
+@@ -18,8 +17,8 @@ main =
+       where
+         acquire =
+           join $
+-          fmap (either (fail . show) return) $
+-          A.acquire connectionSettings
++            fmap (either (fail . show) return) $
++              A.acquire connectionSettings
+           where
+             connectionSettings =
+               A.settings "localhost" 5432 "postgres" "" "postgres"
+@@ -42,15 +41,13 @@ main =
+         tests =
+           [readAndWriteTransactionsTest, transactionsTest, transactionAndQueryTest]
+ 
+-
+ session connection session =
+-  B.run session connection >>=
+-  either (fail . show) return
++  B.run session connection
++    >>= either (fail . show) return
+ 
+ transaction connection transaction =
+   session connection (G.transaction G.RepeatableRead G.Write transaction)
+ 
+-
+ type Test =
+   A.Connection -> A.Connection -> IO Bool
+ 
+diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs
+index 406675c..d7c0b6f 100644
+--- a/conflicts-test/Main/Statements.hs
++++ b/conflicts-test/Main/Statements.hs
+@@ -1,11 +1,10 @@
+ module Main.Statements where
+ 
+-import Prelude
+ import Contravariant.Extras
+-import Hasql.Statement
+-import qualified Hasql.Encoders as E
+ import qualified Hasql.Decoders as D
+-
++import qualified Hasql.Encoders as E
++import Hasql.Statement
++import Prelude
+ 
+ createAccountTable :: Statement () ()
+ createAccountTable =
+@@ -45,4 +44,3 @@ getBalance =
+     ((E.param . E.nonNullable) E.int8)
+     (D.rowMaybe ((D.column . D.nonNullable) D.numeric))
+     True
+-
+diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs
+index b58ada3..8e0001c 100644
+--- a/conflicts-test/Main/Transactions.hs
++++ b/conflicts-test/Main/Transactions.hs
+@@ -1,9 +1,8 @@
+ module Main.Transactions where
+ 
+-import Prelude
+ import Hasql.Transaction
+ import qualified Main.Statements as A
+-
++import Prelude
+ 
+ createSchema :: Transaction ()
+ createSchema =
+@@ -20,10 +19,8 @@ transfer id1 id2 amount =
+   do
+     success <- statement (id1, amount) A.modifyBalance
+     if success
+-      then
+-        statement (id2, negate amount) A.modifyBalance
+-      else
+-        return False
++      then statement (id2, negate amount) A.modifyBalance
++      else return False
+ 
+ transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction ()
+ transferTimes times id1 id2 amount =
+diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal
+index 92bd97b..8d4fc1c 100644
+--- a/hasql-transaction.cabal
++++ b/hasql-transaction.cabal
+@@ -24,8 +24,8 @@ library
+     Hasql.Transaction
+     Hasql.Transaction.Sessions
+   other-modules:
++    Hasql.Transaction.Config
+     Hasql.Transaction.Private.Prelude
+-    Hasql.Transaction.Private.Model
+     Hasql.Transaction.Private.SQL
+     Hasql.Transaction.Private.Statements
+     Hasql.Transaction.Private.Sessions
+diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs
+index ad5d4e4..b6bc424 100644
+--- a/library/Hasql/Transaction.hs
++++ b/library/Hasql/Transaction.hs
+@@ -1,14 +1,13 @@
+ -- |
+ -- An API for declaration of transactions.
+ module Hasql.Transaction
+-(
+-  -- * Transaction monad
+-  Transaction,
+-  condemn,
+-  sql,
+-  statement,
+-)
++  ( -- * Transaction monad
++    Transaction,
++    condemn,
++    sql,
++    statement,
++  )
+ where
+ 
++import Hasql.Transaction.Config
+ import Hasql.Transaction.Private.Transaction
+-import Hasql.Transaction.Private.Model
+diff --git a/library/Hasql/Transaction/Private/Model.hs b/library/Hasql/Transaction/Config.hs
+similarity index 52%
+rename from library/Hasql/Transaction/Private/Model.hs
+rename to library/Hasql/Transaction/Config.hs
+index 484ea20..fac010e 100644
+--- a/library/Hasql/Transaction/Private/Model.hs
++++ b/library/Hasql/Transaction/Config.hs
+@@ -1,25 +1,21 @@
+-module Hasql.Transaction.Private.Model
+-where
++module Hasql.Transaction.Config where
+ 
+ import Hasql.Transaction.Private.Prelude
+ 
+--- |
+---
+-data Mode =
+-  -- |
+-  -- Read-only. No writes possible.
+-  Read |
+-  -- |
+-  -- Write and commit.
+-  Write
++data Mode
++  = -- |
++    -- Read-only. No writes possible.
++    Read
++  | -- |
++    -- Write and commit.
++    Write
+   deriving (Show, Eq, Ord, Enum, Bounded)
+ 
+ -- |
+ -- For reference see
+ -- <http://www.postgresql.org/docs/current/static/transaction-iso.html the Postgres' documentation>.
+---
+-data IsolationLevel =
+-  ReadCommitted |
+-  RepeatableRead |
+-  Serializable
++data IsolationLevel
++  = ReadCommitted
++  | RepeatableRead
++  | Serializable
+   deriving (Show, Eq, Ord, Enum, Bounded)
+diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs
+index 9c54666..79bf394 100644
+--- a/library/Hasql/Transaction/Private/Prelude.hs
++++ b/library/Hasql/Transaction/Private/Prelude.hs
+@@ -1,25 +1,28 @@
+ module Hasql.Transaction.Private.Prelude
+-( 
+-  module Exports,
+-  tryError,
+-)
++  ( module Exports,
++    tryError,
++  )
+ where
+ 
+-
+--- base
+--------------------------
++import Contravariant.Extras as Exports
+ import Control.Applicative as Exports
+ import Control.Arrow as Exports
+ import Control.Category as Exports
+ import Control.Concurrent as Exports
+ import Control.Exception as Exports
+-import Control.Monad as Exports hiding (join, fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM)
+-import Control.Monad.IO.Class as Exports
++import Control.Monad as Exports hiding (fail, forM, forM_, join, mapM, mapM_, msum, sequence, sequence_)
++import Control.Monad.Error.Class as Exports (MonadError (..))
+ import Control.Monad.Fail as Exports
+ import Control.Monad.Fix as Exports hiding (fix)
++import Control.Monad.IO.Class as Exports
+ import Control.Monad.ST as Exports
++import Control.Monad.Trans.Class as Exports
++import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass)
++import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch)
++import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass)
+ import Data.Bits as Exports
+ import Data.Bool as Exports
++import Data.ByteString as Exports (ByteString)
+ import Data.Char as Exports
+ import Data.Coerce as Exports
+ import Data.Complex as Exports
+@@ -30,18 +33,20 @@ import Data.Fixed as Exports
+ import Data.Foldable as Exports hiding (toList)
+ import Data.Function as Exports hiding (id, (.))
+ import Data.Functor as Exports
++import Data.Functor.Contravariant as Exports
++import Data.Functor.Contravariant.Divisible as Exports
+ import Data.Functor.Identity as Exports
+-import Data.Int as Exports
+ import Data.IORef as Exports
++import Data.Int as Exports
+ import Data.Ix as Exports
+-import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
++import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons)
+ import Data.Maybe as Exports
+-import Data.Monoid as Exports hiding (Last(..), First(..), (<>), Alt)
++import Data.Monoid as Exports hiding (Alt, First (..), Last (..), (<>))
+ import Data.Ord as Exports
+ import Data.Proxy as Exports
+ import Data.Ratio as Exports
+-import Data.Semigroup as Exports
+ import Data.STRef as Exports
++import Data.Semigroup as Exports
+ import Data.String as Exports
+ import Data.Traversable as Exports
+ import Data.Tuple as Exports
+@@ -52,13 +57,12 @@ import Debug.Trace as Exports
+ import Foreign.ForeignPtr as Exports
+ import Foreign.Ptr as Exports
+ import Foreign.StablePtr as Exports
+-import Foreign.Storable as Exports hiding (sizeOf, alignment)
+-import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)
+-import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..))
++import Foreign.Storable as Exports hiding (alignment, sizeOf)
++import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar)
++import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith)
+ import GHC.Generics as Exports (Generic, Generic1)
+ import GHC.IO.Exception as Exports
+ import Numeric as Exports
+-import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
+ import System.Environment as Exports
+ import System.Exit as Exports
+ import System.IO as Exports
+@@ -68,35 +72,11 @@ import System.Mem as Exports
+ import System.Mem.StableName as Exports
+ import System.Timeout as Exports
+ import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)
+-import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)
+-import Text.Printf as Exports (printf, hPrintf)
+-import Text.Read as Exports (Read(..), readMaybe, readEither)
++import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec)
++import Text.Printf as Exports (hPrintf, printf)
++import Text.Read as Exports (Read (..), readEither, readMaybe)
+ import Unsafe.Coerce as Exports
+-
+--- transformers
+--------------------------
+-import Control.Monad.IO.Class as Exports
+-import Control.Monad.Trans.Class as Exports
+-import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass)
+-import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch)
+-import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass)
+-
+--- mtl
+--------------------------
+-import Control.Monad.Error.Class as Exports (MonadError (..))
+-
+--- contravariant
+--------------------------
+-import Data.Functor.Contravariant as Exports
+-import Data.Functor.Contravariant.Divisible as Exports
+-
+--- contravariant-extras
+--------------------------
+-import Contravariant.Extras as Exports
+-
+--- bytestring
+--------------------------
+-import Data.ByteString as Exports (ByteString)
++import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.))
+ 
+ tryError :: MonadError e m => m a -> m (Either e a)
+ tryError m =
+diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs
+index 5ac4902..5776d39 100644
+--- a/library/Hasql/Transaction/Private/SQL.hs
++++ b/library/Hasql/Transaction/Private/SQL.hs
+@@ -1,10 +1,8 @@
+-module Hasql.Transaction.Private.SQL
+-where
++module Hasql.Transaction.Private.SQL where
+ 
+-import Hasql.Transaction.Private.Prelude
+-import Hasql.Transaction.Private.Model
+ import qualified ByteString.TreeBuilder as D
+-
++import Hasql.Transaction.Config
++import Hasql.Transaction.Private.Prelude
+ 
+ beginTransaction :: IsolationLevel -> Mode -> ByteString
+ beginTransaction isolation mode =
+@@ -26,4 +24,4 @@ beginTransaction isolation mode =
+ declareCursor :: ByteString -> ByteString -> ByteString
+ declareCursor name sql =
+   D.toByteString $
+-  "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql
++    "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql
+diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs
+index 0161486..5f4fcc7 100644
+--- a/library/Hasql/Transaction/Private/Sessions.hs
++++ b/library/Hasql/Transaction/Private/Sessions.hs
+@@ -1,12 +1,10 @@
+-module Hasql.Transaction.Private.Sessions
+-where
++module Hasql.Transaction.Private.Sessions where
+ 
+-import Hasql.Transaction.Private.Prelude
+-import Hasql.Transaction.Private.Model
+ import Hasql.Session
++import Hasql.Transaction.Config
++import Hasql.Transaction.Private.Prelude
+ import qualified Hasql.Transaction.Private.Statements as Statements
+ 
+-
+ {-
+ We may want to
+ do one transaction retry in case of the 23505 error, and fail if an identical
+@@ -14,7 +12,7 @@ error is seen.
+ -}
+ inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session a
+ inRetryingTransaction level mode session preparable =
+-  fix $ \ retry -> do
++  fix $ \retry -> do
+     attemptRes <- tryTransaction level mode session preparable
+     case attemptRes of
+       Just a -> return a
+@@ -22,21 +20,21 @@ inRetryingTransaction level mode session preparable =
+ 
+ tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session (Maybe a)
+ tryTransaction level mode body preparable = do
+-
+   statement () (Statements.beginTransaction level mode preparable)
+ 
+-  bodyRes <- catchError (fmap Just body) $ \ error -> do
++  bodyRes <- catchError (fmap Just body) $ \error -> do
+     statement () (Statements.abortTransaction preparable)
+     handleTransactionError error $ return Nothing
+ 
+   case bodyRes of
+-    Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \ error -> do
++    Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \error -> do
+       handleTransactionError error $ return Nothing
+     Nothing -> return Nothing
+ 
+-commitOrAbort commit preparable = if commit
+-  then statement () (Statements.commitTransaction preparable)
+-  else statement () (Statements.abortTransaction preparable)
++commitOrAbort commit preparable =
++  if commit
++    then statement () (Statements.commitTransaction preparable)
++    else statement () (Statements.abortTransaction preparable)
+ 
+ handleTransactionError error onTransactionError = case error of
+   QueryError _ _ (ResultError (ServerError "40001" _ _ _ _)) -> onTransactionError
+diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs
+index 2345629..7eb43c6 100644
+--- a/library/Hasql/Transaction/Private/Statements.hs
++++ b/library/Hasql/Transaction/Private/Statements.hs
+@@ -1,16 +1,13 @@
+-module Hasql.Transaction.Private.Statements
+-where
++module Hasql.Transaction.Private.Statements where
+ 
+-import Hasql.Transaction.Private.Prelude
+-import Hasql.Transaction.Private.Model
+-import qualified Hasql.Statement as A
+-import qualified Hasql.Encoders as B
+ import qualified Hasql.Decoders as C
++import qualified Hasql.Encoders as B
++import qualified Hasql.Statement as A
++import Hasql.Transaction.Config
++import Hasql.Transaction.Private.Prelude
+ import qualified Hasql.Transaction.Private.SQL as D
+ 
+-
+ -- * Transactions
+--------------------------
+ 
+ beginTransaction :: IsolationLevel -> Mode -> Bool -> A.Statement () ()
+ beginTransaction isolation mode preparable =
+@@ -24,9 +21,7 @@ abortTransaction :: Bool -> A.Statement () ()
+ abortTransaction preparable =
+   A.Statement "ABORT" B.noParams C.noResult preparable
+ 
+-
+ -- * Streaming
+--------------------------
+ 
+ declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a ()
+ declareCursor name sql encoder =
+diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs
+index 672a7e6..d36a9da 100644
+--- a/library/Hasql/Transaction/Private/Transaction.hs
++++ b/library/Hasql/Transaction/Private/Transaction.hs
+@@ -1,13 +1,11 @@
+-module Hasql.Transaction.Private.Transaction
+-where
++module Hasql.Transaction.Private.Transaction where
+ 
+-import Hasql.Transaction.Private.Prelude
+-import Hasql.Transaction.Private.Model
+-import qualified Hasql.Statement as A
+ import qualified Hasql.Session as B
+-import qualified Hasql.Transaction.Private.Statements as C
++import qualified Hasql.Statement as A
++import Hasql.Transaction.Config
++import Hasql.Transaction.Private.Prelude
+ import qualified Hasql.Transaction.Private.Sessions as D
+-
++import qualified Hasql.Transaction.Private.Statements as C
+ 
+ -- |
+ -- A composable abstraction over the retryable transactions.
+@@ -15,8 +13,8 @@ import qualified Hasql.Transaction.Private.Sessions as D
+ -- Executes multiple queries under the specified mode and isolation level,
+ -- while automatically retrying the transaction in case of conflicts.
+ -- Thus this abstraction closely reproduces the behaviour of 'STM'.
+-newtype Transaction a =
+-  Transaction (StateT Bool B.Session a)
++newtype Transaction a
++  = Transaction (StateT Bool B.Session a)
+   deriving (Functor, Applicative, Monad)
+ 
+ instance Semigroup a => Semigroup (Transaction a) where
+diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs
+index 0cde4f2..018ec31 100644
+--- a/library/Hasql/Transaction/Sessions.hs
++++ b/library/Hasql/Transaction/Sessions.hs
+@@ -1,18 +1,17 @@
+ module Hasql.Transaction.Sessions
+-(
+-  transaction,
+-  unpreparedTransaction,
+-  -- * Transaction settings
+-  C.Mode(..),
+-  C.IsolationLevel(..),
+-)
++  ( transaction,
++    unpreparedTransaction,
++
++    -- * Transaction settings
++    C.Mode (..),
++    C.IsolationLevel (..),
++  )
+ where
+ 
+ import Data.Bool
+-import qualified Hasql.Transaction.Private.Transaction as A
+ import qualified Hasql.Session as B
+-import qualified Hasql.Transaction.Private.Model as C
+-
++import qualified Hasql.Transaction.Config as C
++import qualified Hasql.Transaction.Private.Transaction as A
+ 
+ -- |
+ -- Execute the transaction using the provided isolation level and mode.
+@@ -29,4 +28,4 @@ transaction isolation mode transaction =
+ {-# INLINE unpreparedTransaction #-}
+ unpreparedTransaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a
+ unpreparedTransaction isolation mode transaction =
+-  A.run transaction isolation mode False
+\ No newline at end of file
++  A.run transaction isolation mode False
diff --git a/configuration/patches/hasql-transaction-02.patch b/configuration/patches/hasql-transaction-02.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2f5c18cf38836b59f8c3c672659bbd0d1ac03d50
--- /dev/null
+++ b/configuration/patches/hasql-transaction-02.patch
@@ -0,0 +1,19 @@
+commit 640008b635d649a1df324a8b4a0ca7a5983d1382
+Author: Daniel Firth <dan.firth@homotopic.tech>
+Date:   Sun Dec 3 09:07:50 2023 +0000
+
+    hide unzip
+
+diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs
+index 79bf394..62900a3 100644
+--- a/library/Hasql/Transaction/Private/Prelude.hs
++++ b/library/Hasql/Transaction/Private/Prelude.hs
+@@ -32,7 +32,7 @@ import Data.Either as Exports
+ import Data.Fixed as Exports
+ import Data.Foldable as Exports hiding (toList)
+ import Data.Function as Exports hiding (id, (.))
+-import Data.Functor as Exports
++import Data.Functor as Exports hiding (unzip)
+ import Data.Functor.Contravariant as Exports
+ import Data.Functor.Contravariant.Divisible as Exports
+ import Data.Functor.Identity as Exports
diff --git a/configuration/patches/headed-megaparsec-01.patch b/configuration/patches/headed-megaparsec-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..52667a2291c52f12b330e698a3840bc244c544c3
--- /dev/null
+++ b/configuration/patches/headed-megaparsec-01.patch
@@ -0,0 +1,19 @@
+commit 078971615dca7717537f8937df26e1f6879bfad1
+Author: Daniel Firth <dan.firth@homotopic.tech>
+Date:   Sun Dec 3 09:12:30 2023 +0000
+
+    hide unzip
+
+diff --git a/library/HeadedMegaparsec/Prelude.hs b/library/HeadedMegaparsec/Prelude.hs
+index bb225f3..388e755 100644
+--- a/library/HeadedMegaparsec/Prelude.hs
++++ b/library/HeadedMegaparsec/Prelude.hs
+@@ -27,7 +27,7 @@ import Data.Either as Exports
+ import Data.Fixed as Exports
+ import Data.Foldable as Exports
+ import Data.Function as Exports hiding (id, (.))
+-import Data.Functor as Exports
++import Data.Functor as Exports hiding (unzip)
+ import Data.Functor.Identity as Exports
+ import Data.IORef as Exports
+ import Data.Int as Exports
diff --git a/configuration/patches/html-entities-01.patch b/configuration/patches/html-entities-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..54071fce9e0ea978ebd3e3124c8743a19d60f867
--- /dev/null
+++ b/configuration/patches/html-entities-01.patch
@@ -0,0 +1,19 @@
+commit dc12027209380215e94118463f1ae3ecdf409a6b
+Author: Daniel Firth <dan.firth@homotopic.tech>
+Date:   Sun Dec 3 09:15:18 2023 +0000
+
+    hide unzip
+
+diff --git a/library/HTMLEntities/Prelude.hs b/library/HTMLEntities/Prelude.hs
+index a8b82de..9b3d9c9 100644
+--- a/library/HTMLEntities/Prelude.hs
++++ b/library/HTMLEntities/Prelude.hs
+@@ -25,7 +25,7 @@ import Data.Either as Exports
+ import Data.Fixed as Exports
+ import Data.Foldable as Exports hiding (toList)
+ import Data.Function as Exports hiding (id, (.))
+-import Data.Functor as Exports
++import Data.Functor as Exports hiding (unzip)
+ import Data.Functor.Compose as Exports
+ import Data.IORef as Exports
+ import Data.Int as Exports
diff --git a/configuration/patches/linear-generics-01.patch b/configuration/patches/linear-generics-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..451ff1d35348829756bfd08b5a569ba23632f310
--- /dev/null
+++ b/configuration/patches/linear-generics-01.patch
@@ -0,0 +1,19 @@
+commit 666780654cbe860863fc25765aaad5bfba08d432
+Author: Arnaud Spiwack <arnaud@spiwack.net>
+Date:   Mon Jul 31 16:35:48 2023 +0200
+
+    Compatibility with th-abstraction 0.6 (#24)
+
+diff --git a/linear-generics.cabal b/linear-generics.cabal
+index 7da6dfb..8d46111 100644
+--- a/linear-generics.cabal
++++ b/linear-generics.cabal
+@@ -99,7 +99,7 @@ library
+                       , containers       >= 0.5.9 && < 0.7
+                       , ghc-prim                     < 1
+                       , template-haskell >= 2.16  && < 2.21
+-                      , th-abstraction   >= 0.5   && < 0.6
++                      , th-abstraction   >= 0.5   && < 0.7
+ 
+   default-language:     Haskell2010
+   default-extensions:   KindSignatures
diff --git a/configuration/patches/linear-generics-02.patch b/configuration/patches/linear-generics-02.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f32b1581d5ccefb5be849c1fd11a82bff2577e9b
--- /dev/null
+++ b/configuration/patches/linear-generics-02.patch
@@ -0,0 +1,123 @@
+commit 05229d751abaad0bc802fa62b5e88ff0da89f2c7
+Author: Arnaud Spiwack <arnaud.spiwack@tweag.io>
+Date:   Fri Nov 10 16:03:38 2023 +0100
+
+    Compatibility with GHC 9.8/TH 2.21
+    
+    Adapted from https://github.com/dreixel/generic-deriving/pull/94
+
+diff --git a/CHANGELOG.md b/CHANGELOG.md
+index 6e0cd83..15887d7 100644
+--- a/CHANGELOG.md
++++ b/CHANGELOG.md
+@@ -1,3 +1,6 @@
++# next [????.??.??]
++* Support building with `template-haskell-2.21.*` (GHC 9.8).
++
+ # 0.2.2
+ * Produce an orderly error message if someone gives us `type data`.
+ * Produce an error message much more eagerly when someone tries to
+diff --git a/linear-generics.cabal b/linear-generics.cabal
+index 363fb5b..d067ca2 100644
+--- a/linear-generics.cabal
++++ b/linear-generics.cabal
+@@ -99,7 +99,7 @@ library
+   build-depends:        base >= 4.15 && < 5
+                       , containers       >= 0.5.9 && < 0.7
+                       , ghc-prim                     < 1
+-                      , template-haskell >= 2.16  && < 2.21
++                      , template-haskell >= 2.16  && < 2.22
+                       , th-abstraction   >= 0.5   && < 0.7
+ 
+   default-language:     Haskell2010
+diff --git a/src/Generics/Linear/TH/Internal.hs b/src/Generics/Linear/TH/Internal.hs
+index cbd049e..8a5a6e4 100644
+--- a/src/Generics/Linear/TH/Internal.hs
++++ b/src/Generics/Linear/TH/Internal.hs
+@@ -1,4 +1,5 @@
+ {-# LANGUAGE BangPatterns #-}
++{-# LANGUAGE CPP #-}
+ {-# LANGUAGE LambdaCase #-}
+ 
+ {- |
+@@ -100,7 +101,7 @@ isUnsaturatedType = go 0 . dustOff
+ 
+ -- | Given a name, check if that name is a type family. If
+ -- so, return a list of its binders.
+-getTypeFamilyBinders :: Name -> Q (Maybe [TyVarBndr_ ()])
++getTypeFamilyBinders :: Name -> Q (Maybe [TyVarBndrVis])
+ getTypeFamilyBinders tcName = do
+       info <- reify tcName
+       return $ case info of
+@@ -325,21 +326,28 @@ reifyDataInfo name = do
+                      fail (ns ++ " Could not reify " ++ nameBase name)
+                      `recover`
+                      reifyDatatype name
+-    variant_ <- case variant of
+-                     Datatype        -> pure Datatype_
+-                     Newtype         -> pure Newtype_
+-                     -- This isn't total, but the API requires that the data
+-                     -- family instance have at least one constructor anyways,
+-                     -- so this will always succeed.
+-                     DataInstance    -> pure $ DataInstance_ (head cons)
+-                     NewtypeInstance -> pure $ NewtypeInstance_ (head cons)
+-                     TypeData -> fail $ "Cannot derive Generic instances for TypeData " ++ nameBase name
++    variant_ <-
++      case variant of
++        Datatype          -> return Datatype_
++        Newtype           -> return Newtype_
++        DataInstance      -> return $ DataInstance_    $ headDataFamInstCon parentName cons
++        NewtypeInstance   -> return $ NewtypeInstance_ $ headDataFamInstCon parentName cons
++        TypeData -> fail $ "Cannot derive Generic instances for TypeData " ++ nameBase name
+     checkDataContext parentName ctxt
+     pure (parentName, tys, cons, variant_)
+   where
+     ns :: String
+     ns = "Generics.Linear.TH.reifyDataInfo: "
+ 
++    -- This isn't total, but the API requires that the data family instance have
++    -- at least one constructor anyways, so this will always succeed.
++    headDataFamInstCon :: Name -> [ConstructorInfo] -> ConstructorInfo
++    headDataFamInstCon dataFamName cons =
++      case cons of
++        con:_ -> con
++        [] -> error $ "reified data family instance without a data constructor: "
++                   ++ nameBase dataFamName
++
+ -- | One cannot derive Generic(1) instance for anything that uses DatatypeContexts,
+ -- so check to make sure the Cxt field of a datatype is null.
+ checkDataContext :: Name -> Cxt -> Q ()
+@@ -352,3 +360,10 @@ checkExistentialContext :: Name -> [TyVarBndrUnit] -> Cxt -> Q ()
+ checkExistentialContext conName vars ctxt =
+   unless (null vars && null ctxt) $ fail $
+     nameBase conName ++ " must be a vanilla data constructor"
++
++#if !(MIN_VERSION_template_haskell(2,21,0)) && !(MIN_VERSION_th_abstraction(0,6,0))
++type TyVarBndrVis = TyVarBndrUnit
++
++bndrReq :: ()
++bndrReq = ()
++#endif
+diff --git a/tests/Generics/Deriving/Enum.hs b/tests/Generics/Deriving/Enum.hs
+index 7e80ead..1ddbdee 100644
+--- a/tests/Generics/Deriving/Enum.hs
++++ b/tests/Generics/Deriving/Enum.hs
+@@ -38,6 +38,7 @@ module Generics.Deriving.Enum (
+ import           Control.Applicative (Const, ZipList)
+ 
+ import           Data.Int
++import           Data.Maybe (listToMaybe)
+ import           Data.Monoid (All, Any, Dual, Product, Sum)
+ import qualified Data.Monoid as Monoid (First, Last)
+ import Data.Word
+@@ -106,9 +107,7 @@ combine f (x:xs) (y:ys) = f x y : combine f xs ys
+ 
+ findIndex :: (a -> Bool) -> [a] -> Maybe Int
+ findIndex p xs = let l = [ i | (y,i) <- zip xs [(0::Int)..], p y]
+-                 in if (null l)
+-                    then Nothing
+-                    else Just (head l)
++                 in listToMaybe l
+ 
+ --------------------------------------------------------------------------------
+ -- Generic enum
diff --git a/configuration/patches/postgresql-syntax-01.patch b/configuration/patches/postgresql-syntax-01.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4f81a4f638bbc047468699f354736b3e801df329
--- /dev/null
+++ b/configuration/patches/postgresql-syntax-01.patch
@@ -0,0 +1,32 @@
+commit ece56da3079d80e69fece7e05a5540fd4858a98c
+Author: Daniel Firth <dan.firth@homotopic.tech>
+Date:   Sun Dec 3 09:22:44 2023 +0000
+
+    hide unzip and unsnoc
+
+diff --git a/library/PostgresqlSyntax/Extras/NonEmpty.hs b/library/PostgresqlSyntax/Extras/NonEmpty.hs
+index 7d9ecd1..d0cd890 100644
+--- a/library/PostgresqlSyntax/Extras/NonEmpty.hs
++++ b/library/PostgresqlSyntax/Extras/NonEmpty.hs
+@@ -1,7 +1,7 @@
+ module PostgresqlSyntax.Extras.NonEmpty where
+ 
+ import Data.List.NonEmpty
+-import PostgresqlSyntax.Prelude hiding (cons, fromList, head, init, last, reverse, tail, uncons)
++import PostgresqlSyntax.Prelude hiding (cons, fromList, head, init, last, reverse, tail, uncons, unsnoc)
+ 
+ -- |
+ -- >>> intersperseFoldMap ", " id (fromList ["a"])
+diff --git a/library/PostgresqlSyntax/Prelude.hs b/library/PostgresqlSyntax/Prelude.hs
+index c16ee7a..9fe2596 100644
+--- a/library/PostgresqlSyntax/Prelude.hs
++++ b/library/PostgresqlSyntax/Prelude.hs
+@@ -29,7 +29,7 @@ import Data.Either as Exports
+ import Data.Fixed as Exports
+ import Data.Foldable as Exports
+ import Data.Function as Exports hiding (id, (.))
+-import Data.Functor as Exports
++import Data.Functor as Exports hiding (unzip)
+ import Data.Functor.Identity as Exports
+ import Data.HashMap.Strict as Exports (HashMap)
+ import Data.HashSet as Exports (HashSet)
diff --git a/flake.lock b/flake.lock
index a9727c242deecee9254d7f3e5f13d92bd66b9aef..3a741e89f19ab1706df040d6dfd031298fe07586 100644
--- a/flake.lock
+++ b/flake.lock
@@ -36,16 +36,67 @@
         "type": "github"
       }
     },
-    "flake-utils": {
+    "flake-parts_3": {
+      "inputs": {
+        "nixpkgs-lib": "nixpkgs-lib_3"
+      },
+      "locked": {
+        "lastModified": 1701473968,
+        "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
+    "flake-parts_4": {
+      "inputs": {
+        "nixpkgs-lib": "nixpkgs-lib_4"
+      },
+      "locked": {
+        "lastModified": 1701473968,
+        "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
+    "flake-parts_5": {
       "inputs": {
-        "systems": "systems"
+        "nixpkgs-lib": "nixpkgs-lib_5"
+      },
+      "locked": {
+        "lastModified": 1701473968,
+        "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5",
+        "type": "github"
       },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
+    "flake-utils": {
       "locked": {
-        "lastModified": 1694529238,
-        "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+        "lastModified": 1644229661,
+        "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+        "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
         "type": "github"
       },
       "original": {
@@ -99,49 +150,106 @@
         "type": "github"
       }
     },
+    "flake-utils_5": {
+      "locked": {
+        "lastModified": 1644229661,
+        "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "horizon-advance": {
       "inputs": {
-        "flake-utils": "flake-utils",
+        "flake-parts": "flake-parts_2",
         "horizon-core": "horizon-core",
-        "lint-utils": "lint-utils_2",
-        "nixpkgs": "nixpkgs_4"
+        "horizon-hoogle": "horizon-hoogle_2",
+        "lint-utils": "lint-utils_4",
+        "nixpkgs": "nixpkgs_8"
       },
       "locked": {
-        "lastModified": 1701559370,
-        "narHash": "sha256-cx2NEHatySFfvXI7mBtFbnWVht82nDt8rGu/Q0JMPWw=",
-        "ref": "lts/ghc-9.6.x",
-        "rev": "2fb306e266c34df0778aa797b8eb401fe9f847b6",
-        "revCount": 101,
+        "lastModified": 1701590988,
+        "narHash": "sha256-2/AYk1nKj5QIHdh3juuqPc5YIQB1A83WLq3RzjC0408=",
+        "ref": "refs/heads/master",
+        "rev": "a449a4988eea3d9dd75a945d6eb0668c06a12972",
+        "revCount": 107,
         "type": "git",
         "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-advance"
       },
       "original": {
-        "ref": "lts/ghc-9.6.x",
         "type": "git",
         "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-advance"
       }
     },
+    "horizon-build-packages": {
+      "inputs": {
+        "flake-parts": "flake-parts_4",
+        "horizon-ghc": "horizon-ghc",
+        "lint-utils": "lint-utils_2",
+        "nixpkgs": "nixpkgs_4"
+      },
+      "locked": {
+        "lastModified": 1701564295,
+        "narHash": "sha256-ibYE2ZnXBLDlZax5YkDeCsK4uw+8G/34ryotBut0IHY=",
+        "ref": "refs/heads/master",
+        "rev": "f9c03cb2e31af63709cde8b4b6421b0e3c6d42fc",
+        "revCount": 6,
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-build-packages"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-build-packages"
+      }
+    },
     "horizon-core": {
       "inputs": {
-        "flake-parts": "flake-parts_2",
-        "lint-utils": "lint-utils",
-        "nixpkgs": "nixpkgs_2"
+        "flake-parts": "flake-parts_3",
+        "horizon-build-packages": "horizon-build-packages",
+        "horizon-hoogle": "horizon-hoogle",
+        "lint-utils": "lint-utils_3",
+        "nixpkgs": "nixpkgs_6"
       },
       "locked": {
-        "lastModified": 1701552836,
-        "narHash": "sha256-nUYNnU4xx0Wbm6Qg3mREX2zTmPuKvUpLJVULqaKo9vg=",
-        "ref": "lts/ghc-9.6.x",
-        "rev": "93c8fd653cda7ec59673588bbfff45fc9730b209",
-        "revCount": 1189,
+        "lastModified": 1701564656,
+        "narHash": "sha256-pfpZwQG/jsytUxhh2i1QlruaHfLouUYUqK2muLLvRZE=",
+        "ref": "refs/heads/master",
+        "rev": "94bae51d90c2a5e5fd89fe45285a10c36e98b0cd",
+        "revCount": 1222,
         "type": "git",
         "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-core"
       },
       "original": {
-        "ref": "lts/ghc-9.6.x",
         "type": "git",
         "url": "https://gitlab.horizon-haskell.net/package-sets/horizon-core"
       }
     },
+    "horizon-ghc": {
+      "inputs": {
+        "flake-parts": "flake-parts_5",
+        "lint-utils": "lint-utils",
+        "nixpkgs": "nixpkgs_2"
+      },
+      "locked": {
+        "lastModified": 1701518837,
+        "narHash": "sha256-92faPC+q5EMNf37EGhdt9pvWWFi0mTq0Szk6wOyxyrQ=",
+        "ref": "refs/heads/master",
+        "rev": "0b35eb150bfc8ee338688adda23587521cd97da6",
+        "revCount": 6,
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/ghc/horizon-ghc"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/ghc/horizon-ghc"
+      }
+    },
     "horizon-hoogle": {
       "locked": {
         "lastModified": 1701521742,
@@ -157,9 +265,39 @@
         "url": "https://gitlab.horizon-haskell.net/nix/horizon-hoogle"
       }
     },
+    "horizon-hoogle_2": {
+      "locked": {
+        "lastModified": 1701521742,
+        "narHash": "sha256-huf/95jYL7mY0AHSziJYXx4m/sP+G+YAbJb+Q5Ph/Jg=",
+        "ref": "refs/heads/master",
+        "rev": "ddf3b08c6458c1a9e0d881f968c050bc828b9b8e",
+        "revCount": 2,
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/nix/horizon-hoogle"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/nix/horizon-hoogle"
+      }
+    },
+    "horizon-hoogle_3": {
+      "locked": {
+        "lastModified": 1701521742,
+        "narHash": "sha256-huf/95jYL7mY0AHSziJYXx4m/sP+G+YAbJb+Q5Ph/Jg=",
+        "ref": "refs/heads/master",
+        "rev": "ddf3b08c6458c1a9e0d881f968c050bc828b9b8e",
+        "revCount": 2,
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/nix/horizon-hoogle"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.horizon-haskell.net/nix/horizon-hoogle"
+      }
+    },
     "lint-utils": {
       "inputs": {
-        "flake-utils": "flake-utils_2",
+        "flake-utils": "flake-utils",
         "nixpkgs": "nixpkgs"
       },
       "locked": {
@@ -178,7 +316,7 @@
     },
     "lint-utils_2": {
       "inputs": {
-        "flake-utils": "flake-utils_3",
+        "flake-utils": "flake-utils_2",
         "nixpkgs": "nixpkgs_3"
       },
       "locked": {
@@ -197,7 +335,7 @@
     },
     "lint-utils_3": {
       "inputs": {
-        "flake-utils": "flake-utils_4",
+        "flake-utils": "flake-utils_3",
         "nixpkgs": "nixpkgs_5"
       },
       "locked": {
@@ -214,6 +352,44 @@
         "url": "https://gitlab.nixica.dev/nix/lint-utils"
       }
     },
+    "lint-utils_4": {
+      "inputs": {
+        "flake-utils": "flake-utils_4",
+        "nixpkgs": "nixpkgs_7"
+      },
+      "locked": {
+        "lastModified": 1699441004,
+        "narHash": "sha256-7v7CH8ZiB2RClPtpgDLfQxeR+14KXoFl2qTdXd27sL0=",
+        "ref": "refs/heads/master",
+        "rev": "226003d10c2d192b088f7c3c9ee7ca549c421a9c",
+        "revCount": 52,
+        "type": "git",
+        "url": "https://gitlab.nixica.dev/nix/lint-utils"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.nixica.dev/nix/lint-utils"
+      }
+    },
+    "lint-utils_5": {
+      "inputs": {
+        "flake-utils": "flake-utils_5",
+        "nixpkgs": "nixpkgs_9"
+      },
+      "locked": {
+        "lastModified": 1699441004,
+        "narHash": "sha256-7v7CH8ZiB2RClPtpgDLfQxeR+14KXoFl2qTdXd27sL0=",
+        "ref": "refs/heads/master",
+        "rev": "226003d10c2d192b088f7c3c9ee7ca549c421a9c",
+        "revCount": 52,
+        "type": "git",
+        "url": "https://gitlab.nixica.dev/nix/lint-utils"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.nixica.dev/nix/lint-utils"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1644525281,
@@ -266,6 +442,76 @@
         "type": "github"
       }
     },
+    "nixpkgs-lib_3": {
+      "locked": {
+        "dir": "lib",
+        "lastModified": 1701253981,
+        "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
+        "type": "github"
+      },
+      "original": {
+        "dir": "lib",
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs-lib_4": {
+      "locked": {
+        "dir": "lib",
+        "lastModified": 1701253981,
+        "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
+        "type": "github"
+      },
+      "original": {
+        "dir": "lib",
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs-lib_5": {
+      "locked": {
+        "dir": "lib",
+        "lastModified": 1701253981,
+        "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
+        "type": "github"
+      },
+      "original": {
+        "dir": "lib",
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_10": {
+      "locked": {
+        "lastModified": 1701401302,
+        "narHash": "sha256-kfCOHzgtmHcgJwH7uagk8B+K1Qz58rN79eTLe55eGqA=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "69a165d0fd2b08a78dbd2c98f6f860ceb2bbcd40",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nixos",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
     "nixpkgs_2": {
       "locked": {
         "lastModified": 1701253981,
@@ -332,43 +578,76 @@
     },
     "nixpkgs_6": {
       "locked": {
-        "lastModified": 1701336116,
-        "narHash": "sha256-kEmpezCR/FpITc6yMbAh4WrOCiT2zg5pSjnKrq51h5Y=",
+        "lastModified": 1701253981,
+        "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "f5c27c6136db4d76c30e533c20517df6864c46ee",
+        "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
         "type": "github"
       },
       "original": {
         "owner": "nixos",
-        "ref": "nixpkgs-unstable",
+        "ref": "nixos-unstable",
         "repo": "nixpkgs",
         "type": "github"
       }
     },
-    "root": {
-      "inputs": {
-        "flake-parts": "flake-parts",
-        "horizon-advance": "horizon-advance",
-        "horizon-hoogle": "horizon-hoogle",
-        "lint-utils": "lint-utils_3",
-        "nixpkgs": "nixpkgs_6"
+    "nixpkgs_7": {
+      "locked": {
+        "lastModified": 1644525281,
+        "narHash": "sha256-D3VuWLdnLmAXIkooWAtbTGSQI9Fc1lkvAr94wTxhnTU=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "48d63e924a2666baf37f4f14a18f19347fbd54a2",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
       }
     },
-    "systems": {
+    "nixpkgs_8": {
       "locked": {
-        "lastModified": 1681028828,
-        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
-        "owner": "nix-systems",
-        "repo": "default",
-        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "lastModified": 1701253981,
+        "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
         "type": "github"
       },
       "original": {
-        "owner": "nix-systems",
-        "repo": "default",
+        "owner": "nixos",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
         "type": "github"
       }
+    },
+    "nixpkgs_9": {
+      "locked": {
+        "lastModified": 1644525281,
+        "narHash": "sha256-D3VuWLdnLmAXIkooWAtbTGSQI9Fc1lkvAr94wTxhnTU=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "48d63e924a2666baf37f4f14a18f19347fbd54a2",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-parts": "flake-parts",
+        "horizon-advance": "horizon-advance",
+        "horizon-hoogle": "horizon-hoogle_3",
+        "lint-utils": "lint-utils_5",
+        "nixpkgs": "nixpkgs_10"
+      }
     }
   },
   "root": "root",
diff --git a/flake.nix b/flake.nix
index 8515d67b9d792da525b1ac9e389c7533a2106727..e9ceb6b230f7313f8f14d10a5b25c2d4ff1eedc8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -9,7 +9,7 @@
 
   inputs = {
     flake-parts.url = "github:hercules-ci/flake-parts";
-    horizon-advance.url = "git+https://gitlab.horizon-haskell.net/package-sets/horizon-advance?ref=lts/ghc-9.6.x";
+    horizon-advance.url = "git+https://gitlab.horizon-haskell.net/package-sets/horizon-advance";
     horizon-hoogle.url = "git+https://gitlab.horizon-haskell.net/nix/horizon-hoogle";
     lint-utils.url = "git+https://gitlab.nixica.dev/nix/lint-utils";
     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
diff --git a/horizon.dhall b/horizon.dhall
index 2eb3036f9832a690e33d041c2c1c452a35ca1e1b..639e7586d1da7a7f0995be55433a8d26fa9f4ae5 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -151,7 +151,11 @@ let packages =
       , doctemplates = H.callHackage "doctemplates" "0.11"
       , doctest-discover = H.callHackage "doctest-discover" "0.2.0.0"
       , dom-lt = H.callHackage "dom-lt" "0.2.3"
-      , double-conversion = H.callHackage "double-conversion" "2.0.4.2"
+      , double-conversion =
+          H.callGit
+            "https://github.com/haskell/double-conversion/"
+            "1320d0a4df745c9ecb5fada9a681b3842cf1f47c"
+            (None H.Subdir)
       , dual-tree = H.callHackage "dual-tree" "0.2.3.1"
       , echo = H.callHackage "echo" "0.1.4"
       , edit-distance = H.callHackage "edit-distance" "0.2.2.1"
@@ -276,11 +280,6 @@ let packages =
       , hedgehog-quickcheck = H.callHackage "hedgehog-quickcheck" "0.1.1"
       , heredoc = H.callHackage "heredoc" "0.2.0.0"
       , hex-text = H.callHackage "hex-text" "0.1.0.9"
-      , hint =
-          H.callGit
-            "https://github.com/haskell-hint/hint"
-            "7803c34c8ae1d83c0f7c13fe6b30fcb3abd0ac51"
-            (None H.Subdir)
       , hoauth2 = H.callHackage "hoauth2" "2.10.0"
       , hosc = H.callHackage "hosc" "0.20"
       , hslogger = H.callHackage "hslogger" "1.3.1.0"
@@ -358,8 +357,6 @@ let packages =
       , language-c = H.callHackage "language-c" "0.9.2"
       , lazy-search = H.callHackage "lazy-search" "0.1.3.0"
       , lazysmallcheck = H.callHackage "lazysmallcheck" "0.6"
-      , lens-family = H.callHackage "lens-family" "2.1.2"
-      , lens-family-th = H.callHackage "lens-family-th" "0.5.2.1"
       , libsodium = H.callHackage "libsodium" "1.0.18.3"
       , libsystemd-journal = H.callHackage "libsystemd-journal" "1.4.5.1"
       , linear-base = H.callHackage "linear-base" "0.4.0"
diff --git a/horizon.lock b/horizon.lock
index 0875f1514ed8895500e1bb6831e63d0f0a77241e..296d0000a75976f03a6efc86655edbdfbcc80f8f 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -500,7 +500,7 @@
   }
 , { mapKey = "double-conversion"
   , mapValue =
-      "a99e6e4aaef6a17cdb32288269c8b4afe060b5f99911b75fa9375f8851835232"
+      "82ceb4a0b5f0fd1dd24578b72818b2cd3f04d4867f6e78dd85e415ee87388300"
   }
 , { mapKey = "dual-tree"
   , mapValue =
@@ -882,10 +882,6 @@
   , mapValue =
       "b77a6d96279f2ea4a69ea2c23a7a1750fcbe3fdd26f8c31820e0e058693b91e3"
   }
-, { mapKey = "hint"
-  , mapValue =
-      "a1ed160179e897277725404d6a25a963e434bbb9b10ef97575fe9f6f664644fa"
-  }
 , { mapKey = "hoauth2"
   , mapValue =
       "68baf2c558a19d87ffd41201ccf3cc9e92ac2aa3c1371c448f5e14a563da95b9"
@@ -1126,14 +1122,6 @@
   , mapValue =
       "f67f9447d30fc6d4e3405fc2d2e928b67d161aa4ef1b8a4141dae95abfeaefa4"
   }
-, { mapKey = "lens-family"
-  , mapValue =
-      "2b0d8491bc8ee5ffc35dbc9aae7db636e154ffecc0a13b360216a1a07ca9ca7b"
-  }
-, { mapKey = "lens-family-th"
-  , mapValue =
-      "92ec67b778c3da7813d3e3a766c085ad5ce75e29dd8ec3c6f4d3856752018b37"
-  }
 , { mapKey = "libsodium"
   , mapValue =
       "d34914ea82af08c3bb7e1f677d6f8f99b7e2143c03738788903ed1f0074bb687"
diff --git a/overlay.nix b/overlay.nix
index cf88e6f7da7b41e4066ff41b85e9b6073d145ffd..1da1c2f9506b57f70ffe1576a27fb4c38aa71c10 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -443,8 +443,6 @@ final: prev: with pkgs.haskell.lib; {
 
   hex-text = final.callPackage (./pkgs/hex-text.nix) { };
 
-  hint = final.callPackage (./pkgs/hint.nix) { };
-
   hoauth2 = final.callPackage (./pkgs/hoauth2.nix) { };
 
   hosc = final.callPackage (./pkgs/hosc.nix) { };
@@ -565,10 +563,6 @@ final: prev: with pkgs.haskell.lib; {
 
   lazysmallcheck = final.callPackage (./pkgs/lazysmallcheck.nix) { };
 
-  lens-family = final.callPackage (./pkgs/lens-family.nix) { };
-
-  lens-family-th = final.callPackage (./pkgs/lens-family-th.nix) { };
-
   libsodium = final.callPackage (./pkgs/libsodium.nix) { };
 
   libsystemd-journal = final.callPackage (./pkgs/libsystemd-journal.nix) { };
diff --git a/pkgs/double-conversion.nix b/pkgs/double-conversion.nix
index b7eddb5b9ad0110ee7656f9787ff9437b6549946..6b9efc535c2eabea558d478d0ee039dd29309838 100644
--- a/pkgs/double-conversion.nix
+++ b/pkgs/double-conversion.nix
@@ -1,13 +1,16 @@
-{ mkDerivation, HUnit, base, bytestring, ghc-prim, lib
+{ mkDerivation, HUnit, base, bytestring, fetchgit, ghc-prim, lib
 , system-cxx-std-lib, test-framework, test-framework-hunit
 , test-framework-quickcheck2, text
 }:
 mkDerivation {
   pname = "double-conversion";
   version = "2.0.4.2";
-  sha256 = "9ab8bc1f0fa7de356c07b23d7d684b6c3ddfa542fd56ea422fb5fd17000aec64";
-  revision = "2";
-  editedCabalFile = "1mpnx4m2pg5crfz9k8wamh5mgsha0np3ynnllrmglmwh54gvfjj3";
+  src = fetchgit {
+    url = "https://github.com/haskell/double-conversion/";
+    sha256 = "15060q09kjlk62lq4labmc84f2m3df1ylf21p7r975x13wj1xy3f";
+    rev = "1320d0a4df745c9ecb5fada9a681b3842cf1f47c";
+    fetchSubmodules = true;
+  };
   isLibrary = true;
   isExecutable = false;
   enableSeparateDataOutput = false;
@@ -27,6 +30,6 @@ mkDerivation {
   hyperlinkSource = false;
   homepage = "https://github.com/haskell/double-conversion";
   description = "Fast conversion between single and double precision floating point and text";
-  license = lib.licenses.bsd3;
+  license = lib.licenses.bsd2;
   broken = false;
 }
\ No newline at end of file