mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
Tested with rebased https://github.com/nix-community/home-manager/pull/6411 so I could find all instances of config usage in docs. Signed-off-by: Austin Horstman <khaneliman12@gmail.com> Co-authored-by: Robert Helgesson <robert@rycee.net>
127 lines
3.6 KiB
Nix
127 lines
3.6 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib) mkIf mkOption types;
|
|
|
|
cfg = config.programs.keychain;
|
|
|
|
flags =
|
|
cfg.extraFlags
|
|
++ lib.optional (cfg.agents != [ ]) "--agents ${lib.concatStringsSep "," cfg.agents}"
|
|
++ lib.optional (cfg.inheritType != null) "--inherit ${cfg.inheritType}";
|
|
|
|
shellCommand = "${cfg.package}/bin/keychain --eval ${lib.concatStringsSep " " flags} ${lib.concatStringsSep " " cfg.keys}";
|
|
|
|
in
|
|
{
|
|
meta.maintainers = [ ];
|
|
|
|
options.programs.keychain = {
|
|
enable = lib.mkEnableOption "keychain";
|
|
|
|
package = lib.mkPackageOption pkgs "keychain" { };
|
|
|
|
keys = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ "id_rsa" ];
|
|
description = ''
|
|
Keys to add to keychain.
|
|
'';
|
|
};
|
|
|
|
agents = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
description = ''
|
|
Agents to add.
|
|
'';
|
|
};
|
|
|
|
inheritType = mkOption {
|
|
type = types.nullOr (
|
|
types.enum [
|
|
"local"
|
|
"any"
|
|
"local-once"
|
|
"any-once"
|
|
]
|
|
);
|
|
default = null;
|
|
description = ''
|
|
Inherit type to attempt from agent variables from the environment.
|
|
'';
|
|
};
|
|
|
|
extraFlags = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ "--quiet" ];
|
|
description = ''
|
|
Extra flags to pass to keychain.
|
|
'';
|
|
};
|
|
|
|
enableBashIntegration = lib.hm.shell.mkBashIntegrationOption { inherit config; };
|
|
|
|
enableFishIntegration = lib.hm.shell.mkFishIntegrationOption { inherit config; };
|
|
|
|
enableNushellIntegration = lib.hm.shell.mkNushellIntegrationOption { inherit config; };
|
|
|
|
enableZshIntegration = lib.hm.shell.mkZshIntegrationOption { inherit config; };
|
|
|
|
enableXsessionIntegration = mkOption {
|
|
default = true;
|
|
type = types.bool;
|
|
description = ''
|
|
Whether to run keychain from your {file}`~/.xsession`.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable (
|
|
lib.mkMerge [
|
|
(lib.mkIf ((lib.versionAtLeast cfg.package.version "2.9.0") && cfg.agents != [ ]) {
|
|
warnings = [
|
|
''
|
|
Option `programs.keychain.agents` is deprecated and will be removed in the future.
|
|
Please avoid using it.
|
|
See https://github.com/funtoo/keychain/releases/tag/2.9.0 for more information
|
|
''
|
|
];
|
|
})
|
|
(lib.mkIf ((lib.versionAtLeast cfg.package.version "2.9.0") && cfg.inheritType != null) {
|
|
warnings = [
|
|
''
|
|
Option `programs.keychain.inheritType` is deprecated and will be removed in the future.
|
|
Please avoid using it.
|
|
See https://github.com/funtoo/keychain/releases/tag/2.9.0 for more information
|
|
''
|
|
];
|
|
})
|
|
{
|
|
home.packages = [ cfg.package ];
|
|
programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
|
|
eval "$(SHELL=bash ${shellCommand})"
|
|
'';
|
|
programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration ''
|
|
SHELL=fish eval (${shellCommand})
|
|
'';
|
|
programs.zsh.initContent = mkIf cfg.enableZshIntegration ''
|
|
eval "$(SHELL=zsh ${shellCommand})"
|
|
'';
|
|
programs.nushell.extraConfig = mkIf cfg.enableNushellIntegration ''
|
|
let keychain_shell_command = (SHELL=bash ${shellCommand}| parse -r '(\w+)=(.*); export \1' | transpose -ird)
|
|
if not ($keychain_shell_command|is-empty) {
|
|
$keychain_shell_command | load-env
|
|
}
|
|
'';
|
|
xsession.initExtra = mkIf cfg.enableXsessionIntegration ''
|
|
eval "$(SHELL=bash ${shellCommand})"
|
|
'';
|
|
}
|
|
]
|
|
);
|
|
}
|