1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-11-27 21:49:48 +01:00
home-manager/modules/programs/keychain.nix

130 lines
3.2 KiB
Nix
Raw Normal View History

2019-02-08 05:21:54 +01:00
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.keychain;
2020-02-02 00:39:17 +01:00
flags = cfg.extraFlags ++ optional (cfg.agents != [ ])
"--agents ${concatStringsSep "," cfg.agents}"
2019-02-08 05:21:54 +01:00
++ optional (cfg.inheritType != null) "--inherit ${cfg.inheritType}";
2020-02-02 00:39:17 +01:00
shellCommand =
"${cfg.package}/bin/keychain --eval ${concatStringsSep " " flags} ${
concatStringsSep " " cfg.keys
}";
2019-02-08 05:21:54 +01:00
2020-02-02 00:39:17 +01:00
in {
meta.maintainers = [ ];
2019-02-08 05:21:54 +01:00
options.programs.keychain = {
enable = mkEnableOption "keychain";
2019-02-08 05:21:54 +01:00
package = mkOption {
type = types.package;
default = pkgs.keychain;
defaultText = literalExpression "pkgs.keychain";
description = ''
2019-02-08 05:21:54 +01:00
Keychain package to install.
'';
};
keys = mkOption {
type = types.listOf types.str;
default = [ "id_rsa" ];
description = ''
2019-02-08 05:21:54 +01:00
Keys to add to keychain.
'';
};
agents = mkOption {
type = types.listOf types.str;
2020-02-02 00:39:17 +01:00
default = [ ];
description = ''
2019-02-08 05:21:54 +01:00
Agents to add.
'';
};
inheritType = mkOption {
2020-02-02 00:39:17 +01:00
type =
types.nullOr (types.enum [ "local" "any" "local-once" "any-once" ]);
2019-02-08 05:21:54 +01:00
default = null;
description = ''
2019-02-08 05:21:54 +01:00
Inherit type to attempt from agent variables from the environment.
'';
};
extraFlags = mkOption {
type = types.listOf types.str;
default = [ "--quiet" ];
description = ''
2019-02-08 05:21:54 +01:00
Extra flags to pass to keychain.
'';
};
enableBashIntegration = mkOption {
default = true;
type = types.bool;
description = ''
2019-02-08 05:21:54 +01:00
Whether to enable Bash integration.
'';
};
enableFishIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Fish integration.
'';
};
2019-02-08 05:21:54 +01:00
enableZshIntegration = mkOption {
default = true;
type = types.bool;
description = ''
2019-02-08 05:21:54 +01:00
Whether to enable Zsh integration.
'';
};
2019-12-28 17:14:03 +01:00
2023-02-13 19:49:31 +01:00
enableNushellIntegration = mkOption {
default = true;
type = types.bool;
description = ''
2023-02-13 19:49:31 +01:00
Whether to enable Nushell integration.
'';
};
2019-12-28 17:14:03 +01:00
enableXsessionIntegration = mkOption {
default = true;
type = types.bool;
visible = pkgs.stdenv.hostPlatform.isLinux;
description = ''
Whether to run keychain from your {file}`~/.xsession`.
2019-12-28 17:14:03 +01:00
'';
};
2019-02-08 05:21:54 +01:00
};
config = mkIf cfg.enable {
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.initExtra = mkIf cfg.enableZshIntegration ''
eval "$(SHELL=zsh ${shellCommand})"
'';
2023-02-13 19:49:31 +01:00
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
}
2023-02-13 19:49:31 +01:00
'';
2019-12-28 17:14:03 +01:00
xsession.initExtra = mkIf cfg.enableXsessionIntegration ''
eval "$(SHELL=bash ${shellCommand})"
2019-12-28 17:14:03 +01:00
'';
2019-02-08 05:21:54 +01:00
};
}