Stateless client/server remote development environments powered by Nix and Podman.
Project description
mnix
mnix is a lightweight Python implementation of a remote development workflow built around Nix flakes, SSH, and Podman.
The repository includes a root flake.nix, so mnix new can use the default ./flake.nix and nix develop works directly from the project root.
Commands
Client
mnix ls
mnix select [project-name]
mnix new [-f path/to/flake.nix] [--server server-name] project-name
mnix rebuild-switch [path/to/flake.nix] [--project project-name]
mnix shell [--project project-name]
mnix exec [--project project-name] -- command [args...]
mnix server ls
mnix server add ssh://user@example.com server-name
mnix server rm server-name
Server
The client talks to the server by invoking mnix-server over SSH. The server CLI is structured so it can later be reused behind Flask or FastAPI.
mnix-server project launch --name project-name --flake flake.nix
mnix-server project rebuild-switch --name project-name --flake flake.nix
mnix-server project shell --name project-name --flake flake.nix
mnix-server project exec --name project-name --flake flake.nix -- command [args...]
Configuration
Both client and server use TOML configuration.
Client config
Default path: ~/.config/mnix/client.toml
ssh_binary = "ssh"
remote_binary = "mnix-server"
remote_podman_binary = "podman"
default_server = "my-server"
database_path = "~/.local/state/mnix/client.db"
Server config
Default path: ~/.config/mnix/server.toml
podman_binary = "podman"
base_image = "docker.io/nixos/nix:latest"
workspace_root = "/tmp/mnix/workspaces"
warmup_command = "nix --extra-experimental-features 'nix-command flakes' develop -c true"
container_command = "sleep infinity"
Architecture
src/mnix/client: thin CLI, local SQLite state, SSH transport, workspace archiving.src/mnix/server/domain: domain entities and value objects.src/mnix/server/application: use cases for project launch and rebuild.src/mnix/server/infrastructure: Podman runner, config loading, workspace extraction.src/mnix/server/interfaces: server CLI adapter.
The current implementation is intentionally stateless on the server side: it stages a workspace, ensures a Podman container exists for the project, and returns command results directly to the client.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mnix-0.1.0.tar.gz.
File metadata
- Download URL: mnix-0.1.0.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e82a097f43750052f4ebbae5ef09e05a16b92f40ac05dc1ba2302833c346518
|
|
| MD5 |
066f979026a139a9181f83b7642bcde6
|
|
| BLAKE2b-256 |
82bb2372ff022e1104c3ef46905a210eb32600479967b134128b99a9cd32179f
|
Provenance
The following attestation bundles were made for mnix-0.1.0.tar.gz:
Publisher:
python-publish.yml on AvikantSrivastava/mecha-nix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mnix-0.1.0.tar.gz -
Subject digest:
7e82a097f43750052f4ebbae5ef09e05a16b92f40ac05dc1ba2302833c346518 - Sigstore transparency entry: 1542252759
- Sigstore integration time:
-
Permalink:
AvikantSrivastava/mecha-nix@8d444c17fa493609e13d2dba77d8b50b683ed483 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/AvikantSrivastava
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8d444c17fa493609e13d2dba77d8b50b683ed483 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mnix-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mnix-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d12ec2e9285c9a2c5eae77e91a1c80754638fa464b55ec26bac03628e746962b
|
|
| MD5 |
a3be973508a12f0f0f68bc1fdfad0aad
|
|
| BLAKE2b-256 |
cc010a672e89bd46443a2fffaf2ea3b7825e742d11781321f539087f772d52e1
|
Provenance
The following attestation bundles were made for mnix-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on AvikantSrivastava/mecha-nix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mnix-0.1.0-py3-none-any.whl -
Subject digest:
d12ec2e9285c9a2c5eae77e91a1c80754638fa464b55ec26bac03628e746962b - Sigstore transparency entry: 1542252889
- Sigstore integration time:
-
Permalink:
AvikantSrivastava/mecha-nix@8d444c17fa493609e13d2dba77d8b50b683ed483 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/AvikantSrivastava
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8d444c17fa493609e13d2dba77d8b50b683ed483 -
Trigger Event:
release
-
Statement type: