anchor.diff:  
   (defun config-content ()
     (spinneret:with-html-string
  -   (:h2 "Configuration")
  -   (:p "Nyxt is written in the Common Lisp programming language which offers a
  +    (:h2 "Configuration")
  +    (:p "Nyxt is written in the Common Lisp programming language which offers a
   great perk: everything in the browser can be customized by the user, even while
   it's running!")
  -   (:p "To get started with Common Lisp, we recommend checking out
  +    (:p "To get started with Common Lisp, we recommend checking out
       our web page: "
  -       (:a :href "https://nyxt.atlas.engineer/learn-lisp" "Learn Lisp")
  -       ". It contains numerous pointers to other resources, including
  +        (:a :href "https://nyxt.atlas.engineer/learn-lisp" "Learn Lisp")
  +        ". It contains numerous pointers to other resources, including
           free books both for beginners and seasoned programmers.")
  -   (:p "Nyxt provides a mechanism for new users unfamiliar with Lisp to
  +    (:p "Nyxt provides a mechanism for new users unfamiliar with Lisp to
   customize Nyxt. Start by invoking the commands " (command-markup 'describe-class) "
   or " (command-markup 'describe-slot) ".  You can press the button marked 'Configure' to
   change the value of a setting. The settings will be applied immediately and
   saved for future sessions. Please note that these settings will not alter
   existing object instances.")
  -   (:p "Settings created by Nyxt are stored in "
  -       (:code (files:expand *auto-config-file*)) ".")
  -   (:p "Any settings can be overridden manually by "
  -       (:code (files:expand *config-file*)) ".")
  -   (:p "The following section assumes knowledge of basic Common Lisp or a
  +    (:p "Settings created by Nyxt are stored in "
  +        (:code (files:expand *auto-config-file*)) ".")
  +    (:p "Any settings can be overridden manually by "
  +        (:code (files:expand *config-file*)) ".")
  +    (:p "The following section assumes knowledge of basic Common Lisp or a
   similar programming language.")
  -   (:p "The user needs to manually create the Nyxt configuration file "
  -       (:code (files:expand *config-file*))
  -       ", and the parent folders if necessary. You can also press the button
  +    (:p "The user needs to manually create the Nyxt configuration file "
  +        (:code (files:expand *config-file*))
  +        ", and the parent folders if necessary. You can also press the button
   below to create said file, if it's not created yet.")
  -   (let ((config-file-path (files:expand *config-file*)))
  -     (:p (if (uiop:file-exists-p config-file-path)
  -             (:a :class "button"
  -                 :href (ps:ps (nyxt/ps:lisp-eval `(echo "Configuration file exists")))
  -                 "Configuration file exists")
  -           (:a :class "button"
  -               :href (ps:ps (nyxt/ps:lisp-eval
  -                             `(progn (ensure-directories-exist ,config-file-path)
  -                                     (ensure-file-exists ,config-file-path)
  -                                     (echo "Configuration file created at ~a."
  -                                           ,config-file-path))))
  -               "Create init file"))))
  -   (:p "Example:")
  -   (:pre (:code "
  +    (let ((config-file-path (files:expand *config-file*)))
  +      (:p (if (uiop:file-exists-p config-file-path)
  +              (:a :class "button"
  +                  :href (ps:ps (nyxt/ps:lisp-eval `(echo "Configuration file exists")))
  +                  "Configuration file exists")
  +              (:a :class "button"
  +                  :href (ps:ps (nyxt/ps:lisp-eval
  +                                `(progn (ensure-directories-exist ,config-file-path)
  +                                        (ensure-file-exists ,config-file-path)
  +                                        (echo "Configuration file created at ~a."
  +                                              ,config-file-path))))
  +                  "Create init file"))))
  +    (:p "Example:")
  +    (:pre (:code "
   \(define-configuration buffer
     ((default-modes (append '(no-script-mode) %slot-default%))))"))
  -   (:p "The above turns on the 'no-script-mode' (disables JavaScript) by default for
  +    (:p "The above turns on the 'no-script-mode' (disables JavaScript) by default for
   every buffer.")
  -   (:p "The " (:code "define-configuration") " macro can be used to customize
  +    (:p "The " (:code "define-configuration") " macro can be used to customize
   the slots of classes like the browser, buffers, windows, etc.  Refer to the
   class and slot documentation for the individual details.")
  -   (:p "To find out about all modes known to Nyxt,
  +    (:p "To find out about all modes known to Nyxt,
   run " (command-markup 'describe-command) " and type 'mode'.")
   
  -   (:h3 "Slot configuration")
  -   (:p "Slots store values that can be either accessed (get) or changed
  +    (:h3 "Slot configuration")
  +    (:p "Slots store values that can be either accessed (get) or changed
   (set). Setting new values for slots allows many possibilities of customization.
   For instance, keyboard layouts vary across the world. The slot "
  -       (:code "hints-alphabet")
  -       " has the default value of "
  -       (:code "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  -       ". If the user has an American keyboard, they can do:")
  -   (:ol
  -    (:li "Execute command " (command-markup 'describe-slot) ";")
  -    (:li "Type " (:code 'hints-alphabet)";")
  -    (:li "Select " (:code "hints-alphabet") " (" (:code "hint-mode") " class option);")
  -    (:li "Press the button " (:code "Configure") ", and;")
  -    (:li "Insert the string \"asfdghjkl\"") ".")
  -   (:p "This will make link-hinting more comfortable for this user. In
  +        (:code "hints-alphabet")
  +        " has the default value of "
  +        (:code "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  +        ". If the user has an American keyboard, they can do:")
  +    (:ol
  +     (:li "Execute command " (command-markup 'describe-slot) ";")
  +     (:li "Type " (:code 'hints-alphabet)";")
  +     (:li "Select " (:code "hints-alphabet") " (" (:code "hint-mode") " class option);")
  +     (:li "Press the button " (:code "Configure") ", and;")
  +     (:li "Insert the string \"asfdghjkl\"") ".")
  +    (:p "This will make link-hinting more comfortable for this user. In
   addition, other similar approaches of customization can be applied to slots
   such as " (:code "spell-check-language") ", which can be expanded to do the
   spelling-check of other languages besides English.")
  
positive.code:                            (mapcar (lambda (engine) (apply 'make-search-engine engine))
                                     *my-search-engines*)))))"))
  
     (:h3 "URL-dispatchers")
     (:p "You can configure which actions to take depending on the URL to be
  loaded.  For instance, you can configure which Torrent program to start to load
  magnet links.  See the" (:code "url-dispatching-handler") " function
  documentation.")
  
     (:h3 "Downloads")
     (:p "See the " (command-markup 'nyxt/download-mode:list-downloads) " command and the "
         (:code "download-path") " buffer slot documentation.")
  
     (:h3 "Proxy and Tor")
     (:p "See the " (:code "proxy-mode") " documentation.")
  
     (:h3 "Blocker mode")
     (:p "This mode blocks access to websites related to especific hosts. To see
  all hosts being blocked, execute command " (:code "describe-variable") ", choose variable "
  (:code "NYXT/BLOCKER-MODE:*DEFAULT-HOSTLIST*") ", and read data on "
  (:code "nyxt/blocker-mode:url-body") " slot." " To customize host blocking, read the "
  (:code "blocker-mode") " documentation.")
  
     (:h3 "Custom commands")
     (:p "Creating your own invocable commands is similar to creating a Common
  Lisp function, except the form is " (:code "define-command") " instead of "
  (:code "defun") ". If you want this command to be invocable outside of
          the context of a mode, use " (:code "define-command-global") ".")
     (:p "Example:")
     (:pre (:code
            "(define-command-global bookmark-url ()
    \"Query the user which URL to bookmark.\"
    (let ((url (prompt
                :prompt \"Bookmark URL\"
                :sources (make-instance 'prompter:raw-source))))
      (bookmark-add url)))"))
     (:p "See the " (:code "prompt-buffer") " class documentation for how to write
  write custom prompt-buffers.")
  
     (:h3 "Hooks")
     (:p "Hooks provide a powerful mechanism to tweak the behaviour of various
  events that occur in the context of windows, buffers, modes, etc.")
     (:p "A hook holds a list of " (:i "handlers") ".  Handlers are named and
  typed functions.  Each hook has a dedicated handler constructor.")
     (:p
      "Hooks can be 'run', that is, their handlers are run according to
  the " (:code "combination") " slot of the hook.  This combination is a function
  of the handlers.  Depending on the combination, a hook can run the handlers
  either in parallel, or in order until one fails, or even " (:i "compose")
      " them (pass the result of one as the input of the next).  The handler types
  specify which input and output values are expected.")
     (:p "Many hooks are executed at different points in Nyxt, among others:
  ")
     (:ul
      (:li "Global hooks, such as " (:code "*after-init-hook*") ".")
      (:li "Window- or buffer-related hooks.")
      (:li "Commands 'before' and 'after' hooks.")
      (:li "Modes 'enable' and 'disable' hooks."))
     (:p "For instance, if you want to force 'old.reddit.com' over 'www.reddit.com', you
  can set a hook like the following in your configuration file:")
     (:pre (:code "
  \(defun old-reddit-handler (request-data)
    (let ((url (url request-data)))
      (setf (url request-data)
  
negative.code: \(define-configuration web-buffer
    ((request-resource-hook
      (hooks:add-hook %slot-default% 'old-reddit-handler))))"))
      (:p "(See " (:code "url-dispatching-handler")
          " for a simpler way to achieve the same result.)")
      (:p "Or, if you want to set multiple handlers at once,")
      (:pre (:code "
  \(define-configuration web-buffer
    ((request-resource-hook
      (reduce #'hooks:add-hook
              '(old-reddit-handler auto-proxy-handler)
              :initial-value %slot-default%))))"))
      (:p "Some hooks like the above example expect a return value, so it's
  important to make sure we return " (:code "request-data") " here.  See the
  documentation of the respective hooks for more details.")
  
      (:h3 "Data paths and data profiles")
      (:p "Nyxt provides a uniform configuration interface for all data files
  persisted to disk (bookmarks, cookies, etc.).  To each file corresponds
  a " (:code "nyxt-file") " object. An " (:code "nyxt-profile") " is a
  customizable object that helps define general rules for data storage.  Both
  nyxt-file and nyxt-profile compose, so it's possible to define general rules
  for all files (even for those not known in advance) while it's also
  possible to specialize some data given an nyxt-profile.")
      (:p "The profile can be set from command line and from the
  configuration file."
          "You can list all known profiles (including the user-defined
  profiles) with the " (:code "--list-profiles") " command-line option.")
      (:p "The nyxt-files can be passed a hint from the "
          (:code "--with-file") " command line option, but each nyxt-file and
  profile rules are free to ignore it.")
      (:p "When a path ends with the " (:code ".gpg") " extension, by default your
  GnuPG key is used to decrypt and encrypt the file transparently.  Refer to the
  GnuPG documentation for how to set it up.")
      (:p "Note that the socket and the initialization nyxt-paths cannot be set in
  your configuration (the socket is used before the initialization file is
  loaded).  Instead you can specify these paths from their respective command-line
  option.  You can instantiate a unique, separate Nyxt instance when you provide a
  new socket path.  This is particularly useful in combination with profiles,
  say to develop Nyxt or extensions.")
      (:p "Example to create a development profile that stores all data in "
          (:code "/tmp/nyxt") " and stores bookmark in an encrypted file:")
      (:pre (:code "
  \(define-class dev-profile (nyxt-profile)
     ((files:name :initform \"nyxt-dev\"))
     (:documentation \"Development profile.\"))
  