{ config, lib, pkgs, ... }: let git_wrapped = package: prog: pkgs.writeShellScriptBin "${prog}" '' export PATH="${ lib.makeBinPath [ pkgs.meld ] }:$PATH" exec ${package}/bin/${prog} "''${@}" ''; in { 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; [ my_git ]; } (lib.mkIf (config.me.git.config != null) { me.install.user.talexander.file = { ".gitconfig" = { source = config.me.git.config; }; }; }) (lib.mkIf (config.me.graphical) { nixpkgs.overlays = [ (final: prev: { my_git = ( pkgs.buildEnv { name = prev.git.name; version = prev.git.version; paths = (builtins.map (git_wrapped prev.git) [ "git" ]) ++ [ prev.git ]; extraOutputsToInstall = [ "man" "doc" "info" ]; nativeBuildInputs = [ final.makeWrapper ]; ignoreCollisions = true; } ); }) ]; }) (lib.mkIf (!config.me.graphical) { nixpkgs.overlays = [ (final: prev: { my_git = prev.git; }) ]; }) ]; }