diff --git a/flake.lock b/flake.lock index 5f2aef9..9ed386f 100644 --- a/flake.lock +++ b/flake.lock @@ -21,6 +21,22 @@ "type": "github" } }, + "blobs": { + "flake": false, + "locked": { + "lastModified": 1604995301, + "narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=", + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "type": "gitlab" + } + }, "darwin": { "inputs": { "nixpkgs": [ @@ -115,6 +131,22 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1668681692, + "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "009399224d5e398d03b22badca40a37ac85412a1", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -172,6 +204,32 @@ "type": "github" } }, + "nixos-mailserver": { + "inputs": { + "blobs": "blobs", + "flake-compat": "flake-compat_2", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-23_05": "nixpkgs-23_05", + "nixpkgs-23_11": "nixpkgs-23_11", + "utils": "utils_2" + }, + "locked": { + "lastModified": 1706219574, + "narHash": "sha256-qO+8UErk+bXCq2ybHU4GzXG4Ejk4Tk0rnnTPNyypW4g=", + "owner": "simple-nixos-mailserver", + "repo": "nixos-mailserver", + "rev": "e47f3719f1db3e0961a4358d4cb234a0acaa7baf", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "ref": "nixos-23.11", + "repo": "nixos-mailserver", + "type": "gitlab" + } + }, "nixpkgs": { "locked": { "lastModified": 1703013332, @@ -188,6 +246,36 @@ "type": "github" } }, + "nixpkgs-23_05": { + "locked": { + "lastModified": 1704290814, + "narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.05", + "type": "indirect" + } + }, + "nixpkgs-23_11": { + "locked": { + "lastModified": 1706098335, + "narHash": "sha256-r3dWjT8P9/Ah5m5ul4WqIWD8muj5F+/gbCdjiNVBKmU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a77ab169a83a4175169d78684ddd2e54486ac651", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.11", + "type": "indirect" + } + }, "nixpkgs-unstable": { "locked": { "lastModified": 1711703276, @@ -242,6 +330,7 @@ "firefox-gnome-theme": "firefox-gnome-theme", "home-manager": "home-manager_2", "nixos-hardware": "nixos-hardware", + "nixos-mailserver": "nixos-mailserver", "nixpkgs": "nixpkgs_3", "nixpkgs-unstable": "nixpkgs-unstable", "secrets": "secrets", @@ -327,6 +416,21 @@ "repo": "flake-utils", "type": "github" } + }, + "utils_2": { + "locked": { + "lastModified": 1605370193, + "narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5021eac20303a61fafe17224c087f5519baed54d", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 92abae5..f19e96b 100644 --- a/flake.nix +++ b/flake.nix @@ -20,6 +20,10 @@ flake = false; }; nixos-hardware.url = "github:NixOS/nixos-hardware"; + nixos-mailserver = { + url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-23.11"; + inputs.nixpkgs.follows = "nixpkgs"; + }; secrets = { url = "git+ssh://git@git.vimium.com/jordan/nix-secrets.git"; flake = false; @@ -30,7 +34,7 @@ }; }; - outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, agenix, deploy-rs, disko, home-manager, nixos-hardware, secrets, ... }: + outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, agenix, deploy-rs, disko, home-manager, nixos-hardware, nixos-mailserver, secrets, ... }: let mkPkgsForSystem = system: inputs.nixpkgs; overlays = [ @@ -46,6 +50,7 @@ commonModules = [ agenix.nixosModules.age disko.nixosModules.disko + nixos-mailserver.nixosModule home-manager.nixosModule ./modules ]; diff --git a/modules/services/mail/default.nix b/modules/services/mail/default.nix new file mode 100644 index 0000000..8765339 --- /dev/null +++ b/modules/services/mail/default.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.modules.services.mail; +in { + options.modules.services.mail = { + enable = lib.mkOption { + default = false; + example = true; + }; + }; + + config = lib.mkIf cfg.enable { + mailserver = { + enable = true; + fqdn = "mail.vimium.com"; + domains = [ "vimium.com" ]; + indexDir = "/var/lib/dovecot/indices"; + + certificateDomains = [ + "imap.vimium.com" + "pop3.vimium.com" + ]; + certificateScheme = "acme-nginx"; + + fullTextSearch.enable = true; + + loginAccounts = { + "jordan@vimium.com" = { + hashedPasswordFile = config.users.users.jordan.hashedPasswordFile; + }; + }; + + extraVirtualAliases = { + "hostmaster@vimium.com" = "jordan@vimium.com"; + "webmaster@vimium.com" = "jordan@vimium.com"; + "abuse@vimium.com" = "jordan@vimium.com"; + }; + }; + }; +}