{"id":13740491,"url":"https://github.com/tynanbe/shellout","last_synced_at":"2026-01-02T16:49:30.020Z","repository":{"id":97548246,"uuid":"332911560","full_name":"tynanbe/shellout","owner":"tynanbe","description":"🐢 A Gleam library for cross-platform shell operations","archived":false,"fork":false,"pushed_at":"2025-02-15T20:00:13.000Z","size":127,"stargazers_count":55,"open_issues_count":5,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-15T21:17:28.788Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Gleam","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/tynanbe.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}},"created_at":"2021-01-25T23:18:10.000Z","updated_at":"2025-02-15T20:00:17.000Z","dependencies_parsed_at":"2023-12-20T11:47:28.199Z","dependency_job_id":"d60249da-26c5-428c-b03f-8e43d75f8d89","html_url":"https://github.com/tynanbe/shellout","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tynanbe%2Fshellout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tynanbe%2Fshellout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tynanbe%2Fshellout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tynanbe%2Fshellout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tynanbe","download_url":"https://codeload.github.com/tynanbe/shellout/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243784099,"owners_count":20347409,"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-08-03T04:00:48.605Z","updated_at":"2026-01-02T16:49:30.013Z","avatar_url":"https://github.com/tynanbe.png","language":"Gleam","funding_links":[],"categories":["Packages"],"sub_categories":["Command Line"],"readme":"# shellout 🐢\n\n[![Hex Package](https://img.shields.io/hexpm/v/shellout?color=ffaff3\u0026label\u0026labelColor=2f2f2f\u0026logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjZmVmZWZjIiBkPSJNIDYuMjgzMiwxLjU5OTYgOS4yODMyLDYuNzk0OSBIIDE0LjcwNTEgTCAxNy43MDUxLDEuNTk5NiBaIE0gMTguMTQwNywxLjg0MzggbCAtMyw1LjE5NzMgMi43MTQ5LDQuNjk5MiBoIDYgeiBNIDUuODUzNSwxLjg1NTUgMC4xNDQ1LDExLjc0MDIgSCA2LjE0NDUgTCA4Ljg1MTYsNy4wNDg4IFogTSAwLjE0NDUsMTIuMjQwMiA1Ljg1MzUsMjIuMTI3IDguODUxNiwxNi45MzM2IDYuMTQ0NSwxMi4yNDAyIFogbSAxNy43MTEsMCAtMi43MTQ5LDQuNzAxMiAzLDUuMTk1MyA1LjcxNDksLTkuODk2NSB6IE0gOS4yODMyLDE3LjE4NzUgNi4yODUyLDIyLjM4MDkgSCAxNy43MDMyIEwgMTQuNzA1MSwxNy4xODc1IFoiLz48L3N2Zz4K)](https://hex.pm/packages/shellout)\n[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3?label\u0026labelColor=2f2f2f\u0026logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNiAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjZmVmZWZjIiBkPSJNMjUuNjA5IDcuNDY5YzAuMzkxIDAuNTYyIDAuNSAxLjI5NyAwLjI4MSAyLjAxNmwtNC4yOTcgMTQuMTU2Yy0wLjM5MSAxLjMyOC0xLjc2NiAyLjM1OS0zLjEwOSAyLjM1OWgtMTQuNDIyYy0xLjU5NCAwLTMuMjk3LTEuMjY2LTMuODc1LTIuODkxLTAuMjUtMC43MDMtMC4yNS0xLjM5MS0wLjAzMS0xLjk4NCAwLjAzMS0wLjMxMyAwLjA5NC0wLjYyNSAwLjEwOS0xIDAuMDE2LTAuMjUtMC4xMjUtMC40NTMtMC4wOTQtMC42NDEgMC4wNjMtMC4zNzUgMC4zOTEtMC42NDEgMC42NDEtMS4wNjIgMC40NjktMC43ODEgMS0yLjA0NyAxLjE3Mi0yLjg1OSAwLjA3OC0wLjI5Ny0wLjA3OC0wLjY0MSAwLTAuOTA2IDAuMDc4LTAuMjk3IDAuMzc1LTAuNTE2IDAuNTMxLTAuNzk3IDAuNDIyLTAuNzE5IDAuOTY5LTIuMTA5IDEuMDQ3LTIuODQ0IDAuMDMxLTAuMzI4LTAuMTI1LTAuNjg4LTAuMDMxLTAuOTM4IDAuMTA5LTAuMzU5IDAuNDUzLTAuNTE2IDAuNjg4LTAuODI4IDAuMzc1LTAuNTE2IDEtMiAxLjA5NC0yLjgyOCAwLjAzMS0wLjI2Ni0wLjEyNS0wLjUzMS0wLjA3OC0wLjgxMiAwLjA2My0wLjI5NyAwLjQzOC0wLjYwOSAwLjY4OC0wLjk2OSAwLjY1Ni0wLjk2OSAwLjc4MS0zLjEwOSAyLjc2Ni0yLjU0N2wtMC4wMTYgMC4wNDdjMC4yNjYtMC4wNjMgMC41MzEtMC4xNDEgMC43OTctMC4xNDFoMTEuODkxYzAuNzM0IDAgMS4zOTEgMC4zMjggMS43ODEgMC44NzUgMC40MDYgMC41NjIgMC41IDEuMjk3IDAuMjgxIDIuMDMxbC00LjI4MSAxNC4xNTZjLTAuNzM0IDIuNDA2LTEuMTQxIDIuOTM4LTMuMTI1IDIuOTM4aC0xMy41NzhjLTAuMjAzIDAtMC40NTMgMC4wNDctMC41OTQgMC4yMzQtMC4xMjUgMC4xODctMC4xNDEgMC4zMjgtMC4wMTYgMC42NzIgMC4zMTMgMC45MDYgMS4zOTEgMS4wOTQgMi4yNSAxLjA5NGgxNC40MjJjMC41NzggMCAxLjI1LTAuMzI4IDEuNDIyLTAuODkxbDQuNjg4LTE1LjQyMmMwLjA5NC0wLjI5NyAwLjA5NC0wLjYwOSAwLjA3OC0wLjg5MSAwLjM1OSAwLjE0MSAwLjY4OCAwLjM1OSAwLjkyMiAwLjY3MnpNOC45ODQgNy41Yy0wLjA5NCAwLjI4MSAwLjA2MyAwLjUgMC4zNDQgMC41aDkuNWMwLjI2NiAwIDAuNTYyLTAuMjE5IDAuNjU2LTAuNWwwLjMyOC0xYzAuMDk0LTAuMjgxLTAuMDYzLTAuNS0wLjM0NC0wLjVoLTkuNWMtMC4yNjYgMC0wLjU2MiAwLjIxOS0wLjY1NiAwLjV6TTcuNjg4IDExLjVjLTAuMDk0IDAuMjgxIDAuMDYzIDAuNSAwLjM0NCAwLjVoOS41YzAuMjY2IDAgMC41NjItMC4yMTkgMC42NTYtMC41bDAuMzI4LTFjMC4wOTQtMC4yODEtMC4wNjMtMC41LTAuMzQ0LTAuNWgtOS41Yy0wLjI2NiAwLTAuNTYyIDAuMjE5LTAuNjU2IDAuNXoiPjwvcGF0aD48L3N2Zz4K)](https://hexdocs.pm/shellout/)\n[![License](https://img.shields.io/hexpm/l/shellout?color=ffaff3\u0026label\u0026labelColor=2f2f2f\u0026logo=data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM0IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgMzQgMjgiPgo8cGF0aCBmaWxsPSIjZmVmZWZjIiBkPSJNMjcgN2wtNiAxMWgxMnpNNyA3bC02IDExaDEyek0xOS44MjggNGMtMC4yOTcgMC44NDQtMC45ODQgMS41MzEtMS44MjggMS44Mjh2MjAuMTcyaDkuNWMwLjI4MSAwIDAuNSAwLjIxOSAwLjUgMC41djFjMCAwLjI4MS0wLjIxOSAwLjUtMC41IDAuNWgtMjFjLTAuMjgxIDAtMC41LTAuMjE5LTAuNS0wLjV2LTFjMC0wLjI4MSAwLjIxOS0wLjUgMC41LTAuNWg5LjV2LTIwLjE3MmMtMC44NDQtMC4yOTctMS41MzEtMC45ODQtMS44MjgtMS44MjhoLTcuNjcyYy0wLjI4MSAwLTAuNS0wLjIxOS0wLjUtMC41di0xYzAtMC4yODEgMC4yMTktMC41IDAuNS0wLjVoNy42NzJjMC40MjItMS4xNzIgMS41MTYtMiAyLjgyOC0yczIuNDA2IDAuODI4IDIuODI4IDJoNy42NzJjMC4yODEgMCAwLjUgMC4yMTkgMC41IDAuNXYxYzAgMC4yODEtMC4yMTkgMC41LTAuNSAwLjVoLTcuNjcyek0xNyA0LjI1YzAuNjg4IDAgMS4yNS0wLjU2MiAxLjI1LTEuMjVzLTAuNTYyLTEuMjUtMS4yNS0xLjI1LTEuMjUgMC41NjItMS4yNSAxLjI1IDAuNTYyIDEuMjUgMS4yNSAxLjI1ek0zNCAxOGMwIDMuMjE5LTQuNDUzIDQuNS03IDQuNXMtNy0xLjI4MS03LTQuNXYwYzAtMC42MDkgNS40NTMtMTAuMjY2IDYuMTI1LTExLjQ4NCAwLjE3Mi0wLjMxMyAwLjUxNi0wLjUxNiAwLjg3NS0wLjUxNnMwLjcwMyAwLjIwMyAwLjg3NSAwLjUxNmMwLjY3MiAxLjIxOSA2LjEyNSAxMC44NzUgNi4xMjUgMTEuNDg0djB6TTE0IDE4YzAgMy4yMTktNC40NTMgNC41LTcgNC41cy03LTEuMjgxLTctNC41djBjMC0wLjYwOSA1LjQ1My0xMC4yNjYgNi4xMjUtMTEuNDg0IDAuMTcyLTAuMzEzIDAuNTE2LTAuNTE2IDAuODc1LTAuNTE2czAuNzAzIDAuMjAzIDAuODc1IDAuNTE2YzAuNjcyIDEuMjE5IDYuMTI1IDEwLjg3NSA2LjEyNSAxMS40ODR6Ij48L3BhdGg+Cjwvc3ZnPgo=)](https://github.com/tynanbe/shellout/blob/main/LICENSE)\n[![Build](https://img.shields.io/github/actions/workflow/status/tynanbe/shellout/ci.yml?branch=main\u0026color=ffaff3\u0026label\u0026labelColor=2f2f2f\u0026logo=github-actions\u0026logoColor=fefefc)](https://github.com/tynanbe/shellout/actions)\n\nA Gleam library for cross-platform shell operations.\n\n\u003cbr\u003e\n\n## Usage\n\n### Example\n\n• In `my_project/src/my_project.gleam`\n\n```gleam\nimport gleam/dict\nimport gleam/io\nimport gleam/result\nimport shellout.{type Lookups}\n\npub const lookups: Lookups = [\n  #(\n    [\"color\", \"background\"],\n    [\n      #(\"buttercup\", [\"252\", \"226\", \"174\"]),\n      #(\"mint\", [\"182\", \"255\", \"234\"]),\n      #(\"pink\", [\"255\", \"175\", \"243\"]),\n    ],\n  ),\n]\n\npub fn main() {\n  shellout.arguments()\n  |\u003e shellout.command(run: \"ls\", in: \".\", opt: [])\n  |\u003e result.map(with: fn(output) {\n    io.print(output)\n    0\n  })\n  |\u003e result.map_error(with: fn(detail) {\n    let #(status, message) = detail\n    let style =\n      shellout.display([\"bold\", \"italic\"])\n      |\u003e dict.merge(from: shellout.color([\"pink\"]))\n      |\u003e dict.merge(from: shellout.background([\"brightblack\"]))\n    message\n    |\u003e shellout.style(with: style, custom: lookups)\n    |\u003e io.print_error\n    status\n  })\n  |\u003e result.unwrap_both\n  |\u003e shellout.exit\n}\n```\n\n### 🐚 You can test the above example with your shell!\n\n• In your terminal\n\n```shell\n\u003e cd my_project\n\u003e gleam run -- -lah\n# ..\n\u003e gleam run -- --lah\n# ..\n\u003e gleam run --target=javascript -- -lah\n# ..\n\u003e gleam run --target=javascript -- --lah\n# ..\n```\n\n\u003cbr\u003e\n\n## Installation\n\n### As a dependency of your Gleam project\n\n• Add `shellout` to `gleam.toml`\n\n```shell\ngleam add shellout\n```\n\n### As a dependency of your Mix project\n\n• Add `shellout` to `mix.exs`\n\n```elixir\ndefp deps do\n  [\n    {:shellout, \"~\u003e 1.7\"},\n  ]\nend\n```\n\n### As a dependency of your Rebar3 project\n\n• Add `shellout` to `rebar.config`\n\n```erlang\n{deps, [\n  {shellout, \"1.7.0\"}\n]}.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftynanbe%2Fshellout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftynanbe%2Fshellout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftynanbe%2Fshellout/lists"}