mirror of
https://github.com/nix-community/home-manager
synced 2024-12-30 13:49:47 +01:00
9f9e277b60
These (and the `*MD` functions apart from `literalMD`) are now no-ops in nixpkgs and serve no purpose other than to add additional noise and potentially mislead people into thinking unmarked DocBook documentation will still be accepted. Note that if backporting changes including documentation to 23.05, the `mdDoc` calls will need to be re-added. To reproduce this commit, run: $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \ nix shell nixpkgs#coreutils \ -c find . -name '*.nix' \ -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \ --strip {} + $ ./format
144 lines
4 KiB
Nix
144 lines
4 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.programs.starship;
|
|
|
|
tomlFormat = pkgs.formats.toml { };
|
|
|
|
starshipCmd = "${config.home.profileDirectory}/bin/starship";
|
|
|
|
in {
|
|
meta.maintainers = [ ];
|
|
|
|
options.programs.starship = {
|
|
enable = mkEnableOption "starship";
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.starship;
|
|
defaultText = literalExpression "pkgs.starship";
|
|
description = "The package to use for the starship binary.";
|
|
};
|
|
|
|
settings = mkOption {
|
|
type = with types;
|
|
let
|
|
prim = either bool (either int str);
|
|
primOrPrimAttrs = either prim (attrsOf prim);
|
|
entry = either prim (listOf primOrPrimAttrs);
|
|
entryOrAttrsOf = t: either entry (attrsOf t);
|
|
entries = entryOrAttrsOf (entryOrAttrsOf entry);
|
|
in attrsOf entries // { description = "Starship configuration"; };
|
|
default = { };
|
|
example = literalExpression ''
|
|
{
|
|
add_newline = false;
|
|
format = lib.concatStrings [
|
|
"$line_break"
|
|
"$package"
|
|
"$line_break"
|
|
"$character"
|
|
];
|
|
scan_timeout = 10;
|
|
character = {
|
|
success_symbol = "➜";
|
|
error_symbol = "➜";
|
|
};
|
|
}
|
|
'';
|
|
description = ''
|
|
Configuration written to
|
|
{file}`$XDG_CONFIG_HOME/starship.toml`.
|
|
|
|
See <https://starship.rs/config/> for the full list
|
|
of options.
|
|
'';
|
|
};
|
|
|
|
enableBashIntegration = mkEnableOption "Bash integration" // {
|
|
default = true;
|
|
};
|
|
|
|
enableZshIntegration = mkEnableOption "Zsh integration" // {
|
|
default = true;
|
|
};
|
|
|
|
enableFishIntegration = mkEnableOption "Fish integration" // {
|
|
default = true;
|
|
};
|
|
|
|
enableIonIntegration = mkEnableOption "Ion integration" // {
|
|
default = true;
|
|
};
|
|
|
|
enableNushellIntegration = mkEnableOption "Nushell integration" // {
|
|
default = true;
|
|
};
|
|
|
|
enableTransience = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
The TransientPrompt feature of Starship replaces previous prompts with a
|
|
custom string. This is only a valid option for the Fish shell.
|
|
|
|
For documentation on how to change the default replacement string and
|
|
for more information visit
|
|
https://starship.rs/advanced-config/#transientprompt-and-transientrightprompt-in-cmd
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
home.packages = [ cfg.package ];
|
|
|
|
xdg.configFile."starship.toml" = mkIf (cfg.settings != { }) {
|
|
source = tomlFormat.generate "starship-config" cfg.settings;
|
|
};
|
|
|
|
programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
|
|
if [[ $TERM != "dumb" ]]; then
|
|
eval "$(${starshipCmd} init bash --print-full-init)"
|
|
fi
|
|
'';
|
|
|
|
programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
|
|
if [[ $TERM != "dumb" ]]; then
|
|
eval "$(${starshipCmd} init zsh)"
|
|
fi
|
|
'';
|
|
|
|
programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration ''
|
|
if test "$TERM" != "dumb"
|
|
eval (${starshipCmd} init fish)
|
|
${lib.optionalString cfg.enableTransience "enable_transience"}
|
|
end
|
|
'';
|
|
|
|
programs.ion.initExtra = mkIf cfg.enableIonIntegration ''
|
|
if test $TERM != "dumb"
|
|
eval $(${starshipCmd} init ion)
|
|
end
|
|
'';
|
|
|
|
programs.nushell = mkIf cfg.enableNushellIntegration {
|
|
# Unfortunately nushell doesn't allow conditionally sourcing nor
|
|
# conditionally setting (global) environment variables, which is why the
|
|
# check for terminal compatibility (as seen above for the other shells) is
|
|
# not done here.
|
|
extraEnv = ''
|
|
let starship_cache = "${config.xdg.cacheHome}/starship"
|
|
if not ($starship_cache | path exists) {
|
|
mkdir $starship_cache
|
|
}
|
|
${starshipCmd} init nu | save --force ${config.xdg.cacheHome}/starship/init.nu
|
|
'';
|
|
extraConfig = ''
|
|
source ${config.xdg.cacheHome}/starship/init.nu
|
|
'';
|
|
};
|
|
};
|
|
}
|