aboutsummaryrefslogtreecommitdiffstats
path: root/modules/programs/ssh
diff options
context:
space:
mode:
Diffstat (limited to 'modules/programs/ssh')
-rw-r--r--modules/programs/ssh/default.nix9
-rw-r--r--modules/programs/ssh/git.nix52
2 files changed, 54 insertions, 7 deletions
diff --git a/modules/programs/ssh/default.nix b/modules/programs/ssh/default.nix
index 4b47256..7e8752a 100644
--- a/modules/programs/ssh/default.nix
+++ b/modules/programs/ssh/default.nix
@@ -7,6 +7,8 @@
# OpenSSH - Secure shell (SSH) client for encrypted remote connections
{
+ imports = [ ./git.nix ];
+
config = lib.mkIf config.programs.ssh.enable {
programs.ssh = {
package = pkgs.openssh;
@@ -19,13 +21,6 @@
VisualHostKey = "yes";
HashKnownHosts = "yes";
};
- settings = {
- "github.com" = {
- hostname = "github.com";
- user = "git";
- identityFile = "${config.home.homeDirectory}/.ssh/github";
- };
- };
};
};
}
diff --git a/modules/programs/ssh/git.nix b/modules/programs/ssh/git.nix
new file mode 100644
index 0000000..de4fb40
--- /dev/null
+++ b/modules/programs/ssh/git.nix
@@ -0,0 +1,52 @@
+{ config, lib, ... }:
+
+let
+ homeDir = config.home.homeDirectory;
+ keyDir = "${homeDir}/.local/share/ssh/git";
+
+ hosts = [
+ {
+ domain = "github.com";
+ identityName = "github";
+ }
+ {
+ domain = "gitlab.com";
+ identityName = "gitlab";
+ }
+ {
+ domain = "bitbucket.org";
+ identityName = "bitbucket";
+ }
+ {
+ domain = "codeberg.org";
+ identityName = "codeberg";
+ }
+ {
+ domain = "git.sr.ht";
+ identityName = "sourcehut";
+ }
+ ];
+
+ mkGitHost =
+ { domain, identityName }:
+ lib.nameValuePair domain {
+ hostname = domain;
+ user = "git";
+ identityFile = "${keyDir}/${identityName}";
+ };
+
+ mkKeyFile =
+ { identityName, ... }:
+ lib.nameValuePair identityName {
+ enable = true;
+ text = "";
+ force = false;
+ };
+in
+{
+ config = lib.mkIf (config.programs.ssh.enable && config.programs.git.useSSH) {
+ home.file = builtins.listToAttrs (map mkKeyFile hosts);
+
+ programs.ssh.settings = builtins.listToAttrs (map mkGitHost hosts);
+ };
+}