forked from mirrors_public/oddlama_nix-config
feat: add starship module that allows 3-nested maps and use my starship patch
This commit is contained in:
parent
bac1f9e07a
commit
365736b42a
3 changed files with 193 additions and 11 deletions
154
users/modules/config/shell/starship-module.nix
Normal file
154
users/modules/config/shell/starship-module.nix
Normal file
|
@ -0,0 +1,154 @@
|
|||
{
|
||||
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 (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
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,6 +1,28 @@
|
|||
{lib, ...}: {
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
disabledModules = ["programs/starship.nix"];
|
||||
imports = [./starship-module.nix];
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
package = let
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "oddlama";
|
||||
repo = "starship";
|
||||
rev = "feat-more-dynamic-username-and-hostname";
|
||||
hash = "sha256-me6GC1NTSEfdTdSbhwbmwMlzIhSmcs1PSUFCWu+2LG0=";
|
||||
};
|
||||
in
|
||||
pkgs.starship.overrideAttrs (_finalAttrs: previousAttrs: {
|
||||
inherit src;
|
||||
cargoDeps = previousAttrs.cargoDeps.overrideAttrs (_: {
|
||||
inherit src;
|
||||
outputHash = "sha256-L4N55ghbPsBrESRK0vHGDSDytFCnib7ghoMKnWFIZvw=";
|
||||
});
|
||||
});
|
||||
settings = {
|
||||
add_newline = false;
|
||||
format = lib.concatStrings [
|
||||
|
@ -21,18 +43,18 @@
|
|||
"($rust )"
|
||||
"$time"
|
||||
];
|
||||
|
||||
username = {
|
||||
format = "[$user]($style)";
|
||||
style_root = "red";
|
||||
style_user = "cyan";
|
||||
show_always = true;
|
||||
format = "[$user]($style) ";
|
||||
show_if_root = false;
|
||||
show_if_ssh = false;
|
||||
style = "yellow";
|
||||
};
|
||||
hostname = {
|
||||
format = "[$hostname]($style)[$ssh_symbol](green)";
|
||||
ssh_only = false;
|
||||
ssh_symbol = "";
|
||||
style = "cyan";
|
||||
ssh_symbol = " ";
|
||||
style = "bold purple";
|
||||
user_overrides.root.style = "bold red";
|
||||
};
|
||||
directory = {
|
||||
format = "[$path]($style)[$read_only]($read_only_style)";
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Needed in path for zsh-histdb
|
||||
home.packages = [pkgs.sqlite];
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
envExtra = ''
|
||||
|
@ -15,19 +18,22 @@
|
|||
size = 1000000;
|
||||
};
|
||||
initExtra = lib.readFile ./zshrc;
|
||||
initExtraFirst = ''
|
||||
HISTDB_FILE=''${XDG_DATA_HOME-$HOME/.local/share}/zsh/history.db
|
||||
'';
|
||||
plugins = [
|
||||
{
|
||||
# Must be before plugins that wrap widgets, such as zsh-autosuggestions or fast-syntax-highlighting
|
||||
name = "fzf-tab";
|
||||
src = pkgs.zsh-fzf-tab;
|
||||
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
|
||||
}
|
||||
{
|
||||
name = "fast-syntax-highlighting";
|
||||
src = pkgs.zsh-fast-syntax-highlighting;
|
||||
src = "${pkgs.zsh-fast-syntax-highlighting}/share/zsh/site-functions";
|
||||
}
|
||||
{
|
||||
name = "zsh-autosuggestions";
|
||||
src = pkgs.zsh-autosuggestions;
|
||||
src = "${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions";
|
||||
}
|
||||
{
|
||||
name = "zsh-histdb";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue