MyNixOS: Flake-centric website for Nix/NixOS configs (v. 0)

Hello! I’m posting to announce MyNixOS, a small Nix/NixOS dedicated website I started building last year. During quarantine I wanted to grok a new technology, and spent the time reading Nix manuals. I’ve really enjoyed using NixOS to manage my software environments, and wanted to build a way to create and share Nix configurations.

Today I’m posting version zero of the website, with a link to sign up for the alpha version when it becomes available. Currently the site can be used to discover indexed content. Most of the packages/options in the Nix registry are indexed (missing: agda/fenix/mach-nix/nixos-homepage/blender-bin). The plan is to follow a GitHub model, where core functionality stays free, and premium features are planned to fund further development.

Project website: https://www.mynixos.com/
Project chat: https://matrix.to/#/#mynixos:matrix.org

Fun feature: Press O/P to navigate to random options/packages after the index has been loaded (shown as a green icon at the bottom after performing a search).

PS: Note that the first search is slower as it fetches the search index. Following searches will be quicker.

16 Likes

The site looks great! Quick question, I’m new to Nix/NixOS and I’m struggling to figure out how this differs from the search at NixOS Search ?

1 Like

Hi @binarybana ! Cool to see other people new to Nix/NixOS. Regarding differences, this is my understanding:

In scope, NixOS Search is the stable and official way to search NixOS, while MyNixOS is an experiment to allow creating and sharing Nix/NixOS configurations. Currently, version zero of MyNixOS is available, which can only be used to discover content. This makes the sites seem pretty similar currently, but the differences will become more clear with the alpha version.

There’s also current practical differences, such as:

  • NixOS Search searches more fields than MyNixOS, such as the description field of options/packages.
  • NixOS Search offers more elaborate filtering of search results.
  • MyNixOS uses a local search index which gives faster searches.
  • MyNixOS indexes certain additional content, e.g. home-manager options.

I’ve been working on a round of changes which will be posted this week, including a changelog to keep track :slight_smile: If there’s any functionality you are looking for, please post here or use the sign-up form on the site.

An updated version of the site is now live (v0.0.5), which includes executables from nix-index as part of the search index (best effort made to filter correctly for executables). Thanks to @x10an14 for the suggestion! :slight_smile:

Changelog: Changelog - MyNixOS

Hello!

I’m posting a small update as the first alpha version of MyNixOS is now live.

To try out the MyNixOS alpha, please visit: Sign-up - MyNixOS

The initial MyNixOS alpha is being released as a minimally-useful version in order to start user testing, and to make it possible to ship smaller features more often, instead of having a large separate alpha branch.

Available alpha features:

  • Creating and sharing a flake configuration
    • After logging in to MyNixOS, click the “create” button on the upper right of the screen to start a new flake.
    • Create - MyNixOS
  • Adding and removing a package from a given flake configuration
    • After starting a flake and selecting it as your current flake using the flake selector, navigate to a package and click “Add to config” (currently limited to nixpkgs packages).
    • A package such as “roboto” will be added to the “fonts.fonts” config of your current flake.
    • A package such as “sl” will be added to the “environment.systemPackages” config option of your current flake.
  • Setting configuration options for a given flake configuration
    • After starting a flake and selecting it as your current flake using the flake selector, navigate to an option to assign it a configuration value.
    • An option such as “systemd.user.targets..requisite” shows three features:
      1. Setting a configuration value requires selecting a key for the <name>.
      2. Setting a configuration allows the manipulation of list entries.
      3. Each string list entry must match a given regular expression.
    • An option such as “services.bitcoind..dbCache” shows two features:
      1. Configuration values can either be set to “null” or an integer value.
      2. Configuration values must be integers between 4 and 16384 as set by the option constraints.
    • An option such as “time.timeZone” has a custom option type enabling selection of a timezone value.
    • Further option support will be added to ensure that all option types can be manipulated, as well as enable adding arbitrary settings, and enable raw editing of all options settings.
  • Releasing a flake
    • Navigate to your flake by clicking the flake selector to the upper right after selecting a flake. From the flake configuration page you can select the “release” button in the “versions” tab, which will create a release. From the “versions” page you can then get the link to download your release as a tarball.

An easy way to get started with testing MyNixOS is to add the tarball as an input to a flake you are already using, e.g.:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs";
    myflake.url = "https://api.mynixos.com/[USERNAME]/[FLAKENAME]/archive/latest.tar.gz";
  };
  outputs = inputs@{ self, nixpkgs, myflake, ... }
  {
    nixosConfigurations.myMachine = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [ ./configuration.nix myflake.nixosModules.default ];
    };
  };
}

Remember to update your flake lockfile after each new release in the web interface:

nix flake lock --update-input myflake

The following constraints have been chosen for the initial MyNixOS alpha version:

  • Single flake editing in internal format.
    • Support for converting existing Nix files to an internal format is a possible future addition.
  • Single default NixOS module.
    • Support for multiple modules is currently supported by the API, and web client support is planned to be added soon.
  • No support for NixOS configuration, overrides, or overlays.
    • Support for NixOS configurations is planned to be added soon, while overrides and overlays are planned to be delayed until later.
  • No specific support for home-manager.
    • Support for correctly using home-manager options is planned to be added soon.
  • No support for resource files.
    • Support is planned to be added soon.
  • No support for linking flakes directly.
    • Support is planned to be added soon.
  • No support for multi-channel flakes.
    • Partial support is planned to be added soon.

There’s a long list of planned features, but I’m trying to arrange the development to make the project useful as soon as possible. The project is actively developed to create further features, which can be tracked at: Changelog - MyNixOS

Support is available in: https://matrix.to/#/#mynixos:matrix.org

1 Like

Posting a project update for MyNixOS as the development continues :slight_smile:

The following is a summary of the new features by version:

v0.1.3: Added GitHub + Google login (in addition to username/email)
v0.1.6: Added development shells + support for multiple NixOS modules
v0.1.8: Added NixOS configuration support + ability to import modules within flakes
v0.1.9: Added attribute set type support for NixOS options (~90%+ of NixOS options currently have supported types, including UI controls)
v0.1.10: Added Markdown support to flakes
v0.1.11: Added locking UI to control flake input locking

Flake inputs interface:

Example showing two flake inputs and their corresponding locks, with functionality to update selected locks, roll back the lock change, or recreate the lock file.

Flake outputs interface:

Example showing the NixOS module nixos with 5 NixOS module imports and 1 NixOS option setting:

Some planned features:

  • Home-manager modules
  • UX for cross-flake module imports
  • User resource support for easily adding files to flake configurations
  • Multi-channel support

Is the source code public?

4 Likes

The source code is currently closed. This may change partially or fully over time, based on the development of the project.

Short status update, as version v0.1.12 was released yesterday, which adds basic Home Manager support.

  • Home Manager configurations and Home Manager modules can now be added as flake outputs.
  • Home Manager configurations can import Home Manager modules, and Home Manager modules can import other Home Manager modules.
  • NixOS configurations and NixOS modules can both import Home Manager configurations.
  • Packages can now also be added to the home.packages option.

A demo can be found here: https://mynixos.com/pveierland/home-manager-test

I don’t understand the benefits to use MyNixOS compared to search.nixos.org , is it the support for people submitting their flakes?

(don’t get me wrong, it’s a great project :+1:t3: )

2 Likes

Thank you Solene!

After starting with NixOS I wanted to create a UX to help make configuring NixOS easier for beginners. The idea with the MyNixOS website is that you can create and share nix flakes from the web browser without knowing how to write Nix directly, as it generates the Nix code for you. I realize that the front page alone does not describe this right now - this will be better communicated in a later update.

As stated earlier in the thread, the difference is then that search.nixos.org is the authoritative reference for looking up Nix/NixOS content, while MyNixOS is an experiment to see whether a useful UX can be built for creating and sharing flake configurations.

Currently you can:

  • Create flakes (press the green button on top after logging in).
  • Add outputs to flakes - currently supporting: development shell, Home Manager configs + modules, NixOS configs + modules.
  • Browse options and set settings. Most options have type support (90%+), which means that e.g. a regex will get checked, a list type will allow you to add items etc. UI is basic - please be gentle.
  • Browse packages and add them to a development shell, a Home Manager config/module (home.packages), or a NixOS config/module (environment.systemPackages). A package such as roboto will be added to fonts.fonts.
  • Create internal imports in flakes (cross-flake imports coming soon). Home Manager configs can import Home Manager modules, NixOS configs can import Home Manager configs and NixOS modules, NixOS modules can import NixOS modules.
  • Control flake inputs, adding/removing inputs and updating their locks.
  • Release flakes, which will build a tarball with the created flake config.

Some simple demos:

3 Likes

Awesome project! IMO, much better approach than a NixOS Installer UI.

It would be nice if a generalized version could be released that I can modify for a little bit of an on-hold project a la GitHub - divnix/hive: The secretly open NixOS-Society — meant, in spite of the readme, for NixOS beginners.

(Would essentially require a generalization of the flake writer interface)

1 Like

Thank you! Feel free to reach out on Matrix for a talk about details :slight_smile:

1 Like

Hello!

MyNixOS v0.1.15 is now live, which includes:

  • Upgraded free tier which includes 10 GB storage and 10 CPU-core hours.
  • Ability to upgrade to pro/premium tier for additional storage + compute.
  • Ability to build and download NixOS generate images, making it possible to configure and download an OS directly from the website.
  • Added 12 new help articles describing website features.
  • Many thanks to jtojnar and x10an14 for providing user feedback!

Feel free to check out the new frontpage at mynixos.com :slight_smile:

I’ll be at the NixCon events in Paris - thanks for the drinks tonight - feel free to reach out to have a chat!

Showcase of new cloud build feature:

Further updates resuming after returning from travel :slight_smile:

1 Like

hey @pveierland
i found mynixos here in the forum, and i’m really impressed.
but i run in some issue … after adding a input without url (home-manager) the update stuck forever…
even after 10 minutes it still says “Error: Only 1 concurrect actions(s) permitted.” (btw there is a typo … its concurrent)
Edit: it works again

another issue i have sometimes i have to reload the page, because when i add something it will disappear after seconds
my config is here…
https://mynixos.com/luxus/vps

1 Like

Thanks @luxus! You seem to have figured it out well - your configuration is the most advanced I’ve seen made using the site so far!

  • I’ve reset running actions (this will be exposed to users soon).
  • You must currently have a URL defined for all inputs, i.e. “home-manager” or “flake:home-manager”. I’ll fix the missing validation in the edit dialog, as well as the missing error propagation in the locking action. The release action fails correctly with the error “Failed to generate flake release. Failed to generate input ‘home-manager’: missing target.” if the URL is missing.
  • Typo fixed (updates in next release) - thanks!
  • I think each entry in boot.initrd.availableKernelModules should be added as a separate list entry by selecting “Add item”, instead of adding all entries as one string, although it might also work the way it is set up.

The state reverts because an operation on the server fails due to the client request. I’ll post an update once I find the reason for this.

i tried to get overlays working. for neovim and ragenix are overlays not supported yet?
from my understanding darwinConfigurations is not supported yet.
i want to reuse my home-manager config at the moment it supports only 1 arch? but i want to use it in aarch64-linux x86_64-linux aarch64-darwin x86_64-darwin

1 Like

Thank you for the feedback. Will post an update soon.

Again thanks for the input @luxus! Version 0.1.16 is now live which includes the following:

  • Added ability to cancel running actions.
  • Added fixes on backend + frontend for missing flake inputs.
  • Improved flake inputs interface, including autosuggest of URL if none is given.

Overlays are not yet supported, however as the Package and Path types are currently raw Nix expressions, you may enter them directly.

I’ve looked into the home-manager config issue, however the current implementation is intended to match the established flake output pattern of homeConfigurations.<name>, where each output is tied to a single system. The easiest current fix is to use Home Manager modules to define your HM-configuration, then add a Home Manager configuration per system user-luxus-aarch64-linux, user-luxus-x86_64-linux, etc. which each imports your Home Manager module. This way you’ll get reuse with some annoyance. I agree that this should be improved, I just haven’t found a good structure yet.

I’ll post an update soon with some further progress.

What you mean with enter them directly? after downloading them and editing? or is there a way to add raw nixcode?

the homemanager stuff is how i do it right now.

any plans to add renaming and duplication of flakes?