update: update flake and mail server postfix options

This commit is contained in:
danny 2025-08-14 17:11:15 +08:00
parent b8a31b6264
commit b9a369436d
5 changed files with 395 additions and 256 deletions

455
flake.lock generated
View file

@ -8,11 +8,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1753590784, "lastModified": 1754887838,
"narHash": "sha256-Q30DFlPwD1ZK52TD4wSnqDO5gk9Kvifr923siI8AdVQ=", "narHash": "sha256-npC+H+Wl60EdrV75sjqm+bbbLbKgCCGn4ALSM0B2OWA=",
"owner": "KZDKM", "owner": "KZDKM",
"repo": "Hyprspace", "repo": "Hyprspace",
"rev": "a847f1d6a7326395d17fe9b6b4ab63a10eb152eb", "rev": "2b61fd2115262243b03aa9afe8dfd8a78e71636c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -62,11 +62,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752743471, "lastModified": 1753216019,
"narHash": "sha256-4izhj1j7J4mE8LgljCXSIUDculqOsxxhdoC81VhqizM=", "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "e31b575d19e7cf8a8f4398e2f9cffe27a1332506", "rev": "be166e11d86ba4186db93e10c54a141058bdce49",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -84,11 +84,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1754907869, "lastModified": 1755119384,
"narHash": "sha256-tzshAAjt0xDjCc/aOgii6PSqePIc2rWYSXF8VnqEhIg=", "narHash": "sha256-2wIRUehzcbn3Q3CaXHTfE5bj0fSG6c+RLEeXOmk1Mg4=",
"owner": "chaotic-cx", "owner": "chaotic-cx",
"repo": "nyx", "repo": "nyx",
"rev": "b5f83e0d7bce67af178f6aaef95853fedf4c00a0", "rev": "99bb796d77a42ad265f9cebaf489f4e3468f50b8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -120,11 +120,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753140376, "lastModified": 1754971456,
"narHash": "sha256-7lrVrE0jSvZHrxEzvnfHFE/Wkk9DDqb+mYCodI5uuB8=", "narHash": "sha256-p04ZnIBGzerSyiY2dNGmookCldhldWAu03y0s3P8CB0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "545aba02960caa78a31bd9a8709a0ad4b6320a5c", "rev": "8246829f2e675a46919718f9a64b71afe3bfb22d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -142,11 +142,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753925620, "lastModified": 1755083788,
"narHash": "sha256-i39h2itBWoMgiKT0m5tf3/B+mUFk4m6/+GgTc4g3rsE=", "narHash": "sha256-CXiS6gfw0NH+luSpNhtRZjy4NqVFrmsYpoetu3N/fMk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "flake-firefox-nightly", "repo": "flake-firefox-nightly",
"rev": "7d4349a2c46b51ed4712e66e0cb372d828bd92ae", "rev": "523078b104590da5850a61dfe291650a6b49809c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -173,11 +173,11 @@
"flake-compat_2": { "flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1747046372, "lastModified": 1733328505,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -189,11 +189,11 @@
"flake-compat_3": { "flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1747046372,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -237,11 +237,11 @@
"flake-compat_6": { "flake-compat_6": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1747046372,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -266,6 +266,22 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_8": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
@ -295,11 +311,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753121425, "lastModified": 1754487366,
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=", "narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e", "rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -417,7 +433,7 @@
}, },
"flake-utils_5": { "flake-utils_5": {
"inputs": { "inputs": {
"systems": "systems_8" "systems": "systems_9"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@ -437,16 +453,17 @@
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable",
"zig": "zig", "zig": "zig",
"zon2nix": "zon2nix" "zon2nix": "zon2nix"
}, },
"locked": { "locked": {
"lastModified": 1753893528, "lastModified": 1746806042,
"narHash": "sha256-5oc0by3pe2KqJDbbkQP5R5u5ybx4Fj/5Ff8eAZ4yG6s=", "narHash": "sha256-Hx92i3f5IjHaWpReyCKvGdqG55bZFU3wxGzA3wv9VLA=",
"owner": "ghostty-org", "owner": "ghostty-org",
"repo": "ghostty", "repo": "ghostty",
"rev": "d4c825186e4b80c3d95db4e5ccf8b7dcfc671197", "rev": "7f9bb3c0e54f585e11259bc0c9064813d061929c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -466,11 +483,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1750779888, "lastModified": 1754416808,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -575,11 +592,31 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753888434, "lastModified": 1754886238,
"narHash": "sha256-xQhSeLJVsxxkwchE4s6v1CnOI6YegCqeA1fgk/ivVI4=", "narHash": "sha256-LTQomWOwG70lZR+78ZYSZ9sYELWNq3HJ7/tdHzfif/s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "0630790b31d4547d79ff247bc3ba1adda3a017d9", "rev": "0d492b89d1993579e63b9dbdaed17fd7824834da",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1755121891,
"narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -604,11 +641,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1749155331, "lastModified": 1753964049,
"narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -633,11 +670,40 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752149140, "lastModified": 1754305013,
"narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=", "narHash": "sha256-u+M2f0Xf1lVHzIPQ7DsNCDkM1NYxykOSsRr4t3TbSM4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "340494a38b5ec453dfc542c6226481f736cc8a9a", "rev": "4c1d63a0f22135db123fc789f174b89544c6ec2d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprgraphics_2": {
"inputs": {
"hyprutils": [
"hyprlock",
"hyprutils"
],
"nixpkgs": [
"hyprlock",
"nixpkgs"
],
"systems": [
"hyprlock",
"systems"
]
},
"locked": {
"lastModified": 1750621377,
"narHash": "sha256-8u6b5oAdX0rCuoR8wFenajBRmI+mzbpNig6hSCuWUzE=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "b3d628d01693fb9bb0a6690cd4e7b80abda04310",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -658,11 +724,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752219718, "lastModified": 1755092449,
"narHash": "sha256-P4tM0eom+p3XE+nqM+uI/s+nH15HfCGCaWOjfdUO1iI=", "narHash": "sha256-HVdEAFT1jJ96Gn+bPxq22CQBfUQeq/PYilLKqWcLMhE=",
"owner": "horriblename", "owner": "horriblename",
"repo": "hyprgrass", "repo": "hyprgrass",
"rev": "7dafd92afedda246a9c1c4187784c3fc1d6261e5", "rev": "2b65ef7878b95e7c5f07e94f2ecf7450830532a2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -687,11 +753,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1753917125, "lastModified": 1755071134,
"narHash": "sha256-AiLcR+4gVhJnJsO2fMEW83dMZbGPYs13d6S8yrbPXew=", "narHash": "sha256-jYxnXkjlVVa1lxg0lyBCvb34MLJham3+FEs3Wuo1TP8=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "3e35797b18d35baae82657bb0438af88156e273f", "rev": "aa6a78f0a4e17c49ed4aff8b58c3f7ec7ef0408f",
"revCount": 6328, "revCount": 6361,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@ -719,11 +785,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753894287, "lastModified": 1754935480,
"narHash": "sha256-yPeP6mY5Mdozji7xZBWYy6K166RcCuJgnOXxQt7vl3s=", "narHash": "sha256-GHN5Yq/zyexUkffW0tUPrGgHljlYfJZgzrxd/3S9ASI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "bf310cda4a09b79725c2919688881959ebf3229e", "rev": "984669ebb57f0d17f271598e82e1d2ab55296f20",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -812,11 +878,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1750371812, "lastModified": 1753819801,
"narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-qtutils", "repo": "hyprland-qtutils",
"rev": "b13c7481e37856f322177010bdf75fccacd1adc8", "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -841,11 +907,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1750371198, "lastModified": 1753622892,
"narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -892,14 +958,14 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_5" "systems": "systems_6"
}, },
"locked": { "locked": {
"lastModified": 1753964521, "lastModified": 1754413248,
"narHash": "sha256-hHTJ65uOiGqQgI2XbH9jqIGHUcA86K+GJbnhAKhRWNo=", "narHash": "sha256-d2C75Ij8JCuNwy6Vgq32Fe1iSrEOOnBnOX4JZJvtAFA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlock", "repo": "hyprlock",
"rev": "bdf0ef82822a4c434b79c8d315518c9db9a10f34", "rev": "347e05a40ec3bc48b3f21f44dea551d07773e214",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -918,14 +984,14 @@
"hyprland", "hyprland",
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_6" "systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1752803880, "lastModified": 1754263431,
"narHash": "sha256-T25rxIWR2+PwrUBlFCLNHp5D0O3ec9Em+8lt+0yUb+8=", "narHash": "sha256-EmGvVOQcY/93SnoHL5OAsLI5ltvVrTeMu2pgeoc3Z/I=",
"owner": "raybbian", "owner": "raybbian",
"repo": "hyprtasking", "repo": "hyprtasking",
"rev": "c4e1fa4d0d125c2d3280040343c5e42e4f153a8b", "rev": "a803c56cc2ae98b8bd3f7102388fae4826697927",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -946,11 +1012,36 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753800567, "lastModified": 1754481650,
"narHash": "sha256-W0xgXsaqGa/5/7IBzKNhf0+23MqGPymYYfqT7ECqeTE=", "narHash": "sha256-6u6HdEFJh5gY6VfyMQbhP7zDdVcqOrCDTkbiHJmAtMI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "c65d41d4f4e6ded6fdb9d508a73e2fe90e55cdf7", "rev": "df6b8820c4a0835d83d0c7c7be86fbc555f1f7fd",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprutils_2": {
"inputs": {
"nixpkgs": [
"hyprlock",
"nixpkgs"
],
"systems": [
"hyprlock",
"systems"
]
},
"locked": {
"lastModified": 1751061882,
"narHash": "sha256-g9n8Vrbx+2JYM170P9BbvGHN39Wlkr4U+V2WLHQsXL8=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "4737241eaf8a1e51671a2a088518071f9a265cf4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1063,11 +1154,11 @@
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1753618592, "lastModified": 1754828166,
"narHash": "sha256-9sDACkrSbZOA1srKWQzvbkBFHZeXvHW8EYpWrVZPxDg=", "narHash": "sha256-i7c+fpXVsnvj2+63Gl3YfU1hVyxbLeqeFj55ZBZACWI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "lib-aggregate", "repo": "lib-aggregate",
"rev": "81b2f78680ca3864bfdc0d4cbc3444af3e1ff271", "rev": "f01c8d121a3100230612be96e4ac668e15eafb77",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1087,11 +1178,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1753917868, "lastModified": 1755112706,
"narHash": "sha256-khP5mhM320Uzu1lz0T2iVOFMdTdOFCsCW4ZOgQjBm4M=", "narHash": "sha256-8RiIwry9yHcbgRoHCvh7hnB+5bTSKOXXSbla1DUqYSU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "neovim-nightly-overlay", "repo": "neovim-nightly-overlay",
"rev": "76251f3ad50697027b37cfc602b847e24fb5834f", "rev": "8b2a6a10e76f6c0c07c27c4abf0259e1a9ec2784",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1103,11 +1194,11 @@
"neovim-src": { "neovim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1753830218, "lastModified": 1755040869,
"narHash": "sha256-PpZUuVOB11MD7gNql5XIS/rEzbhkSmdODK+WUqDah6w=", "narHash": "sha256-vEzYYF+uaFAG0c5X18NmGPChYkRTYEI/i+5buZC1PnE=",
"owner": "neovim", "owner": "neovim",
"repo": "neovim", "repo": "neovim",
"rev": "1256daeead27722263614c1e57899dff6d802b98", "rev": "35be59cc7b8d39f91b70aa57eaa09dc9b4636806",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1146,11 +1237,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753589988, "lastModified": 1754800038,
"narHash": "sha256-y1JlcMB2dKFkrr6g+Ucmj8L//IY09BtSKTH/A7OU7mU=", "narHash": "sha256-UbLO8/0pVBXLJuyRizYOJigtzQAj8Z2bTnbKSec/wN0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "f0736b09c43028fd726fb70c3eb3d1f0795454cf", "rev": "b65f8d80656f9fcbd1fecc4b7f0730f468333142",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1166,11 +1257,11 @@
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_4"
}, },
"locked": { "locked": {
"lastModified": 1753928630, "lastModified": 1755137329,
"narHash": "sha256-ASqyvmJ2EEUCyDJGMHRQ1ZqWnCd4SiVd7hi7dGBuSvw=", "narHash": "sha256-9MxuOLH7jk58IVUUDWwLeqk9U4ATE6X37955Ld+4/zw=",
"owner": "Infinidoge", "owner": "Infinidoge",
"repo": "nix-minecraft", "repo": "nix-minecraft",
"rev": "30af81148ee29a4a13c938c25d3e68877b1b27fb", "rev": "d9330bc35048238597880e89fb173799de9db5e9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1199,24 +1290,27 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1748189127, "lastModified": 1755027561,
"narHash": "sha256-zRDR+EbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY=", "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334", "owner": "NixOS",
"type": "tarball", "repo": "nixpkgs",
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz" "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github"
}, },
"original": { "original": {
"type": "tarball", "owner": "NixOS",
"url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz" "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
} }
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1753579242, "lastModified": 1754788789,
"narHash": "sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA=", "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "0f36c44e01a6129be94e3ade315a5883f0228a6e", "rev": "a73b9c743612e4244d865a2fdee11865283c04e6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1226,6 +1320,22 @@
} }
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": {
"lastModified": 1741992157,
"narHash": "sha256-nlIfTsTrMSksEJc1f7YexXiPVuzD1gOfeN1ggwZyUoc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "da4b122f63095ca1199bd4d526f9e26426697689",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "release-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": { "locked": {
"lastModified": 1730741070, "lastModified": 1730741070,
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
@ -1241,45 +1351,45 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1752687322, "lastModified": 1741865919,
"narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=", "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251", "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1753750875,
"narHash": "sha256-J1P0aQymehe8AHsID9wwoMjbaYrIB2eH5HftoXhF9xk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "871381d997e4a063f25a3994ce8a9ac595246610",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_10": {
"locked": {
"lastModified": 1727348695,
"narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1752687322, "lastModified": 1754725699,
"narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=", "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251", "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1291,11 +1401,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1753151930, "lastModified": 1754990257,
"narHash": "sha256-XSQy6wRKHhRe//iVY5lS/ZpI/Jn6crWI8fQzl647wCg=", "narHash": "sha256-eEq2wlYNF2t89PsNyEv5Sz4lSxdukZCj4SdhZBVAGpI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "83e677f31c84212343f4cc553bab85c2efcad60a", "rev": "372d9eeeafa5b15913201e2b92e8e539ac7c64d1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1323,11 +1433,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1753694789, "lastModified": 1755027561,
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1339,11 +1449,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1753694789, "lastModified": 1755027561,
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1370,6 +1480,22 @@
} }
}, },
"nixpkgs_8": { "nixpkgs_8": {
"locked": {
"lastModified": 1753934836,
"narHash": "sha256-G06FmIBj0I5bMW1Q8hAEIl5N7IHMK7+Ta4KA+BmneDA=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8679b16e11becd487b45d568358ddf9d5640d860",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": { "locked": {
"lastModified": 1752596105, "lastModified": 1752596105,
"narHash": "sha256-lFNVsu/mHLq3q11MuGkMhUUoSXEdQjCHvpReaGP1S2k=", "narHash": "sha256-lFNVsu/mHLq3q11MuGkMhUUoSXEdQjCHvpReaGP1S2k=",
@ -1395,11 +1521,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1750779888, "lastModified": 1754416808,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1419,7 +1545,7 @@
"lanzaboote", "lanzaboote",
"nixpkgs" "nixpkgs"
], ],
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable_2"
}, },
"locked": { "locked": {
"lastModified": 1731363552, "lastModified": 1731363552,
@ -1439,6 +1565,7 @@
"inputs": { "inputs": {
"Hyprspace": "Hyprspace", "Hyprspace": "Hyprspace",
"actual-budget-api": "actual-budget-api", "actual-budget-api": "actual-budget-api",
"chaotic": "chaotic",
"disko": "disko", "disko": "disko",
"firefox": "firefox", "firefox": "firefox",
"ghostty": "ghostty", "ghostty": "ghostty",
@ -1549,11 +1676,11 @@
"nixpkgs": "nixpkgs_7" "nixpkgs": "nixpkgs_7"
}, },
"locked": { "locked": {
"lastModified": 1752544651, "lastModified": 1754988908,
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=", "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "2c8def626f54708a9c38a5861866660395bb3461", "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1673,6 +1800,21 @@
} }
}, },
"systems_7": { "systems_7": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_8": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -1687,7 +1829,7 @@
"type": "github" "type": "github"
} }
}, },
"systems_8": { "systems_9": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -1710,11 +1852,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753772294, "lastModified": 1754847726,
"narHash": "sha256-8rkd13WfClfZUBIYpX5dvG3O9V9w3K9FPQ9rY14VtBE=", "narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "6b9214fffbcf3f1e608efa15044431651635ca83", "rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1751,11 +1893,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751300244, "lastModified": 1753633878,
"narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1767,15 +1909,15 @@
"yazi": { "yazi": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_5", "flake-utils": "flake-utils_5",
"nixpkgs": "nixpkgs_8", "nixpkgs": "nixpkgs_9",
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_4"
}, },
"locked": { "locked": {
"lastModified": 1753894134, "lastModified": 1755142006,
"narHash": "sha256-krVLqRHpRG+qxjYuXgV3m1HzkJRRYJL7dtYvz655doo=", "narHash": "sha256-3PXLb+3tWkFh+eOe2wrgkxUXA+Ip4EOxoSdBQZGou/o=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "da97e5a8b4580add8f5eb2f97f0fe80886becf06", "rev": "2ec3a6c645324295331c0f2ef6d4d946cf11c06b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1805,8 +1947,7 @@
"zig": { "zig": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
"ghostty", "ghostty"
"flake-compat"
], ],
"flake-utils": [ "flake-utils": [
"ghostty", "ghostty",
@ -1814,15 +1955,15 @@
], ],
"nixpkgs": [ "nixpkgs": [
"ghostty", "ghostty",
"nixpkgs" "nixpkgs-stable"
] ]
}, },
"locked": { "locked": {
"lastModified": 1748261582, "lastModified": 1741825901,
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=", "narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "aafb1b093fb838f7a02613b719e85ec912914221", "rev": "0b14285e283f5a747f372fb2931835dd937c4383",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1839,7 +1980,7 @@
], ],
"nixpkgs": [ "nixpkgs": [
"ghostty", "ghostty",
"nixpkgs" "nixpkgs-unstable"
] ]
}, },
"locked": { "locked": {
@ -1852,8 +1993,8 @@
}, },
"original": { "original": {
"owner": "jcollie", "owner": "jcollie",
"ref": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"repo": "zon2nix", "repo": "zon2nix",
"rev": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"type": "github" "type": "github"
} }
} }

View file

@ -91,6 +91,7 @@
}; };
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
actual-budget-api = { actual-budget-api = {
url = "github:DACHXY/actual-budget-api"; url = "github:DACHXY/actual-budget-api";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";

View file

@ -81,15 +81,14 @@ let
# Those settings are automatically set based on other parts # Those settings are automatically set based on other parts
# of this module. # of this module.
automaticallySetPluginSettings = automaticallySetPluginSettings = [
[ "sieve_plugins"
"sieve_plugins" "sieve_extensions"
"sieve_extensions" "sieve_global_extensions"
"sieve_global_extensions" "sieve_pipe_bin_dir"
"sieve_pipe_bin_dir" ]
] ++ (builtins.attrNames sieveScriptSettings)
++ (builtins.attrNames sieveScriptSettings) ++ (builtins.attrNames imapSieveMailboxSettings);
++ (builtins.attrNames imapSieveMailboxSettings);
# The idea is to match everything that looks like `$term =` # The idea is to match everything that looks like `$term =`
# but not `# $term something something` # but not `# $term something something`
@ -702,38 +701,37 @@ in
); );
}; };
users.users = users.users = {
{ dovenull = {
dovenull = { uid = config.ids.uids.dovenull2;
uid = config.ids.uids.dovenull2; description = "Dovecot user for untrusted logins";
description = "Dovecot user for untrusted logins"; group = "dovenull";
group = "dovenull";
};
}
// optionalAttrs (cfg.user == "dovecot") {
dovecot = {
uid = config.ids.uids.dovecot;
description = "Dovecot user";
group = cfg.group;
};
}
// optionalAttrs (cfg.createMailUser && cfg.mailUser != null) {
${cfg.mailUser} = {
description = "Virtual Mail User";
isSystemUser = true;
} // optionalAttrs (cfg.mailGroup != null) { group = cfg.mailGroup; };
}; };
}
// optionalAttrs (cfg.user == "dovecot") {
dovecot = {
uid = config.ids.uids.dovecot;
description = "Dovecot user";
group = cfg.group;
};
}
// optionalAttrs (cfg.createMailUser && cfg.mailUser != null) {
${cfg.mailUser} = {
description = "Virtual Mail User";
isSystemUser = true;
}
// optionalAttrs (cfg.mailGroup != null) { group = cfg.mailGroup; };
};
users.groups = users.groups = {
{ dovenull.gid = config.ids.gids.dovenull2;
dovenull.gid = config.ids.gids.dovenull2; }
} // optionalAttrs (cfg.group == "dovecot") {
// optionalAttrs (cfg.group == "dovecot") { dovecot.gid = config.ids.gids.dovecot;
dovecot.gid = config.ids.gids.dovecot; }
} // optionalAttrs (cfg.createMailUser && cfg.mailGroup != null) {
// optionalAttrs (cfg.createMailUser && cfg.mailGroup != null) { ${cfg.mailGroup} = { };
${cfg.mailGroup} = { }; };
};
environment.etc."dovecot/dovecot.conf".source = cfg.configFile; environment.etc."dovecot/dovecot.conf".source = cfg.configFile;
@ -804,44 +802,43 @@ in
# When copying sieve scripts preserve the original time stamp # When copying sieve scripts preserve the original time stamp
# (should be 0) so that the compiled sieve script is newer than # (should be 0) so that the compiled sieve script is newer than
# the source file and Dovecot won't try to compile it. # the source file and Dovecot won't try to compile it.
preStart = preStart = ''
'' rm -rf ${stateDir}/sieve ${stateDir}/imapsieve
rm -rf ${stateDir}/sieve ${stateDir}/imapsieve ''
'' + optionalString (cfg.sieve.scripts != { }) ''
+ optionalString (cfg.sieve.scripts != { }) '' mkdir -p ${stateDir}/sieve
mkdir -p ${stateDir}/sieve ${concatStringsSep "\n" (
${concatStringsSep "\n" ( mapAttrsToList (to: from: ''
mapAttrsToList (to: from: '' if [ -d '${from}' ]; then
if [ -d '${from}' ]; then mkdir '${stateDir}/sieve/${to}'
mkdir '${stateDir}/sieve/${to}' cp -p "${from}/"*.sieve '${stateDir}/sieve/${to}'
cp -p "${from}/"*.sieve '${stateDir}/sieve/${to}' else
else cp -p '${from}' '${stateDir}/sieve/${to}'
cp -p '${from}' '${stateDir}/sieve/${to}' fi
fi ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/sieve/${to}'
${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/sieve/${to}' '') cfg.sieve.scripts
'') cfg.sieve.scripts )}
)} chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/sieve'
chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/sieve' ''
'' + optionalString (cfg.imapsieve.mailbox != [ ]) ''
+ optionalString (cfg.imapsieve.mailbox != [ ]) '' mkdir -p ${stateDir}/imapsieve/{before,after}
mkdir -p ${stateDir}/imapsieve/{before,after}
${concatMapStringsSep "\n" ( ${concatMapStringsSep "\n" (
el: el:
optionalString (el.before != null) '' optionalString (el.before != null) ''
cp -p ${el.before} ${stateDir}/imapsieve/before/${baseNameOf el.before} cp -p ${el.before} ${stateDir}/imapsieve/before/${baseNameOf el.before}
${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/before/${baseNameOf el.before}' ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/before/${baseNameOf el.before}'
'' ''
+ optionalString (el.after != null) '' + optionalString (el.after != null) ''
cp -p ${el.after} ${stateDir}/imapsieve/after/${baseNameOf el.after} cp -p ${el.after} ${stateDir}/imapsieve/after/${baseNameOf el.after}
${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/after/${baseNameOf el.after}' ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/after/${baseNameOf el.after}'
'' ''
) cfg.imapsieve.mailbox} ) cfg.imapsieve.mailbox}
${optionalString ( ${optionalString (
cfg.mailUser != null && cfg.mailGroup != null cfg.mailUser != null && cfg.mailGroup != null
) "chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/imapsieve'"} ) "chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/imapsieve'"}
''; '';
}; };
environment.systemPackages = [ dovecotPkg ]; environment.systemPackages = [ dovecotPkg ];

View file

@ -2,7 +2,9 @@
pkgs, pkgs,
lib, lib,
inputs, inputs,
system,
username, username,
config,
... ...
}: }:
let let
@ -92,14 +94,14 @@ in
caFile = "" + ../../extra/ca.crt; caFile = "" + ../../extra/ca.crt;
virtualMailDir = "/var/mail/vhosts"; virtualMailDir = "/var/mail/vhosts";
domain = "net.dn"; domain = "net.dn";
rootAlias = "${settings.personal.username}"; rootAlias = "${username}";
networks = [ networks = [
"127.0.0.0/8" "127.0.0.0/8"
"10.0.0.0/24" "10.0.0.0/24"
]; ];
virtual = '' virtual = ''
admin@net.dn ${settings.personal.username}@net.dn admin@net.dn ${username}@net.dn
postmaster@net.dn ${settings.personal.username}@net.dn postmaster@net.dn ${username}@net.dn
''; '';
openFirewall = true; openFirewall = true;
oauth = { oauth = {
@ -120,7 +122,6 @@ in
../../../home/user/config.nix ../../../home/user/config.nix
../../../home/user/direnv.nix ../../../home/user/direnv.nix
../../../home/user/environment.nix ../../../home/user/environment.nix
../../../home/user/git.nix
../../../home/user/nvim.nix ../../../home/user/nvim.nix
../../../home/user/shell.nix ../../../home/user/shell.nix
../../../home/user/tmux.nix ../../../home/user/tmux.nix

View file

@ -40,12 +40,12 @@ let
} }
''; '';
dovecotDomain = config.services.postfix.hostname; dovecotDomain = config.services.postfix.settings.main.myhostname;
in in
{ {
config = mkIf cfg.enable { config = mkIf cfg.enable {
security.acme.certs = { security.acme.certs = {
"${config.services.postfix.hostname}" = { "${config.services.postfix.settings.main.myhostname}" = {
dnsProvider = null; dnsProvider = null;
webroot = "/var/lib/acme/acme-challenge"; webroot = "/var/lib/acme/acme-challenge";
postRun = '' postRun = ''
@ -74,11 +74,12 @@ in
systemd.services.postfix = { systemd.services.postfix = {
requires = [ requires = [
"acme-finished-${config.services.postfix.hostname}.target" "acme-finished-${config.services.postfix.settings.main.myhostname}.target"
]; ];
serviceConfig.LoadCredential = serviceConfig.LoadCredential =
let let
certDir = config.security.acme.certs."${config.services.postfix.hostname}".directory; certDir =
config.security.acme.certs."${config.services.postfix.settings.main.myhostname}".directory;
in in
[ [
"cert.pem:${certDir}/cert.pem" "cert.pem:${certDir}/cert.pem"
@ -88,28 +89,26 @@ in
services.postfix = { services.postfix = {
enable = true; enable = true;
hostname = "mail.${cfg.domain}";
origin = cfg.origin;
destination = cfg.destination;
networks = cfg.networks;
virtual = cfg.virtual; virtual = cfg.virtual;
enableSubmissions = true; enableSubmissions = true;
relayPort = 465;
submissionOptions = {
milter_macro_daemon_name = "ORIGINATING";
smtpd_client_restrictions = "permit_mynetworks, permit_sasl_authenticated, reject";
smtpd_relay_restrictions = "permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination";
smtpd_tls_security_level = "encrypt";
smtpd_tls_loglevel = "10";
};
config = settings.main =
let let
credsDir = "/run/credentials/postfix.service"; credsDir = "/run/credentials/postfix.service";
certDir = "${credsDir}/cert.pem"; certDir = "${credsDir}/cert.pem";
keyDir = "${credsDir}/key.pem"; keyDir = "${credsDir}/key.pem";
in in
{ {
myhostname = "mail.${cfg.domain}";
mynetworks = cfg.networks;
mydestination = cfg.destination;
myorigin = if cfg.origin == "" then cfg.domain else cfg.origin;
relayhost = [ "0.0.0.0:465" ];
smtpd_tls_security_level = "encrypt";
smtpd_client_restrictions = "permit_mynetworks, permit_sasl_authenticated, reject";
smtpd_relay_restrictions = "permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination";
milter_macro_daemon_name = "ORIGINATING";
virtual_uid_maps = [ virtual_uid_maps = [
"static:${toString cfg.uid}" "static:${toString cfg.uid}"
]; ];
@ -308,7 +307,7 @@ in
ssl = required ssl = required
service auth { service auth {
unix_listener ${config.services.postfix.config.queue_directory}/private/auth { unix_listener ${config.services.postfix.settings.main.queue_directory}/private/auth {
mode = 0660 mode = 0660
user = ${config.services.postfix.user} user = ${config.services.postfix.user}
group = ${config.services.postfix.group} group = ${config.services.postfix.group}
@ -317,7 +316,7 @@ in
} }
service lmtp { service lmtp {
unix_listener ${config.services.postfix.config.queue_directory}/private/dovecot-lmtp { unix_listener ${config.services.postfix.settings.main.queue_directory}/private/dovecot-lmtp {
mode = 0660 mode = 0660
user = ${config.services.postfix.user} user = ${config.services.postfix.user}
group = ${config.services.postfix.group} group = ${config.services.postfix.group}
@ -600,7 +599,7 @@ in
recommendedProxySettings = mkDefault true; recommendedProxySettings = mkDefault true;
virtualHosts = { virtualHosts = {
"${config.services.postfix.hostname}" = { "${config.services.postfix.settings.main.myhostname}" = {
enableACME = true; enableACME = true;
forceSSL = true; forceSSL = true;
locations."/dovecot/ping".proxyPass = "http://localhost:${toString 5002}/ping"; locations."/dovecot/ping".proxyPass = "http://localhost:${toString 5002}/ping";