mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
49 lines
1.5 KiB
Nix
49 lines
1.5 KiB
Nix
{ lib }:
|
|
|
|
let
|
|
|
|
mkShellIntegrationOption =
|
|
name:
|
|
{
|
|
config,
|
|
baseName ? name,
|
|
extraDescription ? "",
|
|
}:
|
|
let
|
|
attrName = "enable${baseName}Integration";
|
|
in
|
|
lib.mkOption {
|
|
default = config.home.shell.${attrName};
|
|
defaultText = lib.literalMD "[](#opt-home.shell.${attrName})";
|
|
example = false;
|
|
description = "Whether to enable ${name} integration.${
|
|
lib.optionalString (extraDescription != "") ("\n\n" + extraDescription)
|
|
}";
|
|
type = lib.types.bool;
|
|
};
|
|
|
|
in
|
|
rec {
|
|
# Produces a Bourne shell like statement that prepend new values to
|
|
# an possibly existing variable, using sep(arator).
|
|
# Example:
|
|
# prependToVar ":" "PATH" [ "$HOME/bin" "$HOME/.local/bin" ]
|
|
# => "$HOME/bin:$HOME/.local/bin:${PATH:+:}\$PATH"
|
|
prependToVar =
|
|
sep: n: v:
|
|
"${lib.concatStringsSep sep v}\${${n}:+${sep}}\$${n}";
|
|
|
|
# Produces a Bourne shell like variable export statement.
|
|
export = n: v: ''export ${n}="${toString v}"'';
|
|
|
|
# Given an attribute set containing shell variable names and their
|
|
# assignment, this function produces a string containing an export
|
|
# statement for each set entry.
|
|
exportAll = vars: lib.concatStringsSep "\n" (lib.mapAttrsToList export vars);
|
|
|
|
mkBashIntegrationOption = mkShellIntegrationOption "Bash";
|
|
mkFishIntegrationOption = mkShellIntegrationOption "Fish";
|
|
mkIonIntegrationOption = mkShellIntegrationOption "Ion";
|
|
mkNushellIntegrationOption = mkShellIntegrationOption "Nushell";
|
|
mkZshIntegrationOption = mkShellIntegrationOption "Zsh";
|
|
}
|