diff --git a/flake.nix b/flake.nix index e04b091..d709bde 100644 --- a/flake.nix +++ b/flake.nix @@ -58,7 +58,6 @@ host = "laptop"; profile = "desktop"; username = "josh"; - gpgSigningKey = "0x530DA0331EFE99F5"; in nixpkgs.lib.nixosSystem { inherit system; specialArgs = { @@ -66,7 +65,6 @@ inherit host; inherit profile; inherit username; - inherit gpgSigningKey; }; pkgs = pkgs; modules = [ @@ -103,7 +101,6 @@ inherit host; inherit profile; inherit username; - }; pkgs = pkgs; modules = [ diff --git a/homes/josh/home.nix b/homes/josh/home.nix index 6d02b93..9f1bd1e 100644 --- a/homes/josh/home.nix +++ b/homes/josh/home.nix @@ -1,4 +1,6 @@ { + config, + gpgSigningKey, lib, pkgs, profile, @@ -25,6 +27,23 @@ with lib; ]; }; + programs.git = { + enable = true; + settings = { + user = { + name = "Joshua Yuen"; + email = "joshuayuen99@gmail.com"; + # We need to do this to pass through the (optional) signing key from the hosts/* file + signingkey = if gpgSigningKey != "" then gpgSigningKey else config.modules.gpg.signingKey; + }; + commit.gpgsign = true; + init.defaultBranch = "main"; + }; + }; + + # Enable GPG-agent for git signing + modules.gpg.enable = true; + # Let Home Manager install and manage itself programs.home-manager.enable = true; diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix index c82a518..07cd90d 100644 --- a/hosts/laptop/default.nix +++ b/hosts/laptop/default.nix @@ -12,4 +12,6 @@ ./hardware.nix ./host-packages.nix ]; + + modules.gpg.signingKey = "0x530DA0331EFE99F5"; } diff --git a/modules/core/user.nix b/modules/core/user.nix index 51c287c..9b2f932 100644 --- a/modules/core/user.nix +++ b/modules/core/user.nix @@ -24,6 +24,7 @@ in profile username ; + gpgSigningKey = config.modules.gpg.signingKey; }; users.${username} = { imports = [ ../../homes/${username}/home.nix ]; diff --git a/modules/homes/default.nix b/modules/homes/default.nix index 5a420c3..b7cd38f 100644 --- a/modules/homes/default.nix +++ b/modules/homes/default.nix @@ -5,6 +5,7 @@ imports = [ ./direnv.nix ./firefox.nix + ./gpg.nix ./fzf.nix ./hyprland ./kitty.nix diff --git a/modules/homes/gpg.nix b/modules/homes/gpg.nix new file mode 100644 index 0000000..827d898 --- /dev/null +++ b/modules/homes/gpg.nix @@ -0,0 +1,31 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +let + cfg = config.modules.gpg; +in +{ + config = mkIf cfg.enable { + services = { + gpg-agent = { + enable = true; + enableSshSupport = true; + enableBashIntegration = true; + enableZshIntegration = true; + pinentry.package = pkgs.pinentry-qt; + }; + }; + + home.packages = [ pkgs.gnupg ]; + + programs = { + gpg = { + enable = true; + }; + }; + }; +} diff --git a/modules/options/default.nix b/modules/options/default.nix index 0b05101..46acae5 100644 --- a/modules/options/default.nix +++ b/modules/options/default.nix @@ -4,6 +4,7 @@ { imports = [ ./displayManager.nix + ./gpg.nix ./hyprland.nix ./localsend.nix ./pipewire.nix diff --git a/modules/options/gpg.nix b/modules/options/gpg.nix new file mode 100644 index 0000000..85414bb --- /dev/null +++ b/modules/options/gpg.nix @@ -0,0 +1,19 @@ +{ + lib, + ... +}: +with lib; +{ + options.modules.gpg = { + enable = mkEnableOption { + default = false; + description = "Enable gpg-agent"; + }; + + signingKey = mkOption { + type = types.str; + default = ""; + description = "The key ID to sign with for git"; + }; + }; +} \ No newline at end of file