How to Install WildDuck on NixOS Latest

This tutorial will guide you through how to install WildDuck on NixOS Latest.

Prerequisites

Step 1. Update your system

Before installing WildDuck, we need to ensure that the system is up-to-date:

sudo nix-channel --update
sudo nixos-rebuild switch

Step 2. Install WildDuck

Install WildDuck by adding the following to your configuration.nix file:

services.wildduck = {
  enable = true;
  mx = ["mail.example.com"];
  sessionStorageDir = "/var/lib/wildduck/sessions";
  MAIL_DOMAIN = "mail.example.com";
  WEB_DOMAIN = "webmail.example.com";
  ADMIN_ADDRESS = "admin@example.com";
  dkim = {
    enable = true;
    selector = "default";
    privateKeyPath = "/etc/ssl/private/dkim.key";
    publicKeyPath = "/etc/ssl/private/dkim.pub";
  };
};

Save and exit the file. Then, rebuild the system configuration using the command below:

sudo nixos-rebuild switch

Step 3. Configure DNS records

Before WildDuck can send and receive emails, we need to configure DNS records.

Create an A record for your mail server, pointing to the IP address of your NixOS system:

mail.example.com     IN      A       192.0.2.1

Create a MX record for your domain pointing to the A record we created:

example.com          IN      MX      1 mail.example.com

Create TXT records for SPF, DKIM, and DMARC:

example.com          IN      TXT     "v=spf1 mx ip4:192.0.2.1 -all"
default._domainkey.example.com IN      TXT     "v=DKIM1; k=rsa; p=<public key>"
_dmarc.example.com    IN      TXT     "v=DMARC1; p=none;"

Step 4. Restart services

Once you have added the DNS records, restart the services to apply the changes:

sudo service wildduck restart

WildDuck email server should now be installed and ready to use. You can access the webmail server by visiting https://webmail.example.com in your preferred web browser.

If you want to self-host in an easy, hands free way, need an external IP address, or simply want your data in your own hands, give IPv6.rs a try!

Alternatively, for the best virtual desktop, try Shells!