{
  options,
  config,
  pkgs,
  lib,
  ...
}:
with lib;
with lib.frajul; let
  cfg = config.apps.tools.git;
in {
  options.apps.tools.git = with types; {
    enable = mkBoolOpt false "Enable or disable git";
  };

  config = mkIf cfg.enable {
    environment.systemPackages = with pkgs; [
      git
      git-remote-gcrypt

      gh # GitHub cli

      lazygit
      commitizen
    ];

    environment.shellAliases = {
      # Git aliases
      ga = "git add .";
      gc = "git commit -m ";
      gp = "git push -u origin";

      g = "lazygit";
    };

    home.configFile."git/config".text = import ./config.nix {sshKeyPath = "/home/${config.user.name}/.ssh/key.pub";};
    home.configFile."lazygit/config.yml".source = ./lazygitConfig.yml;

    home.persist.directories = [
      ".config/gh"
      ".config/lazygit"
      ".config/systemd" # For git maintainance
    ];
  };
}
