{"id":15649181,"url":"https://github.com/bwplotka/demo-nav","last_synced_at":"2025-04-30T15:45:18.998Z","repository":{"id":79052131,"uuid":"169446091","full_name":"bwplotka/demo-nav","owner":"bwplotka","description":"Lightweight shell library for smooth, interactive demos using terminal.","archived":false,"fork":false,"pushed_at":"2021-04-01T19:32:06.000Z","size":757,"stargazers_count":40,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-20T12:09:37.984Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","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/bwplotka.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-06T17:26:40.000Z","updated_at":"2023-08-13T12:08:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"694b8a17-1f30-4606-92cd-ca255b3fb17b","html_url":"https://github.com/bwplotka/demo-nav","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwplotka%2Fdemo-nav","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwplotka%2Fdemo-nav/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwplotka%2Fdemo-nav/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwplotka%2Fdemo-nav/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bwplotka","download_url":"https://codeload.github.com/bwplotka/demo-nav/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232031973,"owners_count":18462965,"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":[],"created_at":"2024-10-03T12:28:35.355Z","updated_at":"2024-12-31T21:33:08.535Z","avatar_url":"https://github.com/bwplotka.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# demo-nav\n\nThe main goal of this small lib is to enable clear, reproducible, scripted and structured live demo presentations, without sacrificing the *flexibility*. \n\n![Alt Text](./example/example.gif)\n\nWhy flexibility matters? It is almost *always* the case that you need to adjust the presentation on the fly, e.g:\n* You did some sequence of commands too fast and you need to retry.\n* In the Q\u0026A someone asks you to explain certain commands in sequence.\n* You are short on time and you want to skip few less important parts of demo.\n* Something unexpected happen. You want to pause the flow and continue after quick fix.\n\nYou can find a video of the live demos I performed using this handy tool at FOSDEM 2019 [here](https://fosdem.org/2019/schedule/event/thanos_transforming_prometheus_to_a_global_scale_in_a_seven_simple_steps/) \u0026 recent GrafanaCon2019 talk [here](https://github.com/improbable-eng/thanos/pull/866)\n\n## Features:\n\n* Script whole demo as ordered set of commands.\n* Hide irrelevant details: execute one command, but show different (e.g simplified) command. Must have when you are short of time. \n* Executed command stays on the screen (if chosen) to guide the audience on what was invoked.\n* Once demo started, NO typing is required! Navigate through commands using single keyboard keys:\n    * Execute written command by pressing `enter`.\n    * Skip current command and get to the previous one by pressing `p`.\n    * Skip current command and get to the next one by pressing `n`.\n    * Skip current command and get to the beginning of demo by pressing `b`.\n    * Skip current command and get to the end of demo by pressing `e`.\n    * Quit by pressing `q` or `Ctrl+C`.\n* Once exitted, script will remember the last position, which allows easy continuation.\n* Optionally mimick the typing if really need to ;\u003e \n\n## Tested on:\n\n* Ubuntu 18.04, zsh 5.4.2-3ubuntu3.1 (CI tests in progress)\n\n## Oh My.. Why shell?\n\nI am asking this question myself everyday as well (: It's ugly, and it does not work on every platform. But it is quick \nto adjust and iterate. Also, natively you run the commands in terminal anyway so that's why - no need for yet another DSL. Python might be a better fit?\n\n*Note* that I am not a bash magician, so happy to take contributions to improve this lib - as long as functionality stays the same.\n\n## How to use it?\n\n* Import `demo-nav.sh` in your bash script: `. demo-nav.sh`\n* Use `r` or `rc` to register commands.\n* Invoke `navigate` at the very end.\n* Run your script. \n\nSee [full example demo script with docs](./example/demo-example.sh)\n\n## Credits\n\nThis was initially inspired by https://github.com/paxtonhare/demo-magic, so kudos to @paxtonhare\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwplotka%2Fdemo-nav","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbwplotka%2Fdemo-nav","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwplotka%2Fdemo-nav/lists"}