2020-12-29 01:27:32 +03:00
|
|
|
> Since flakes are still quite new, I've listed some learning resources
|
|
|
|
> [below](#resources).
|
|
|
|
|
2019-12-03 08:18:30 +03:00
|
|
|
# Introduction
|
2020-08-03 01:10:53 +03:00
|
|
|
Herein lies a [NixOS][NixOS] configuration template using the new [flakes][wiki]
|
|
|
|
mechanism. Its aim is to provide a generic repository which neatly separates
|
|
|
|
concerns and allows one to get up and running with NixOS faster than ever, while
|
|
|
|
keeping your code clean and organized.
|
|
|
|
|
|
|
|
Some key advantages include:
|
|
|
|
* A single home for all your Nix expressions, easily sharable and portable!
|
2020-12-28 07:33:28 +03:00
|
|
|
* Skip the boilerplate, simply use the included [nix-shell](./shell.nix) or
|
2020-08-03 01:10:53 +03:00
|
|
|
[direnv][direnv] profile and get up and running with flakes right away.
|
|
|
|
* Thanks to flakes, the entire system is more [deterministic](./flake.lock).
|
|
|
|
* Systems defined under [hosts](./hosts) are automatically imported into
|
|
|
|
`nixosConfigurations`, ready to deploy.
|
|
|
|
* [Profiles](./profiles/list.nix) are a simple mechanism for using portable
|
|
|
|
code across machines, and are available to share via the
|
|
|
|
`nixosModules.profiles` output.
|
|
|
|
* Defined [packages](./pkgs/default.nix) and
|
|
|
|
[modules](./modules/list.nix), are automatically wired and available from
|
|
|
|
anywhere. They are _also_ sharable via their respective flake outputs.
|
|
|
|
* Easily [override](./pkgs/override.nix) packages from different nixpkgs versions.
|
|
|
|
* Keep [user](./users) configuration isolated and easily reusable by taking
|
|
|
|
advantage of [user profiles](./users/profiles) and [home-manager][home-manager].
|
|
|
|
* [Overlay](./overlays) files are automatically available and sharable.
|
2020-12-28 07:33:28 +03:00
|
|
|
* Automatic [NUR][nur] support.
|
2020-08-03 01:10:53 +03:00
|
|
|
|
|
|
|
For a more detailed explanation of the code structure, check out the
|
|
|
|
[docs](./DOC.md).
|
2020-01-12 05:51:23 +03:00
|
|
|
|
|
|
|
### ⚠ Advisory
|
2020-08-03 01:10:53 +03:00
|
|
|
Flakes are still new, so not everything works yet. However, it has been to
|
|
|
|
merged in [nixpkgs][nixpkgs] via [`pkgs.nixFlakes`][nixFlakes]. Thus, this
|
|
|
|
project should be considered _experimental_, until flakes become the default.
|
2019-12-05 11:36:15 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
Also, flakes are meant to deprecate nix-channels. It's recommend not to install
|
|
|
|
any. If your really want them, they should work if you hook them into
|
|
|
|
`NIX_PATH`.
|
2020-01-08 02:37:46 +03:00
|
|
|
|
|
|
|
# Setup
|
2020-08-03 01:10:53 +03:00
|
|
|
There are many way to get up and running. You can fork this repo or use it as
|
|
|
|
a template. There is a [bare branch][bare] if you want to start with a
|
|
|
|
completely empty template and make your own profiles from scratch.
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
You'll need to have NixOS already installed since the `nixos-install` script
|
|
|
|
doesn't yet support flakes.
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
If you already have [nix-command][nix-command] setup you can:
|
2020-12-28 07:33:28 +03:00
|
|
|
```sh
|
2020-08-03 01:10:53 +03:00
|
|
|
# for standard template
|
|
|
|
nix flake new -t "github:nrdxp/nixflk" flk
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
# for bare template
|
|
|
|
nix flake new -t "github:nrdxp/nixflk/bare" flk
|
|
|
|
```
|
2020-01-07 02:57:35 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
However you decide to acquire the repo, once you have it, you'll want to __move
|
|
|
|
or symlink__ it to `/etc/nixos` for ease of use. Once inside:
|
2020-08-03 00:24:00 +03:00
|
|
|
|
2020-12-28 07:33:28 +03:00
|
|
|
```sh
|
2020-08-03 01:10:53 +03:00
|
|
|
nix-shell # or `direnv allow` if you prefer
|
|
|
|
```
|
2020-08-03 00:24:00 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
From here it's up to you. You can deploy the barebones [NixOS](./hosts/NixOS.nix)
|
|
|
|
host and build from there, or you can copy your existing `configuration.nix`.
|
|
|
|
You'll probably at least need to setup your `fileSystems` and make sure the
|
|
|
|
[locale](./local/locale.nix) is correct.
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
Once you're ready to deploy you can use `nixos-rebuild` if your NixOS version
|
|
|
|
is recent enough to support flakes, _or_ the [shell.nix](./shell.nix) defines
|
2020-12-26 08:14:56 +03:00
|
|
|
its own `flk` command in case you need it.
|
2019-12-05 11:36:15 +03:00
|
|
|
|
2020-12-28 07:33:28 +03:00
|
|
|
```sh
|
2020-12-26 08:14:56 +03:00
|
|
|
# Usage: flk host {switch|boot|test|iso}
|
|
|
|
flk <host-filename> test
|
2020-01-12 05:51:23 +03:00
|
|
|
```
|
2019-12-05 11:36:15 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
## Build an ISO
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-12-28 07:33:28 +03:00
|
|
|
```sh
|
|
|
|
flk iso
|
|
|
|
```
|
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
You can make an ISO and customize it by modifying the [niximg](./hosts/niximg.nix)
|
|
|
|
file:
|
2020-01-04 03:47:17 +03:00
|
|
|
|
2020-12-28 07:33:28 +03:00
|
|
|
## Use a Package from NUR
|
|
|
|
|
|
|
|
NUR is wired in from the start. For safety, nothing is added from it by default,
|
|
|
|
but you can easily pull packages from inside your configuration like so:
|
|
|
|
```nix
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
environment.systemPackages = with pkgs; [ nur.repos.<owner>.<package> ];
|
|
|
|
}
|
2020-01-05 13:43:28 +03:00
|
|
|
```
|
2020-12-29 01:27:32 +03:00
|
|
|
# Resources
|
|
|
|
|
|
|
|
## Links
|
|
|
|
* [Example Repo](https://github.com/colemickens/nixos-flake-example)
|
|
|
|
* [Tweag.io _Flakes_ Blog Series](https://www.tweag.io/blog/2020-05-25-flakes)
|
|
|
|
* [NixOS _Flakes_ Wiki](https://nixos.wiki/wiki/Flakes)
|
|
|
|
* [Zimbatm's _Flakes_ Blog](https://zimbatm.com/NixFlakes)
|
|
|
|
* [Original RFC](https://github.com/tweag/rfcs/blob/flakes/rfcs/0049-flakes.md)
|
2020-01-02 09:17:50 +03:00
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
## Flake Talk:
|
|
|
|
[![Flake talk at NixConf][thumb]][video]
|
|
|
|
|
2020-12-29 01:27:32 +03:00
|
|
|
|
2019-12-03 08:18:30 +03:00
|
|
|
# License
|
|
|
|
|
|
|
|
This software is licensed under the [MIT License](COPYING).
|
|
|
|
|
|
|
|
Note: MIT license does not apply to the packages built by this configuration,
|
|
|
|
merely to the files in this repository (the Nix expressions, build
|
|
|
|
scripts, NixOS modules, etc.). It also might not apply to patches
|
|
|
|
included here, which may be derivative works of the packages to
|
|
|
|
which they apply. The aforementioned artifacts are all covered by the
|
|
|
|
licenses of the respective packages.
|
|
|
|
|
2020-08-03 01:10:53 +03:00
|
|
|
[bare]: https://github.com/nrdxp/nixflk/tree/bare
|
2020-01-02 09:17:50 +03:00
|
|
|
[direnv]: https://direnv.net
|
2020-08-03 01:10:53 +03:00
|
|
|
[home-manager]: https://github.com/rycee/home-manager
|
|
|
|
[nix-command]: https://nixos.wiki/wiki/Nix_command
|
|
|
|
[nixFlakes]: https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/package-management/nix/default.nix#L211
|
2019-12-03 08:18:30 +03:00
|
|
|
[NixOS]: https://nixos.org
|
2020-08-03 01:10:53 +03:00
|
|
|
[nixpkgs]: https://github.com/NixOS/nixpkgs
|
2020-01-11 09:49:18 +03:00
|
|
|
[nur]: https://github.com/nix-community/NUR
|
2020-08-03 01:10:53 +03:00
|
|
|
[wiki]: https://nixos.wiki/wiki/Flakes
|
2020-01-08 02:37:46 +03:00
|
|
|
[thumb]: https://img.youtube.com/vi/UeBX7Ide5a0/hqdefault.jpg
|
2020-08-03 01:10:53 +03:00
|
|
|
[video]: https://www.youtube.com/watch?v=UeBX7Ide5a0
|
2020-12-28 07:33:28 +03:00
|
|
|
[nur]: https://github.com/nix-community/NUR
|