diff --git a/hikaru.cabal b/hikaru.cabal
index 39bd0ac28691209c4fc0d666f15e0f2f13fcb049..c8f27a6e22081236468d04784e4e71b299ed19fa 100644
--- a/hikaru.cabal
+++ b/hikaru.cabal
@@ -1,14 +1,17 @@
-cabal-version:      3.0
-name:               hikaru
-version:            0.1.0.0
-license:            AGPL-3.0-or-later
-license-file:       LICENSE.md
-copyright:          Jan Hamal Dvořák
-maintainer:         mordae@anilinux.org
-author:             Jan Hamal Dvořák
-homepage:           https://github.com/mordae/hikaru#readme
-bug-reports:        https://github.com/mordae/hikaru/issues
-synopsis:           Haskell web micro framework
+cabal-version: 3.0
+
+name: hikaru
+version: 0.1.0.0
+homepage: https://github.com/mordae/hikaru#readme
+bug-reports: https://github.com/mordae/hikaru/issues
+
+license: AGPL-3.0-or-later
+license-file: LICENSE.md
+copyright: Jan Hamal Dvořák
+maintainer: mordae@anilinux.org
+author: Jan Hamal Dvořák
+
+synopsis: Haskell web micro framework
 description:
     Hikaru is a micro framework for web applications.
     It provides applicative routing, content negotiation
@@ -17,15 +20,76 @@ description:
     (It is also a Star Trek reference, which is apparently
     a requirement for this class of software.)
 
-category:           Web
-build-type:         Simple
+category: Web
+build-type: Simple
 extra-source-files: README.md
 
 source-repository head
-    type:     git
+    type: git
     location: https://github.com/mordae/hikaru
 
+common common
+    default-extensions:
+        AllowAmbiguousTypes
+        BlockArguments
+        DataKinds
+        DefaultSignatures
+        DeriveGeneric
+        EmptyDataDecls
+        FlexibleContexts
+        FlexibleInstances
+        GADTs
+        GeneralizedNewtypeDeriving
+        ImportQualifiedPost
+        KindSignatures
+        LambdaCase
+        MultiParamTypeClasses
+        NamedFieldPuns
+        NoImplicitPrelude
+        OverloadedStrings
+        RankNTypes
+        RecordWildCards
+        ScopedTypeVariables
+        StandaloneDeriving
+        UndecidableInstances
+
+    ghc-options:
+        -Wall
+        -Wcompat
+        -Wincomplete-uni-patterns
+        -Wincomplete-record-updates
+        -Widentities
+        -Wredundant-constraints
+
+    build-depends:
+        aeson              >=1.4  && <1.6
+      , base               >=4.13 && <4.16
+      , binary             >=0.8  && <0.9
+      , bytestring         >=0.10 && <0.12
+      , case-insensitive   >=1.2  && <1.3
+      , containers         >=0.6  && <0.7
+      , cookie             >=0.4  && <0.5
+      , cryptonite         >=0.26 && <0.29
+      , foreign-store      >=0.2  && <0.3
+      , http-types         >=0.12 && <0.13
+      , lucid              >=2.9  && <2.10
+      , memory             >=0.15 && <0.16
+      , mtl                >=2.2  && <2.3
+      , relude             >=0.7  && <1.1
+      , resourcet          >=1.2  && <1.3
+      , string-conversions >=0.4  && <0.5
+      , text               >=1.2  && <1.3
+      , text-icu           >=0.7  && <0.8
+      , time               >=1.9  && <1.12
+      , wai                >=3.2  && <3.3
+      , wai-extra          >=3.0  && <3.2
+      , wai-websockets     >=3.0  && <3.1
+      , websockets         >=0.12 && <0.13
+
+
 library
+    import: common
+
     exposed-modules:
         Hikaru
         Hikaru.Action
@@ -39,54 +103,19 @@ library
         Hikaru.Route
         Hikaru.Types
 
-    hs-source-dirs:     lib
+    hs-source-dirs: lib
     other-modules:
         Hikaru.Develop
         Paths_hikaru
 
-    default-extensions:
-        BlockArguments DataKinds DefaultSignatures DeriveGeneric
-        FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        NoImplicitPrelude OverloadedStrings RankNTypes RecordWildCards
-        ScopedTypeVariables StandaloneDeriving UndecidableInstances
-        EmptyDataDecls ImportQualifiedPost
-
-    ghc-options:
-        -Wall -Wcompat -Wincomplete-uni-patterns
-        -Wincomplete-record-updates -Widentities -Wredundant-constraints
-
-    build-depends:
-        aeson >=1.4 && <=1.6,
-        base >=4.13 && <=4.16,
-        binary >=0.8 && <=0.9,
-        bytestring >=0.10 && <=0.12,
-        case-insensitive >=1.2 && <=1.3,
-        containers >=0.6 && <=0.7,
-        cookie >=0.4 && <=0.5,
-        cryptonite >=0.26 && <=0.29,
-        foreign-store >=0.2 && <=0.3,
-        http-types >=0.12 && <=0.13,
-        lucid >=2.9 && <=2.10,
-        memory >=0.15 && <=0.16,
-        mtl >=2.2 && <=2.3,
-        relude >=0.7 && <=1.1,
-        resourcet >=1.2 && <=1.3,
-        string-conversions >=0.4 && <=0.5,
-        text >=1.2 && <=1.3,
-        text-icu >=0.7 && <=0.8,
-        time >=1.9 && <=1.12,
-        wai >=3.2 && <=3.3,
-        wai-extra >=3.0 && <=3.2,
-        wai-websockets >=3.0 && <=3.1,
-        websockets >=0.12 && <=0.13
-
 test-suite spec
-    type:               exitcode-stdio-1.0
-    main-is:            Spec.hs
+    import: common
+
+    type: exitcode-stdio-1.0
+    main-is: Spec.hs
     build-tool-depends: hspec-discover:hspec-discover -any
-    cpp-options:        -DTEST
-    hs-source-dirs:     test
+    cpp-options: -DTEST
+    hs-source-dirs: test
     other-modules:
         Hikaru.Demo
         Hikaru.DemoSpec
@@ -95,18 +124,34 @@ test-suite spec
         Paths_hikaru
 
     default-extensions:
-        BlockArguments DataKinds DefaultSignatures DeriveGeneric
-        FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        NoImplicitPrelude OverloadedStrings RankNTypes RecordWildCards
-        ScopedTypeVariables StandaloneDeriving UndecidableInstances
-        EmptyDataDecls ImportQualifiedPost
+        AllowAmbiguousTypes
+        BlockArguments
+        DataKinds
+        DefaultSignatures
+        DeriveGeneric
+        EmptyDataDecls
+        FlexibleContexts
+        FlexibleInstances
+        GADTs
+        GeneralizedNewtypeDeriving
+        ImportQualifiedPost
+        KindSignatures
+        LambdaCase
+        MultiParamTypeClasses
+        NamedFieldPuns
+        NoImplicitPrelude
+        OverloadedStrings
+        RankNTypes
+        RecordWildCards
+        ScopedTypeVariables
+        StandaloneDeriving
+        UndecidableInstances
 
     ghc-options:
-        -Wall -Wcompat -Wincomplete-uni-patterns
-        -Wincomplete-record-updates -Widentities -Wredundant-constraints
-        -threaded -rtsopts -with-rtsopts=-N
+        -threaded
+        -rtsopts
+        -with-rtsopts=-N
 
     build-depends:
-        hikaru -any,
-        hspec -any
+        hikaru -any
+      , hspec -any