{ description = "An opinionated Nixos Mailsystem"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; flake-parts.url = "github:hercules-ci/flake-parts"; flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; treefmt-nix.url = "github:numtide/treefmt-nix"; treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; crane.url = "github:ipetkov/crane"; git-hooks-nix.url = "github:cachix/git-hooks.nix"; git-hooks-nix.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, flake-parts, ... } @ inputs: flake-parts.lib.mkFlake {inherit inputs;} { systems = [ "x86_64-linux" "aarch64-linux" ]; imports = [ flake-parts.flakeModules.easyOverlay inputs.treefmt-nix.flakeModule inputs.git-hooks-nix.flakeModule ]; perSystem = { config, self', inputs', pkgs, system, ... }: let craneLib = inputs.crane.mkLib pkgs; pkgs = nixpkgs.legacyPackages.${system}.extend self.overlays.default; in { checks = let tests = ["internal" "basic" "aliases" "rspamd"]; genTest = testName: { "name" = testName; "value" = import (./tests + "/${testName}.nix") {inherit pkgs;}; }; in pkgs.lib.listToAttrs (map genTest tests); packages = rec { default = mailnix; mailnix = craneLib.buildPackage { src = craneLib.cleanCargoSource ./pkgs/mailnix; }; }; overlayAttrs = { mailnix = config.packages.mailnix; }; devShells.default = craneLib.devShell { packages = with pkgs; [ self'.formatter.outPath # Add all formatters to environment mailnix ]; shellHook = '' ${config.pre-commit.installationScript} ''; }; pre-commit.settings.hooks = { treefmt.enable = true; }; treefmt = { programs = { actionlint.enable = true; alejandra.enable = true; rustfmt.enable = true; }; settings.global.excludes = [ ".envrc" "*.sieve" ]; }; }; flake.nixosModules = rec { default = mailsystem; mailsystem = import ./mailsystem; }; }; }