{ inputs, lib, ... }: { # debug = true; # We only define machines config in this flake yet, so we only include # the module that builds these. This file might get fuller, if we need to # build our own packages, that are not flakes. imports = [ ./nixos/flake-module.nix inputs.pre-commit-hooks.flakeModule # To import a flake module # 1. Add foo to inputs # 2. Add foo as a parameter to the outputs function # 3. Add here: foo.flakeModule ]; systems = ["x86_64-linux"]; perSystem = { config, pkgs, system, ... }: { devShells.default = config.pre-commit.devShell; pre-commit = let generatedFiles = [ "hardware-configuration\\.nix" ]; in { check.enable = true; settings = { hooks = { nil.enable = true; statix = { enable = true; settings = { format = "stderr"; ignore = generatedFiles; }; }; deadnix = { enable = true; excludes = generatedFiles; }; alejandra.enable = true; }; }; }; formatter = pkgs.alejandra; # Per-system attributes can be defined here. The self' and inputs' # module parameters provide easy access to attributes of the same # system. _module.args.pkgs = import inputs.nixpkgs { inherit system; config.permittedInsecurePackages = ["jitsi-meet-1.0.8043"]; overlays = [ (_: prev: { alias-to-sieve = inputs.alias-to-sieve.packages.x86_64-linux.default; # add custom package to convert alias files to sieve scripts on the stalwart machine stalwart-mail = assert lib.assertMsg (prev.stalwart-mail.version == "0.11.6-unstable-2025-02-04") '' 1. If the bug https://github.com/stalwartlabs/sieve/issues/11 is resolved to our satisfaction, try to remove this overlay. 2. Check whether sieve-rs recieved new updates that our patch needs to be rebased upon. 3. Check whether the sieve-rs patch below that exchanges the dependency needs updates. 4. Then update the version comparison in this assert statement. 5. Update the `cargoHash` by setting it to `lib.fakeHash` and then inserting the result. 6. Check if we can get rid of alias-to-sieve when stalwart-mail has a builtin mail-forwarding feature. ''; # This override encapsulates the buildRustPackage function in a function that takes the arguments given by the nixpkgs-version of stalwart-mail # and adds our patch to the arguments before handing the new arguments to buildRustPackage. prev.stalwart-mail.override ( let rp = pkgs.rustPlatform; in { rustPlatform = rp // { buildRustPackage = args: rp.buildRustPackage ( args // rec { cargoPatches = [ # Let stalwart-mail depend on our own version of the sieve crate that does not have some “loop prevention” that disables redirects to the original sender. # We want to redirect to sender if we simulate alias files and not doing so barely prevents loops in my opinion. ./patches/sieve-rs.patch ]; # Replace the string with `lib.fakeHash` after version changes in order to get the new hash value. cargoHash = "sha256-gb2oFlVA/vE6DoWWW8SCFA3l7rtV2RuosPUY+6IcKNM="; } ); }; } ); }) ]; }; }; # Equivalent to inputs'.nixpkgs.legacyPackages.hello; # flake = { # The usual flake attributes can be defined here, including system- # agnostic ones like nixosModule and system-enumerating ones, although # those are more easily expressed in perSystem. # }; }