From 6f97a03ae729cd4a17743de90062628003e1b22d Mon Sep 17 00:00:00 2001 From: RGBCube Date: Sat, 12 Jul 2025 16:28:42 +0300 Subject: [PATCH] nushell: remove starship --- modules/common/nushell/config.nu | 82 +++++++++++++++++++++++++++++- modules/common/nushell/default.nix | 50 +----------------- 2 files changed, 82 insertions(+), 50 deletions(-) diff --git a/modules/common/nushell/config.nu b/modules/common/nushell/config.nu index 13f2e6c..ef02e6e 100644 --- a/modules/common/nushell/config.nu +++ b/modules/common/nushell/config.nu @@ -1,7 +1,7 @@ use std-rfc/clip +use std null_device source ~/.config/nushell/zoxide.nu -source ~/.config/nushell/starship.nu # Retrieve the output of the last command. def _ []: nothing -> any { @@ -128,6 +128,86 @@ $env.config.float_precision = 2 $env.LS_COLORS = (open ~/.config/nushell/ls_colors.txt) $env.config.ls.use_ls_colors = true +do --env { + def prompt-header [ + --left-char: string + ]: nothing -> string { + let jj_workspace_root = try { + jj workspace root err> $null_device + } catch { + "" + } + + let body = if ($jj_workspace_root | is-not-empty) { + let subpath = pwd | path relative-to $jj_workspace_root + let subpath = if ($subpath | is-not-empty) { + $"(ansi magenta_bold) → (ansi reset)(ansi blue)($subpath)" + } + + $"(ansi light_yellow_bold)($jj_workspace_root | path basename)($subpath)(ansi reset)" + } else { + let pwd = if (pwd | str starts-with $env.HOME) { + "~" | path join (pwd | path relative-to $env.HOME) + } else { + pwd + } + + $"(ansi cyan)($pwd)(ansi reset)" + } + + $"(ansi light_yellow_bold)($left_char)━━━(ansi reset) ($body)(char newline)" + } + + $env.PROMPT_INDICATOR = $"(ansi light_yellow_bold)┃(ansi reset) " + $env.PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR + $env.PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR + $env.PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR + $env.PROMPT_COMMAND = {|| + prompt-header --left-char "┏" + } + $env.PROMPT_COMMAND_RIGHT = {|| + let jj_status = try { + jj --quiet --color always --ignore-working-copy log --no-graph --revisions @ --template ' + separate( + " ", + if(empty, label("empty", "(empty)")), + coalesce( + surround( + "\"", + "\"", + if( + description.first_line().substr(0, 24).starts_with(description.first_line()), + description.first_line().substr(0, 24), + description.first_line().substr(0, 23) ++ "…" + ) + ), + label(if(empty, "empty"), description_placeholder) + ), + bookmarks.join(", "), + change_id.shortest(), + commit_id.shortest(), + if(conflict, label("conflict", "(conflict)")), + if(divergent, label("divergent prefix", "(divergent)")), + if(hidden, label("hidden prefix", "(hidden)")), + ) + ' err> $null_device + } catch { + "" + } + + $jj_status + } + + $env.TRANSIENT_PROMPT_INDICATOR = " " + $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = $env.TRANSIENT_PROMPT_INDICATOR + $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = $env.TRANSIENT_PROMPT_INDICATOR + $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = $env.TRANSIENT_PROMPT_INDICATOR + $env.TRANSIENT_PROMPT_COMMAND = {|| + prompt-header --left-char "━" + } + $env.TRANSIENT_PROMPT_COMMAND_RIGHT = $env.PROMPT_COMMAND_RIGHT +} + $env.config.hooks.pre_prompt = [] $env.config.hooks.pre_execution = [ diff --git a/modules/common/nushell/default.nix b/modules/common/nushell/default.nix index d4a9419..a010db5 100644 --- a/modules/common/nushell/default.nix +++ b/modules/common/nushell/default.nix @@ -1,5 +1,5 @@ { config, lib, pkgs, ... }: let - inherit (lib) attrValues const enabled getExe mapAttrs mkIf optionalAttrs readFile removeAttrs replaceString; + inherit (lib) attrValues const disabled enabled getExe mapAttrs mkIf optionalAttrs readFile removeAttrs replaceString; in { environment = optionalAttrs config.isLinux { sessionVariables.SHELLS = getExe pkgs.nushell; @@ -26,31 +26,8 @@ in { zoxide # For completions and better cd. ; }; - - variables.STARSHIP_LOG = "error"; }; - nixpkgs.overlays = [(self: super: { - starship = super.starship.overrideAttrs (old: { - src = self.fetchFromGitHub { - owner = "poliorcetics"; - repo = "starship"; - rev = "92aba18381994599850053ba667c25017566b8ee"; - hash = "sha256-FKDvkDcxUPDLcjFQzvqsGXeJUm0Dq8TcA4edf5OkdWo="; - }; - - cargoDeps = self.rustPlatform.fetchCargoVendor { - inherit (self.starship) src; - hash = "sha256-nH1iYjKw/GbYKadoymH3onWBbMzuMUaRCSTNWVE+A9E="; - }; - - nativeBuildInputs = old.nativeBuildInputs ++ [ - pkgs.cmake - pkgs.zlib-ng - ]; - }); - })]; - home-manager.sharedModules = [(homeArgs: let homeConfig = homeArgs.config; in { @@ -62,31 +39,6 @@ in { "nushell/ls_colors.txt".source = pkgs.runCommand "ls_colors.txt" {} '' ${getExe pkgs.vivid} generate gruvbox-dark-hard > $out ''; - - "nushell/starship.nu".source = pkgs.runCommand "starship.nu" {} '' - ${getExe pkgs.starship} init nu > $out - ''; - }; - - programs.starship = enabled { - # No because we are doing it at build time instead of the way - # this retarded module does it. Why the hell do you generate - # the config every time the shell is launched? - enableNushellIntegration = false; - - settings = { - vcs.disabled = false; - - command_timeout = 100; - scan_timeout = 20; - - cmd_duration.show_notifications = config.isDesktop; - - package.disabled = config.isServer; - - character.error_symbol = ""; - character.success_symbol = ""; - }; }; programs.direnv = enabled {