# 🌈 MOTO: A Versatile Automation & Scripting System ## Overview :moto is a versatile scripting language and automation tool designed to simplify task automation across various environments and languages. It provides a unified and intuitive syntax for defining tasks, leveraging multiple runtimes, and orchestrating complex workflows. ## Key Features - **Multi-language Support**: :moto seamlessly integrates with multiple programming languages, including Dart, Rust, Python, JavaScript, and more. You can write code in your preferred language within a single :moto script. - **Custom Runtimes**: Extend :moto's capabilities by defining custom runtimes for additional languages or execution environments. Specify the necessary setup and execution steps for each language. - **Task Definition and Execution**: Define reusable tasks that encapsulate specific actions or operations. Tasks can be associated with different runtimes and executed seamlessly within the :moto script. - **Shell Execution**: Execute shell commands and scripts using the built-in `:shell` runtime. Integrate with the underlying operating system for file manipulation, process management, and system operations. - **Code Generation**: Generate code files dynamically using string interpolation and file output redirection. Create source files in different languages based on the script's logic. - **Text Blocks**: Define reusable text blocks that can be referenced and interpolated within tasks or other blocks. Store common code snippets, templates, or static content for easy reuse. ## Installation To install :moto, use the following command: ```shell cargo install moto ``` ## Usage Here's a brief overview of the :moto language syntax: ### Variables ```moto let name = "John" let age = 30 let isMarried = false let hobbies = ["reading", "coding", "gaming"] ``` ### Tasks ```moto task hello { echo "Hello, $ENV{USER}!" }:ps ``` ### Runtimes ```moto task greetings_from_dart { void main() { print("Hello from Dart"); } }:dart task greet_from_rust { fn main() { println!("Hello from Rust"); } }:rust ``` ### Custom Runtimes ```moto runtime csharp { let x = 5; task run { $something = @'[:block]'@ $something | Out-File -FilePath "./_.cs" -Encoding UTF8 csc "./_.cs" ./_.exe }:shell }:moto ``` ### Blocks ```moto block story { Once upon a time, there was a small village. }:text task read_story { echo [:story] }:ps ``` ## Contributing Contributions to :moto are welcome! If you encounter any issues, have suggestions for improvements, or would like to contribute new features, please open an issue or submit a pull request on the [GitHub repository](https://github.com/moniverse/moto). --- Feel free to explore the power and versatility of :moto in your automation and scripting tasks. Happy automating! 🚀