{
  config,
  lib,
  pkgs,
  ...
}:

{
  imports = [ ];

  options.me = {
    git.config = lib.mkOption {
      type = lib.types.nullOr lib.types.path;
      default = null;
      example = ./files/gitconfig_home;
      description = "A git config file.";
    };
  };

  config = lib.mkMerge [
    {
      environment.systemPackages = with pkgs; [
        git
      ];
    }
    (lib.mkIf (config.me.git.config != null) {
      home-manager.users.talexander =
        { pkgs, ... }:
        {
          home.file.".gitconfig" = {
            source = config.me.git.config;
          };
        };
    })
    # (lib.mkIf (config.me.graphical) {
    #   nixpkgs.overlays = [
    #     (final: prev: {
    #       git = pkgs.buildEnv {
    #         name = prev.git.name;
    #         paths = [
    #           prev.git
    #         ];
    #         extraOutputsToInstall = [
    #           "man"
    #           "doc"
    #           "info"
    #         ];
    #         buildInputs = [ final.makeWrapper ];
    #         postBuild = ''
    #           wrapProgram $out/bin/git --prefix PATH : ${
    #             lib.makeBinPath [
    #               final.meld
    #             ]
    #           }
    #         '';
    #       };
    #     })
    #   ];
    # })
    # (lib.mkIf (!config.me.graphical) {
    #   nixpkgs.overlays = [
    #     (final: prev: {
    #       git = pkgs.buildEnv {
    #         name = prev.git.name;
    #         paths = [
    #           prev.git
    #         ];
    #         extraOutputsToInstall = [
    #           "man"
    #           "doc"
    #           "info"
    #         ];
    #         buildInputs = [ final.makeWrapper ];
    #         postBuild = ''
    #           wrapProgram $out/bin/git --prefix PATH : ${
    #             lib.makeBinPath [
    #             ]
    #           }
    #         '';
    #       };
    #     })
    #   ];
    # })
  ];
}