Skip to content

Explain NixOS on the landing page #1726

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 36 additions & 26 deletions core/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -48,42 +48,52 @@ posts
</Banner>
)
}
<div class="bg-nix-blue inline-svg-hero bg-cover bg-left bg-no-repeat">
<Container
class="grid grid-cols-1 gap-8 py-16 text-white lg:grid-cols-2 lg:py-24"
>
<div class="mx-0 my-auto flex flex-col gap-4">
<div
class="bg-nix-blue inline-svg-hero bg-cover bg-left bg-no-repeat text-white"
>
<Container class="pt-16">
<div class="mx-0 my-auto w-full gap-4">
<h1 class="font-heading text-5xl leading-none font-bold">
Declarative builds<br class="hidden md:inline-block" /> and deployments.
Build reproducible development environments, simplify your
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is pretty much the first thing fresh eyes will see. I'd expect an extraordinarily strong justification for whatever text will be shown. What do we want to convey achieve here?

Why do we change from a description to imperative? What are reproducible debelopment environments? What does it mean to simplify deployments? Are we saying your deployments aren't simple enough? Can we even substantiate the claim using Nix for that make any of that simpler? It's also a lot of words and characters for a starter.

On the other hand, the existing text is much less ambiguous: declarative builds and deployments is (a major part of) what Nix is a about. Declarative programming languages are a well-established and well-understood concept from programming, we can link to a Wikipedia article that won't raise more questions than it answers. That phrase faithfully represents that Nix combines declarative programming with building and deploying software. It's not a proper sentence but it can be read as a motto: Nix – declarative builds and deployments. That's not wrong and it's unambiguous. Also it's very brief.

I suggest not changing that unless we're changing the overall approach to how Nix et al. is presented.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd expect an extraordinarily strong justification for whatever text will be shown.

I agree. What is the extraordinarily strong justification for the existing text?

The goal of the text is to engage and interest the visitor. "Declarative builds and deployments" may be correct & short, but it is also not engaging and it is by no means clear to new readers (the ones who do not yet know much about Nix and NixOS) what it means.

We should find something that explains, very briefly, the outcomes one can expect by adopting Nix & NixOS. So what are the outcomes of choosing "declarative builds and deployments"?

Copy link
Contributor

@fricklerhandwerk fricklerhandwerk May 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I thought declarative builds and deployments are the outcome of choosing Nix?

deployments!
</h1>
</div>
</Container>

<Container class="grid grid-cols-1 gap-8 py-16 lg:grid-cols-2 lg:py-24">
<div class="mx-0 my-auto flex flex-col gap-4">
<h2 class="font-heading text-5xl leading-none font-bold">Nix</h2>
<p class="text-lg leading-7 font-extralight">
Nix is a tool that takes a unique approach to package management and
system configuration. Learn how to make reproducible, declarative and
reliable systems.
The stand-alone package manager that ensures reproducible builds and
makes sure that everything that runs on one machine will also work on
another.
</p>
<div
class="flex flex-col justify-center gap-4 text-center md:flex-row lg:justify-start"
>
<Button href="/download" color="green" size="lg">Download</Button>
<Button href="/learn" color="lightblue" size="lg">Get started</Button>
<Button
href="https://nix.dev/tutorials/first-steps/"
color="lightblue"
size="lg">Get started</Button
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
size="lg">Get started</Button
size="lg">Get started with Nix</Button

Let's be specific what to get started with.

>
</div>
</div>
<div
class="min-h-[300px] rounded-3xl border-[1rem] border-white bg-[#121314] drop-shadow-md"
>
<Asciinema
src="/demos/cover.cast"
settings={{
cols: 84,
poster: 'npt:0:01:22',
markers: [
[11.5, 'Ad-Hoc development environments'],
[41.5, 'Declarative development environments'],
[85.0, 'Build docker image with Nix'],
[122.0, 'Build minimal docker image with Nix'],
],
}}
/>
<div class="mx-0 my-auto flex flex-col gap-4">
<h2 class="font-heading text-5xl leading-none font-bold">NixOS</h2>
<p class="text-lg leading-7 font-extralight">
Run your favourite webservice in 5 minutes: NixOS is a Linux
distrubition built on Nix and adds a powerful module system that
enables running your favourite application in no time.
Comment on lines +85 to +87
Copy link
Contributor

@fricklerhandwerk fricklerhandwerk May 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Run your favourite webservice in 5 minutes: NixOS is a Linux
distrubition built on Nix and adds a powerful module system that
enables running your favourite application in no time.
NixOS is a Linux distribution that can be configured fully declaratively with the Nix language.
It leverages Nix and the Nixpkgs software repository for correct deployments of even the most complex setups.

I don't think we can promise all that much more. Not sure about how exactly to phrase the "managing complexity" aspect though, it probably needs polish. "Correct deployments" is a very old phrase and technically correct, but it may be a bit to deep for the front page and is largely useless without explanation.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, we should focus a lot more on outcomes. It nice that NixOS "can be configured fully declaratively", but why should I bother? Why should I learn a new language (Nix) and a new software repository (nixpkgs) to get "correct deployments"?

In my opinion we should also at least mention the module system. It's a pretty powerful feature that really sets NixOS apart from all the other Linux distros.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with focusing on the outcomes. But the module system is an implementation detail. Also it's not that special, it's "just" a dependently typed DSL for the Nix language. Which is indeed important, but a cryptic piece of information for most readers, so not very outcome-oriented. What would be an outcome of having a declarative, dependently typed language for configuring computers?

</p>
<div
class="flex flex-col justify-center gap-4 text-center md:flex-row lg:justify-start"
>
<Button href="/download#nixos-iso" color="green" size="lg"
>Download</Button
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
>Download</Button
>Download NixOS</Button

>
<Button href="/learn" color="lightblue" size="lg">Get started</Button>
</div>
</div>
</Container>
</div>
Expand Down
36 changes: 26 additions & 10 deletions core/src/pages/learn.astro
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,32 @@ const learningResources = [
<Layout title="Learn Nix | Nix & NixOS">
<PageHeader text="Learn" />
<Container class="grid gap-4 py-16 md:grid-cols-3">
{
learningFeatures.map((feature) => (
<div class="border-0.5 border-nix-blue-darker flex flex-col justify-center gap-8 rounded-2xl p-8">
<InlineSVG src={feature.imgUrl} class="h-28" />
<Button size="lg-full" color={feature.color} href={feature.url}>
{feature.title}
</Button>
</div>
))
}
<div>
<h3 class="font-heading mb-4 text-2xl font-extrabold">Nix</h3>
<div>
Nix is a stand-alone package manager that enables Reproducibility,
installs packages in isolation to enable developer environments without
affecting system-wide configurations and is therefore rollback-friendly.
Interested? Take your <a href="https://nix.dev/tutorials/first-steps/">
here</a
>
</div>
</div>
<div>
<h3 class="font-heading mb-4 text-2xl font-extrabold">NixOS</h3>
<div>
NixOS is a Linux operating system, based on Nix. It has a powerful
declarative module system, allows for simple roll-backs and has a robust
integration test system, based on VMs.
</div>
</div>
<div>
<h3 class="font-heading mb-4 text-2xl font-extrabold">Nixpkgs</h3>
<div>
Nixpkgs is the package repository that feeds Nix and NixOS. It is freely
available on <a href="https://github.com/nixos/nixpkgs">GitHub</a>.
</div>
</div>
</Container>
<Divider style="slope" mirrorY mirrorX />
<div class="bg-nix-blue py-8 text-white md:px-8">
Expand Down