<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jakob</title>
    <description>The latest articles on DEV Community by Jakob (@simulatan).</description>
    <link>https://dev.to/simulatan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F886428%2F20d246a6-124e-4c7c-9f84-be74613c8bed.jpeg</url>
      <title>DEV Community: Jakob</title>
      <link>https://dev.to/simulatan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/simulatan"/>
    <language>en</language>
    <item>
      <title>Managing your Dotfiles with Dotter (Tutorial)</title>
      <dc:creator>Jakob</dc:creator>
      <pubDate>Wed, 06 Jul 2022 08:00:03 +0000</pubDate>
      <link>https://dev.to/simulatan/managing-your-dotfiles-with-dotter-tutorial-5e2j</link>
      <guid>https://dev.to/simulatan/managing-your-dotfiles-with-dotter-tutorial-5e2j</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover Image by &lt;a href="https://pixabay.com/users/susannp4-1777190" rel="noopener noreferrer"&gt;Susan Mielke&lt;/a&gt; on &lt;a href="https://pixabay.com/photos/cat-young-animal-kitten-gray-cat-2083492/" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hello and welcome to my very first blog post! In this tutorial, you'll learn how YOU can manage your Dotfiles with a great tool called Dotter, and sync those Dotfiles to Git(Hub).&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Dotfiles?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;In Linux, everything is a File&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;True to this quote, when you configure things in Linux, you often times actually write that config to a file, mostly in a format like TOML, YAML, JSON, or similar. Those files often get stored in &lt;code&gt;~/.config/myprogram&lt;/code&gt;, which allows for easy backups and it's a cleaner architecture. However, some programs save their config in the Home Directory of the User, and mostly with the prefix &lt;code&gt;.&lt;/code&gt;, because in Linux, Files with the Prefix &lt;code&gt;.&lt;/code&gt; are hidden per default, and after all, we don't want to see config files when browsing the file system. Thus, those config files are called the "Dotfiles".&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should I save / backup those dotfiles?
&lt;/h2&gt;

&lt;p&gt;Remember the last time you got a new PC and had to set up everything again? I personally experienced this 2 weeks ago, and wanted a solution, so I searched, and found the concept of Dotfiles. By backing them up on, say, GitHub, you can&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;easily share them and ask for help&lt;/li&gt;
&lt;li&gt;migrate to a new computer far quicker&lt;/li&gt;
&lt;li&gt;take your config files with where you go, they're just a &lt;code&gt;git clone&lt;/code&gt; away (and you have to run the executable, but more on that later)&lt;/li&gt;
&lt;li&gt;easily restore your configs when your computer stops working&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alright, cool, now, how do I even do that?
&lt;/h2&gt;

&lt;p&gt;I'm glad you asked! There are plenty of dotfiles managers out there, like &lt;a href="https://chezmoi.io/" rel="noopener noreferrer"&gt;chezmoi&lt;/a&gt;, &lt;a href="https://github.com/anishathalye/dotbot" rel="noopener noreferrer"&gt;Dotbot&lt;/a&gt;, or &lt;a href="https://yadm.io/" rel="noopener noreferrer"&gt;yadm&lt;/a&gt; (you can see a list &lt;a href="https://dotfiles.github.io/utilities/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and a comparison table (from chezmoi, thus biased) &lt;a href="https://www.chezmoi.io/comparison-table/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. But for this tutorial (and &lt;a href="https://github.com/SIMULATAN/dotfiles" rel="noopener noreferrer"&gt;my dotfiles&lt;/a&gt;), I chose &lt;a href="https://github.com/SuperCuber/dotter/" rel="noopener noreferrer"&gt;dotter&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  But, why would I use dotter, when there are so many alternatives out there?
&lt;/h2&gt;

&lt;p&gt;For me, dotter has a few good reasons for why to use it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handlebars support - If you want to add some logic and "dynamicness" to your dotfiles, you can use Handlebars! There are several built-in helpers, and you can make your own, in the language &lt;a href="https://github.com/rhaiscript/rhai" rel="noopener noreferrer"&gt;rhai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Portable Binary - you don't have to install anything, just download the compiled binary from the releases (or build it yourself), run it, and you got your whole dotfiles manager with you wherever you go. You can even push the binary to your repository for even faster onboarding without having to install ANYTHING - not even a scripting language!&lt;/li&gt;
&lt;li&gt;It supports symlinks AND copying (if you use templating)&lt;/li&gt;
&lt;li&gt;[PERSONAL] Complete Control with Git - unlike chezmoi, you can just use the git commands to check the deployment / syncing status, which makes for a far faster onboarding and it's (in my opinion!) far easier to get used to&lt;/li&gt;
&lt;li&gt;[PERSONAL] Nice configurating - I really like the way you configure it, different things are organized in "packages", and you can choose which packages to use locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alright, now let's get our hands dirty! (the actual Tutorial)
&lt;/h2&gt;

&lt;p&gt;I'm glad you're still here, even after this large part, so now, let's finally get started with making our own dotfiles repository!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new repository with &lt;a href="https://github.com/SIMULATAN/DotterTemplate" rel="noopener noreferrer"&gt;this&lt;/a&gt; template&lt;/li&gt;
&lt;li&gt;Clone the repository, preferably in a subfolder in your home directory (for example in &lt;code&gt;~/.dotfiles&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Rename the &lt;code&gt;.dotter/local.example.toml&lt;/code&gt; to &lt;code&gt;.dotter/local.toml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Modify the files to your likings - documentation is available &lt;a href="https://github.com/SuperCuber/dotter/wiki/Setup-and-Configuration" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;"Deploy" the files to their respective locations by using - you can do this by running &lt;code&gt;./dotter deploy&lt;/code&gt;. NOTE: you HAVE to do this on the same layer as the &lt;code&gt;.dotter&lt;/code&gt; folder lays, otherwise it won't detect the configs. "Deploying" is what delivering the files to their final destination is called in the dotter context.&lt;/li&gt;
&lt;li&gt;If the file you're trying to deploy already exists, use the &lt;code&gt;--force&lt;/code&gt; flag - this will &lt;strong&gt;overwrite&lt;/strong&gt; existing files, so use with caution!&lt;/li&gt;
&lt;li&gt;If you want to be able to change and deploy configs on the fly, run &lt;code&gt;dotter watch&lt;/code&gt; - this will automatically run &lt;code&gt;deploy&lt;/code&gt; every time a change in the filesystem is registered - you can even &lt;a href="https://github.com/SIMULATAN/dotfiles/blob/main/tips/DOTTER_WATCH_SERVICE.md" rel="noopener noreferrer"&gt;put this into a systemd service&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;If you want your changes to be synced, just do &lt;code&gt;git commit&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt; in the dotfiles folder like you'd do in a normal git repository - after all, it is literally that!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a very short and high-level overview, if you want to know how to do templating, use helpers, and other powerful things, please refer to the &lt;a href="https://github.com/SuperCuber/dotter/wiki" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; - it features pretty much everything you'll need! If you need further help, please reach out to me&lt;/p&gt;

&lt;h2&gt;
  
  
  A few nice-to-knows relating dotter
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A function that allows you to &lt;code&gt;cd&lt;/code&gt; into your dotfiles folder from anywhere, or open your Git Repo (source this function, for example by putting it in your zshrc)
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Rhai-Script that checks for a boolean
(markdown's ifs evaluate as "true" if the condition prints out anything, but sometimes, your condition prints out "true" OR "false", which causes it to always evaluate to true - this script fixes that)
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Post-Deploy script that sends a notification once dotter deployed changes (especially useful for &lt;code&gt;dotter watch&lt;/code&gt;)
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Post-Deploy script that automatically reloads i3 once changes are detected (IN ANY DOTFILE IN YOUR REPO!) - IMPORTANT: the &lt;code&gt;bool.rhai&lt;/code&gt; script is required!
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;I really hope you learned something new in this tutorial! Thanks a lot for reading through, and please, share feedback in the comments. This is my very first time writing a blog post, and I'd really appreciate some constructive criticism. If you need any help, you can either &lt;a href="https://discord.com/users/505713760124665867" rel="noopener noreferrer"&gt;message me on discord (@simulatan)&lt;/a&gt;, send me an email (&lt;a href="mailto:jakob@simulatan.me"&gt;jakob@simulatan.me&lt;/a&gt;), add a comment to the &lt;a href="https://gist.github.com/SIMULATAN/ec8b753a415d408c869775e815e83536" rel="noopener noreferrer"&gt;gist&lt;/a&gt; or open an issue on the &lt;a href="https://github.com/SIMULATAN/DotterTemplate" rel="noopener noreferrer"&gt;template repository&lt;/a&gt; (if related to said template)&lt;/p&gt;

&lt;p&gt;Many questions related to dotter can be answered by &lt;a href="https://github.com/SuperCuber/dotter/wiki" rel="noopener noreferrer"&gt;the wiki&lt;/a&gt;, which is well-written in my opinion. The author, SuperCuber, is also super helpful and kind, so if you face problems that are related to dotter, just open an issue. Also, PRs are welcome, so feel free to contribute!&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Dotter&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SuperCuber" rel="noopener noreferrer"&gt;
        SuperCuber
      &lt;/a&gt; / &lt;a href="https://github.com/SuperCuber/dotter" rel="noopener noreferrer"&gt;
        dotter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A dotfile manager and templater written in rust 🦀
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;What is Dotter?&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Dotter is a dotfile manager and templater.&lt;/p&gt;
&lt;p&gt;Dotfiles are &lt;em&gt;configuration&lt;/em&gt; files that usually live in the home directory and start with a dot
Often times, it is desirable to have a backup of all the configurations on your system, which is why a lot of users have their dotfiles saved in a git repository, then symlinking them to their target locations using &lt;code&gt;ln -s&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;However, there are several issues with that barebones approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hard to keep track of what comes from where once you have more than a handful of dotfiles&lt;/li&gt;
&lt;li&gt;Tedious to setup on a new machine - you need to manually create every single link&lt;/li&gt;
&lt;li&gt;No real way to handle differences between machines - say you want the battery meter on your bar to not appear on your desktop machine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dotter aims to solve all those problems by providing a flexible configuration and automatic…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SuperCuber/dotter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
My template repository&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SIMULATAN" rel="noopener noreferrer"&gt;
        SIMULATAN
      &lt;/a&gt; / &lt;a href="https://github.com/SIMULATAN/DotterTemplate" rel="noopener noreferrer"&gt;
        DotterTemplate
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀 a template repository that helps you bootstrap your dotfiles repository with dotter
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Nice-to-have dotter scripts&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Rhai (scripting language for Dotter's Handlebar Helpers)&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rhaiscript" rel="noopener noreferrer"&gt;
        rhaiscript
      &lt;/a&gt; / &lt;a href="https://github.com/rhaiscript/rhai" rel="noopener noreferrer"&gt;
        rhai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Rhai - An embedded scripting language for Rust.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Rhai - Embedded Scripting for Rust&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3c5f84835e3f87f6a59edb755e4d6c730fdbd962383c61a34581389441796d9e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f726861697363726970742f726861693f6c6f676f3d676974687562"&gt;&lt;img src="https://camo.githubusercontent.com/3c5f84835e3f87f6a59edb755e4d6c730fdbd962383c61a34581389441796d9e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f726861697363726970742f726861693f6c6f676f3d676974687562" alt="GitHub last commit"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rhaiscript/rhai/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rhaiscript/rhai/workflows/Build/badge.svg" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rhaiscript/rhai" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9c6e8c064095aab9354cb9b66432c580be8dd57176eb6186502cfb9349f1e7f7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f726861697363726970742f726861693f7374796c653d666c6174266c6f676f3d676974687562" alt="Stars"&gt;&lt;/a&gt;
&lt;a href="https://github.com/license/rhaiscript/rhai" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d78c96ffb343f555bd69cb773662ce6bf66e306b48260d94f8c52f01212aa4dc/68747470733a2f2f696d672e736869656c64732e696f2f6372617465732f6c2f72686169" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://crates.io/crates/rhai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/984195cc2afb7fd7a048f2d103ab52f01dd7b9d2dd7478dbbe28b80cb2f32677/68747470733a2f2f696d672e736869656c64732e696f2f6372617465732f762f726861693f6c6f676f3d72757374" alt="crates.io"&gt;&lt;/a&gt;
&lt;a href="https://crates.io/crates/rhai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f37f5fbfcadba05d7cddd4be47419f9080ea111658a6c561e5513c817d73352f/68747470733a2f2f696d672e736869656c64732e696f2f6372617465732f642f726861693f6c6f676f3d72757374" alt="crates.io"&gt;&lt;/a&gt;
&lt;a href="https://docs.rs/rhai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d2a5d29706f6cc994db11caab65384d36ae2ef11d4a0708bcc113dc1cf92d042/68747470733a2f2f646f63732e72732f726861692f62616467652e7376673f6c6f676f3d646f63732d7273" alt="API Docs"&gt;&lt;/a&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=rhaiscript.vscode-rhai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4dddec5d2d2b1037bc16abf05f487a58c1cc2d494e5e9c8919049d4af8aeaba5/68747470733a2f2f696d672e736869656c64732e696f2f76697375616c2d73747564696f2d6d61726b6574706c6163652f692f726861697363726970742e7673636f64652d726861693f6c6f676f3d76697375616c2d73747564696f2d636f6465266c6162656c3d7673253230636f6465" alt="VS Code plugin installs"&gt;&lt;/a&gt;
&lt;a href="https://packagecontrol.io/packages/Rhai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b0ef120859ef0042e7673e0adcac23519cc34b79ae7ca2af5e3f301db85d5d97/68747470733a2f2f696d672e736869656c64732e696f2f7061636b616765636f6e74726f6c2f64742f526861692e7376673f6c6f676f3d7375626c696d652d74657874266c6162656c3d7375626c696d6525323074657874" alt="Sublime Text package downloads"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/HquqbYFcZ9" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c7f5b71ec8ce84ece438e55fca0493d1f854b8071224c4a938ccd3616b74bf49/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3736373631313032353435363838393835372e7376673f6c6f676f3d646973636f7264266c6162656c3d646973636f7264" alt="Discord Chat"&gt;&lt;/a&gt;
&lt;a href="https://rhaiscript.zulipchat.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e42051acba07273aaba66bd03e93ad8ea9c29fbbd0d6dda3f2868cb7d8bf001/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7a756c69702d6a6f696e5f636861742d627269676874677265656e2e7376673f6c6f676f3d7a756c6970" alt="Zulip Chat"&gt;&lt;/a&gt;
&lt;a href="https://www.reddit.com/r/Rhai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cb513cd4bf5f8d3b1cef5a863ea16ac530d02065bfdfa1c4151c9812c6c8559b/68747470733a2f2f696d672e736869656c64732e696f2f7265646469742f7375627265646469742d73756273637269626572732f526861693f6c6f676f3d726564646974266c6162656c3d726564646974" alt="Reddit Channel"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rhai.rs" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/552950cf9b05f00288f03170c34d72385a30ebd8dec0f1f02f2552c9e4b61b68/68747470733a2f2f726861692e72732f626f6f6b2f696d616765732f6c6f676f2f726861692d62616e6e65722d7472616e73706172656e742d636f6c6f75722e737667" alt="Rhai logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rhai is an embedded scripting language and evaluation engine for Rust that gives a safe and easy way
to add scripting to any application.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Targets and builds&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;All CPU and O/S targets supported by Rust, including
&lt;ul&gt;
&lt;li&gt;WebAssembly (WASM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-std&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Minimum Rust version 1.66.0&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Standard features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Simple language similar to JavaScript+Rust with &lt;a href="https://rhai.rs/book/language/dynamic.html" rel="nofollow noopener noreferrer"&gt;dynamic&lt;/a&gt; typing.&lt;/li&gt;
&lt;li&gt;Fairly efficient evaluation - 1 million iterations in 0.14 sec on a single-core 2.6 GHz Linux VM running &lt;a href="https://github.com/rhaiscript/rhai/blob/main/scripts/speed_test.rhai" rel="noopener noreferrer"&gt;this script&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tight integration with native Rust &lt;a href="https://rhai.rs/book/rust/functions.html" rel="nofollow noopener noreferrer"&gt;functions&lt;/a&gt; and &lt;a href="https://rhai.rs/book/rust/custom-types.html" rel="nofollow noopener noreferrer"&gt;types&lt;/a&gt;, including &lt;a href="https://rhai.rs/book/rust/getters-setters.html" rel="nofollow noopener noreferrer"&gt;getters/setters&lt;/a&gt;, &lt;a href="https://rhai.rs/book/rust/methods.html" rel="nofollow noopener noreferrer"&gt;methods&lt;/a&gt; and &lt;a href="https://rhai.rs/book/rust/indexers.html" rel="nofollow noopener noreferrer"&gt;indexers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Freely pass Rust values into a script as &lt;a href="https://rhai.rs/book/language/variables.html" rel="nofollow noopener noreferrer"&gt;variables&lt;/a&gt;/&lt;a href="https://rhai.rs/book/language/constants.html" rel="nofollow noopener noreferrer"&gt;constants&lt;/a&gt; via an external &lt;a href="https://rhai.rs/book/engine/scope.html" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;Scope&lt;/code&gt;&lt;/a&gt; - all clonable Rust types are supported; no need to implement any special trait. Or tap directly into the &lt;a href="https://rhai.rs/book/engine/var.html" rel="nofollow noopener noreferrer"&gt;variable resolution process&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Built-in support for most common &lt;a href="https://rhai.rs/book/language/values-and-types.html" rel="nofollow noopener noreferrer"&gt;data types&lt;/a&gt; including booleans, &lt;a href="https://rhai.rs/book/language/numbers.html" rel="nofollow noopener noreferrer"&gt;integers&lt;/a&gt;, &lt;a href="https://rhai.rs/book/language/numbers.html" rel="nofollow noopener noreferrer"&gt;floating-point numbers&lt;/a&gt; (including &lt;a href="https://crates.io/crates/rust_decimal" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;Decimal&lt;/code&gt;&lt;/a&gt;)…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rhaiscript/rhai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>linux</category>
      <category>dotfiles</category>
      <category>dotter</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
