mirror of
https://github.com/oddlama/nix-config.git
synced 2025-10-11 07:10:39 +02:00
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 = {
|
programs.starship = {
|
||||||
enable = true;
|
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 = {
|
settings = {
|
||||||
add_newline = false;
|
add_newline = false;
|
||||||
format = lib.concatStrings [
|
format = lib.concatStrings [
|
||||||
|
@ -21,18 +43,18 @@
|
||||||
"($rust )"
|
"($rust )"
|
||||||
"$time"
|
"$time"
|
||||||
];
|
];
|
||||||
|
|
||||||
username = {
|
username = {
|
||||||
format = "[$user]($style) ";
|
format = "[$user]($style) ";
|
||||||
style_root = "red";
|
show_if_root = false;
|
||||||
style_user = "cyan";
|
show_if_ssh = false;
|
||||||
show_always = true;
|
style = "yellow";
|
||||||
};
|
};
|
||||||
hostname = {
|
hostname = {
|
||||||
format = "[$hostname]($style)[$ssh_symbol](green)";
|
format = "[$hostname]($style)[$ssh_symbol](green)";
|
||||||
ssh_only = false;
|
ssh_only = false;
|
||||||
ssh_symbol = " ";
|
ssh_symbol = " ";
|
||||||
style = "cyan";
|
style = "bold purple";
|
||||||
|
user_overrides.root.style = "bold red";
|
||||||
};
|
};
|
||||||
directory = {
|
directory = {
|
||||||
format = "[$path]($style)[$read_only]($read_only_style)";
|
format = "[$path]($style)[$read_only]($read_only_style)";
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
# Needed in path for zsh-histdb
|
||||||
|
home.packages = [pkgs.sqlite];
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
envExtra = ''
|
envExtra = ''
|
||||||
|
@ -15,19 +18,22 @@
|
||||||
size = 1000000;
|
size = 1000000;
|
||||||
};
|
};
|
||||||
initExtra = lib.readFile ./zshrc;
|
initExtra = lib.readFile ./zshrc;
|
||||||
|
initExtraFirst = ''
|
||||||
|
HISTDB_FILE=''${XDG_DATA_HOME-$HOME/.local/share}/zsh/history.db
|
||||||
|
'';
|
||||||
plugins = [
|
plugins = [
|
||||||
{
|
{
|
||||||
# Must be before plugins that wrap widgets, such as zsh-autosuggestions or fast-syntax-highlighting
|
# Must be before plugins that wrap widgets, such as zsh-autosuggestions or fast-syntax-highlighting
|
||||||
name = "fzf-tab";
|
name = "fzf-tab";
|
||||||
src = pkgs.zsh-fzf-tab;
|
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "fast-syntax-highlighting";
|
name = "fast-syntax-highlighting";
|
||||||
src = pkgs.zsh-fast-syntax-highlighting;
|
src = "${pkgs.zsh-fast-syntax-highlighting}/share/zsh/site-functions";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "zsh-autosuggestions";
|
name = "zsh-autosuggestions";
|
||||||
src = pkgs.zsh-autosuggestions;
|
src = "${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "zsh-histdb";
|
name = "zsh-histdb";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue