summaryrefslogtreecommitdiff
path: root/users/root.nix
blob: e8054b256234744ee280dec306d5eb530b1c5c8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{ flake, home-manager, lib, config, hostName, userName, pkgs, ... }:
let
  haveGKleen = flake.nixosModules.accounts ? "gkleen@${hostName}";
  homeManagerRelease = lib.importJSON (home-manager + /release.json);
in {
  imports = with flake.nixosModules.userProfiles.${userName}; [
    direnv utils
  ];

  users.users.${userName} = lib.mkIf haveGKleen {
    inherit (config.users.users."gkleen") hashedPassword shell;
    openssh.authorizedKeys.keyFiles = config.users.users."gkleen".openssh.authorizedKeys.keyFiles;
  };

  home-manager.users.${userName} = { config, ... }: lib.foldr lib.recursiveUpdate {} ([
    {
      programs = {
        git.enable = true;

        ssh.enable = true;

        gpg.enable = true;
      };

      services = {
        gpg-agent = {
          enable = true;
          enableSshSupport = true;
          extraConfig = ''
            pinentry-program ${pkgs.pinentry-curses}/bin/pinentry
            grab
          '';
        };
      };
    }
  ] ++ (lib.optional (lib.versionAtLeast homeManagerRelease.release "25.11") {
    programs = {
      git.settings = {
        user = {
          email = "gkleen@yggdrasil.li";
          name = "Gregor Kleen";
        };
        core.excludesfile = toString ./gitignore;
        pull.rebase = true;
        submodule.recurse = true;
        init.defaultBranch = "main";
        column.ui = "auto";
        branch.sort = "-committerdate";
        tag.sort = "version:refname";
        diff = {
          algorithm = "histogram";
          colorMoved = "plain";
          mnemonicPrefix = true;
          renames = true;
        };
        push = {
          default = "simple";
          autoSetupRemote = true;
          followTags = true;
        };
        fetch = {
          prune = true;
          pruneTags = true;
          all = true;
        };
        rerere = {
          enabled = true;
          autoupdate = true;
        };
        rebase = {
          autoSquash = true;
          autoStash = true;
          updateRefs = true;
        };
        merge.conflictstyle = "zdiff3";
      };
      delta = {
        enable = true;
        enableGitIntegration = true;
      };
      ssh = {
        enableDefaultConfig = false;
        matchBlocks."*" = {
          forwardAgent = false;
          addKeysToAgent = "no";
          compression = false;
          userKnownHostsFile = "~/.ssh/known_hosts";

          # controlMaster = "auto";
          # controlPersist = "30m";
          # controlPath = "~/.ssh/master-%r@%n:%p";

          serverAliveInterval = 6;
          serverAliveCountMax = 10;
          hashKnownHosts = true;
          identitiesOnly = true;
        };
      };
    };
  }));
}