{ config, lib, pkgs, ... }: let userCfg = config.users.foo-dogsquared; cfg = userCfg.programs.git; in { options.users.foo-dogsquared.programs.git = { enable = lib.mkEnableOption "foo-dogsquared's Git setup"; instaweb.enable = lib.mkEnableOption "install additional files for instaweb setup"; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { home.packages = with pkgs; [ tea # So you don't have to see some teas, I guess. hut # So you don't have to see Sourcehut's brutalist design, I guess. ]; # My Git credentials. programs.git = { enable = true; package = pkgs.gitFull; lfs.enable = true; signing.key = "4AA9CDFF7C99DFF9"; extraConfig = { core.excludesFile = ../../config/git/ignore; user = { name = config.accounts.email.accounts.personal.realName; email = config.accounts.email.accounts.personal.address; }; alias = { unstage = "reset HEAD --"; quick-rebase = "rebase --interactive --autostash --committer-date-is-author-date"; quick-clone = "clone --depth=1 --recurse-submodules --shallow-submodules"; }; init.defaultBranch = "main"; # Shorthand for popular forges ala-Nix flake URL inputs. It's just a fun # little part of the config. url = { "https://github.com/".insteadOf = [ "gh:" "github:" ]; "https://gitlab.com/".insteadOf = [ "gl:" "gitlab:" ]; "https://gitlab.gnome.org/".insteadOf = [ "gnome:" ]; "https://invent.kde.org/".insteadOf = [ "kde:" ]; "https://git.sr.ht/".insteadOf = [ "sh:" "sourcehut:" ]; "https://git.savannah.nongnu.org/git/".insteadOf = [ "sv:" "savannah:" ]; }; pull.rebase = "interactive"; status = { showPatch = true; showStash = true; }; submodule.fetchJobs = 0; }; }; # So you don't have to use GitHub, I guess. programs.gh = { enable = true; extensions = with pkgs; [ gh-eco gh-dash gh-actions-cache ]; settings = { git_protocol = "ssh"; prompt = "enabled"; aliases = { pc = "pr checkout"; pv = "pr view"; }; }; }; } (lib.mkIf cfg.instaweb.enable { state.ports.git-instaweb.value = 15432; home.packages = with pkgs; [ lighttpd ]; programs.git.extraConfig.instaweb = { local = true; httpd = "lighttpd"; port = config.state.ports.git-instaweb.value; }; users.foo-dogsquared.programs.custom-homepage.sections.quicklinks.links = lib.mkBefore (lib.singleton { text = "Current git repo"; url = "http://localhost:${builtins.toString config.state.ports.git-instaweb.value}"; }); }) ]); }