modules/programs/bash: move prompt plugins into separate modules

Changed files
+65 -39
nixos
+2
nixos/modules/module-list.nix
···
./programs/autojump.nix
./programs/bandwhich.nix
./programs/bash/bash.nix
+
./programs/bash/bash-completion.nix
+
./programs/bash/ls-colors.nix
./programs/bash-my-aws.nix
./programs/bcc.nix
./programs/browserpass.nix
+37
nixos/modules/programs/bash/bash-completion.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
enable = config.programs.bash.enableCompletion;
+
in
+
{
+
options = {
+
programs.bash.enableCompletion = mkEnableOption "Bash completion for all interactive bash shells" // {
+
default = true;
+
};
+
};
+
+
config = mkIf enable {
+
programs.bash.promptPluginInit = ''
+
# Check whether we're running a version of Bash that has support for
+
# programmable completion. If we do, enable all modules installed in
+
# the system and user profile in obsolete /etc/bash_completion.d/
+
# directories. Bash loads completions in all
+
# $XDG_DATA_DIRS/bash-completion/completions/
+
# on demand, so they do not need to be sourced here.
+
if shopt -q progcomp &>/dev/null; then
+
. "${pkgs.bash-completion}/etc/profile.d/bash_completion.sh"
+
nullglobStatus=$(shopt -p nullglob)
+
shopt -s nullglob
+
for p in $NIX_PROFILES; do
+
for m in "$p/etc/bash_completion.d/"*; do
+
. $m
+
done
+
done
+
eval "$nullglobStatus"
+
unset nullglobStatus p m
+
fi
+
'';
+
};
+
}
+6 -39
nixos/modules/programs/bash/bash.nix
···
cfg = config.programs.bash;
-
bashCompletion = optionalString cfg.enableCompletion ''
-
# Check whether we're running a version of Bash that has support for
-
# programmable completion. If we do, enable all modules installed in
-
# the system and user profile in obsolete /etc/bash_completion.d/
-
# directories. Bash loads completions in all
-
# $XDG_DATA_DIRS/bash-completion/completions/
-
# on demand, so they do not need to be sourced here.
-
if shopt -q progcomp &>/dev/null; then
-
. "${pkgs.bash-completion}/etc/profile.d/bash_completion.sh"
-
nullglobStatus=$(shopt -p nullglob)
-
shopt -s nullglob
-
for p in $NIX_PROFILES; do
-
for m in "$p/etc/bash_completion.d/"*; do
-
. $m
-
done
-
done
-
eval "$nullglobStatus"
-
unset nullglobStatus p m
-
fi
-
'';
-
-
lsColors = optionalString cfg.enableLsColors ''
-
eval "$(${pkgs.coreutils}/bin/dircolors -b)"
-
'';
-
bashAliases = concatStringsSep "\n" (
mapAttrsFlatten (k: v: "alias ${k}=${escapeShellArg v}")
(filterAttrs (k: v: v != null) cfg.shellAliases)
···
type = types.lines;
};
-
enableCompletion = mkOption {
-
default = true;
+
promptPluginInit = mkOption {
+
default = "";
description = ''
-
Enable Bash completion for all interactive bash shells.
+
Shell script code used to initialise bash prompt plugins.
'';
-
type = types.bool;
-
};
-
-
enableLsColors = mkOption {
-
default = true;
-
description = ''
-
Enable extra colors in directory listings.
-
'';
-
type = types.bool;
+
type = types.lines;
+
internal = true;
};
};
···
set +h
${cfg.promptInit}
-
${bashCompletion}
-
${lsColors}
+
${cfg.promptPluginInit}
${bashAliases}
${cfge.interactiveShellInit}
+20
nixos/modules/programs/bash/ls-colors.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
enable = config.programs.bash.enableLsColors;
+
in
+
{
+
options = {
+
programs.bash.enableLsColors = mkEnableOption "extra colors in directory listings" // {
+
default = true;
+
};
+
};
+
+
config = mkIf enable {
+
programs.bash.promptPluginInit = ''
+
eval "$(${pkgs.coreutils}/bin/dircolors -b)"
+
'';
+
};
+
}