{"id":21074808,"url":"https://github.com/dawsbot/o-o","last_synced_at":"2025-05-16T06:31:30.851Z","repository":{"id":65370041,"uuid":"68499238","full_name":"dawsbot/o-o","owner":"dawsbot","description":"👓 Bookmarks but for the terminal","archived":false,"fork":false,"pushed_at":"2018-08-05T09:31:18.000Z","size":77,"stargazers_count":31,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-05-02T05:38:04.576Z","etag":null,"topics":["browser","developer-tools"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/dawsbot.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-18T05:47:35.000Z","updated_at":"2023-10-17T14:33:39.000Z","dependencies_parsed_at":"2023-01-19T22:33:49.200Z","dependency_job_id":null,"html_url":"https://github.com/dawsbot/o-o","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dawsbot%2Fo-o","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dawsbot%2Fo-o/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dawsbot%2Fo-o/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dawsbot%2Fo-o/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dawsbot","download_url":"https://codeload.github.com/dawsbot/o-o/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225411505,"owners_count":17470246,"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":["browser","developer-tools"],"created_at":"2024-11-19T19:18:09.903Z","updated_at":"2024-11-19T19:18:10.583Z","avatar_url":"https://github.com/dawsbot.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/logo.png\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/o-o\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/o-o.svg\" alt=\"npm version\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/dawsbot/o-o\"\u003e\n    \u003cimg src=\"https://travis-ci.org/dawsbot/o-o.svg?branch=master\" alt=\"build status\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/sindresorhus/xo\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code_style-XO-5ed9c7.svg\" alt=\"xo code style\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e Browser bookmarks, but for the terminal\n\n\u003cbr\u003e\n\n```sh\n$ o new https://github.com gh\n✔ Created new alias \"gh\"\n\n# days, months, or years later\n\n$ o gh\nopening https://github.com\n\n🎩🐰 It's like magic, your browser opens github! 🎩🐰 \n```\n\n## Install\n\n```sh\n$ npm install --global o-o\nor\n$ yarn global add o-o\n```\n\n## Usage\n\n```sh\n$ o \u003calias\u003e\n```\n\nOpens the `path` associated with `\u003calias\u003e`.\n\n\u003cbr\u003e\n\nPrint saved aliases:\n\n```sh\n$ o ls\n# {\n#   \"o\": \"https://github.com/dawsbot/o-o\",\n#   \"so\": \"https://stackoverflow.com/search?q={{o0}}\",\n#   \"g\": \"https://github.com/{{o0}}/{{o1}}\"\n# }\n```\n\n\u003cbr\u003e\n\n`o` can also be used with dynamic `path`'s:\n\n```sh\n$ o so \"that thing I can never remember how to do\"\n# opens https://stackoverflow.com/search?q=that%20thing%20I%20can%20never%20remember%20how%20to%20do in your browser\n```\n\n\u003cbr/\u003e\n\nAdd your own:\n\n```sh\n$ o new\n# spawns an informative prompt for you to save a new alias\n```\n\nThe verbose way\n\n```sh\n$ o new https://facebook.com fb\n```\n\n\u003cbr/\u003e\n\nIt's not just for url's:\n\n```sh\n$ o new /Users/dawsbot/code/o-o/readme.md or\n\n$ o or\n# opens file with default application\n```\n\n\u003cbr\u003e\n\nHelp:\n\n```sh\n$ o --help\n\n  Usage\n    $ o [alias|command] [, arguments]\n\n  Examples\n    $ o # create new alias\n    $ o new # create or rename alias\n    $ o ls # print list of saved aliases\n    $ o rm \u003calias\u003e # delete an alias\n    $ o clear # delete all\n    $ o path # print file path to alias file\n```\n\n\u003cbr\u003e\n\n## Dynamic Templating\n\nAliases can (optionally) have [handlebars](http://handlebarsjs.com/) templates. This allows arguments to be dynamically inserted into a `path`. If you have never used handlebars, don't fear. It's simple.\n\n`o` handlebars templates are 0-indexed, just like an array. They begin at `o0` and continue to `o1`, `o2`, etc.\n\nHere's another example:\n\n```sh\n$ o so \"how to do something\"\n# o retrieves \"https://stackoverflow.com/search?q={{o0}}\" and\n# replaces \"{{o0}}\" with url-encoded \"how to do something\"\n```\n\nHere's a fun example of making a sub-reddit alias\n\n```sh\n$ o new https://reddit.com/r/{{o0}} reddit\n# ✔ Created new alias reddit\n\n$ o reddit node\n# opens https://www.reddit.com/r/node in browser\n```\n\n\u003cbr\u003e\n\n## Backup important aliases\n\nAre you saving important aliases or a large amount of them? If so, back these up, it's always possible they get corrupted.\n\n#### Backup to Dropbox\n\nFirst find the path your config file is saved in:\n\n```sh\n$ o path\n# /Users/dawsonbotsford/Library/Preferences/o-o-nodejs/config.json\n```\n\nThis file needs to be moved into Dropbox and symlinked back to the original location\n\n```sh\nmv /Users/dawsonbotsford/Library/Preferences/o-o-nodejs/config.json ~/Dropbox/\nln -s ~/Dropbox/config.json /Users/dawsonbotsford/Library/Preferences/o-o-nodejs/config.json\n```\n\n#### Backup to git\n\nAlternatively, use git to manually version control.\n\n```sh\n$ o path\n# /Users/dawsonbotsford/Library/Preferences/o-o-nodejs/config.json\n$ cd /Users/dawsonbotsford/Library/Preferences/o-o-nodejs/\n$ git init\n# add remote, and push!\n```\n\n\u003cbr\u003e\n\n## License\n\nMIT © [Dawson Botsford](http://dawsonbotsford.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdawsbot%2Fo-o","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdawsbot%2Fo-o","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdawsbot%2Fo-o/lists"}