Skip to main content

gwernnet.cabal

Path: build/gwernnet.cabal | Language: Cabal | Lines: ~177

Cabal build configuration defining the gwern.net Haskell library and executables.


Overview

gwernnet.cabal is the central build configuration for all Haskell code in the gwern.net build system. It defines:

  • A shared library (gwernnet) containing 50+ modules for site generation
  • 9 executable tools for various build and maintenance tasks
  • Common dependencies and compiler options shared across all components

The configuration uses Cabal 3.0 features like common stanzas to reduce duplication and ensure consistent settings across all build targets.


Package Metadata

cabal-version: 3.0
name: gwernnet
version: 2026.1.21.0
license: CC0-1.0
author: Gwern Branwen
maintainer: Gwern Branwen
build-type: Simple
synopsis: Gwern.net build + maintenance tools (internal)
category: Web

The version follows a date-based scheme: YYYY.M.DD.patch


Library Modules

The library exposes 50+ modules organized by function:

Core Build

ModulePurpose
AnnotationMain annotation/metadata system
LinkMetadataLink metadata processing
LinkMetadataTypesType definitions for metadata
TypographyPandoc typography transforms
UtilsCommon utilities

Annotation Scrapers

ModulePurpose
Annotation.ArxivarXiv paper metadata
Annotation.BiorxivbioRxiv/medRxiv metadata
Annotation.GwernnetInternal site metadata
Annotation.OpenReviewOpenReview paper metadata
Annotation.PDFPDF document metadata
ModulePurpose
LinkArchiveArchive.org integration
LinkAutoAutomatic link annotation
LinkBacklinkBacklink generation
LinkIDLink identification
LinkIconLink type icons
LinkLiveLive preview popups

Text Processing

ModulePurpose
ParagraphParagraph transforms
ColumnsList column layout
InflationDollar inflation adjustment
Text.RegexVendored regex module

Metadata Handling

ModulePurpose
Metadata.AuthorAuthor name processing
Metadata.DateDate parsing/formatting
Metadata.FormatFormat detection
Metadata.TitleTitle processing

Configuration Modules

All Config.* modules contain constants, test cases, and whitelists:

  • Config.GenerateSimilar, Config.Inflation, Config.Interwiki
  • Config.LinkArchive, Config.LinkAuto, Config.LinkID
  • Config.LinkIcon, Config.LinkLive, Config.LinkSuggester
  • Config.Metadata.Author, Config.Metadata.Format, Config.Metadata.Title
  • Config.Misc, Config.Paragraph, Config.Tags, Config.Typography
  • Config.XOfTheDay

Other Modules

ModulePurpose
BlogBlog post generation
CycleCycle detection utilities
GenerateSimilarSimilar link recommendations
GTXGTX file handling
ImageImage processing
InterwikiInterwiki link expansion
QueryDatabase queries
TagsTag system
TestTest utilities
UniqueUnique ID generation
XOfTheDayDaily featured content

Executables

hakyll

Main site generator using Hakyll static site framework.

executable hakyll
main-is: hakyll.hs
build-depends: gwernnet
ghc-options: -threaded -rtsopts

preprocess-markdown

Markdown preprocessing before Pandoc.

executable preprocess-markdown
main-is: preprocess-markdown.hs
build-depends: gwernnet

generateLinkBibliography

Creates bibliography pages from link metadata.

executable generateLinkBibliography
main-is: generateLinkBibliography.hs
ghc-options: -threaded -rtsopts

generateDirectory

Generates directory/index pages.

executable generateDirectory
main-is: generateDirectory.hs
ghc-options: -threaded -rtsopts

Creates backlink pages showing what links to each page.

executable generateBacklinks
main-is: generateBacklinks.hs
ghc-options: -threaded -rtsopts

checkMetadata

Validates metadata consistency.

executable checkMetadata
main-is: checkMetadata.hs

guessTag

Suggests tags for content.

executable guessTag
main-is: guessTag.hs

changeTag

Batch tag modification.

executable changeTag
main-is: changeTag.hs
ghc-options: -threaded -rtsopts

Creates "similar links" recommendations.

executable generateSimilarLinks
main-is: generateSimilarLinks.hs

Common Stanza

All components share settings via the gwern-common stanza:

common gwern-common
default-language: Haskell2010
hs-source-dirs: .

ghc-options:
-O2
-Wall
-Wno-missing-home-modules

build-depends:
base, HTTP, aeson, array, async, ...

Compiler Options

OptionPurpose
-O2Optimization level 2
-WallEnable all warnings
-Wno-missing-home-modulesSuppress module location warnings
-threadedEnable threading (some executables)
-rtsoptsEnable runtime options (some executables)

Key Dependencies

Core

PackagePurpose
pandoc==3.1.3Document conversion
pandoc-typesPandoc AST types
hakyll==4.16.2.0Static site generator

Web/Network

PackagePurpose
HTTPHTTP client
http-conduit==2.3.8Streaming HTTP
http-typesHTTP type definitions
network-uriURI parsing

Data/Text

PackagePurpose
aesonJSON parsing
textText type
bytestringBinary data
containersMaps, sets
vectorEfficient arrays

Regex

PackagePurpose
regex-baseRegex abstraction
regex-tdfaTDFA regex engine

Other

PackagePurpose
titlecaseTitle case conversion
tagsoupHTML parsing
edit-distanceString similarity
rp-treeSimilarity search
cryptohashHashing

Version Pins

Some dependencies have exact version pins to ensure reproducible builds:

hakyll==4.16.2.0
http-conduit==2.3.8
pandoc==3.1.3

Building

cd build/
cabal build all # Build everything
cabal build hakyll # Build just hakyll
cabal run hakyll -- ... # Run with arguments

See Also