{"id":16907999,"url":"https://github.com/cjrh/acts","last_synced_at":"2026-04-13T01:18:36.163Z","repository":{"id":249958744,"uuid":"833062303","full_name":"cjrh/acts","owner":"cjrh","description":"Small terminal menu to run preconfigured commands","archived":false,"fork":false,"pushed_at":"2024-07-24T12:35:23.000Z","size":23,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T04:48:42.151Z","etag":null,"topics":["command-line-interface","command-runner","terminal-based","terminal-menu"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjrh.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":"2024-07-24T09:25:12.000Z","updated_at":"2025-02-19T20:50:14.000Z","dependencies_parsed_at":"2024-07-24T11:18:44.863Z","dependency_job_id":"062c21b8-605b-457e-8c3d-a01a58504df8","html_url":"https://github.com/cjrh/acts","commit_stats":null,"previous_names":["cjrh/acts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Facts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Facts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Facts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Facts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjrh","download_url":"https://codeload.github.com/cjrh/acts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244656740,"owners_count":20488640,"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":["command-line-interface","command-runner","terminal-based","terminal-menu"],"created_at":"2024-10-13T18:49:44.581Z","updated_at":"2026-04-13T01:18:31.128Z","avatar_url":"https://github.com/cjrh.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# acts\nSmall terminal menu to run commands.\n\n## Demo\n\nGiven a configuration file like this:\n\n```toml\n# example_config.toml\n[todaysdate]\nname = \"Today's date\"\ndescription = \"\"\ncommand = \"echo $(date)\"\n\n[listdir]\nname = \"List directory\"\ndescription = \"\"\ncommand = \"ls -lah\"\n```\n\nThe program can be invoked like this:\n\n```bash\n$ eval \"$(acts example_config.toml)\"\n```\n\nAnd then first you will see this menu displayed in your terminal:\n\n```\n  acts                                  \n  use wasd, jk, or arrow keys           \n  enter to select, q or esc to exit     \n  -----------------------               \n\u003e List directory                               \n  Today's date       \n```\n\nAnd when you select an option, the command will be executed \nand then executed by your shell.\n\n## Design Considerations\n\nThese are the design considerations:\n\n- Commands should be executed by YOUR shell, not inside `acts`. \nThis decreases surface area for me to worry about, and ensures the\nbest cross-platform compatibility. My examples above are for `bash`,\nbut it should work with any shell as long as that shell can \ndistinguish between `stdout` and `stderr`, and has a way to `eval`\nor otherwise execute a command.\n\n- Different collections of commands for different circumstances.\nThat is what the toml config file is for. You can have different\nconfig files for different projects, or different config files for\ndifferent parts of the same project. So the actions can be\ncustomized for the situation.\n\n- Few dependencies, the less the better. I use `std` to parse args\nfor example, instead of bigger libraries like `clap`. I would have\nloved to use a config file format supported by `std` but there are\nnone, so I use `toml` which is a small dependency.\n\n## Future plans\n\n### justfile support\n\nI would like to add `justfile` as a supported config file format.\nIn this case, I would just populate the menu with commands from\nthe `justfile` and execute them with `just`. A problem to be solved\nis what to do with just commands that take parameters.\n\n### npm's `package.json`\n\nI would like to add support for `package.json` as a config file,\nallowing you to run npm scripts from the menu.\n\n## Dev workflow\n\nWhile working on the Rust code, it can be invoked like this:\n\n```bash\n$ eval \"$(cargo run -- example_config.toml)\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Facts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjrh%2Facts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Facts/lists"}