Skip to contents

{preferably} is an accessible template for pkgdown documentation websites. It uses a light and a dark theme and utilizes the prefers-color-scheme CSS variable to automatically serve either of the two based on users’ operating system setting, or allowing them to manually toggle between them.

Besides offering light and dark mode, I spent some time making the overall reading experience of ‘pkgdown’ documentations just a bit nicer, by using richer fonts, adopting a better color scheme for codes, etc.

Please let me know if you happen to use my template in your project. I’d like to keep a list of websites that are using ‘preferably’, see here: In the Wild!

Installation

You can download the stable version from CRAN using install.packages("preferably"), or you may download the development version from GitHub as follow:

Usage

After the successful installation, if you already have your pkgdown setup ready, you only need to specify the template parameter as follow. Then, as before, you can build your site using build_site() and deploy it manually using deploy_on_branch().

template:
  package: preferably
{pkgdown} 2.0 and Bootstrap 5

{preferably} 0.4 is compatible with {pkgdown} 2.0 and Bootstrap 5. In order to build your website using the Bootstrap 5, your setting should look like this:

template:
  package: preferably
  bootstrap: 5

⚠️ Keep in mind that you should NOT use default_assets: false when you change the default template. ‘preferably’ relies on some of the ‘pkgdown’ assets and templates.

Integration

In the case that you are using CI systems to build and deploy your website, you need to make sure that ‘preferably’ is available on the environment. For GitHub Action, add the following line to the “Install dependencies” section of your .github/workflows/pkgdown.yaml file:

- name: Install dependencies
  run: |
    # ⚠️ leave other commands intact, 
    # and add the following command to the end of the list 👇🏼
    remotes::install_deps(dependencies = TRUE)
    install.packages("pkgdown", type = "binary")
    install.packages("preferably")

If you are using Travis-CI, add the following line to your .travis.yml file:

r_github_packages:
  - amirmasoudabdol/preferably

Customization

In addition of pkgdown customization, Preferably offers a few more options as listed here.

Custom Analytic

Preferably allows for adding a custom analytic (in addition to ganalytics) to your website via the canalytic option.

template:
  package: preferably
  params:
    canalytic:
      domain: example.com
      src: https://example.com/tracker.js

Setting these command will generate the following line in the HTML:

<script async defer data-domain="example.com" src="https://example.com/tracker.js"></script>

pkgdown 2.0 comes with a greater list of supported trackers that you can use out of the box, including Plausible.

Manual Light/Dark Toggle

In addition to the automatic color scheme switching, you can add a switch to the menu bar, e.g, , to allow for manual selection between light and dark themes. This can be done by setting the toggle option to manual.

template:
  package: preferably
  params:
    toggle: manual

Unfortunately, it is not possible to have both the automatic and manual mode at the same time. There is an user experience issue here, and it is almost impossible to deliver a seamless experience without involving the server-side, here, and here. So, you need to choose whether you like to give your users a manual toggle, or let your website adapts to their system preference.

⚠️ In order to remove the toggle button, remove the toggle parameter.


Misc.

Goal

The goal of preferably is to improve the accessibility and readability of your documentation websites.

Future Plan

My main focus is to keep preferably light and compatible with pkgdown. Besides, I have a short list of features that I would like to add to template files, and pkgdown package. For those, I prefer to prepare a few pull requests and add them to pkgdown instead of diverging the preferably from its core. Let’s see when I get to them! Here is a few:

  • Adding support for responsive text sizing
  • Improving the appearance of argument lists
  • Minimizing the size of default pkgdown templates and assets

Contribution

If you found any bugs, or have any suggestions, please feel free to reach out to me, either by opening an issue or a pull request, or dropping an email.

Support

If you enjoy using {preferably}, please consider supporting it on GitHub. You can sponsor me monthly, or make a one-time donation! 🤗