223 lines
7.4 KiB
Nix
223 lines
7.4 KiB
Nix
{
|
|
description = "Minimal example to setup SelfHostBlocks";
|
|
|
|
inputs = {
|
|
selfhostblocks.url = "github:ibizaman/selfhostblocks";
|
|
|
|
sops-nix = {
|
|
url = "github:Mic92/sops-nix";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
selfhostblocks,
|
|
sops-nix,
|
|
}:
|
|
{
|
|
nixosConfigurations =
|
|
let
|
|
system = "x86_64-linux";
|
|
nixpkgs' = selfhostblocks.lib.${system}.patchedNixpkgs;
|
|
|
|
# This module makes the assertions happy and the build succeed.
|
|
# This is of course wrong and will not work on any real system.
|
|
filesystemModule = {
|
|
fileSystems."/" = {
|
|
device = "/dev/null";
|
|
fsType = "none";
|
|
};
|
|
boot.loader.grub.devices = [ "/dev/null" ];
|
|
};
|
|
in
|
|
{
|
|
# Test with:
|
|
# nix build .#nixosConfigurations.minimal.config.system.build.toplevel
|
|
minimal = nixpkgs'.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
selfhostblocks.nixosModules.default
|
|
filesystemModule
|
|
# This modules showcases the use of SHB's lib.
|
|
(
|
|
{
|
|
config,
|
|
lib,
|
|
shb,
|
|
...
|
|
}:
|
|
{
|
|
options.myOption = lib.mkOption {
|
|
# Using provided nixosSystem directly.
|
|
# SHB's lib is available under `shb` thanks to the overlay.
|
|
type = shb.secretFileType;
|
|
};
|
|
config = {
|
|
myOption.source = "/a/path";
|
|
# Use the option.
|
|
environment.etc.myOption.text = config.myOption.source;
|
|
};
|
|
}
|
|
)
|
|
];
|
|
};
|
|
|
|
# Test with:
|
|
# nix build .#nixosConfigurations.sops.config.system.build.toplevel
|
|
# nix eval .#nixosConfigurations.sops.config.myOption
|
|
sops = nixpkgs'.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
selfhostblocks.nixosModules.default
|
|
selfhostblocks.nixosModules.sops
|
|
sops-nix.nixosModules.default
|
|
filesystemModule
|
|
# This modules showcases the use of SHB's lib.
|
|
(
|
|
{
|
|
config,
|
|
lib,
|
|
shb,
|
|
...
|
|
}:
|
|
{
|
|
options.myOption = lib.mkOption {
|
|
# Using provided nixosSystem directly.
|
|
# SHB's lib is available under `shb` thanks to the overlay.
|
|
type = shb.secretFileType;
|
|
};
|
|
config = {
|
|
myOption.source = "/a/path";
|
|
# Use the option.
|
|
environment.etc.myOption.text = config.myOption.source;
|
|
};
|
|
}
|
|
)
|
|
];
|
|
};
|
|
|
|
# This example shows how to import the nixosSystem patches to nixpkgs manually.
|
|
#
|
|
# Test with:
|
|
# nix build .#nixosConfigurations.lowlevel.config.system.build.toplevel
|
|
# nix eval .#nixosConfigurations.lowlevel.config.myOption
|
|
lowlevel =
|
|
let
|
|
# We must import nixosSystem directly from the patched nixpkgs
|
|
# otherwise we do not get the patches.
|
|
nixosSystem' = import "${nixpkgs'}/nixos/lib/eval-config.nix";
|
|
in
|
|
nixosSystem' {
|
|
inherit system;
|
|
modules = [
|
|
selfhostblocks.nixosModules.default
|
|
filesystemModule
|
|
# This modules showcases the use of SHB's lib.
|
|
(
|
|
{
|
|
config,
|
|
lib,
|
|
shb,
|
|
...
|
|
}:
|
|
{
|
|
options.myOption = lib.mkOption {
|
|
# Using provided nixosSystem directly.
|
|
# SHB's lib is available under `shb` thanks to the overlay.
|
|
type = shb.secretFileType;
|
|
};
|
|
config = {
|
|
myOption.source = "/a/path";
|
|
# Use the option.
|
|
environment.etc.myOption.text = config.myOption.source;
|
|
};
|
|
}
|
|
)
|
|
];
|
|
};
|
|
|
|
# This example shows how to apply patches to nixpkgs manually.
|
|
#
|
|
# Test with:
|
|
# nix build .#nixosConfigurations.manual.config.system.build.toplevel
|
|
# nix eval .#nixosConfigurations.manual.config.myOption
|
|
manual =
|
|
let
|
|
pkgs = import selfhostblocks.inputs.nixpkgs {
|
|
inherit system;
|
|
};
|
|
nixpkgs' = pkgs.applyPatches {
|
|
name = "nixpkgs-patched";
|
|
src = selfhostblocks.inputs.nixpkgs;
|
|
patches = selfhostblocks.lib.${system}.patches;
|
|
};
|
|
# We must import nixosSystem directly from the patched nixpkgs
|
|
# otherwise we do not get the patches.
|
|
nixosSystem' = import "${nixpkgs'}/nixos/lib/eval-config.nix";
|
|
in
|
|
nixosSystem' {
|
|
inherit system;
|
|
modules = [
|
|
selfhostblocks.nixosModules.default
|
|
filesystemModule
|
|
# This modules showcases the use of SHB's lib.
|
|
(
|
|
{
|
|
config,
|
|
lib,
|
|
shb,
|
|
...
|
|
}:
|
|
{
|
|
options.myOption = lib.mkOption {
|
|
# Using provided nixosSystem directly.
|
|
# SHB's lib is available under `shb` thanks to the overlay.
|
|
type = shb.secretFileType;
|
|
};
|
|
config = {
|
|
myOption.source = "/a/path";
|
|
# Use the option.
|
|
environment.etc.myOption.text = config.myOption.source;
|
|
};
|
|
}
|
|
)
|
|
];
|
|
};
|
|
|
|
# Test with:
|
|
# nix build .#nixosConfigurations.contractsDirect.config.system.build.toplevel
|
|
contractsDirect =
|
|
let
|
|
nixosSystem' = import "${selfhostblocks.inputs.nixpkgs}/nixos/lib/eval-config.nix";
|
|
in
|
|
nixosSystem' {
|
|
inherit system;
|
|
modules = [
|
|
filesystemModule
|
|
(import "${selfhostblocks}/lib/module.nix")
|
|
(
|
|
{
|
|
config,
|
|
lib,
|
|
shb,
|
|
...
|
|
}:
|
|
{
|
|
options.myOption = lib.mkOption {
|
|
# Using provided nixosSystem directly.
|
|
# SHB's lib is available under `shb` thanks to the overlay.
|
|
type = shb.secretFileType;
|
|
};
|
|
config = {
|
|
myOption.source = "/a/path";
|
|
# Use the option.
|
|
environment.etc.myOption.text = config.myOption.source;
|
|
};
|
|
}
|
|
)
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|