{"id":13539499,"url":"https://github.com/loichyan/nerdfix","last_synced_at":"2026-02-12T11:33:29.529Z","repository":{"id":148847573,"uuid":"614726731","full_name":"loichyan/nerdfix","owner":"loichyan","description":"🔣 nerdfix helps you to find/fix obsolete Nerd Font icons in your project","archived":false,"fork":false,"pushed_at":"2024-11-23T13:42:18.000Z","size":902,"stargazers_count":462,"open_issues_count":2,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-10T07:52:47.471Z","etag":null,"topics":["checker","neovim","nerd-fonts","rust"],"latest_commit_sha":null,"homepage":"","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/loichyan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","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}},"created_at":"2023-03-16T07:35:05.000Z","updated_at":"2025-12-06T14:54:08.000Z","dependencies_parsed_at":"2024-08-01T09:23:13.515Z","dependency_job_id":"fd29f6f6-ff75-489c-8836-b1af4637dc7d","html_url":"https://github.com/loichyan/nerdfix","commit_stats":{"total_commits":149,"total_committers":1,"mean_commits":149.0,"dds":0.0,"last_synced_commit":"e7b0b83e1fca0c5594e59225e086f0267241bfd7"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/loichyan/nerdfix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loichyan%2Fnerdfix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loichyan%2Fnerdfix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loichyan%2Fnerdfix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loichyan%2Fnerdfix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loichyan","download_url":"https://codeload.github.com/loichyan/nerdfix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loichyan%2Fnerdfix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29364348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: 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":["checker","neovim","nerd-fonts","rust"],"created_at":"2024-08-01T09:01:26.756Z","updated_at":"2026-02-12T11:33:29.493Z","avatar_url":"https://github.com/loichyan.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# 🔣 nerdfix\n\n![GitHub Release](https://img.shields.io/github/v/release/loichyan/nerdfix)\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/loichyan/nerdfix/cicd.yml)\n\n`nerdfix` helps you to find/fix obsolete [Nerd Font](https://github.com/ryanoasis/nerd-fonts) icons in your project.\n\n## 💭 Why\n\nNerd Fonts is used in many projects for a beautiful UI. It provides more than 10,000 icons, but some codepoints conflict\nwith other fonts (especially CJK fonts). To ensure that the icons remain in the private use area, Nerd Fonts has changed\nthe codepoints of some icons in recent releases, for example, `mdi-*` icons (including over 2,000 icons) are deprecated\nsince [v2.3.3](https://github.com/ryanoasis/nerd-fonts/releases/tag/v2.3.3) and will be removed in v3.\n\nThese icons are marked as obsolete in [the official cheat sheet](https://www.nerdfonts.com/cheat-sheet) and it's\nrecommended to replace them with the new ones. However, you may find it boring to check all the used icons one by one,\nso `nerdfix` was written to index the cheat sheet and find obsolete icons in your project.\n\n## ⚙️ Installation\n\nYou can download the pre-built binaries from [the release page](https://github.com/loichyan/nerdfix/releases/latest) or\nmanually build this project manually from source.\n\nIn addition, the binaries come with a recently updated cheat sheet and you can overwrite it with the latest one using\n`nerdfix -i /path/to/your/file` (follow\n[this link](https://github.com/ryanoasis/nerd-fonts/blob/gh-pages/_posts/2017-01-04-icon-cheat-sheet.md) to get the\nlatest file).\n\n### Install from source\n\nYou can build and install from the source code with `cargo`:\n\n```sh\ncargo install --git https://github.com/loichyan/nerdfix.git\n```\n\nOr with `nix`:\n\n```sh\nnix run github:loichyan/nerdfix\n```\n\n## 📋 Note\n\nPlease make sure you're using Nerd Fonts after v2.3.3, otherwise the replaced new icons may not be displayed correctly.\nIf you are a plugin author, it's also recommended to notify this in updates.\n\n## 🔍 Usage\n\nThe `check` command checks input files and reports obsolete icons with some suggestions (sorted by similarity) that you\ncould replace them with.\n\n```sh\nnerdfix check test/test-data.txt\n```\n\nYou get the output as follows:\n\n```text\nwarning: Found obsolete icon U+F752\n  ┌─ tests/test-data.txt:1:27\n  │\n1 │ mdi-folder_multiple = \"\"\n  │                           ^ Icon 'mdi-folder_multiple' is marked as obsolete\n  │\n  = You could replace it with:\n        1. 󰉓 U+F0253 md-folder_multiple\n        2. 󱏓 U+F13D3 md-folder_star_multiple\n        ...\n```\n\n### Interactive patching\n\nThe `fix` command reports the same information as `check` and displays a prompt asking the user to input a new icon to\nreplace the obsolete one.\n\n```text\nwarning: Found obsolete icon U+F719\n  ┌─ tests/test-data.txt:4:29\n  │\n4 │ mdi-file_document_box = \"\"\n  │                             ^ Icon 'mdi-file_document_box' is marked as obsolete\n  │\n  = You could replace it with:\n        1. 󰈙 U+F0219 md-file_document\n        2. 󰷈 U+F0DC8 md-file_document_edit\n        ...\n\u003e Input an icon: 1\n# Your input: 󰈙\n```\n\nThe prompt accepts several types of input:\n\n| Type              | Example            |\n| ----------------- | ------------------ |\n| Suggestion number | `1`                |\n| Codepoint         | `U+F0219`          |\n| Icon name         | `md-file_document` |\n| Icon character    | `󰈙`                |\n\n### Fuzzy autocompletion/search\n\nThe prompt also provides fuzzy matching suggestions when you type the icon name:\n\n```text\n\u003e Input an icon: documentmultiple\n  󱔗 md-file_document_multiple\n  󱔘 md-file_document_multiple_outline\n  󰡟 md-comment_multiple\n  ...\n```\n\nYou can also use the `search` command to call the prompt directly for a fuzzy search.\n\n### Autofix\n\n`nerdfix` provides some features to automatically patch obsolete icons:\n\n- The last user input is picked if an icon appears twice.\n- Use `--sub FROM/TO` (or `--sub exact:FROM/TO` for full syntax) to replace one icon with another, e.g. `mdi-tab` is\n  replaced with `md-tab` when `--sub mdi-tab/md-tab` is specified.\n- Use `--sub prefix:FROM/TO` to replace the prefix of an icon name with another, e.g. `mdi-tab` is replaced with\n  `md-tab` when `--sub prefix:mdi-/md-` is specified.\n\n### Database\n\n`nerdfix` accepts icons and substutitions in the following JSON format:\n\n```json\n{\n  \"icons\": [\n    { \"name\": \"md-file_document\", \"codepoint\": \"f0219\" },\n    { \"name\": \"mdi-file_document_box\", \"codepoint\": \"0f719\", \"obsolete\": true }\n  ],\n  \"substitutions\": [\"exact:mdi-file_document_box/md-file_document\"]\n}\n```\n\nAs mentioned above, the precompiled `nerdfix` binary comes bundled with an indexed database that includes all available\nicons and some common substitutions.\n\n### Structured output\n\nYou can use `check --format json` to get structured output for further use. `nerdfix` prints diagnostics with the\nfollowing fields line by line:\n\n| Field       | Description                                             |\n| ----------- | ------------------------------------------------------- |\n| `severity`  | Severity of a diagnostic                                |\n| `path`      | Source file of a diagnostic                             |\n| `type`      | Diagnostic type, currently only `obsolete` is supported |\n| `span`      | Byte index span of an obsolete icon                     |\n| `name`      | Icon name                                               |\n| `codepoint` | Icon codepoint                                          |\n\n## 💬 FAQ\n\n### How can I find all files that contain obsolete icons?\n\n```sh\nnerdfix check --format=json -r /path/to/root 2\u003e/dev/null |\n  jq -s -r '[.[].path] | sort | unique | .[]'\n```\n\n### How can I save patched content to a file other than the input? ([#7](https://github.com/loichyan/nerdfix/pull/7))\n\n```sh\nnerdfix fix /path/to/input:/path/to/output\n```\n\n### How can I recursively traverse all directories? ([#5](https://github.com/loichyan/nerdfix/issues/5))\n\n```sh\nnerdfix fix --recursive /path/to/root\n# Or use fd/find\nnerdfix fix $(fd -t f . /path/to/root)\n```\n\n### How can I skip interactive prompts? ([#3](https://github.com/loichyan/nerdfix/issues/3))\n\n```sh\nnerdfix fix --write --select-first /path/to/file\n```\n\n## ⚖️ License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floichyan%2Fnerdfix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floichyan%2Fnerdfix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floichyan%2Fnerdfix/lists"}