{"id":13635237,"url":"https://github.com/nickgerace/gfold","last_synced_at":"2025-10-21T04:44:50.884Z","repository":{"id":38273677,"uuid":"253088016","full_name":"nickgerace/gfold","owner":"nickgerace","description":"CLI tool to help keep track of your Git repositories, written in Rust","archived":false,"fork":false,"pushed_at":"2025-09-02T14:45:12.000Z","size":1446,"stargazers_count":364,"open_issues_count":8,"forks_count":21,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-21T04:44:48.627Z","etag":null,"topics":["cli","git","git-cli","rust","rust-cli"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/gfold","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nickgerace.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2020-04-04T19:59:43.000Z","updated_at":"2025-10-10T13:04:41.000Z","dependencies_parsed_at":"2023-02-19T04:31:16.242Z","dependency_job_id":"3c88a5a0-6fb8-4ab4-ae1d-781c5c471633","html_url":"https://github.com/nickgerace/gfold","commit_stats":{"total_commits":213,"total_committers":6,"mean_commits":35.5,"dds":0.06103286384976525,"last_synced_commit":"1663c3247b9835fb497afc407e99bdd00e379024"},"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/nickgerace/gfold","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickgerace%2Fgfold","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickgerace%2Fgfold/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickgerace%2Fgfold/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickgerace%2Fgfold/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickgerace","download_url":"https://codeload.github.com/nickgerace/gfold/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickgerace%2Fgfold/sbom","scorecard":{"id":685085,"data":{"date":"2025-08-11","repo":{"name":"github.com/nickgerace/gfold","commit":"3d5f8f3da206b782bf9104825188fff9792d0171"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"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":"Maintained","score":3,"reason":"3 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 3","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":2,"reason":"Found 7/30 approved changesets -- score normalized to 2","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":"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":"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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: 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":"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":"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/release.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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 2025.7.0 not signed: https://api.github.com/repos/nickgerace/gfold/releases/236427801","Warn: release artifact 2025.4.0 not signed: https://api.github.com/repos/nickgerace/gfold/releases/209755710","Warn: release artifact 2025.2.1-ofek-1 not signed: https://api.github.com/repos/nickgerace/gfold/releases/206306446","Warn: release artifact 2025.2.1 not signed: https://api.github.com/repos/nickgerace/gfold/releases/202945156","Warn: release artifact 4.6.0 not signed: https://api.github.com/repos/nickgerace/gfold/releases/190072431","Warn: release artifact 2025.7.0 does not have provenance: https://api.github.com/repos/nickgerace/gfold/releases/236427801","Warn: release artifact 2025.4.0 does not have provenance: https://api.github.com/repos/nickgerace/gfold/releases/209755710","Warn: release artifact 2025.2.1-ofek-1 does not have provenance: https://api.github.com/repos/nickgerace/gfold/releases/206306446","Warn: release artifact 2025.2.1 does not have provenance: https://api.github.com/repos/nickgerace/gfold/releases/202945156","Warn: release artifact 4.6.0 does not have provenance: https://api.github.com/repos/nickgerace/gfold/releases/190072431"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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/ci.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/nickgerace/gfold/release.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T00:32:22.362Z","repository_id":38273677,"created_at":"2025-08-22T00:32:22.362Z","updated_at":"2025-08-22T00:32:22.362Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280207179,"owners_count":26290616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cli","git","git-cli","rust","rust-cli"],"created_at":"2024-08-02T00:00:42.853Z","updated_at":"2025-10-21T04:44:50.878Z","avatar_url":"https://github.com/nickgerace.png","language":"Rust","funding_links":[],"categories":["Applications","应用程序 Applications","Rust","cli"],"sub_categories":["System tools","系统工具 System tools"],"readme":"# gfold\n\n[![latest release tag](https://img.shields.io/github/v/tag/nickgerace/gfold?sort=semver\u0026logo=git\u0026logoColor=white\u0026label=version\u0026style=for-the-badge\u0026color=blue)](https://github.com/nickgerace/gfold/releases/latest)\n[![crates.io version](https://img.shields.io/crates/v/gfold?style=for-the-badge\u0026logo=rust\u0026color=orange)](https://crates.io/crates/gfold)\n[![build status](https://img.shields.io/github/actions/workflow/status/nickgerace/gfold/ci.yml?branch=main\u0026style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/nickgerace/gfold/actions)\n[![calver](https://img.shields.io/badge/calver-YYYY.MM.MICRO-cyan.svg?style=for-the-badge)](https://calver.org)\n\n`gfold` is a CLI tool that helps you keep track of multiple Git repositories.\n\n[![A GIF showcasing gfold in action](https://raw.githubusercontent.com/nickgerace/gfold/main/assets/demo.gif)](https://raw.githubusercontent.com/nickgerace/gfold/main/assets/demo.gif)\n\nIf you'd prefer to use the classic display mode by default, and avoid setting the flag every time, you can set it in the config file (see **Usage** section).\n\n## Announcement (February 2025)\n\nAll releases now follow the [CalVer](https://calver.org/) versioning scheme, starting with `2025.2.1`.\nThis change is both forwards and backwards compatible with the [Semantic Versioning](https://semver.org/spec/v2.0.0.html) versioning scheme, which was used from the first release through version `4.6.0`.\n\n*No end user action is required specifically for the versioning scheme change itself.*\n\nThis announcement will be eventually removed from this [README](./README.md) and will eventually be moved into the [CHANGELOG](./CHANGELOG.md).\n\n## Description\n\nThis app displays relevant information for multiple Git repositories in one to many directories.\nIt only reads from the filesystem and will never write to it.\nWhile this tool might seem limited in scope and purpose, that is by design.\n\nBy default, `gfold` looks at every Git repository via traversal from the current working directory.\nIf you would like to target another directory, you can pass its path (relative or absolute) as the first argument or change the default path in the config file.\n\nAfter traversal, `gfold` leverages [rayon](https://github.com/rayon-rs/rayon) to perform concurrent, read-only analysis of all Git repositories detected.\nAnalysis is performed by leveraging the [git2-rs](https://github.com/rust-lang/git2-rs) library.\n\n## Usage\n\nProvide the `-h/--help` flag to see all the options for using this application.\n\n```shell\n# Operate in the current working directory or in the location provided by a config file, if one exists.\ngfold\n\n# Operate in the parent directory.\ngfold ..\n\n# Operate in the home directory (first method).\ngfold $HOME\n\n# Operate in the home directory (second method).\ngfold ~/\n\n# Operate with an absolute path.\ngfold /this/is/an/absolute/path\n\n# Operate with a relative path.\ngfold ../../this/is/a/relative/path\n\n# Operate with three paths.\ngfold ~/src ~/projects ~/code\n```\n\n### Config File\n\nIf you find yourself providing the same arguments frequently, you can create and use a config file.\n`gfold` does not come with a config file by default and config files are entirely optional.\n\nHow does it work?\nUpon execution, `gfold` will look for a config file at the following paths (in order):\n\n- `$XDG_CONFIG_HOME/gfold.toml`\n- `$XDG_CONFIG_HOME/gfold/config.toml`\n- `$HOME/.config/gfold.toml`\n\n`$XDG_CONFIG_HOME` refers to the literal `XDG_CONFIG_HOME` environment variable, but will default to the appropriate operating system-specific path if not set (see [`user_dirs`](https://github.com/uncenter/user_dirs) for more information).\n\nIf a config file is found, `gfold` will read it and use the options specified within.\n\nFor config file creation, you can use the `--dry-run` flag to print valid TOML.\nHere is an example config file creation workflow on macOS, Linux and similar platforms:\n\n```shell\ngfold -d classic -c never ~/ --dry-run \u003e $HOME/.config/gfold.toml\n```\n\nHere are the contents of the resulting config file:\n\n```toml\npaths = ['/home/neloth']\ndisplay_mode = 'Classic'\ncolor_mode = 'Never'\n```\n\nLet's say you created a config file, but wanted to execute `gfold` with entirely different settings _and_ you want to ensure that\nyou do not accidentally inherit options from the config file.\nIn that scenario you can ignore your config file by using the `-i` flag.\n\n```shell\ngfold -i\n```\n\nYou can restore the config file to its defaults by using the same flag.\n\n```shell\ngfold -i \u003e $HOME/.config/gfold.toml\n```\n\nIn addition, you can ignore the existing config file, configure specific options, and use defaults for unspecified options all at once.\nHere is an example where we want to use the classic display mode and override all other settings with their default values:\n\n```shell\ngfold -i -d classic \u003e $HOME/.config/gfold.toml\n```\n\nYou can back up a config file and track its history with `git`.\nOn macOS, Linux, and most systems, you can link the file back to a `git` repository.\n\n```shell\nln -s \u003cpath-to-repository\u003e/gfold.toml $HOME/.config/gfold.toml\n```\n\nNow, you can update the config file within your repository and include the linking as part of your environment setup workflow.\n\n## Installation\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/gfold.svg)](https://repology.org/project/gfold/versions)\n\n### Homebrew (macOS and Linux)\n\nYou can use [Homebrew](https://brew.sh) to install `gfold` using the [core formulae](https://formulae.brew.sh/formula/gfold).\n\nHowever, you may run into a naming collision on macOS if [coreutils](https://formulae.brew.sh/formula/coreutils) is installed via `brew`.\nSee the [troubleshooting](#troubleshooting-and-known-issues) section for a workaround and more information.\n\n```shell\nbrew install gfold\n```\n\n### Arch Linux\n\nYou can use [pacman](https://wiki.archlinux.org/title/Pacman) to install `gfold` from the [extra repository](https://archlinux.org/packages/extra/x86_64/gfold/).\n\n```shell\npacman -S gfold\n```\n\n### Nix and NixOS\n\nYou can install `gfold` from [nixpkgs](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/version-management/gfold/default.nix):\n\n```shell\nnix-env --install gfold\n```\n\nIf you are using [flakes](https://nixos.wiki/wiki/Flakes), you can install using the `nix` command directly.\n\n```shell\nnix profile install \"nixpkgs#gfold\"\n```\n\n### Cargo\n\nYou can use [cargo](https://crates.io) to install the [crate](https://crates.io/crates/gfold) on almost any platform.\n\n```shell\ncargo install gfold\n```\n\nUse the `--locked` flag if you'd like Cargo to use `Cargo.lock`.\n\n```shell\ncargo install --locked gfold\n```\n\nKeeping the crate up to date is easy with [cargo-update](https://crates.io/crates/cargo-update).\n\n```shell\ncargo install cargo-update\ncargo install-update -a\n```\n\n### Download a Binary\n\nIf you do not want to use one of the above installation methods and do not want to clone the repository, you can download a binary from the [releases](https://github.com/nickgerace/gfold/releases) page.\nFor an example on how to do that, refer to the [manual install](./docs/MANUAL_INSTALL.md) guide.\n\n### Build From Source\n\nIf you would like an example on how to build from source, refer to the [manual install](./docs/MANUAL_INSTALL.md) guide.\n\n### Deprecated: Homebrew Tap (macOS only)\n\nThe [tap located at nickgerace/homebrew-nickgerace](https://github.com/nickgerace/homebrew-nickgerace/blob/main/Formula/gfold.rb) has been deprecated.\nPlease use the aforementioned core Homebrew package instead.\n\n### Preferred Installation Method Not Listed?\n\nPlease [file an issue](https://github.com/nickgerace/gfold/issues/new)!\n\n## Compatibility\n\n`gfold` is intended to be ran on _any_ tier one Rust 🦀 target.\nPlease [file an issue](https://github.com/nickgerace/gfold/issues) if your platform is unsupported.\n\n## Troubleshooting and Known Issues\n\nIf you encounter unexpected behavior or a bug and would like to see more details, please run with increased verbosity.\n\n```shell\ngfold -vvv\n```\n\nIf the issue persists, please [file an issue](https://github.com/nickgerace/gfold/issues).\nPlease attach relevant logs from execution with _sensitive bits redacted_ in order to help resolve your issue.\n\n### Coreutils Collision on macOS\n\nIf `fold` from [GNU Coreutils](https://www.gnu.org/software/coreutils/) is installed on macOS via `brew`, it will be named `gfold`.\nYou can avoid this collision with shell aliases, shell functions, and/or `PATH` changes.\nHere is an example with the `o` dropped from `gfold`:\n\n```shell\nalias gfld=$HOME/.cargo/bin/gfold\n```\n\n## Community\n\nFor more information and thanks to users and the \"community\" at large, please refer to the **[COMMUNITY THANKS](./docs/COMMUNITY_THANKS.md)** file.\n\n- [Packages for NixOS, Arch Linux and more](https://repology.org/project/gfold/versions)\n- [\"One Hundred Rust Binaries\"](https://www.wezm.net/v2/posts/2020/100-rust-binaries/page2/), an article that featured `gfold`\n- [nvim-gfold.lua](https://github.com/AckslD/nvim-gfold.lua), a `neovim` plugin for `gfold` _([announcement Reddit post](https://www.reddit.com/r/neovim/comments/t209wy/introducing_nvimgfoldlua/))_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickgerace%2Fgfold","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickgerace%2Fgfold","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickgerace%2Fgfold/lists"}