What is Salo?

Salo is a configuration language for operating systems. It aims to be a ready-to-go solution for everyone who wants a reliable, composable OS configuration experience for themselves and their team.

OS configuration often takes many steps and happens over time. Information about the "how" and "when" a specific property of a deployed machine was changed is spread thin, and is usually kept in the minds of the people who changed said properties. This information is not made easily available to any curious developer, nor is it made clear exactly how these changes were done.

Small, medium-sized, and even large businesses commonly resort to subpar methods of documenting the configuration on their machines: writing them down somewhere, for example. This results in poor expressiability and a spoiled developer experience. Changing just one part of an OS in-production requires time to research and ensure that it doens't break anything else.

That's why we created Salo: An open source solution accessible to everyone, designed to meet a vast majority of needs. Requiring very little effort to be set up, yet highly customizable.

Our solution delivers an expressive, composable, strongly-typed solution for building, deploying, and configuring operating systems on-the-fly.

Features

  • Expressive type system (dependent, first-class functions and types)
  • Efficient deployment (leveraging diffs to only deploy what you need)
  • On-the-fly changes (configuring systems as quickly as possible)
  • Powerful history management (view configuration history, and rollback to previous deployments)
  • Staged changes (see exactly what your configuration does, before it's deployed)

Read more about the features we provide.

Philosophy

Salo is committed to providing composable, strongly-typed, expressive OS configuration that focuses on the needs of your development team.

Read more about our thoughts on our philosophy.

Features

Salo focuses on expressive, composable, strongly-typed solutions for configuration.

Expressive type system

Salo's type system features first-class functions, first-class types, and dependent typing. This combination of powerful typing allows types to be as expressive as the language itself.

Efficient deployment

Very frequently in the strongly-typed world, users sacrifice performance for composable typing. This is not the case for Salo: we use efficient, difference-based based deployment to only deploy what you need.

On-the-fly changes

Salo's simple, expressive syntax means you can make a change in a flash. From migrating to a different base distribution, to adding a few new packages to your OS, it's all just a few lines of code away.

Powerful history management

Salo's rollback system allows you to not only observe what configurations looked like in the past, but to go back to any given one. Quickly undo changes, or restart a project in a completely new direction: Salo has you covered.

Staged changes

Staging changes allows you to quickly and easily visualise what a change in configuration will do to your OS. See what packages were added, which files are changed, all before deployment!

Done reading, but want to keep going? Our philosophy may interest you. See you there!

Philosophy

The Salo project is the fruit of a community that is passionate about composable, strongly-typed, expressive configuration. We also believe in efficiency and reliability, which reflects in Salo's core design principles. In sum, Salo is designed to:

  • Be as composable as possible,
  • Be as efficient as possible,
  • and Be as scalable as possible.

These are the key thoughts we keep in mind during every new feature, PR, and bug fix. Our work orbits around these three values - and by using Salo, so does yours.

Wondering where to go next? How about the installation. We'll walk you through installing Salo, creating a quick Salo configuration, and running it in a virtual machine. See you there!

Comparison to alternatives

We know that this table is written in a way to highlight Salo's strengths, and to put a spotlight on other projects' weaknesses. Hence, we strongly encourage you to try out each project yourself. In some cases, projects such as Nix and Nickel will do you much better than Salo - and that's okay! Salo is meant for a niche project set. However, if you believe that the above points are important to you, then you're at the right place already.

Without further ado, here is our comparison to alternatives:

NameStrongly-typed?Built-in deployment?
Salo
Nix
Nickel

Know another form of configuration? Something up-to-par with Salo? Send us a pull request!

Want something else to read? How about our philosophy, or maybe you're even ready to get started!

Contact us

Chat 💬

Our preferred method of communication is the Discord server of our OSS organization, Nexus Aurora. Chat fluidity helps us to hear from you at any time, and allows multiple users to send their insights in a discussion asynchronously. Pop in, shout out that you're here about Salo (from the SEMC project), and you'll hear a response in no time.

Your project announcements, feature proposals, supports queries and sweet, sweet praise all belongs in the chat.

Forum 📋

Don't like chat-based discussion on Discord? You can join us on our forum on GitHub discussions! Asynchronous long-form discussion allows us to help with questions and support one step at a time. Anything that belongs in the chat belongs here, too - we just want to hear from you, regardless of the medium!

GitHub issues 🔩

Bug reports should be added as issues in the Salo repository.

Any suggestion or feedback is highly appreciated. Thank you for your support!

Getting Started

We think it's awesome that you're ready to become a Salo writer (Salo-er? Saloist?)! The following pages will get you started on installing, writing, and running Salo. Get ready to get Salo with Stack, write some Salo with the editor language extensions, and run your configured OS in a VM!

Ready? You should go on to installation!

Installation

As of yet, Salo is not production ready. In fact, most of the standard remains barely implemeneted. If you're looking to install Salo, clone the repository, then run (with Stack installed):

stack run -- --help

That's all! Stack is great, because it will build everything for you under-the-hood.

If you have any issues during installation, give us an issue. We'd love to look at what's going wrong, and what we can do to help.

Ready? Let's start writing some Salo!

Syntax

Ready to write some Salo? Let's go through some basic language features.

Comments

There are two forms of comments in Salo: regular comments and documentation comments. A regular comment, denoted by two dashes (--) or a curly brace and a dash ({-, -}) are comments that Salo will completely ignore.

-- Hello, world!

Three-dash comments (---), or a curly brace and two dashes ({--, --}) denote documentation comments. These comments are seen by Salo, and included when you run salo doc. Unlike regular comments, these comments must be tied to some expression in your code, like so:

--- This is some value x.
x = 0

Doc comments that are not "attached" to a piece of code are called tangling comments. These generate warnings in Salo, but pass compilation. Tangling comments are not recommended.

Variables

Variables are immutable by default in Salo.

TODO: To be continued!

What's next?

Core concepts

Derivations

Expressions

Modules

Advanced topics

Realtime decision

Cookbooks

Salo in production

Contributing