From ca61775d84dc047981eae40f52c7fc0f3fac0afa Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 13 Nov 2023 14:07:25 +0100 Subject: [PATCH] added starship prompt --- modules/desktop/default.nix | 42 ++++++++++++++- modules/terminal.nix | 1 - modules/zellij.nix | 2 +- other/config.nu | 16 ++++-- other/env.nu | 83 +++++++++++++++++++++++++++++ other/scripts/networkhooks/ccchh.nu | 2 +- 6 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 other/env.nu diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 734c92d..a27ae18 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -61,11 +61,14 @@ in with lib; { enable = mkEnableOption "Enable the i3 setup"; }; config = mkIf cfg.enable { - fonts.fonts = with pkgs; [ + fonts.packages = with pkgs; [ (nerdfonts.override { fonts = [ "FiraCode" ]; }) montserrat noto-fonts atkinson-hyperlegible + arkpandora_ttf + liberation_ttf + ocr-a ]; fonts.fontDir.enable = true; @@ -167,10 +170,47 @@ in with lib; { enable = true; package = config.users.defaultUserShell; configFile.source = ../../other/config.nu; + # envFile.text = '' + # use ~/.cache/starship/init.nu + # ''; + envFile.source = ../../other/env.nu; extraConfig = '' source ${pkgs.nu_scripts}/share/nu_scripts/modules/nix/nix.nu; ''; }; + programs.starship = { + enable = true; + enableNushellIntegration = true; + settings = { + format = "$all$directory$character"; + character = { + success_symbol = "[\\$](green)"; + error_symbol = "[X](red)"; + }; + git_branch = { + format = "\\[[$symbol$branch]($style)\\]"; + symbol = " "; + }; + git_status = { + format = "([\\[$all_status$ahead_behind\\]]($style))"; + }; + haskell = { + format = "\\[[$symbol($version)]($style)\\]"; + symbol = " "; + }; + cmd_duration = { + format = "\\[[⏱ $duration]($style)\\]"; + }; + nix_shell = { + format = "\\[[$symbol$state( \\($name\\))]($style)\\]"; + symbol = " "; + }; + rust = { + format = "\\[[$symbol($version)]($style)\\]"; + symbol = " "; + }; + }; + }; services.dunst = { enable = true; settings = { diff --git a/modules/terminal.nix b/modules/terminal.nix index 3973bd0..d75952b 100644 --- a/modules/terminal.nix +++ b/modules/terminal.nix @@ -10,7 +10,6 @@ in with lib; { TERMINAL = "kitty"; }; home-manager.users.jade = { pkgs,... } : { - xsession.windowManager.i3.config.terminal = "kitty"; programs.kitty = { enable = true; font = { diff --git a/modules/zellij.nix b/modules/zellij.nix index 7472324..b4a86ab 100644 --- a/modules/zellij.nix +++ b/modules/zellij.nix @@ -30,7 +30,7 @@ in with lib; { blue = "#3C8588"; magenta = "#B16286"; cyan = "#689D6A"; - white = "#665c54"; + white = "#ebdbb2"; orange = "#D65D0E"; }; # keybinds = { diff --git a/other/config.nu b/other/config.nu index f855892..7158898 100644 --- a/other/config.nu +++ b/other/config.nu @@ -241,7 +241,7 @@ $env.config = { use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: vi # emacs, vi - shell_integration: false # enables terminal shell integration. Off by default, as some terminals have issues with this. + shell_integration: true # enables terminal shell integration. Off by default, as some terminals have issues with this. render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. hooks: { @@ -801,8 +801,18 @@ def start_zellij [] { start_zellij +def nsp [ + program: string +] { + nix shell $"nixpkgs#$program" +} + +def lcr [ + file_extension: string +] { + ls **/*.$file_extension | each {|file| open $file.name | lines --skip-empty | length} | math sum +} + alias gnix = cd ~/nix-configs; alias grepo = cd ~/Documents/repos; alias wh = wormhole-rs; -alias nix-shell = nix-shell --run 'nu -li'; -alias nsp = nix-shell --run 'nu -li' -p; diff --git a/other/env.nu b/other/env.nu new file mode 100644 index 0000000..57878d8 --- /dev/null +++ b/other/env.nu @@ -0,0 +1,83 @@ +# Nushell Environment Config File +# +# version = "0.84.0" + +def create_left_prompt [] { + mut home = "" + try { + if $nu.os-info.name == "windows" { + $home = $env.USERPROFILE + } else { + $home = $env.HOME + } + } + + let dir = ([ + ($env.PWD | str substring 0..($home | str length) | str replace $home "~"), + ($env.PWD | str substring ($home | str length)..) + ] | str join) + + let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold }) + let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold }) + let path_segment = $"($path_color)($dir)" + + $path_segment | str replace --all (char path_sep) $"($separator_color)/($path_color)" +} + +def create_right_prompt [] { + # create a right prompt in magenta with green separators and am/pm underlined + let time_segment = ([ + (ansi reset) + (ansi magenta) + (date now | format date '%Y/%m/%d %r') + ] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" | + str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}") + + let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([ + (ansi rb) + ($env.LAST_EXIT_CODE) + ] | str join) + } else { "" } + + ([$last_exit_code, (char space), $time_segment] | str join) +} + +# Use nushell functions to define your right and left prompt +$env.PROMPT_COMMAND = {|| create_left_prompt } +# $env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } + +# The prompt indicators are environmental variables that represent +# the state of the prompt +$env.PROMPT_INDICATOR = {|| "> " } +$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " } +$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " } +$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " } + +# Specifies how environment variables are: +# - converted from a string to a value on Nushell startup (from_string) +# - converted from a value back to a string when running external commands (to_string) +# Note: The conversions happen *after* config.nu is loaded +$env.ENV_CONVERSIONS = { + "PATH": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } + "Path": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } +} + +# Directories to search for scripts when calling source or use +$env.NU_LIB_DIRS = [ + # ($nu.default-config-dir | path join 'scripts') # add /scripts +] + +# Directories to search for plugin binaries when calling register +$env.NU_PLUGIN_DIRS = [ + # ($nu.default-config-dir | path join 'plugins') # add /plugins +] + +# To add entries to PATH (on Windows you might use Path), you can use the following pattern: +# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path') + diff --git a/other/scripts/networkhooks/ccchh.nu b/other/scripts/networkhooks/ccchh.nu index 30833ae..8c346f9 100644 --- a/other/scripts/networkhooks/ccchh.nu +++ b/other/scripts/networkhooks/ccchh.nu @@ -34,7 +34,7 @@ def rand-color [] { "yellow" ]; - $colors | get (random integer 0..(($colors | length) - 1)) + $colors | get (random int 0..(($colors | length) - 1)) }