Skip to the map
WelcomeNixLanguageExpressionsNumbersArithmeticStringsIndented stringsBooleansComparisonsBoolean operatorsif … then … elsenullListsJoining lists with ++Attribute setsSelecting attributesFallbacks with orChecking with ?Merging sets with //reclet … inString interpolationwithinheritFunctionsMultiple argumentsSet argumentsDefault argumentsExtra arguments with ...Naming arguments with @builtinsTypesmapLazinessthrow and assertInfinite recursionPathsimportNixpkgspkgsPackage attributeslibcallPackageoverrideoverrideAttrsOverlaysOverlays in NixOS and flakesThe Nix storeStore pathsDerivationsYour first packageC projectsPython projectsRust projectsSharing your packageThe default packagePackage your projectBuild phasesbuildInputs and nativeBuildInputsHooks and runHookFetchersChoosing source filesFrom your project to nixpkgsThe build sandboxDerivations in stringsClosuresGarbage collectionBinary cachesWritersWrapping programsWrapping any packageConfigs inside a wrappernix-wrapper-modulesInstalling NixLegacy and experimental commandsnix-buildnix-shellnix replExperimental featuresnix evalnix buildnix shellnix runNixOSconfiguration.nixnixos-rebuildGenerationsenvironment.systemPackagesUsersServiceshardware-configuration.nixNixOS from a flakeSeveral machines in one flakePassing inputs to modulesGraphics driversDesktops and window managersInstall NixOSConfigure NixOSTurn it into a flakeModulesOptionsThe config argumentimportsMerging definitionsmkDefault and mkForcemkIfConditional imports and infinite recursionDeclaring optionsOption typesHome Managerprogramshome.fileHome Manager inside NixOSNixOS settings in Home ManagerInstall Home ManagerTake your home with youFlakesFlake referencesInstallablesfollowsPackages from a second nixpkgsflake-partsSystemsFlakes only see files in GitPut it in GitmkShelldevShellsnix developdirenvdevenvCreate a devshell for your project

The way to

Editor keys
Compare with
PrivacyCredits & licenses

Editor keys
Compare with
PrivacyCredits & licenses
NORMAL
credits
Discord
support
1:0

VIMJOYER

Hello, and welcome! I'm Yurii, though most people know me as Vimjoyer. I'm really glad you're here.

Nix is notoriously hard to learn. It can do so many things that it's impossible to know which parts will be useful for you.

That's why the Nixmap exists. You pick a goal, and it shows you only the steps to get there. Then you go at your own pace.

Have you written code before? Tell me which language you think in. When Nix does something similar, I'll show you both for comparison.

Given my name, I have to ask. Standard editor shortcuts, or Vim keybindings? No wrong answer. You can change it with the gear later.

Excellent choice! Now, for your first goal, I suggest installing NixOS. Yes, right here in your browser.

Let's choose "Install NixOS" as our first goal.

You haven't learned what comes before it yet. So click "Build the route".

See? Everything else is gone, and only the steps that lead to NixOS are left. Start from the top and go at your own pace.

One more thing before you go. This is completely free, so if you ever feel like tossing a coin to your joyer, the support link is in the bottom right.

VIMJOYER

Understanding the Nix language is the most important and fundamental step on your journey.

The language is very small and easy to learn, but it does come with its own fair share of quirks.

So here we will go through the concepts one by one and get comfortable with it.