Get started with Determinate on your workstation
Determinate is an end-to-end toolchain for using Nix consisting of Determinate Nix and FlakeHub. Determinate is available on macOS, most Linux systems (including SELinux), and Windows Subsystem for Linux (WSL), and although it’s mostly designed for organizations, it can also be of great benefit to people who use Nix on their own for things like development environments, Home Manager and nix-darwin configurations, and more.
In this guide, we’ll take you from not having Nix installed all the way to using industry-leading features like FlakeHub Cache and private flakes.
Install Determinate Nix
Use this selector to choose the appropriate method for your use case:
Get Determinate for macOS
If you’d like to install Determinate on NixOS, see our advanced installation guide.
Log in to GitHub
You’ll need a GitHub account to begin using Determinate. Log in to GitHub under your preferred user account.
If you do not have a GitHub account but would still like to adopt Determinate, contact us to discuss other ways to onboard.
Log in to FlakeHub
Once Determinate Nix is installed on your machine, you need to authenticate with FlakeHub using your GitHub account. First, log in using your browser to gain access to FlakeHub’s web UI:
Authenticate with FlakeHub via GitHub.
Then log in your workstation using Determinate Nixd, a daemon that comes installed with Determinate Nix:
determinate-nixd login
When you run this command, it provides you with a URL to navigate to create a token. You’ll see output like this:
Log in to FlakeHub: https://flakehub.com/token/create?description=Determinate+NixD+on+my-workstation-hostname.local
Navigate to that URL in your browser, select Coarse grained under Token type, provide a description for the token, and click Create token.
After that, you’ll see a window with a long token string that begins with flakehub1_
.
Make sure to copy that token, as you won’t be able to see it again.
Go back to your terminal and paste that token in after the > Paste your FlakeHub token
prompt and hit Enter.
Then you’ll see output like this telling you about your login status:
Logged in: true
FlakeHub user name: my-flakehub-username
FlakeHub organizations: []
Installation is not bound to a FlakeHub customer.
And that’s it! FlakeHub now knows who you are and which orgs you belong to.
Sign up for a paid plan
In order to use features like FlakeHub Cache and private flakes, you’ll need to select a paid plan. Go to the Account tab of user settings at https://flakehub.com/user/settings?editview=account.
Click Sign up, enter your payment information in the Stripe checkout interface, click Subscribe, and you’re ready to go.
Publish your flakes to FlakeHub
Flakes are the basic unit of distribution for Nix expressions, enabling you to specify flake inputs and flake outputs in a structured way. FlakeHub is Determinate’s platform for publishing flakes, with SemVer support, and caching Nix store paths.
To get started using Flakehub, you need to start publishing whichever flakes you’d like to use and share. In the repo for each of these flakes, use the flakehub-push GitHub Action. Here’s an example configuration:
name: Publish every Git push to main to FlakeHub
on:
push:
branches:
- main
jobs:
flakehub-publish:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/flakehub-push@main
with:
rolling: true
visibility: private
include-output-paths: true
While you can always write flakehub-push configuration files by hand, our publishing wizard enables you to quickly generate config files tailored to the requirements of your specific flakes.
Keep in mind that there’s effectively no limit to how many flakes you can publish on FlakeHub and in fact we generally encourage a more decentralized approach. So always feel free to divide your flake outputs across different flakes in whichever way best suits your use cases.