{"id":21706319,"url":"https://github.com/nbari/slick","last_synced_at":"2026-04-02T21:26:10.340Z","repository":{"id":47437173,"uuid":"153524872","full_name":"nbari/slick","owner":"nbari","description":"async ZSH prompt","archived":false,"fork":false,"pushed_at":"2026-04-01T10:35:53.000Z","size":2096,"stargazers_count":24,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-01T12:07:29.531Z","etag":null,"topics":["async","git","prompt","shell","terminal","zle","zsh"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nbari.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"nbari"}},"created_at":"2018-10-17T21:16:49.000Z","updated_at":"2026-04-01T10:32:43.000Z","dependencies_parsed_at":"2023-10-16T11:06:10.403Z","dependency_job_id":"46c312d6-9866-481d-90fb-fe5d08f7f9bd","html_url":"https://github.com/nbari/slick","commit_stats":{"total_commits":118,"total_committers":1,"mean_commits":118.0,"dds":0.0,"last_synced_commit":"279cb05357b924d00e6fd66bc4bc1f2a181ce0c3"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/nbari/slick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbari%2Fslick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbari%2Fslick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbari%2Fslick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbari%2Fslick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nbari","download_url":"https://codeload.github.com/nbari/slick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbari%2Fslick/sbom","scorecard":{"id":676950,"data":{"date":"2025-08-11","repo":{"name":"github.com/nbari/slick","commit":"a5cea26873c014df2ed24babfce73e91f9fdb243"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/build.yml:11","Warn: no topLevel permission defined: .github/workflows/coverage.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/deploy.yml:11","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverage.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/coverage.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/coverage.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/coverage.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/coverage.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/coverage.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/coverage.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/coverage.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/nbari/slick/test.yml/main?enable=pin","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  11 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy.yml:71"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.13.0 not signed: https://api.github.com/repos/nbari/slick/releases/207187531","Warn: release artifact 0.12.1 not signed: https://api.github.com/repos/nbari/slick/releases/187047221","Warn: release artifact 0.12.0 not signed: https://api.github.com/repos/nbari/slick/releases/156427885","Warn: release artifact 0.11.2 not signed: https://api.github.com/repos/nbari/slick/releases/145701043","Warn: release artifact 0.13.0 does not have provenance: https://api.github.com/repos/nbari/slick/releases/207187531","Warn: release artifact 0.12.1 does not have provenance: https://api.github.com/repos/nbari/slick/releases/187047221","Warn: release artifact 0.12.0 does not have provenance: https://api.github.com/repos/nbari/slick/releases/156427885","Warn: release artifact 0.11.2 does not have provenance: https://api.github.com/repos/nbari/slick/releases/145701043"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-4fcv-w3qc-ppgg","Warn: Project is vulnerable to: RUSTSEC-2025-0022","Warn: Project is vulnerable to: GHSA-rr8g-9fpq-6wmg","Warn: Project is vulnerable to: RUSTSEC-2025-0023","Warn: Project is vulnerable to: RUSTSEC-2023-0059 / GHSA-jcr6-4frq-9gjj","Warn: Project is vulnerable to: GHSA-m65q-v92h-cm7q","Warn: Project is vulnerable to: RUSTSEC-2023-0040","Warn: Project is vulnerable to: RUSTSEC-2025-0040"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T21:50:01.081Z","repository_id":47437173,"created_at":"2025-08-21T21:50:01.081Z","updated_at":"2025-08-21T21:50:01.081Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31316725,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","git","prompt","shell","terminal","zle","zsh"],"created_at":"2024-11-25T22:12:23.751Z","updated_at":"2026-04-02T21:26:10.333Z","avatar_url":"https://github.com/nbari.png","language":"Rust","readme":"# slick - async ZSH prompt\n\n[![crates.io](https://img.shields.io/crates/v/slick.svg)](https://crates.io/crates/slick)\n[![Test \u0026 Build](https://github.com/nbari/slick/actions/workflows/build.yml/badge.svg)](https://github.com/nbari/slick/actions/workflows/build.yml)\n\n[![example](https://img.youtube.com/vi/ZFQ2bykpm6s/0.jpg)](https://www.youtube.com/watch?v=ZFQ2bykpm6s)\n\n## How to use\n\nInstall:\n\n    cargo install slick\n\nTo install cargo:\n\n    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nIf in Linux you may need install this:\n\n    apt install -y build-essential libssl-dev pkg-config\n\ncheck your PATH `$HOME/.cargo/bin/slick`\n\n### Quick Test (Development)\n\nFor quick testing or development:\n\n```sh\n# Build and test\ncargo build --release\nsource load.zsh\n```\n\nThe `load.zsh` script automatically detects the slick binary and sets up the prompt.\n\n### Production Setup\n\nAdd this to your `.zshrc`:\n\n```sh\n# Load required modules\nzmodload zsh/datetime\nautoload -Uz add-zsh-hook\n\n# Register hooks\nadd-zsh-hook precmd slick_prompt_precmd\nadd-zsh-hook preexec slick_prompt_preexec\n\n# Register zle widgets\nzle -N zle-keymap-select\nzle -N zle-line-init\n\n# Global variables\ntypeset -g slick_prompt_data\ntypeset -g slick_prompt_timestamp\ntypeset -g slick_prompt_elapsed\n\nSLICK_PATH=$HOME/.cargo/bin/slick\n\nfunction slick_prompt_refresh {\n    local exit_status=$?\n    local line\n\n    # Read ONE line per callback (non-blocking!)\n    # ZSH will call this function again if there's more data\n    if read -r -u $1 line; then\n        slick_prompt_data=\"$line\"\n\n        # Always pass elapsed time if available (needed for ALL phases to show consistent elapsed time!)\n        # Use the pre-calculated elapsed time from precmd to avoid flickering\n        if [[ -n \"$slick_prompt_elapsed\" ]]; then\n            PROMPT=$($SLICK_PATH prompt -k \"$KEYMAP\" -r $exit_status -d ${slick_prompt_data:-\"\"} -e $slick_prompt_elapsed)\n        else\n            PROMPT=$($SLICK_PATH prompt -k \"$KEYMAP\" -r $exit_status -d ${slick_prompt_data:-\"\"})\n        fi\n\n        zle \u0026\u0026 zle reset-prompt\n        return  # RETURN immediately - don't block! Handler will be called again for next line\n    fi\n\n    # No more data - close fd and remove handler\n    # Clean up timestamp and elapsed now that all phases are complete\n    unset slick_prompt_timestamp\n    unset slick_prompt_elapsed\n    zle -F $1\n    exec {1}\u003c\u0026-\n}\n\nfunction zle-line-init zle-keymap-select {\n    PROMPT=$($SLICK_PATH prompt -k \"$KEYMAP\" -d ${slick_prompt_data:-\"\"})\n    zle \u0026\u0026 zle reset-prompt\n}\n\nfunction slick_prompt_precmd() {\n    slick_prompt_data=\"\"\n\n    # Calculate elapsed time ONCE here (avoids flickering across multiple render phases)\n    # If timestamp is set (command was run), calculate elapsed seconds\n    # Otherwise, leave it unset (no command was run, e.g., just pressed enter)\n    if [[ -n \"$slick_prompt_timestamp\" ]]; then\n        slick_prompt_elapsed=$(( $EPOCHSECONDS - $slick_prompt_timestamp ))\n    else\n        unset slick_prompt_elapsed\n    fi\n\n    local fd\n    exec {fd}\u003c \u003c($SLICK_PATH precmd)\n    zle -F $fd slick_prompt_refresh\n}\n\nfunction slick_prompt_preexec() {\n    slick_prompt_timestamp=$EPOCHSECONDS\n\n    # Set cursor style\n    # 0  ⇒  blinking block.\n    # 1  ⇒  blinking block (default).\n    # 2  ⇒  steady block.\n    # 3  ⇒  blinking underline.\n    # 4  ⇒  steady underline.\n    # 5  ⇒  blinking bar, xterm.\n    # 6  ⇒  steady bar, xterm.\n\n    echo -ne \"\\e[4 q\"\n}\n```\n\n## 🔤 Font Setup\n\n**Seeing boxes (□) instead of symbols?** You need a Nerd Font.\n\n**Quick fix:**\n1. Download a Nerd Font: https://www.nerdfonts.com/font-downloads\n   - Recommended: **Monoid Nerd Font** (clean, minimalist), JetBrainsMono Nerd Font, FiraCode Nerd Font\n2. Install the font on your system\n3. Configure your terminal to use it\n4. Restart terminal\n\n**Using Monoid Nerd Font?** Works great with slick's minimalist design!\n\n**Don't want to install fonts?** Use Unicode or ASCII alternatives:\n```bash\nexport SLICK_PROMPT_SYMBOL=\"→\"    # Unicode arrow\n# or\nexport SLICK_PROMPT_SYMBOL=\"\u003e\"    # ASCII\n```\n\n## Customizations\n\nSlick can be customized using environment variables.\n\n### Quick Start\n\n```bash\n# Disable git fetch for faster prompts (removes ~500ms auth check on first run)\nexport SLICK_PROMPT_GIT_FETCH=0\n\n# Custom symbols\nexport SLICK_PROMPT_SYMBOL=\"❯\"\nexport SLICK_PROMPT_VICMD_SYMBOL=\"❮\"\n\n# Custom colors\nexport SLICK_PROMPT_PATH_COLOR=blue\nexport SLICK_PROMPT_SYMBOL_COLOR=magenta\n\n# Toolbx marker\nexport SLICK_PROMPT_TOOLBOX_SYMBOL=\"🧰\"\nexport SLICK_PROMPT_TOOLBOX_COLOR=cyan\n```\n\n### All Environment Variables\n\n#### General Settings\n```bash\nexport SLICK_PROMPT_CMD_MAX_EXEC_TIME=5        # Max command time to display (seconds)\nexport SLICK_PROMPT_GIT_FETCH=1                # Enable git fetch (1=yes, 0=no)\nexport SLICK_PROMPT_NO_GIT_UNAME=0             # Hide git username (1=hide, 0=show)\nexport SLICK_PROMPT_NON_BREAKING_SPACE=\" \"     # Non-breaking space character\n```\n\n#### Prompt Symbols\n```bash\nexport SLICK_PROMPT_SYMBOL=\"$\"                 # Main prompt symbol\nexport SLICK_PROMPT_VICMD_SYMBOL=\"\u003e\"           # Vi command mode symbol\nexport SLICK_PROMPT_ROOT_SYMBOL=\"#\"            # Root user symbol\nexport SLICK_PROMPT_GIT_REMOTE_AHEAD=\"⇡\"       # Git ahead symbol\nexport SLICK_PROMPT_GIT_REMOTE_BEHIND=\"⇣\"      # Git behind symbol\nexport SLICK_PROMPT_GIT_AUTH_SYMBOL=\"🔒\"       # Git auth failed symbol\nexport SLICK_PROMPT_TOOLBOX_SYMBOL=\"🧰\"        # Toolbx marker symbol\n```\n\n#### Colors\n```bash\n# Colors can be named (red, blue, etc.) or numbers (0-255)\nexport SLICK_PROMPT_ERROR_COLOR=196            # Error message color\nexport SLICK_PROMPT_PATH_COLOR=74              # Directory path color\nexport SLICK_PROMPT_SYMBOL_COLOR=5             # Prompt symbol color\nexport SLICK_PROMPT_VICMD_COLOR=3              # Vi command mode color\nexport SLICK_PROMPT_ROOT_COLOR=1               # Root user color\nexport SLICK_PROMPT_SSH_COLOR=8                # SSH session color\nexport SLICK_PROMPT_TIME_ELAPSED_COLOR=3       # Command time color\nexport SLICK_PROMPT_TOOLBOX_COLOR=6            # Toolbx marker color\n```\n\n#### Git Colors\n```bash\nexport SLICK_PROMPT_GIT_BRANCH_COLOR=3         # Branch name color\nexport SLICK_PROMPT_GIT_MASTER_BRANCH_COLOR=160  # master/main branch color\nexport SLICK_PROMPT_GIT_ACTION_COLOR=3         # Git action (merge, rebase) color\nexport SLICK_PROMPT_GIT_STATUS_COLOR=5         # Modified files color\nexport SLICK_PROMPT_GIT_STAGED_COLOR=7         # Staged files color\nexport SLICK_PROMPT_GIT_REMOTE_COLOR=6         # Remote status color\nexport SLICK_PROMPT_GIT_UNAME_COLOR=8          # Git username color\nexport SLICK_PROMPT_GIT_AUTH_COLOR=red         # Git auth failed color\n```\n\n### Example Configurations\n\n#### Minimal/Fast (no network calls)\n```bash\nexport SLICK_PROMPT_GIT_FETCH=0           # No git fetch\nexport SLICK_PROMPT_NO_GIT_UNAME=1        # Hide username\nexport SLICK_PROMPT_SYMBOL=\"\u003e\"            # Simple symbol\n```\n\n#### Colorful\n```bash\nexport SLICK_PROMPT_SYMBOL=\"➜\"\nexport SLICK_PROMPT_SYMBOL_COLOR=cyan\nexport SLICK_PROMPT_PATH_COLOR=blue\nexport SLICK_PROMPT_GIT_BRANCH_COLOR=yellow\nexport SLICK_PROMPT_ERROR_COLOR=red\n```\n\n#### Nerd Fonts (Monoid, JetBrainsMono, etc.)\n⚠️ **Requires a Nerd Font** - Works great with Monoid Nerd Font, JetBrainsMono Nerd Font, FiraCode Nerd Font\n\n```bash\n# Example with Monoid Nerd Font or similar Nerd Fonts\nexport SLICK_PROMPT_SYMBOL=\"\"           # nf-oct-chevron_right\nexport SLICK_PROMPT_VICMD_SYMBOL=\"\"       # nf-oct-chevron_left\nexport SLICK_PROMPT_ROOT_SYMBOL=\"\"        # nf-fa-flash\nexport SLICK_PROMPT_GIT_AUTH_SYMBOL=\"\"    # nf-fa-lock\nexport SLICK_PROMPT_GIT_REMOTE_AHEAD=\"\"   # nf-md-arrow_up\nexport SLICK_PROMPT_GIT_REMOTE_BEHIND=\"\"  # nf-md-arrow_down\n```\n\n**Download Nerd Fonts:** https://www.nerdfonts.com/\n\nThese symbols work with any Nerd Font (Monoid, JetBrainsMono, FiraCode, Hack, etc.)\n\nSee more examples in [envrc](envrc).\n\n## 🧰 Toolbx Detection\n\nSlick detects when it is running inside Fedora Toolbx and shows the toolbox name before the path.\n\n**Example:**\n```bash\n(🧰 codex) ~/projects/slick main\n❯\n```\n\nConfigure the Toolbx marker:\n```bash\nexport SLICK_PROMPT_TOOLBOX_SYMBOL=\"🧰\"   # Default\nexport SLICK_PROMPT_TOOLBOX_COLOR=6       # Default\n```\n\n## 🔒 SSH Authentication Detection\n\nSlick automatically detects when SSH remotes require authentication and displays a lock symbol (🔒).\n\n**How it works (Streaming Async Prompts):**\n- **Instant display**: Prompt shows immediately with cached auth status (from previous runs)\n- **Async update**: If git fetch is enabled, auth check runs in background with 500ms grace period\n- **Smart cache**: First run takes ~500ms to write cache, subsequent runs are instant with cached status\n- **Cache-based**: Auth status is cached for 5 minutes in `~/.cache/slick/`\n- **Non-blocking**: Uses tokio for true async I/O - no delays, no hanging\n- **Smart timeout**: Git fetch has 5-second timeout to prevent indefinite waits\n\n**Example:**\n```bash\n# cd into repo with SSH remote requiring auth\ncd my-private-repo\n# First time: ~500ms to check and write cache (shows auth_failed status)\n# Subsequent prompts: instant 🔒 from cache (valid for 5 minutes)\n# After cache expires (5 min): another ~500ms check to refresh cache\n```\n\n**Two-phase rendering:**\n1. **Phase 1 (0ms)**: Display prompt immediately with all git info + cached auth status\n2. **Phase 2 (async)**: Git status updates (~10-50ms), then git fetch checks auth (~500ms)\n3. **Cache write**: Auth status written to cache for next prompt\n\nConfigure the lock symbol:\n```bash\nexport SLICK_PROMPT_GIT_AUTH_SYMBOL=\"🔒\"  # Default\nexport SLICK_PROMPT_GIT_AUTH_COLOR=red     # Default\n```\n\nSee [TEST_README.md](TEST_README.md#test-auth-lock-detection) for testing instructions.\n\n___\nInspired by:\n\n* [pure](https://github.com/sindresorhus/pure)\n* [purs](https://github.com/xcambar/purs)\n* [zsh-efgit-prompt](https://github.com/ericfreese/zsh-efgit-prompt)\n","funding_links":["https://github.com/sponsors/nbari"],"categories":["Themes"],"sub_categories":["ZSH on Windows"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnbari%2Fslick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnbari%2Fslick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnbari%2Fslick/lists"}