one flake containing all of my nixos configs
{
  pkgs,
  lib,
  config,
  ...
}: let
  formatter = pkgs.writeShellApplication {
    name = "alejandra_doom_formatter";
    runtimeInputs = [pkgs.alejandra];
    text = "alejandra --quiet";
  };
  pkgs-markdownMode = with pkgs; [
    mdl
    pandoc
    proselint
    python310Packages.grip
  ];
  pkgs-pythonMode = with pkgs.python310Packages; [
    black
    isort
    pyflakes
    pkgs.nodePackages.pyright
  ];
  pkgs-shellMode = with pkgs; [
    shellcheck
    nodePackages.bash-language-server
  ];
  pkgs-misc = with pkgs; [
    (aspellWithDicts (dicts: with dicts; [en en-computers en-science]))
    fd
    ripgrep
    sqlite
    wordnet
    nodePackages.yaml-language-server
  ];
in {
  config.home.packages = lib.mkIf config.dotfiles.shell.emacs.enable (pkgs-markdownMode ++ pkgs-pythonMode ++ pkgs-shellMode ++ pkgs-misc);

  config.programs.doom-emacs = with pkgs; {
    doomPrivateDir = ./doom.d;
    extraConfig = ''
      (after! mu4e (setq
          mu4e-mu-binary "${mu}/bin/mu"
          sendmail-program "${msmtp}/bin/msmtp"
          message-sendmail-f-is-evil t
          message-sendmail-extra-arguments '("--read-envelope-from")
          message-send-mail-function 'message-send-mail-with-sendmail))

      (after! nix-mode (setq nix-nixfmt-bin "${formatter}/bin/alejandra_doom_formatter"))
    '';
    extraPackages = [emacs-all-the-icons-fonts mu];
    emacsPackage = emacsPgtk;
  };
}