diff --git a/home/felschr-work.nix b/home/felschr-work.nix index 7797956..7a9ad0f 100644 --- a/home/felschr-work.nix +++ b/home/felschr-work.nix @@ -35,9 +35,7 @@ with pkgs; programs.gpg.enable = true; programs.git.custom = { - userName = "Felix Schroeter"; - userEmail = "fs@upsquared.com"; - signingKey = "6DA1 4A05 C6E0 7DBE EB81 BA24 28ED 46BC B881 7B7A"; + defaultProfile = "work"; }; programs.firefox.enable = true; diff --git a/home/felschr.nix b/home/felschr.nix index f9e0a5b..08fb477 100644 --- a/home/felschr.nix +++ b/home/felschr.nix @@ -39,9 +39,7 @@ with pkgs; programs.gpg.enable = true; programs.git.custom = { - userName = "Felix Tenley"; - userEmail = "dev@felschr.com"; - signingKey = "22A6 DD21 EE66 E73D D4B9 3F20 A12D 7C9D 2FD3 4458"; + defaultProfile = "private"; }; home.packages = with pkgs; [ diff --git a/home/git.nix b/home/git.nix index 97c0938..270396d 100644 --- a/home/git.nix +++ b/home/git.nix @@ -3,36 +3,74 @@ with lib; let cfg = config.programs.git.custom; + defaultProfiles = { + private = { + name = "Felix Tenley"; + email = "dev@felschr.com"; + signingKey = "22A6 DD21 EE66 E73D D4B9 3F20 A12D 7C9D 2FD3 4458"; + dirs = [ "/etc/nixos/" ]; + }; + work = { + name = "Felix Schröter"; + email = "fs@upsquared.com"; + signingKey = "6DA1 4A05 C6E0 7DBE EB81 BA24 28ED 46BC B881 7B7A"; + dirs = [ "~/dev/" ]; + }; + }; in { options.programs.git.custom = { - userName = mkOption { - type = types.str; - default = "Felix Tenley"; + profiles = mkOption { + type = types.attrsOf (types.submodule ({ name, config, ... }: { + options = { + name = mkOption { + type = types.str; + }; + email = mkOption { + type = types.str; + }; + signingKey = mkOption { + type = types.str; + }; + dirs = mkOption { + type = types.listOf types.str; + }; + }; + })); + default = defaultProfiles; }; - userEmail = mkOption { + defaultProfile = mkOption { type = types.str; - default = "dev@felschr.com"; - }; - signingKey = mkOption { - type = types.str; + default = "private"; }; }; - config = { + config = let + profiles = cfg.profiles; + in { programs.git = { enable = true; - userName = cfg.userName; - userEmail = cfg.userEmail; + userName = profiles."${cfg.defaultProfile}".name; + userEmail = profiles."${cfg.defaultProfile}".email; ignores = [".direnv"]; signing = { - key = cfg.signingKey; + key = profiles."${cfg.defaultProfile}".signingKey; signByDefault = true; }; extraConfig = { pull = { rebase = true; }; rebase = { autoStash = true; }; }; + includes = flatten (mapAttrsToList (name: profile: map (dir: { + condition = "gitdir:${dir}"; + contents = { + user = { + name = profile.name; + email = profile.email; + signingkey = profile.signingKey; + }; + }; + }) profile.dirs) profiles); }; }; }