{"id":49321214,"url":"https://github.com/juspay/nixden","last_synced_at":"2026-04-27T19:01:00.197Z","repository":{"id":352944679,"uuid":"1217285550","full_name":"juspay/nixden","owner":"juspay","description":"Isolated NixOS-based devbox for Mac users and others","archived":false,"fork":false,"pushed_at":"2026-04-25T14:44:53.000Z","size":65,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T16:20:02.100Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://juspay.github.io/nixden","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juspay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-21T18:25:35.000Z","updated_at":"2026-04-25T16:08:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/juspay/nixden","commit_stats":null,"previous_names":["juspay/lima-nixos-demo","juspay/nixden"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/juspay/nixden","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juspay%2Fnixden","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juspay%2Fnixden/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juspay%2Fnixden/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juspay%2Fnixden/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juspay","download_url":"https://codeload.github.com/juspay/nixden/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juspay%2Fnixden/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32307015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T17:23:19.671Z","status":"ssl_error","status_checked_at":"2026-04-26T17:23:19.195Z","response_time":129,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-26T18:00:57.028Z","updated_at":"2026-04-26T18:00:57.805Z","avatar_url":"https://github.com/juspay.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nixden\n\nIsolated NixOS-based devbox for Mac users and others — a [`justfile`](justfile) + flake that boots and provisions a customized NixOS VM via [Lima](https://lima-vm.io/).\n\n## Requirements\n\n- [Nix](https://nixos.asia/en/install) (everything else comes from the devShell)\n- [`just`](https://github.com/casey/just)\n\nRun `nix develop` once to enter a shell with `lima`, `just`, and `gh` pinned, or let each recipe invoke `nix develop -c` automatically.\n\nIf you only want to run the published nixden image, you do not need Nix or this repository. See [Non-Nix users](#non-nix-users).\n\n## Non-Nix users\n\nYou can use the published nixden image with Lima only. You do not need Nix or this repository.\n\nInstall Lima first. On macOS with Homebrew:\n\n```sh\nbrew install lima\n```\n\nFor MacPorts, binary archives, or other hosts, see the [Lima installation docs](https://lima-vm.io/docs/installation/).\n\nLaunch nixden:\n\n```sh\ncurl -fsSL https://juspay.github.io/nixden/start | sh -\n```\n\nThe script creates `/tmp/lima-nixden`, sizes CPU / memory / disk from your host, starts the latest published release image, and prints the next commands. If `nixden` is already running, it says so and leaves it alone. If the VM exists but is stopped, it starts it. If the image is not cached yet, Lima downloads it.\n\nOpen a shell:\n\n```sh\nlimactl shell --workdir=. nixden\n```\n\nUse `--workdir=.` because nixden does not mount your macOS home directory. Plain `limactl shell nixden` makes Lima try to enter your macOS current directory inside the guest when any host mount exists, and that path is intentionally unavailable.\n\nTo customize the launch:\n\n```sh\ncurl -fsSL https://juspay.github.io/nixden/start | sh -s -- --help\ncurl -fsSL https://juspay.github.io/nixden/start | sh -s -- --tag \u003ctag\u003e\ncurl -fsSL https://juspay.github.io/nixden/start | sh -s -- --cpus 8 --memory 16 --disk 200\n```\n\nClone projects inside the VM:\n\n```sh\nmkdir -p ~/code \u0026\u0026 cd ~/code\ngit clone …\n```\n\nMove files intentionally through the scratch directory:\n\n```sh\n# On macOS:\ncp ./some-file /tmp/lima-nixden/\n\n# Inside nixden:\ncp /tmp/lima-nixden/some-file .\n```\n\nTo stop or delete the VM:\n\n```sh\nlimactl stop nixden\nlimactl delete nixden\n```\n\nIf you prefer not to pipe a script into `sh`, download it first:\n\n```sh\ncurl -fsSLO https://juspay.github.io/nixden/start\nsh start --help\nsh start\n```\n\nOr call Lima directly:\n\n```sh\ntag=\u003ctag\u003e\nlimactl start --name=nixden \"https://github.com/juspay/nixden/releases/download/$tag/nixden-lima.yaml\"\n```\n\n## Usage\n\n```sh\njust              # list recipes\njust start        # create + boot the VM from the latest release image\njust start dev    # create + boot the VM from the mutable dev release image\njust shell        # open a shell in the VM, starting in the guest home\njust stop         # stop the VM\njust delete       # remove the VM\njust delete-downloaded-images dev # clear cached Lima image downloads for dev\njust recreate     # wipe and start fresh\njust list         # list all Lima VMs\n```\n\nFirst `just start` downloads and boots the latest `juspay/nixden` GitHub release template. That template keeps the locked `nixos-lima` integration defaults, points at the matching nixden qcow2 assets with SHA-512 digests, and mounts only `/tmp/lima-nixden` from the host for intentional file transfer.\n\nThe VM name is `nixden`, and the guest user defaults to your macOS `$USER`. CPU / memory / disk default to `host cores − 2`, `host RAM − 4 GiB`, and `half of host free disk`. Memory is a ceiling (the vz driver demand-pages from the host); disk is a ceiling (Lima's qcow2 is sparse and grows lazily); CPU over-subscription is cheap. Override any default with `just --set`, e.g. `just --set cpus 4 --set memory 16 --set disk 200 start`.\n\n## What's in the VM\n\nVia [`nixos/nixden.nix`](nixos/nixden.nix): `nix-ld`, flakes, [`nixos-vscode-server`](https://github.com/nix-community/nixos-vscode-server), `starship`, `direnv` + `nix-direnv`, `btop`, `just`, `gh`.\n\n## Release images\n\nThe flake can build baked Lima-compatible qcow2 images from `nixosConfigurations.nixden-aarch64.config.system.build.images.qemu-efi` and `nixosConfigurations.nixden-x86_64.config.system.build.images.qemu-efi`. Publishing a GitHub release triggers the release-image workflow, which uploads `nixden-\u003ctag\u003e-aarch64.qcow2`, `nixden-\u003ctag\u003e-x86_64.qcow2`, matching SHA-512 files, and `nixden-lima.yaml` to that release.\n\n`just start` uses `https://github.com/juspay/nixden/releases/latest/download/nixden-lima.yaml`; `just start dev` uses `https://github.com/juspay/nixden/releases/download/dev/nixden-lima.yaml`.\n\nBecause the `dev` release is mutable, `just recreate dev` clears matching Lima image cache entries before starting. Tagged releases keep Lima's normal download cache.\n\n## Cutting a release\n\nAfter merging release-image changes, create a GitHub release:\n\n```sh\njust release v0.1.0\n```\n\n`just release` generates release notes from Conventional Commits since the latest tag, creates the GitHub release, and starts the `Release Images` workflow. The workflow builds and compresses the x86_64 image on the self-hosted `x86_64-linux` runner and the aarch64 image on GitHub's `ubuntu-24.04-arm` runner, then uploads the qcow2, SHA-512, and Lima template assets to the release.\n\nTo preview the generated notes:\n\n```sh\njust release-notes v0.1.1\n```\n\nFor PR testing, use the mutable dev prerelease:\n\n```sh\njust release-development\n```\n\nThat recreates the `dev` release at the current branch and dispatches the image workflow on that branch. Its assets are overwritten on each run, so use it only for disposable testing.\n\n## Conventional Commits\n\nThis repo uses squash merges, so PR titles should follow Conventional Commits. The merged commit title becomes the release-note input.\n\nUse types like `feat`, `fix`, `docs`, `ci`, `build`, `refactor`, `test`, and `chore`, with an optional scope:\n\n```text\nfeat: boot nixden from release image\nfix(lima): clear mutable dev image cache\ndocs: document release workflow\n```\n\n## Security model\n\nThis is a local, single-user nixden VM, not a hardened multi-user host. The passwordless sudo behavior comes from `nixos-lima`: `lima-init` creates a guest user matching your macOS `$USER` and adds it to `wheel`, while the `nixos-lima` module sets `security.sudo.wheelNeedsPassword = false`. This repo currently keeps that behavior.\n\nSSH access uses Lima's generated config under `~/.lima/nixden/ssh.config`, so this repo does not mutate your global `~/.ssh/config`. The VM does not mount your macOS home directory. The only default host mount is `/tmp/lima-nixden`, mounted writable at the same path in the guest so you can intentionally transfer files across the boundary. Treat it as a scratch exchange directory, not a workspace or secrets store.\n\n## Installing more tools\n\nFor ad hoc user-level tools inside the VM, use `nix profile install`, e.g. `nix profile install nixpkgs#ripgrep`.\n\nFor declarative user packages, dotfile management, and systemd user services, use Home Manager from the [`juspay/nixos-unified-template`](https://github.com/juspay/nixos-unified-template).\n\n## SSH access\n\n```sh\njust ssh                # SSH into the VM (uses Lima's generated config, no global mutation)\njust ssh uname -a       # run a command over SSH\njust ssh-config         # print Lima's generated SSH config\n```\n\n## VSCode Remote-SSH\n\nPoint VSCode at Lima's generated SSH config — no `~/.ssh/config` mutation, no tunnel service:\n\n1. `Cmd-Shift-P` → **Remote-SSH: Settings** → set **Config File** to `~/.lima/nixden/ssh.config`.\n2. `Cmd-Shift-P` → **Remote-SSH: Connect to Host…** → pick `lima-nixden`.\n\nThat's the whole setup. Subsequent connects are one command.\n\n## Working on projects inside the VM\n\nFor development, clone repos into the guest's own filesystem (writable, faster, no 9p overhead):\n\n```sh\njust ssh\nmkdir -p ~/code \u0026\u0026 cd ~/code\ngit clone …\n```\n\nTo move files between macOS and the VM, use `/tmp/lima-nixden` on either side. It is the only default host path exposed to the guest.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuspay%2Fnixden","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuspay%2Fnixden","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuspay%2Fnixden/lists"}