From 87a9a522835e441bb34fe65b7740b70c6a00d740 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Wed, 29 May 2024 20:09:39 +0200 Subject: [PATCH] Update fish configuration and Starship prompt --- fish/completions/exercism.fish | 54 +++++ fish/completions/fnm.fish | 169 -------------- fish/completions/fzf_configure_bindings.fish | 8 + fish/conf.d/fnm.fish | 3 - fish/conf.d/fzf.fish | 28 +++ fish/conf.d/rustup.fish | 1 + fish/config.fish | 10 + fish/fish_plugins | 1 + fish/fish_variables | 5 +- .../_fzf_configure_bindings_help.fish | 43 ++++ fish/functions/_fzf_extract_var_info.fish | 15 ++ fish/functions/_fzf_preview_changed_file.fish | 49 +++++ fish/functions/_fzf_preview_file.fish | 43 ++++ fish/functions/_fzf_report_diff_type.fish | 18 ++ fish/functions/_fzf_report_file_type.fish | 6 + fish/functions/_fzf_search_directory.fish | 33 +++ fish/functions/_fzf_search_git_log.fish | 36 +++ fish/functions/_fzf_search_git_status.fish | 41 ++++ fish/functions/_fzf_search_history.fish | 39 ++++ fish/functions/_fzf_search_processes.fish | 32 +++ fish/functions/_fzf_search_variables.fish | 47 ++++ fish/functions/_fzf_wrapper.fish | 21 ++ fish/functions/fzf_configure_bindings.fish | 46 ++++ starship.toml | 206 ++++++++++-------- starship.toml.bak | 146 +++++++++++++ starship.toml.gruvbox | 167 ++++++++++++++ 26 files changed, 1000 insertions(+), 267 deletions(-) create mode 100644 fish/completions/exercism.fish delete mode 100644 fish/completions/fnm.fish create mode 100644 fish/completions/fzf_configure_bindings.fish delete mode 100644 fish/conf.d/fnm.fish create mode 100644 fish/conf.d/fzf.fish create mode 100644 fish/conf.d/rustup.fish create mode 100644 fish/functions/_fzf_configure_bindings_help.fish create mode 100644 fish/functions/_fzf_extract_var_info.fish create mode 100644 fish/functions/_fzf_preview_changed_file.fish create mode 100644 fish/functions/_fzf_preview_file.fish create mode 100644 fish/functions/_fzf_report_diff_type.fish create mode 100644 fish/functions/_fzf_report_file_type.fish create mode 100644 fish/functions/_fzf_search_directory.fish create mode 100644 fish/functions/_fzf_search_git_log.fish create mode 100644 fish/functions/_fzf_search_git_status.fish create mode 100644 fish/functions/_fzf_search_history.fish create mode 100644 fish/functions/_fzf_search_processes.fish create mode 100644 fish/functions/_fzf_search_variables.fish create mode 100644 fish/functions/_fzf_wrapper.fish create mode 100644 fish/functions/fzf_configure_bindings.fish create mode 100644 starship.toml.bak create mode 100644 starship.toml.gruvbox diff --git a/fish/completions/exercism.fish b/fish/completions/exercism.fish new file mode 100644 index 0000000..dc20fdc --- /dev/null +++ b/fish/completions/exercism.fish @@ -0,0 +1,54 @@ +# Configure +complete -f -c exercism -n "__fish_use_subcommand" -a "configure" -d "Writes config values to a JSON file." +complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s t -l token -d "Set token" +complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s w -l workspace -d "Set workspace" +complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s a -l api -d "set API base url" +complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s s -l show -d "show settings" + +# Download +complete -f -c exercism -n "__fish_use_subcommand" -a "download" -d "Downloads and saves a specified submission into the local system" +complete -f -c exercism -n "__fish_seen_subcommand_from download" -s e -l exercise -d "the exercise slug" +complete -f -c exercism -n "__fish_seen_subcommand_from download" -s h -l help -d "help for download" +complete -f -c exercism -n "__fish_seen_subcommand_from download" -s T -l team -d "the team slug" +complete -f -c exercism -n "__fish_seen_subcommand_from download" -s t -l track -d "the track ID" +complete -f -c exercism -n "__fish_seen_subcommand_from download" -s u -l uuid -d "the solution UUID" + +# Help +complete -f -c exercism -n "__fish_use_subcommand" -a "help" -d "Shows a list of commands or help for one command" +complete -f -c exercism -n "__fish_seen_subcommand_from help" -a "configure download help open submit troubleshoot upgrade version workspace" + +# Open +complete -f -c exercism -n "__fish_use_subcommand" -a "open" -d "Opens a browser to exercism.io for the specified submission." +complete -f -c exercism -n "__fish_seen_subcommand_from open" -s h -l help -d "help for open" + +# Submit +complete -f -c exercism -n "__fish_use_subcommand" -a "submit" -d "Submits a new iteration to a problem on exercism.io." +complete -f -c exercism -n "__fish_seen_subcommand_from submit" -s h -l help -d "help for submit" + +# Troubleshoot +complete -f -c exercism -n "__fish_use_subcommand" -a "troubleshoot" -d "Outputs useful debug information." +complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s f -l full-api-key -d "display full API key (censored by default)" +complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s h -l help -d "help for troubleshoot" + +# Upgrade +complete -f -c exercism -n "__fish_use_subcommand" -a "upgrade" -d "Upgrades to the latest available version." +complete -f -c exercism -n "__fish_seen_subcommand_from help" -s h -l help -d "help for help" + +# Version +complete -f -c exercism -n "__fish_use_subcommand" -a "version" -d "Outputs version information." +complete -f -c exercism -n "__fish_seen_subcommand_from version" -s l -l latest -d "check latest available version" +complete -f -c exercism -n "__fish_seen_subcommand_from version" -s h -l help -d "help for version" + +# Workspace +complete -f -c exercism -n "__fish_use_subcommand" -a "workspace" -d "Outputs the root directory for Exercism exercises." +complete -f -c exercism -n "__fish_seen_subcommand_from workspace" -s h -l help -d "help for workspace" + +# Options +complete -f -c exercism -s h -l help -d "show help" +complete -f -c exercism -l timeout -a "10" -d "10 seconds" +complete -f -c exercism -l timeout -a "30" -d "30 seconds" +complete -f -c exercism -l timeout -a "60" -d "1 minute" +complete -f -c exercism -l timeout -a "300" -d "5 minutes" +complete -f -c exercism -l timeout -a "600" -d "10 minutes" +complete -f -c exercism -l timeout -a "" -d "override default HTTP timeout" +complete -f -c exercism -s v -l verbose -d "turn on verbose logging" diff --git a/fish/completions/fnm.fish b/fish/completions/fnm.fish deleted file mode 100644 index 7005e7e..0000000 --- a/fish/completions/fnm.fish +++ /dev/null @@ -1,169 +0,0 @@ -complete -c fnm -n "__fish_use_subcommand" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_use_subcommand" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_use_subcommand" -l multishell-path -d 'Where the current node version link is stored. This value will be populated automatically by evaluating `fnm env` in your shell profile. Read more about it using `fnm help env`' -r -F -complete -c fnm -n "__fish_use_subcommand" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_use_subcommand" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_use_subcommand" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_use_subcommand" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_use_subcommand" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_use_subcommand" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_use_subcommand" -s V -l version -d 'Print version' -complete -c fnm -n "__fish_use_subcommand" -f -a "list-remote" -d 'List all remote Node.js versions' -complete -c fnm -n "__fish_use_subcommand" -f -a "list" -d 'List all locally installed Node.js versions' -complete -c fnm -n "__fish_use_subcommand" -f -a "install" -d 'Install a new Node.js version' -complete -c fnm -n "__fish_use_subcommand" -f -a "use" -d 'Change Node.js version' -complete -c fnm -n "__fish_use_subcommand" -f -a "env" -d 'Print and set up required environment variables for fnm' -complete -c fnm -n "__fish_use_subcommand" -f -a "completions" -d 'Print shell completions to stdout' -complete -c fnm -n "__fish_use_subcommand" -f -a "alias" -d 'Alias a version to a common name' -complete -c fnm -n "__fish_use_subcommand" -f -a "unalias" -d 'Remove an alias definition' -complete -c fnm -n "__fish_use_subcommand" -f -a "default" -d 'Set a version as the default version' -complete -c fnm -n "__fish_use_subcommand" -f -a "current" -d 'Print the current Node.js version' -complete -c fnm -n "__fish_use_subcommand" -f -a "exec" -d 'Run a command within fnm context' -complete -c fnm -n "__fish_use_subcommand" -f -a "uninstall" -d 'Uninstall a Node.js version' -complete -c fnm -n "__fish_use_subcommand" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from list-remote" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from list" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from list" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from list" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from list" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from list" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from list" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from list" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from list" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from install" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from install" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from install" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from install" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from install" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from install" -l lts -d 'Install latest LTS' -complete -c fnm -n "__fish_seen_subcommand_from install" -l latest -d 'Install latest version' -complete -c fnm -n "__fish_seen_subcommand_from install" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from install" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from install" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from use" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from use" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from use" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from use" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from use" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from use" -l install-if-missing -d 'Install the version if it isn\'t installed yet' -complete -c fnm -n "__fish_seen_subcommand_from use" -l silent-if-unchanged -d 'Don\'t output a message identifying the version being used if it will not change due to execution of this command' -complete -c fnm -n "__fish_seen_subcommand_from use" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from use" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from use" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from env" -l shell -d 'The shell syntax to use. Infers when missing' -r -f -a "{bash ,zsh ,fish ,power-shell }" -complete -c fnm -n "__fish_seen_subcommand_from env" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from env" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from env" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from env" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from env" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from env" -l json -d 'Print JSON instead of shell commands' -complete -c fnm -n "__fish_seen_subcommand_from env" -l multi -d 'Deprecated. This is the default now' -complete -c fnm -n "__fish_seen_subcommand_from env" -l use-on-cd -d 'Print the script to change Node versions every directory change' -complete -c fnm -n "__fish_seen_subcommand_from env" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from env" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from env" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from completions" -l shell -d 'The shell syntax to use. Infers when missing' -r -f -a "{bash ,zsh ,fish ,power-shell }" -complete -c fnm -n "__fish_seen_subcommand_from completions" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from completions" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from completions" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from completions" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from completions" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from completions" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from completions" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from completions" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from alias" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from alias" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from alias" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from alias" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from alias" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from alias" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from alias" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from alias" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from unalias" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from unalias" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from default" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from default" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from default" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from default" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from default" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from default" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from default" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from default" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from current" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from current" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from current" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from current" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from current" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from current" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from current" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from current" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from exec" -l using -d 'Either an explicit version, or a filename with the version written in it' -r -complete -c fnm -n "__fish_seen_subcommand_from exec" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from exec" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from exec" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from exec" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from exec" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from exec" -l using-file -d 'Deprecated. This is the default now' -complete -c fnm -n "__fish_seen_subcommand_from exec" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from exec" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from exec" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l node-dist-mirror -d 'https://nodejs.org/dist/ mirror' -r -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l fnm-dir -d 'The root directory of fnm installations' -r -F -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l log-level -d 'The log level of fnm commands' -r -f -a "{quiet ,error ,info }" -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l arch -d 'Override the architecture of the installed Node binary. Defaults to arch of fnm binary' -r -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l version-file-strategy -d 'A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install` is called without a version, or when `--use-on-cd` is configured on evaluation' -r -f -a "{local Use the local version of Node defined within the current directory,recursive Use the version of Node defined within the current directory and all parent directories}" -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l corepack-enabled -d 'Enable corepack support for each new installation. This will make fnm call `corepack enable` on every Node.js installation. For more information about corepack see https://nodejs.org/api/corepack.html' -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -l resolve-engines -d 'Resolve `engines.node` field in `package.json` whenever a `.node-version` or `.nvmrc` file is not present. -Experimental: This feature is subject to change. -Note: `engines.node` can be any semver range, with the latest satisfying version being resolved.' -complete -c fnm -n "__fish_seen_subcommand_from uninstall" -s h -l help -d 'Print help (see more with \'--help\')' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "list-remote" -d 'List all remote Node.js versions' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "list" -d 'List all locally installed Node.js versions' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "install" -d 'Install a new Node.js version' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "use" -d 'Change Node.js version' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "env" -d 'Print and set up required environment variables for fnm' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "completions" -d 'Print shell completions to stdout' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "alias" -d 'Alias a version to a common name' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "unalias" -d 'Remove an alias definition' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "default" -d 'Set a version as the default version' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "current" -d 'Print the current Node.js version' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "exec" -d 'Run a command within fnm context' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "uninstall" -d 'Uninstall a Node.js version' -complete -c fnm -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from list-remote; and not __fish_seen_subcommand_from list; and not __fish_seen_subcommand_from install; and not __fish_seen_subcommand_from use; and not __fish_seen_subcommand_from env; and not __fish_seen_subcommand_from completions; and not __fish_seen_subcommand_from alias; and not __fish_seen_subcommand_from unalias; and not __fish_seen_subcommand_from default; and not __fish_seen_subcommand_from current; and not __fish_seen_subcommand_from exec; and not __fish_seen_subcommand_from uninstall; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)' diff --git a/fish/completions/fzf_configure_bindings.fish b/fish/completions/fzf_configure_bindings.fish new file mode 100644 index 0000000..b38ef92 --- /dev/null +++ b/fish/completions/fzf_configure_bindings.fish @@ -0,0 +1,8 @@ +complete fzf_configure_bindings --no-files +complete fzf_configure_bindings --long help --short h --description "Print help" --condition "not __fish_seen_argument --help -h" +complete fzf_configure_bindings --long directory --description "Change the key binding for Search Directory" --condition "not __fish_seen_argument --directory" +complete fzf_configure_bindings --long git_log --description "Change the key binding for Search Git Log" --condition "not __fish_seen_argument --git_log" +complete fzf_configure_bindings --long git_status --description "Change the key binding for Search Git Status" --condition "not __fish_seen_argument --git_status" +complete fzf_configure_bindings --long history --description "Change the key binding for Search History" --condition "not __fish_seen_argument --history" +complete fzf_configure_bindings --long processes --description "Change the key binding for Search Processes" --condition "not __fish_seen_argument --processes" +complete fzf_configure_bindings --long variables --description "Change the key binding for Search Variables" --condition "not __fish_seen_argument --variables" diff --git a/fish/conf.d/fnm.fish b/fish/conf.d/fnm.fish deleted file mode 100644 index f021867..0000000 --- a/fish/conf.d/fnm.fish +++ /dev/null @@ -1,3 +0,0 @@ -# fnm -set PATH "/home/fscotto/.local/share/fnm" $PATH -fnm env | source diff --git a/fish/conf.d/fzf.fish b/fish/conf.d/fzf.fish new file mode 100644 index 0000000..8156c11 --- /dev/null +++ b/fish/conf.d/fzf.fish @@ -0,0 +1,28 @@ +# fzf.fish is only meant to be used in interactive mode. If not in interactive mode and not in CI, skip the config to speed up shell startup +if not status is-interactive && test "$CI" != true + exit +end + +# Because of scoping rules, to capture the shell variables exactly as they are, we must read +# them before even executing _fzf_search_variables. We use psub to store the +# variables' info in temporary files and pass in the filenames as arguments. +# This variable is global so that it can be referenced by fzf_configure_bindings and in tests +set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)' + + +# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings +fzf_configure_bindings + +# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased +function _fzf_uninstall --on-event fzf_uninstall + _fzf_uninstall_bindings + + set --erase _fzf_search_vars_command + functions --erase _fzf_uninstall _fzf_migration_message _fzf_uninstall_bindings fzf_configure_bindings + complete --erase fzf_configure_bindings + + set_color cyan + echo "fzf.fish uninstalled." + echo "You may need to manually remove fzf_configure_bindings from your config.fish if you were using custom key bindings." + set_color normal +end diff --git a/fish/conf.d/rustup.fish b/fish/conf.d/rustup.fish new file mode 100644 index 0000000..e4cb363 --- /dev/null +++ b/fish/conf.d/rustup.fish @@ -0,0 +1 @@ +source "$HOME/.cargo/env.fish" diff --git a/fish/config.fish b/fish/config.fish index 0684ff6..8169b12 100644 --- a/fish/config.fish +++ b/fish/config.fish @@ -37,6 +37,15 @@ end ## Advanced command-not-found hook #source /usr/share/doc/find-the-command/ftc.fish +set -l xdg_data_home $XDG_DATA_HOME ~/.local/share +set -gx --path XDG_DATA_DIRS $xdg_data_home[1]/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share + +for flatpakdir in ~/.local/share/flatpak/exports/bin /var/lib/flatpak/exports/bin + if test -d $flatpakdir + contains $flatpakdir $PATH; or set -a PATH $flatpakdir + end +end + ## Functions # Functions needed for !! and !$ https://github.com/oh-my-fish/plugin-bang-bang function __history_previous_command @@ -124,6 +133,7 @@ alias tarnow 'tar -acf ' alias untar 'tar -zxvf ' alias vdir 'vdir --color=auto' alias wget 'wget -c ' +alias vi 'nvim' # Get the error messages from journalctl alias jctl 'journalctl -p 3 -xb' diff --git a/fish/fish_plugins b/fish/fish_plugins index 8f107ad..e21d528 100644 --- a/fish/fish_plugins +++ b/fish/fish_plugins @@ -1,3 +1,4 @@ jorgebucaran/fisher reitzig/sdkman-for-fish@v2.1.0 edc/bass +patrickf1/fzf.fish diff --git a/fish/fish_variables b/fish/fish_variables index 9b3875f..b7d5ed8 100644 --- a/fish/fish_variables +++ b/fish/fish_variables @@ -1,5 +1,7 @@ # This file contains fish universal variable definitions. # VERSION: 3.0 +SETUVAR --export GOBIN:/home/fscotto/\x2elocal/share/go/bin +SETUVAR --export GOPATH:/home/fscotto/\x2elocal/share/go SETUVAR --export MANPAGER:sh\x20\x2dc\x20\x27col\x20\x2dbx\x20\x7c\x20batcat\x20\x2dl\x20man\x20\x2dp\x27 SETUVAR --export MANROFFOPT:\x2dc SETUVAR __done_min_cmd_duration:10000 @@ -7,7 +9,8 @@ SETUVAR __done_notification_urgency_level:low SETUVAR __fish_initialized:3400 SETUVAR _fisher_edc_2F_bass_files:\x7e/\x2econfig/fish/functions/__bass\x2epy\x1e\x7e/\x2econfig/fish/functions/bass\x2efish SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish -SETUVAR _fisher_plugins:jorgebucaran/fisher\x1ereitzig/sdkman\x2dfor\x2dfish\x40v2\x2e1\x2e0\x1eedc/bass +SETUVAR _fisher_patrickf1_2F_fzf_2E_fish_files:\x7e/\x2econfig/fish/functions/_fzf_configure_bindings_help\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_extract_var_info\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_changed_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_diff_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_file_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_directory\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_log\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_status\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_history\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_processes\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_variables\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_wrapper\x2efish\x1e\x7e/\x2econfig/fish/functions/fzf_configure_bindings\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/fzf\x2efish\x1e\x7e/\x2econfig/fish/completions/fzf_configure_bindings\x2efish +SETUVAR _fisher_plugins:jorgebucaran/fisher\x1ereitzig/sdkman\x2dfor\x2dfish\x40v2\x2e1\x2e0\x1eedc/bass\x1epatrickf1/fzf\x2efish SETUVAR _fisher_reitzig_2F_sdkman_2D_for_2D_fish_40_v2_2E_31_2E_30__files:\x7e/\x2econfig/fish/functions/sdk\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/sdk\x2efish\x1e\x7e/\x2econfig/fish/completions/sdk\x2efish SETUVAR _fisher_upgraded_to_4_4:\x1d SETUVAR fish_color_autosuggestion:brblack diff --git a/fish/functions/_fzf_configure_bindings_help.fish b/fish/functions/_fzf_configure_bindings_help.fish new file mode 100644 index 0000000..ecfe68e --- /dev/null +++ b/fish/functions/_fzf_configure_bindings_help.fish @@ -0,0 +1,43 @@ +function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings." + echo "\ +USAGE: + fzf_configure_bindings [--COMMAND=[KEY_SEQUENCE]...] + +DESCRIPTION + fzf_configure_bindings installs key bindings for fzf.fish's commands and erases any bindings it + previously installed. It installs bindings for both default and insert modes. fzf.fish executes + it without options on fish startup to install the out-of-the-box key bindings. + + By default, commands are bound to a mnemonic key sequence, shown below. Each command's binding + can be configured using a namesake corresponding option: + COMMAND | DEFAULT KEY SEQUENCE | CORRESPONDING OPTION + Search Directory | Ctrl+Alt+F (F for file) | --directory + Search Git Log | Ctrl+Alt+L (L for log) | --git_log + Search Git Status | Ctrl+Alt+S (S for status) | --git_status + Search History | Ctrl+R (R for reverse) | --history + Search Processes | Ctrl+Alt+P (P for process) | --processes + Search Variables | Ctrl+V (V for variable) | --variables + Override a command's binding by specifying its corresponding option with the desired key + sequence. Disable a command's binding by specifying its corresponding option with no value. + + Because fzf_configure_bindings erases bindings it previously installed, it can be cleanly + executed multiple times. Once the desired fzf_configure_bindings command has been found, add it + to your config.fish in order to persist the customized bindings. + + In terms of validation, fzf_configure_bindings fails if passed unknown options. It expects an + equals sign between an option's name and value. However, it does not validate key sequences. + + Pass -h or --help to print this help message and exit. + +EXAMPLES + Default bindings but bind Search Directory to Ctrl+F and Search Variables to Ctrl+Alt+V + \$ fzf_configure_bindings --directory=\cf --variables=\e\cv + Default bindings but disable Search History + \$ fzf_configure_bindings --history= + An agglomeration of different options + \$ fzf_configure_bindings --git_status=\cg --history=\ch --variables= --processes= + +SEE Also + To learn more about fish key bindings, see bind(1) and fish_key_reader(1). +" +end diff --git a/fish/functions/_fzf_extract_var_info.fish b/fish/functions/_fzf_extract_var_info.fish new file mode 100644 index 0000000..dd4e952 --- /dev/null +++ b/fish/functions/_fzf_extract_var_info.fish @@ -0,0 +1,15 @@ +# helper function for _fzf_search_variables +function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output." + # Extract only the lines about the variable, all of which begin with either + # $variable_name: ...or... $variable_name[ + string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output | + + # Strip the variable name prefix, including ": " for scope info lines + string replace --regex "^\\\$$variable_name(?:: )?" '' | + + # Distill the lines of values, replacing... + # [1]: |value| + # ...with... + # [1] value + string replace --regex ": \|(.*)\|" ' $1' +end diff --git a/fish/functions/_fzf_preview_changed_file.fish b/fish/functions/_fzf_preview_changed_file.fish new file mode 100644 index 0000000..78dd561 --- /dev/null +++ b/fish/functions/_fzf_preview_changed_file.fish @@ -0,0 +1,49 @@ +# helper for _fzf_search_git_status +# arg should be a line from git status --short, e.g. +# MM functions/_fzf_preview_changed_file.fish +# D README.md +# R LICENSE -> "New License" +function _fzf_preview_changed_file --argument-names path_status --description "Show the git diff of the given file." + # remove quotes because they'll be interpreted literally by git diff + # no need to requote when referencing $path because fish does not perform word splitting + # https://fishshell.com/docs/current/fish_for_bash_users.html + set -f path (string unescape (string sub --start 4 $path_status)) + # first letter of short format shows index, second letter shows working tree + # https://git-scm.com/docs/git-status/2.35.0#_short_format + set -f index_status (string sub --length 1 $path_status) + set -f working_tree_status (string sub --start 2 --length 1 $path_status) + + set -f diff_opts --color=always + + if test $index_status = '?' + _fzf_report_diff_type Untracked + _fzf_preview_file $path + else if contains {$index_status}$working_tree_status DD AU UD UA DU AA UU + # Unmerged statuses taken directly from git status help's short format table + # Unmerged statuses are mutually exclusive with other statuses, so if we see + # these, then safe to assume the path is unmerged + _fzf_report_diff_type Unmerged + git diff $diff_opts -- $path + else + if test $index_status != ' ' + _fzf_report_diff_type Staged + + # renames are only detected in the index, never working tree, so only need to test for it here + # https://stackoverflow.com/questions/73954214 + if test $index_status = R + # diff the post-rename path with the original path, otherwise the diff will show the entire file as being added + set -f orig_and_new_path (string split --max 1 -- ' -> ' $path) + git diff --staged $diff_opts -- $orig_and_new_path[1] $orig_and_new_path[2] + # path currently has the form of "original -> current", so we need to correct it before it's used below + set path $orig_and_new_path[2] + else + git diff --staged $diff_opts -- $path + end + end + + if test $working_tree_status != ' ' + _fzf_report_diff_type Unstaged + git diff $diff_opts -- $path + end + end +end diff --git a/fish/functions/_fzf_preview_file.fish b/fish/functions/_fzf_preview_file.fish new file mode 100644 index 0000000..c926475 --- /dev/null +++ b/fish/functions/_fzf_preview_file.fish @@ -0,0 +1,43 @@ +# helper function for _fzf_search_directory and _fzf_search_git_status +function _fzf_preview_file --description "Print a preview for the given file based on its file type." + # because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file + # as one argument, we collect all the arguments into one single variable and treat that as the path + set -f file_path $argv + + if test -L "$file_path" # symlink + # notify user and recurse on the target of the symlink, which can be any of these file types + set -l target_path (realpath "$file_path") + + set_color yellow + echo "'$file_path' is a symlink to '$target_path'." + set_color normal + + _fzf_preview_file "$target_path" + else if test -f "$file_path" # regular file + if set --query fzf_preview_file_cmd + # need to escape quotes to make sure eval receives file_path as a single arg + eval "$fzf_preview_file_cmd '$file_path'" + else + bat --style=numbers --color=always "$file_path" + end + else if test -d "$file_path" # directory + if set --query fzf_preview_dir_cmd + # see above + eval "$fzf_preview_dir_cmd '$file_path'" + else + # -A list hidden files as well, except for . and .. + # -F helps classify files by appending symbols after the file name + command ls -A -F "$file_path" + end + else if test -c "$file_path" + _fzf_report_file_type "$file_path" "character device file" + else if test -b "$file_path" + _fzf_report_file_type "$file_path" "block device file" + else if test -S "$file_path" + _fzf_report_file_type "$file_path" socket + else if test -p "$file_path" + _fzf_report_file_type "$file_path" "named pipe" + else + echo "$file_path doesn't exist." >&2 + end +end diff --git a/fish/functions/_fzf_report_diff_type.fish b/fish/functions/_fzf_report_diff_type.fish new file mode 100644 index 0000000..cc26fb3 --- /dev/null +++ b/fish/functions/_fzf_report_diff_type.fish @@ -0,0 +1,18 @@ +# helper for _fzf_preview_changed_file +# prints out something like +# ╭────────╮ +# │ Staged │ +# ╰────────╯ +function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch." + # number of "-" to draw is the length of the string to box + 2 for padding + set -f repeat_count (math 2 + (string length $diff_type)) + set -f line (string repeat --count $repeat_count ─) + set -f top_border ╭$line╮ + set -f btm_border ╰$line╯ + + set_color yellow + echo $top_border + echo "│ $diff_type │" + echo $btm_border + set_color normal +end diff --git a/fish/functions/_fzf_report_file_type.fish b/fish/functions/_fzf_report_file_type.fish new file mode 100644 index 0000000..49e02e1 --- /dev/null +++ b/fish/functions/_fzf_report_file_type.fish @@ -0,0 +1,6 @@ +# helper function for _fzf_preview_file +function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file." + set_color red + echo "Cannot preview '$file_path': it is a $file_type." + set_color normal +end diff --git a/fish/functions/_fzf_search_directory.fish b/fish/functions/_fzf_search_directory.fish new file mode 100644 index 0000000..4541eec --- /dev/null +++ b/fish/functions/_fzf_search_directory.fish @@ -0,0 +1,33 @@ +function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths." + # Directly use fd binary to avoid output buffering delay caused by a fd alias, if any. + # Debian-based distros install fd as fdfind and the fd package is something else, so + # check for fdfind first. Fall back to "fd" for a clear error message. + set -f fd_cmd (command -v fdfind || command -v fd || echo "fd") + set -f --append fd_cmd --color=always $fzf_fd_opts + + set -f fzf_arguments --multi --ansi $fzf_directory_opts + set -f token (commandline --current-token) + # expand any variables or leading tilde (~) in the token + set -f expanded_token (eval echo -- $token) + # unescape token because it's already quoted so backslashes will mess up the path + set -f unescaped_exp_token (string unescape -- $expanded_token) + + # If the current token is a directory and has a trailing slash, + # then use it as fd's base directory. + if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token" + set --append fd_cmd --base-directory=$unescaped_exp_token + # use the directory name as fzf's prompt to indicate the search is limited to that directory + set --prepend fzf_arguments --prompt="Directory $unescaped_exp_token> " --preview="_fzf_preview_file $expanded_token{}" + set -f file_paths_selected $unescaped_exp_token($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments) + else + set --prepend fzf_arguments --prompt="Directory> " --query="$unescaped_exp_token" --preview='_fzf_preview_file {}' + set -f file_paths_selected ($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments) + end + + + if test $status -eq 0 + commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ') + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_search_git_log.fish b/fish/functions/_fzf_search_git_log.fish new file mode 100644 index 0000000..aa54724 --- /dev/null +++ b/fish/functions/_fzf_search_git_log.fish @@ -0,0 +1,36 @@ +function _fzf_search_git_log --description "Search the output of git log and preview commits. Replace the current token with the selected commit hash." + if not git rev-parse --git-dir >/dev/null 2>&1 + echo '_fzf_search_git_log: Not in a git repository.' >&2 + else + if not set --query fzf_git_log_format + # %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below + set -f fzf_git_log_format '%C(bold blue)%h%C(reset) - %C(cyan)%ad%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)' + end + + set -f preview_cmd 'git show --color=always --stat --patch {1}' + if set --query fzf_diff_highlighter + set preview_cmd "$preview_cmd | $fzf_diff_highlighter" + end + + set -f selected_log_lines ( + git log --no-show-signature --color=always --format=format:$fzf_git_log_format --date=short | \ + _fzf_wrapper --ansi \ + --multi \ + --scheme=history \ + --prompt="Git Log> " \ + --preview=$preview_cmd \ + --query=(commandline --current-token) \ + $fzf_git_log_opts + ) + if test $status -eq 0 + for line in $selected_log_lines + set -f abbreviated_commit_hash (string split --field 1 " " $line) + set -f full_commit_hash (git rev-parse $abbreviated_commit_hash) + set -f --append commit_hashes $full_commit_hash + end + commandline --current-token --replace (string join ' ' $commit_hashes) + end + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_search_git_status.fish b/fish/functions/_fzf_search_git_status.fish new file mode 100644 index 0000000..358f88c --- /dev/null +++ b/fish/functions/_fzf_search_git_status.fish @@ -0,0 +1,41 @@ +function _fzf_search_git_status --description "Search the output of git status. Replace the current token with the selected file paths." + if not git rev-parse --git-dir >/dev/null 2>&1 + echo '_fzf_search_git_status: Not in a git repository.' >&2 + else + set -f preview_cmd '_fzf_preview_changed_file {}' + if set --query fzf_diff_highlighter + set preview_cmd "$preview_cmd | $fzf_diff_highlighter" + end + + set -f selected_paths ( + # Pass configuration color.status=always to force status to use colors even though output is sent to a pipe + git -c color.status=always status --short | + _fzf_wrapper --ansi \ + --multi \ + --prompt="Git Status> " \ + --query=(commandline --current-token) \ + --preview=$preview_cmd \ + --nth="2.." \ + $fzf_git_status_opts + ) + if test $status -eq 0 + # git status --short automatically escapes the paths of most files for us so not going to bother trying to handle + # the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping") + set -f cleaned_paths + + for path in $selected_paths + if test (string sub --length 1 $path) = R + # path has been renamed and looks like "R LICENSE -> LICENSE.md" + # extract the path to use from after the arrow + set --append cleaned_paths (string split -- "-> " $path)[-1] + else + set --append cleaned_paths (string sub --start=4 $path) + end + end + + commandline --current-token --replace -- (string join ' ' $cleaned_paths) + end + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_search_history.fish b/fish/functions/_fzf_search_history.fish new file mode 100644 index 0000000..cafbce9 --- /dev/null +++ b/fish/functions/_fzf_search_history.fish @@ -0,0 +1,39 @@ +function _fzf_search_history --description "Search command history. Replace the command line with the selected command." + # history merge incorporates history changes from other fish sessions + # it errors out if called in private mode + if test -z "$fish_private_mode" + builtin history merge + end + + if not set --query fzf_history_time_format + # Reference https://devhints.io/strftime to understand strftime format symbols + set -f fzf_history_time_format "%m-%d %H:%M:%S" + end + + # Delinate time from command in history entries using the vertical box drawing char (U+2502). + # Then, to get raw command from history entries, delete everything up to it. The ? on regex is + # necessary to make regex non-greedy so it won't match into commands containing the char. + set -f time_prefix_regex '^.*? │ ' + # Delinate commands throughout pipeline using null rather than newlines because commands can be multi-line + set -f commands_selected ( + builtin history --null --show-time="$fzf_history_time_format │ " | + _fzf_wrapper --read0 \ + --print0 \ + --multi \ + --scheme=history \ + --prompt="History> " \ + --query=(commandline) \ + --preview="string replace --regex '$time_prefix_regex' '' -- {} | fish_indent --ansi" \ + --preview-window="bottom:3:wrap" \ + $fzf_history_opts | + string split0 | + # remove timestamps from commands selected + string replace --regex $time_prefix_regex '' + ) + + if test $status -eq 0 + commandline --replace -- $commands_selected + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_search_processes.fish b/fish/functions/_fzf_search_processes.fish new file mode 100644 index 0000000..133a880 --- /dev/null +++ b/fish/functions/_fzf_search_processes.fish @@ -0,0 +1,32 @@ +function _fzf_search_processes --description "Search all running processes. Replace the current token with the pid of the selected process." + # Directly use ps command because it is often aliased to a different command entirely + # or with options that dirty the search results and preview output + set -f ps_cmd (command -v ps || echo "ps") + # use all caps to be consistent with ps default format + # snake_case because ps doesn't seem to allow spaces in the field names + set -f ps_preview_fmt (string join ',' 'pid' 'ppid=PARENT' 'user' '%cpu' 'rss=RSS_IN_KB' 'start=START_TIME' 'command') + set -f processes_selected ( + $ps_cmd -A -opid,command | \ + _fzf_wrapper --multi \ + --prompt="Processes> " \ + --query (commandline --current-token) \ + --ansi \ + # first line outputted by ps is a header, so we need to mark it as so + --header-lines=1 \ + # ps uses exit code 1 if the process was not found, in which case show an message explaining so + --preview="$ps_cmd -o '$ps_preview_fmt' -p {1} || echo 'Cannot preview {1} because it exited.'" \ + --preview-window="bottom:4:wrap" \ + $fzf_processes_opts + ) + + if test $status -eq 0 + for process in $processes_selected + set -f --append pids_selected (string split --no-empty --field=1 -- " " $process) + end + + # string join to replace the newlines outputted by string split with spaces + commandline --current-token --replace -- (string join ' ' $pids_selected) + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_search_variables.fish b/fish/functions/_fzf_search_variables.fish new file mode 100644 index 0000000..52a7c70 --- /dev/null +++ b/fish/functions/_fzf_search_variables.fish @@ -0,0 +1,47 @@ +# This function expects the following two arguments: +# argument 1 = output of (set --show | psub), i.e. a file with the scope info and values of all variables +# argument 2 = output of (set --names | psub), i.e. a file with all variable names +function _fzf_search_variables --argument-names set_show_output set_names_output --description "Search and preview shell variables. Replace the current token with the selected variable." + if test -z "$set_names_output" + printf '%s\n' '_fzf_search_variables requires 2 arguments.' >&2 + + commandline --function repaint + return 22 # 22 means invalid argument in POSIX + end + + # Exclude the history variable from being piped into fzf because + # 1. it's not included in $set_names_output + # 2. it tends to be a very large value => increases computation time + # 3._fzf_search_history is a much better way to examine history anyway + set -f all_variable_names (string match --invert history <$set_names_output) + + set -f current_token (commandline --current-token) + # Use the current token to pre-populate fzf's query. If the current token begins + # with a $, remove it from the query so that it will better match the variable names + set -f cleaned_curr_token (string replace -- '$' '' $current_token) + + set -f variable_names_selected ( + printf '%s\n' $all_variable_names | + _fzf_wrapper --preview "_fzf_extract_var_info {} $set_show_output" \ + --prompt="Variables> " \ + --preview-window="wrap" \ + --multi \ + --query=$cleaned_curr_token \ + $fzf_variables_opts + ) + + if test $status -eq 0 + # If the current token begins with a $, do not overwrite the $ when + # replacing the current token with the selected variable. + # Uses brace expansion to prepend $ to each variable name. + commandline --current-token --replace ( + if string match --quiet -- '$*' $current_token + string join " " \${$variable_names_selected} + else + string join " " $variable_names_selected + end + ) + end + + commandline --function repaint +end diff --git a/fish/functions/_fzf_wrapper.fish b/fish/functions/_fzf_wrapper.fish new file mode 100644 index 0000000..486e36c --- /dev/null +++ b/fish/functions/_fzf_wrapper.fish @@ -0,0 +1,21 @@ +function _fzf_wrapper --description "Prepares some environment variables before executing fzf." + # Make sure fzf uses fish to execute preview commands, some of which + # are autoloaded fish functions so don't exist in other shells. + # Use --function so that it doesn't clobber SHELL outside this function. + set -f --export SHELL (command --search fish) + + # If neither FZF_DEFAULT_OPTS nor FZF_DEFAULT_OPTS_FILE are set, then set some sane defaults. + # See https://github.com/junegunn/fzf#environment-variables + set --query FZF_DEFAULT_OPTS FZF_DEFAULT_OPTS_FILE + if test $status -eq 2 + # cycle allows jumping between the first and last results, making scrolling faster + # layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env + # border shows where the fzf window begins and ends + # height=90% leaves space to see the current command and some scrollback, maintaining context of work + # preview-window=wrap wraps long lines in the preview window, making reading easier + # marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >) + set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"' + end + + fzf $argv +end diff --git a/fish/functions/fzf_configure_bindings.fish b/fish/functions/fzf_configure_bindings.fish new file mode 100644 index 0000000..4b4e7a2 --- /dev/null +++ b/fish/functions/fzf_configure_bindings.fish @@ -0,0 +1,46 @@ +# Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect +# https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1 +function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options." + # no need to install bindings if not in interactive mode or running tests + status is-interactive || test "$CI" = true; or return + + set -f options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'processes=?' 'variables=?' + argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null + if test $status -ne 0 + echo "Invalid option or a positional argument was provided." >&2 + _fzf_configure_bindings_help + return 22 + else if set --query _flag_help + _fzf_configure_bindings_help + return + else + # Initialize with default key sequences and then override or disable them based on flags + # index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = processes, 6 = variables + set -f key_sequences \e\cf \e\cl \e\cs \cr \e\cp \cv # \c = control, \e = escape + set --query _flag_directory && set key_sequences[1] "$_flag_directory" + set --query _flag_git_log && set key_sequences[2] "$_flag_git_log" + set --query _flag_git_status && set key_sequences[3] "$_flag_git_status" + set --query _flag_history && set key_sequences[4] "$_flag_history" + set --query _flag_processes && set key_sequences[5] "$_flag_processes" + set --query _flag_variables && set key_sequences[6] "$_flag_variables" + + # If fzf bindings already exists, uninstall it first for a clean slate + if functions --query _fzf_uninstall_bindings + _fzf_uninstall_bindings + end + + for mode in default insert + test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory + test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log + test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status + test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history + test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] _fzf_search_processes + test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] "$_fzf_search_vars_command" + end + + function _fzf_uninstall_bindings --inherit-variable key_sequences + bind --erase -- $key_sequences + bind --erase --mode insert -- $key_sequences + end + end +end diff --git a/starship.toml b/starship.toml index c728ffb..704b39d 100644 --- a/starship.toml +++ b/starship.toml @@ -1,146 +1,164 @@ -## FIRST LINE/ROW: Info & Status -# First param ─┌ -[username] -format = " [╭─$user]($style)@" -show_always = true -style_root = "bold red" -style_user = "bold red" - -# Second param -[hostname] -disabled = false -format = "[$hostname]($style) in " -ssh_only = false -style = "bold dimmed red" -trim_at = "-" - -# Third param -[directory] -style = "purple" -truncate_to_repo = true -truncation_length = 0 -truncation_symbol = "repo: " - -# Fourth param -[sudo] -disabled = false - -# Before all the version info (python, nodejs, php, etc.) -[git_status] -ahead = "⇡${count}" -behind = "⇣${count}" -deleted = "x" -diverged = "⇕⇡${ahead_count}⇣${behind_count}" -style = "white" - -# Last param in the first line/row -[cmd_duration] -disabled = false -format = "took [$duration]($style)" -min_time = 1 - -## SECOND LINE/ROW: Prompt -# Somethere at the beginning -[battery] -charging_symbol = "" -disabled = true -discharging_symbol = "" -full_symbol = "" - -[[battery.display]] # "bold red" style when capacity is between 0% and 15% -disabled = false -style = "bold red" -threshold = 15 - -[[battery.display]] # "bold yellow" style when capacity is between 15% and 50% -disabled = true -style = "bold yellow" -threshold = 50 - -[[battery.display]] # "bold green" style when capacity is between 50% and 80% -disabled = true -style = "bold green" -threshold = 80 - -# Prompt: optional param 1 -[time] -disabled = true -format = " 🕙 $time($style)\n" -style = "bright-white" -time_format = "%T" - -# Prompt: param 2 -[character] -error_symbol = " [×](bold red)" -success_symbol = " [╰─λ](bold red)" - -# SYMBOLS -[status] -disabled = false -format = '[\[$symbol$status_common_meaning$status_signal_name$status_maybe_int\]]($style)' -map_symbol = true -pipestatus = true -symbol = "🔴" - [aws] -symbol = " " +symbol = " " + +[buf] +symbol = " " + +[c] +symbol = " " [conda] symbol = " " +[crystal] +symbol = " " + [dart] symbol = " " +[directory] +read_only = " 󰌾" + [docker_context] symbol = " " [elixir] -symbol = " " +symbol = " " [elm] symbol = " " +[fennel] +symbol = " " + +[fossil_branch] +symbol = " " + [git_branch] symbol = " " [golang] symbol = " " +[guix_shell] +symbol = " " + +[haskell] +symbol = " " + +[haxe] +symbol = " " + [hg_branch] symbol = " " +[hostname] +ssh_symbol = " " + [java] symbol = " " [julia] symbol = " " +[kotlin] +symbol = " " + +[lua] +symbol = " " + +[memory_usage] +symbol = "󰍛 " + +[meson] +symbol = "󰔷 " + [nim] -symbol = " " +symbol = "󰆥 " [nix_shell] -symbol = " " +symbol = " " [nodejs] -symbol = " " +symbol = " " + +[ocaml] +symbol = " " + +[os.symbols] +Alpaquita = " " +Alpine = " " +AlmaLinux = " " +Amazon = " " +Android = " " +Arch = " " +Artix = " " +CentOS = " " +Debian = " " +DragonFly = " " +Emscripten = " " +EndeavourOS = " " +Fedora = " " +FreeBSD = " " +Garuda = "󰛓 " +Gentoo = " " +HardenedBSD = "󰞌 " +Illumos = "󰈸 " +Kali = " " +Linux = " " +Mabox = " " +Macos = " " +Manjaro = " " +Mariner = " " +MidnightBSD = " " +Mint = " " +NetBSD = " " +NixOS = " " +OpenBSD = "󰈺 " +openSUSE = " " +OracleLinux = "󰌷 " +Pop = " " +Raspbian = " " +Redhat = " " +RedHatEnterprise = " " +RockyLinux = " " +Redox = "󰀘 " +Solus = "󰠳 " +SUSE = " " +Ubuntu = " " +Unknown = " " +Void = " " +Windows = "󰍲 " [package] -symbol = " " +symbol = "󰏗 " [perl] -symbol = " " +symbol = " " [php] symbol = " " +[pijul_channel] +symbol = " " + [python] -symbol = " " +symbol = " " + +[rlang] +symbol = "󰟔 " [ruby] -symbol = " " +symbol = " " [rust] symbol = " " +[scala] +symbol = " " + [swift] -symbol = "ﯣ " +symbol = " " + +[zig] +symbol = " " diff --git a/starship.toml.bak b/starship.toml.bak new file mode 100644 index 0000000..376a697 --- /dev/null +++ b/starship.toml.bak @@ -0,0 +1,146 @@ +## FIRST LINE/ROW: Info & Status +# First param ─┌ +[username] +format = " [╭─$user]($style)@" +show_always = true +style_root = "bold red" +style_user = "bold red" + +# Second param +[hostname] +disabled = false +format = "[$hostname]($style) in " +ssh_only = false +style = "bold dimmed red" +trim_at = "-" + +# Third param +[directory] +style = "purple" +truncate_to_repo = true +truncation_length = 0 +truncation_symbol = "repo: " + +# Fourth param +[sudo] +disabled = false + +# Before all the version info (python, nodejs, php, etc.) +[git_status] +ahead = "⇡${count}" +behind = "⇣${count}" +deleted = "x" +diverged = "⇕⇡${ahead_count}⇣${behind_count}" +style = "white" + +# Last param in the first line/row +[cmd_duration] +disabled = false +format = "took [$duration]($style)" +min_time = 1 + +## SECOND LINE/ROW: Prompt +# Somethere at the beginning +[battery] +charging_symbol = "⚡" +disabled = true +discharging_symbol = "🪫" +full_symbol = "🔋" + +[[battery.display]] # "bold red" style when capacity is between 0% and 15% +disabled = false +style = "bold red" +threshold = 15 + +[[battery.display]] # "bold yellow" style when capacity is between 15% and 50% +disabled = true +style = "bold yellow" +threshold = 50 + +[[battery.display]] # "bold green" style when capacity is between 50% and 80% +disabled = true +style = "bold green" +threshold = 80 + +# Prompt: optional param 1 +[time] +disabled = true +format = " 🕙 $time($style)\n" +style = "bright-white" +time_format = "%T" + +# Prompt: param 2 +[character] +error_symbol = " [×](bold red)" +success_symbol = " [╰─λ](bold red)" + +# SYMBOLS +[status] +disabled = false +format = '[\[$symbol$status_common_meaning$status_signal_name$status_maybe_int\]]($style)' +map_symbol = true +pipestatus = true +symbol = "🔴" + +[aws] +symbol = " " + +[conda] +symbol = " " + +[dart] +symbol = " " + +[docker_context] +symbol = " " + +[elixir] +symbol = " " + +[elm] +symbol = " " + +[git_branch] +symbol = " " + +[golang] +symbol = " " + +[hg_branch] +symbol = " " + +[java] +symbol = " " + +[julia] +symbol = " " + +[nim] +symbol = " " + +[nix_shell] +symbol = " " + +[nodejs] +symbol = " " + +[package] +symbol = "📦 " + +[perl] +symbol = " " + +[php] +symbol = " " + +[python] +symbol = " " + +[ruby] +symbol = " " + +[rust] +symbol = " " + +[swift] +symbol = "ﯣ " diff --git a/starship.toml.gruvbox b/starship.toml.gruvbox new file mode 100644 index 0000000..aee6704 --- /dev/null +++ b/starship.toml.gruvbox @@ -0,0 +1,167 @@ +"$schema" = 'https://starship.rs/config-schema.json' + +format = """ +[](color_orange)\ +$os\ +$username\ +[](bg:color_yellow fg:color_orange)\ +$directory\ +[](fg:color_yellow bg:color_aqua)\ +$git_branch\ +$git_status\ +[](fg:color_aqua bg:color_blue)\ +$c\ +$rust\ +$golang\ +$nodejs\ +$php\ +$java\ +$kotlin\ +$haskell\ +$python\ +[](fg:color_blue bg:color_bg3)\ +$docker_context\ +$conda\ +[](fg:color_bg3 bg:color_bg1)\ +$time\ +[ ](fg:color_bg1)\ +$line_break$character""" + +palette = 'gruvbox_dark' + +[palettes.gruvbox_dark] +color_fg0 = '#fbf1c7' +color_bg1 = '#3c3836' +color_bg3 = '#665c54' +color_blue = '#458588' +color_aqua = '#689d6a' +color_green = '#98971a' +color_orange = '#d65d0e' +color_purple = '#b16286' +color_red = '#cc241d' +color_yellow = '#d79921' + +[os] +disabled = false +style = "bg:color_orange fg:color_fg0" + +[os.symbols] +Windows = "󰍲" +Ubuntu = "󰕈" +SUSE = "" +Raspbian = "󰐿" +Mint = "󰣭" +Macos = "󰀵" +Manjaro = "" +Linux = "󰌽" +Gentoo = "󰣨" +Fedora = "󰣛" +Alpine = "" +Amazon = "" +Android = "" +Arch = "󰣇" +Artix = "󰣇" +CentOS = "" +Debian = "󰣚" +Redhat = "󱄛" +RedHatEnterprise = "󱄛" + +[username] +show_always = true +style_user = "bg:color_orange fg:color_fg0" +style_root = "bg:color_orange fg:color_fg0" +format = '[ $user ]($style)' + +[directory] +style = "fg:color_fg0 bg:color_yellow" +format = "[ $path ]($style)" +truncation_length = 3 +truncation_symbol = "…/" + +[directory.substitutions] +"Documents" = "󰈙 " +"Downloads" = " " +"Music" = "󰝚 " +"Pictures" = " " +"Developer" = "󰲋 " + +[git_branch] +symbol = "" +style = "bg:color_aqua" +format = '[[ $symbol $branch ](fg:color_fg0 bg:color_aqua)]($style)' + +[git_status] +style = "bg:color_aqua" +format = '[[($all_status$ahead_behind )](fg:color_fg0 bg:color_aqua)]($style)' + +[nodejs] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[c] +symbol = " " +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[rust] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[golang] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[php] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[java] +symbol = " " +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[kotlin] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[haskell] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[python] +symbol = "" +style = "bg:color_blue" +format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)' + +[docker_context] +symbol = "" +style = "bg:color_bg3" +format = '[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)' + +[conda] +style = "bg:color_bg3" +format = '[[ $symbol( $environment) ](fg:#83a598 bg:color_bg3)]($style)' + +[time] +disabled = false +time_format = "%R" +style = "bg:color_bg1" +format = '[[  $time ](fg:color_fg0 bg:color_bg1)]($style)' + +[line_break] +disabled = false + +[character] +disabled = false +success_symbol = '[](bold fg:color_green)' +error_symbol = '[](bold fg:color_red)' +vimcmd_symbol = '[](bold fg:color_green)' +vimcmd_replace_one_symbol = '[](bold fg:color_purple)' +vimcmd_replace_symbol = '[](bold fg:color_purple)' +vimcmd_visual_symbol = '[](bold fg:color_yellow)'