{ config, flakeInputs, pkgs, lib, system, ... }: with lib; let inherit (flakeInputs.home-manager.lib) hm; configPath = "${config.xdg.configHome}/feeds/notmuchrc"; databasePath = "${config.xdg.dataHome}/feeds"; imm = flakeInputs.imm.defaultPackage.${system}; immWrapped = pkgs.runCommand "${imm.name}-wrapped-${config.home.username}" { nativeBuildInputs = with pkgs; [ makeWrapper imm ]; } '' mkdir -p $out/bin makeWrapper ${imm}/bin/imm $out/bin/imm \ --add-flags --callbacks=${notmuchCallbacks} ''; notmuchCallbacks = pkgs.writeText "imm-callbacks-${config.home.username}.dhall" '' { _executable = "${immNotmuchInsert}/bin/imm-notmuch-insert" , _arguments = [] : List Text } ''; immNotmuchInsert = pkgs.stdenv.mkDerivation rec { name = "imm-notmuch-insert-${config.home.username}"; src = ./imm-notmuch-insert.py; phases = [ "buildPhase" "checkPhase" "installPhase" "fixupPhase" ]; python = pkgs.python39.withPackages (ps: with ps; [ configparser ]); nativeBuildInputs = with pkgs; [ makeWrapper ]; buildPhase = '' substituteAll $src imm-notmuch-insert ''; doCheck = true; checkPhase = '' ${python}/bin/python -m py_compile imm-notmuch-insert ''; installPhase = '' install -m 0755 -D -t $out/bin \ imm-notmuch-insert ''; fixupPhase = '' wrapProgram $out/bin/imm-notmuch-insert \ --prefix PATH : ${pkgs.notmuch}/bin \ --set NOTMUCH_CONFIG ${configPath} ''; }; mkIniKeyValue = key: value: let tweakVal = v: if isString v then v else if isList v then concatMapStringsSep ";" tweakVal v else if isBool v then (if v then "true" else "false") else toString v; in "${key}=${tweakVal value}"; notmuchIni = { database = { path = databasePath; }; maildir = { synchronize_flags = false; }; new = { ignore = []; tags = ["new"]; }; user = { name = config.home.username; primary_email = "${config.home.username}@imm.invalid"; }; search = { exclude_tags = ["deleted"]; }; }; in { config = { home.packages = [ immWrapped ]; home.activation.createImm = hm.dag.entryAfter ["writeBoundary"] '' $DRY_RUN_CMD mkdir -p $VERBOSE_ARG ${config.xdg.configHome}/imm ''; xdg.configFile."feeds/notmuchrc".text = let toIni = generators.toINI { mkKeyValue = mkIniKeyValue; }; in '' # Generated by Home Manager. '' + toIni notmuchIni; home.activation.createFeedsDatabase = hm.dag.entryAfter ["writeBoundary"] '' $DRY_RUN_CMD mkdir -p $VERBOSE_ARG ${databasePath} ''; }; }