{"id":13581927,"url":"https://github.com/k1LoW/frgm","last_synced_at":"2025-04-06T10:33:04.742Z","repository":{"id":41876282,"uuid":"250838456","full_name":"k1LoW/frgm","owner":"k1LoW","description":"frgm is a meta snippet (fragment) manager.","archived":false,"fork":false,"pushed_at":"2023-04-04T03:15:04.000Z","size":302,"stargazers_count":29,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-29T05:41:35.957Z","etag":null,"topics":["alfred","alfred-snippets","snippet-manager","snippets","snippets-manager"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k1LoW.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"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},"funding":{"github":"k1LoW","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-03-28T16:09:47.000Z","updated_at":"2025-01-20T11:21:53.000Z","dependencies_parsed_at":"2024-06-19T02:43:00.950Z","dependency_job_id":"f01cd811-f983-4abf-b86b-feaca3ea8339","html_url":"https://github.com/k1LoW/frgm","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1LoW%2Ffrgm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1LoW%2Ffrgm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1LoW%2Ffrgm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1LoW%2Ffrgm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k1LoW","download_url":"https://codeload.github.com/k1LoW/frgm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247470545,"owners_count":20944146,"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","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":["alfred","alfred-snippets","snippet-manager","snippets","snippets-manager"],"created_at":"2024-08-01T15:02:19.636Z","updated_at":"2025-04-06T10:33:04.209Z","avatar_url":"https://github.com/k1LoW.png","language":"Go","funding_links":["https://github.com/sponsors/k1LoW"],"categories":["Development","Go"],"sub_categories":["Snippets Manager"],"readme":"# frgm [![Build Status](https://github.com/k1LoW/frgm/workflows/build/badge.svg)](https://github.com/k1LoW/frgm/actions)\n\n`frgm` is a meta snippet (fragment) manager.\n\n\u003cp align=\"center\"\u003e\n\u003cbr\u003e\n\u003cimg src=\"https://github.com/k1LoW/frgm/raw/main/img/frgm.png\" width=\"900\" alt=\"frgm\"\u003e\n\u003cbr\u003e\n\u003c/p\u003e\n\nKey features of `frgm` are:\n\n- **[Can export snippets in other snippet tool format](#export-frgm-snippets-as--snippets--frgm-export-)**.\n- **[Can document snippets](#export-snippets-as-markdown-document)**.\n- **[Can use as command-line snippets](##use-frgm-snippets--frgm-list-)**.\n\n## Usage\n\n### Initialize frgm ( `frgm init` )\n\nInitialize frgm.\n\n- Create or update config.toml\n- Set and create `global.snippets_path` ( create file or make directory )\n\n``` console\n$ frgm init\n```\n\n### Write snippets ( `frgm edit` )\n\nWrite snippets.\n\nThe format of the frgm snippet is the following,\n\n``` yaml\n---\n# Default group name of snippets\n# Default is snippets file name\ngroup: my-group\nsnippets:\n  # Unique identifier of snippet\n  # Default is automatically generated\n- uid: frgm-1ca779b751a5\n  # Group name of snippet\n  # Default is default group name of snippets\n  group: command\n  # Name of snippet\n  name: Delete branch already merged\n  # Content (command) of snippet\n  content: git branch --merged | grep -v master | xargs git branch -d\n  # Description of snippet\n  desc: |\n    1. lists the merged branches\n    2. delete all merged branches except the master branch\n    ref: https://example.com/path/to/link\n  # Labels\n  labels:\n  - git\n  - cleanup\n- name: ping\n  content: ping 8.8.8.8\n[...]\n```\n\nYou can use the `frgm edit` command to edit snippets of `global.snippets_path` using the editor specified in $EDITOR.\n\n``` console\n$ EDITOR=emacs frgm edit\n```\n\n### Export frgm snippets as * snippets ( `frgm export` )\n\n#### Export snippets as [Alfred](https://www.alfredapp.com/) snippets\n\n``` console\n$ frgm export --to ~/Library/Application Support/Alfred/Alfred.alfredpreferences/snippets --format alfred\n```\n\n#### Export snippets as [pet](https://github.com/knqyf263/pet) snippets\n\n``` console\n$ frgm export --to /path/to/pet.toml --format pet\n```\n\n#### Export snippets as Markdown document.\n\n``` console\n$ frgm export --to /path/to/snippets.md --format md\n```\n\n**Key Mapping:**\n\n| frgm snippet key | Default / Required | [Alfred](https://www.alfredapp.com/) | [pet](https://github.com/knqyf263/pet) | Markdown |\n| --- | --- | --- | --- | --- |\n| `uid:` | Default is automatically generated | `uid` | - | use as link.hash |\n| `group:` | Default is default group name of snippets or file name | directory | - | use |\n| `name:` | required | `name` | `description:` | use |\n| `desc:` | | - | - | use |\n| `content:` | required | `snippet` | `command:` | use |\n| `output:` | | - | `output:` | use |\n| `labels:` | | `keyword` | `tag:` | use |\n\n#### Fill uid, group ( `frgm fill` )\n\nFill and freeze `uid:` and `group:`.\n\n``` console\n$ frgm fill\n```\n\n**before:**\n\n``` yaml\n# my-group.yml\nsnippets:\n- name: ping\n  content: ping 8.8.8.8\n```\n\n**after:**\n\n``` yaml\n# my-group.yml\nsnippets:\n- uid: frgm-6aa9d75f9d83\n  group: my-group\n  name: ping\n  content: ping 8.8.8.8\n```\n\n### Add snippets repository ( `frgm repo add` )\n\nAdd frgm snippets repository.\n\n``` console\n$ frgm repo add https://github.com/k1LoW/sample-frgm-snippets.git\n```\n\n### Execute `git pull` in all snippets repositories ( `frgm repo pull` )\n\nExecute `git pull` in all snippets repositories.\n\n``` console\n$ frgm repo pull\n```\n\n### Import * snippets ( `frgm import` )\n\n#### Import [Alfred](https://www.alfredapp.com/) snippets\n\n``` console\n$ frgm import --from ~/Library/Application Support/Alfred/Alfred.alfredpreferences/snippets --format alfred\n```\n\n### Convert * snippets ( `frgm convert` )\n\n#### Convert `history` output into frgm snippets\n\n``` console\n$ history | tail -1\n21344  frgm convert --format history --group from-history # Delete merged branch\n$ history | tail -1 | frgm convert --format history --group from-history\nsnippets:\n- uid: history-8cc0c8477ec0\n  group: from-history\n  name: Delete merged branch\n  content: git branch --merged | grep -v master | xargs git branch -d\n```\n\n#### Convert [Alfred](https://www.alfredapp.com/) snippet file into frgm snippet\n\n``` console\n$ cat /path/to/alfredsnippet.json | frgm convert --format alfred --group search\nsnippets:\n- uid: frgm-46c29e119523\n  group: search\n  name: Search log file\n  content: lsof -c nginx | grep -v .so | grep .log | awk '{print $9}' | sort | uniq\n  labels:\n  - log\n```\n\n#### Convert [pet](https://github.com/knqyf263/pet) snippets file into frgm snippets\n\n``` console\n$ cat /path/to/pet-snippets.toml. | frgm convert --format pet --group pet\nsnippets:\n- uid: pet-df7bb29f9681\n  group: pet\n  name: ping\n  content: ping 8.8.8.8\n  labels:\n  - network\n  - google\n- uid: pet-584a331fd6b0\n  group: pet\n  name: hello\n  content: echo hello\n  output: hello\n  labels:\n  - sample\n```\n\n### Use frgm snippets ( `frgm list` )\n\n``` console\n$ frgm list\n```\n\n#### zsh auto-complete from snippets using [fzf](https://github.com/junegunn/fzf) (Ctrl+j)\n\n``` zsh\nfunction fzf-select-snippets() {\n    BUFFER=$(frgm list --format ':content # :name [:group :labels] :uid' | fzf --reverse --border --preview \"echo {} | rev | cut -f 1 -d ' ' | rev | frgm man\")\n    CURSOR=$#BUFFER\n    zle clear-screen\n}\nzle -N fzf-select-snippets\nbindkey '^j' fzf-select-snippets\n```\n\n#### zsh auto-complete from snippets using [peco](https://github.com/peco/peco) (Ctrl+j)\n\n``` zsh\nfunction peco-select-snippets() {\n    BUFFER=$(frgm list | peco --query \"$LBUFFER\")\n    CURSOR=$#BUFFER\n    zle clear-screen\n}\nzle -N peco-select-snippets\nbindkey '^j' peco-select-snippets\n```\n\n#### zsh auto-complete from history and snippets using [peco](https://github.com/peco/peco) (Ctrl+r)\n\n``` zsh\nfunction peco-select-history-and-snippets() {\n    BUFFER=$((history -r -n 1 \u0026 frgm list) | peco --query \"$LBUFFER\")\n    CURSOR=$#BUFFER\n    zle clear-screen\n}\nzle -N peco-select-history-and-snippets\nbindkey '^R' peco-select-history-and-snippets\n```\n\n## Install\n\n**homebrew tap:**\n\n```console\n$ brew install k1LoW/tap/frgm\n```\n\n**manually:**\n\nDownload binany from [releases page](https://github.com/k1LoW/frgm/releases)\n\n**go get:**\n\n```console\n$ go get github.com/k1LoW/frgm\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk1LoW%2Ffrgm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk1LoW%2Ffrgm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk1LoW%2Ffrgm/lists"}