forked from mirrors_public/oddlama_nix-config
refactor: pivot to lovesegfault's config structure
This commit is contained in:
parent
d7e6ab7071
commit
04fc94267a
29 changed files with 588 additions and 1150 deletions
15
.envrc
15
.envrc
|
@ -1,11 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
source "$(
|
use flake
|
||||||
nix eval \
|
|
||||||
--no-update-lock-file \
|
watch_file ./nix/checks.nix
|
||||||
--no-write-lock-file \
|
watch_file ./nix/dev-shell.nix
|
||||||
--no-warn-dirty \
|
|
||||||
--accept-flake-config \
|
eval "$shellHook"
|
||||||
.#__std.direnv_lib 2>/dev/null
|
|
||||||
)"
|
|
||||||
use std comb //_QUEEN/devshells:default
|
|
||||||
|
|
14
.gitignore
vendored
14
.gitignore
vendored
|
@ -1,13 +1,3 @@
|
||||||
# direnv/direnv + divnix/std
|
result
|
||||||
.std
|
result-*
|
||||||
|
|
||||||
# numtide/devshell
|
|
||||||
.data
|
|
||||||
|
|
||||||
# nixos/nix
|
|
||||||
result*
|
|
||||||
|
|
||||||
# nixago: ignore-linked-files
|
|
||||||
.conform.yaml
|
|
||||||
lefthook.yml
|
|
||||||
treefmt.toml
|
treefmt.toml
|
||||||
|
|
1
.luacheckrc
Normal file
1
.luacheckrc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
globals = { "vim" }
|
6
.stylua.toml
Normal file
6
.stylua.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
column_width = 120
|
||||||
|
line_endings = "Unix"
|
||||||
|
indent_type = "Tabs"
|
||||||
|
indent_width = 1
|
||||||
|
quote_style = "AutoPreferDouble"
|
||||||
|
no_call_parentheses = true
|
11
README.md
11
README.md
|
@ -1,10 +1 @@
|
||||||
Wow infrastructure.
|
Infrastructure.
|
||||||
|
|
||||||
## Used things
|
|
||||||
|
|
||||||
[](https://github.com/divnix/std)
|
|
||||||
[](https://github.com/zhaofengli/colmena)
|
|
||||||
|
|
||||||
[](https://github.com/nix-community/nixos-generators)
|
|
||||||
[](https://github.com/nix-community/disko)
|
|
||||||
[](https://github.com/nixos/nixos-hardware)
|
|
||||||
|
|
15
core/ssh.nix
Normal file
15
core/ssh.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
services.sshd.enable = true;
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
passwordAuthentication = false;
|
||||||
|
kbdInteractiveAuthentication = false;
|
||||||
|
permitRootLogin = "yes";
|
||||||
|
hostKeys = [
|
||||||
|
{
|
||||||
|
path = "/etc/ssh/ssh_host_ed25519_key";
|
||||||
|
type = "ed25519";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
12
core/xdg.nix
Normal file
12
core/xdg.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
environment.etc."xdg/user-dirs.defaults".text = ''
|
||||||
|
DESKTOP=tmp
|
||||||
|
DOWNLOAD=download
|
||||||
|
TEMPLATES=tmp
|
||||||
|
PUBLICSHARE=opt
|
||||||
|
DOCUMENTS=documents
|
||||||
|
MUSIC=music
|
||||||
|
PICTURES=pictures
|
||||||
|
VIDEOS=tmp
|
||||||
|
'';
|
||||||
|
}
|
14
default.nix
Normal file
14
default.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
(import
|
||||||
|
(
|
||||||
|
let
|
||||||
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
|
in
|
||||||
|
fetchTarball {
|
||||||
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||||
|
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
src = ./.;
|
||||||
|
})
|
||||||
|
.defaultNix
|
7
dev/default.nix
Normal file
7
dev/default.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
imports = [./documentation.nix];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
enableDebugInfo = true;
|
||||||
|
};
|
||||||
|
}
|
12
dev/documentation.nix
Normal file
12
dev/documentation.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
environment.systemPackages = with pkgs; [man-pages];
|
||||||
|
documentation = {
|
||||||
|
dev.enable = true;
|
||||||
|
man.enable = true;
|
||||||
|
info.enable = lib.mkForce false;
|
||||||
|
};
|
||||||
|
}
|
621
flake.lock
generated
621
flake.lock
generated
|
@ -1,128 +1,60 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"blank": {
|
"agenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"ragenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1625557891,
|
"lastModified": 1665870395,
|
||||||
"narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=",
|
"narHash": "sha256-Tsbqb27LDNxOoPLh0gw2hIb6L/6Ow/6lIBvqcHzEKBI=",
|
||||||
"owner": "divnix",
|
"owner": "ryantm",
|
||||||
"repo": "blank",
|
"repo": "agenix",
|
||||||
"rev": "5a5d2684073d9f563072ed07c871d577a6c614a8",
|
"rev": "a630400067c6d03c9b3e0455347dc8559db14288",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "divnix",
|
"owner": "ryantm",
|
||||||
"repo": "blank",
|
"repo": "agenix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"colmena": {
|
"deploy-rs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": [
|
||||||
"flake-utils": [
|
"flake-compat"
|
||||||
"std",
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": [
|
||||||
"flake-utils"
|
"flake-utils"
|
||||||
],
|
|
||||||
"nix-eval-jobs": "nix-eval-jobs",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"stable": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1669917327,
|
"lastModified": 1668797197,
|
||||||
"narHash": "sha256-YYjaNOUJZaM5t35GbWtfX825TlI9LAksbfdhaCYWmfY=",
|
"narHash": "sha256-0w6iD3GSSQbIeSFVDzAAQZB+hDq670ZTms3d9XI+BtM=",
|
||||||
"owner": "zhaofengli",
|
"owner": "serokell",
|
||||||
"repo": "colmena",
|
"repo": "deploy-rs",
|
||||||
"rev": "64c46fa0169233d4faed70c52583cd3183c7f5aa",
|
"rev": "2a3c5f70eee04a465aa534d8bd4fcc9bb3c4a8ce",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "zhaofengli",
|
"owner": "serokell",
|
||||||
"repo": "colmena",
|
"repo": "deploy-rs",
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"devshell": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": [
|
|
||||||
"std",
|
|
||||||
"flake-utils"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"std",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1663445644,
|
|
||||||
"narHash": "sha256-+xVlcK60x7VY1vRJbNUEAHi17ZuoQxAIH4S4iUFUGBA=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "devshell",
|
|
||||||
"rev": "e3dc3e21594fe07bdb24bdf1c8657acaa4cb8f66",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "devshell",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"disko": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1670157103,
|
|
||||||
"narHash": "sha256-EDvoYUwi7RB/oSOtbk7ykRQXQ0KI5A+UPI8D/TanYXY=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"rev": "e0ce5fb75f1197cf57b0a5c46434d69c14efc842",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dmerge": {
|
|
||||||
"inputs": {
|
|
||||||
"nixlib": [
|
|
||||||
"std",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"yants": [
|
|
||||||
"std",
|
|
||||||
"yants"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1659548052,
|
|
||||||
"narHash": "sha256-fzI2gp1skGA8mQo/FBFrUAtY0GQkAIAaV/V127TJPyY=",
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "data-merge",
|
|
||||||
"rev": "d160d18ce7b1a45b88344aa3f13ed1163954b497",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "data-merge",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1650374568,
|
"lastModified": 1668681692,
|
||||||
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
|
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
|
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -132,285 +64,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
|
||||||
"lastModified": 1659877975,
|
|
||||||
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs",
|
|
||||||
"utils": "utils"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1670163996,
|
|
||||||
"narHash": "sha256-6vbu9Wmh1Ov0VgkWuLAazQ/crzohdZ8jnQp87pDsy7s=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "90b0e5f440160f54cb4f1f08372e1be554e10873",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"incl": {
|
|
||||||
"inputs": {
|
|
||||||
"nixlib": [
|
|
||||||
"std",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1669263024,
|
|
||||||
"narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=",
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "incl",
|
|
||||||
"rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "incl",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"n2c": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": [
|
|
||||||
"std",
|
|
||||||
"flake-utils"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"std",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1665039323,
|
|
||||||
"narHash": "sha256-SAh3ZjFGsaCI8FRzXQyp56qcGdAqgKEfJWPCQ0Sr7tQ=",
|
|
||||||
"owner": "nlewo",
|
|
||||||
"repo": "nix2container",
|
|
||||||
"rev": "b008fe329ffb59b67bf9e7b08ede6ee792f2741a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nlewo",
|
|
||||||
"repo": "nix2container",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix-eval-jobs": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": [
|
|
||||||
"colmena",
|
|
||||||
"flake-utils"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"colmena",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1660713017,
|
|
||||||
"narHash": "sha256-w6KLNkT/2fI7UvPg3NoKj7gve4CgUHpyWOFq0BUwW7o=",
|
|
||||||
"owner": "zhaofengli",
|
|
||||||
"repo": "nix-eval-jobs",
|
|
||||||
"rev": "b4c078a4870c5b1a5b74420ca1dca41f4d75b7cc",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "zhaofengli",
|
|
||||||
"ref": "colmena",
|
|
||||||
"repo": "nix-eval-jobs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixago": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": [
|
|
||||||
"std",
|
|
||||||
"flake-utils"
|
|
||||||
],
|
|
||||||
"nixago-exts": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"std",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1661824785,
|
|
||||||
"narHash": "sha256-/PnwdWoO/JugJZHtDUioQp3uRiWeXHUdgvoyNbXesz8=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixago",
|
|
||||||
"rev": "8c1f9e5f1578d4b2ea989f618588d62a335083c3",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixago",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixos-generators": {
|
|
||||||
"inputs": {
|
|
||||||
"nixlib": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1669065280,
|
|
||||||
"narHash": "sha256-3+pq1oJWjGDLfd8G/vR3IIFZ+EQ/aglukA0bTiMlf3o=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixos-generators",
|
|
||||||
"rev": "50aeec40f2072d2ab267c8ec8a345573704ec110",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixos-generators",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixos-hardware": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1669650994,
|
|
||||||
"narHash": "sha256-uwASLUfedIQ5q01TtMwZDEV2HCZr5nVPZjzVgCG+D5I=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixos-hardware",
|
|
||||||
"rev": "7883883d135ce5b7eae5dce4bfa12262b85c1c46",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixos-hardware",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1669969257,
|
|
||||||
"narHash": "sha256-mOS13sK3v+kfgP+1Mh56ohiG8uVhLHAo7m/q9kqAehc=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "b72b8b94cf0c012b0252a9100a636cad69696666",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1670064435,
|
|
||||||
"narHash": "sha256-+ELoY30UN+Pl3Yn7RWRPabykwebsVK/kYE9JsIsUMxQ=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "61a8a98e6d557e6dd7ed0cdb54c3a3e3bbc5e25c",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nosys": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1667881534,
|
|
||||||
"narHash": "sha256-FhwJ15uPLRsvaxtt/bNuqE/ykMpNAPF0upozFKhTtXM=",
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "nosys",
|
|
||||||
"rev": "2d0d5207f6a230e9d0f660903f8db9807b54814f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "nosys",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"colmena": "colmena",
|
|
||||||
"disko": "disko",
|
|
||||||
"home": "home",
|
|
||||||
"nixos": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixos-generators": "nixos-generators",
|
|
||||||
"nixos-hardware": "nixos-hardware",
|
|
||||||
"nixpkgs": "nixpkgs_2",
|
|
||||||
"std": "std"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"std": {
|
|
||||||
"inputs": {
|
|
||||||
"arion": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
],
|
|
||||||
"blank": "blank",
|
|
||||||
"devshell": "devshell",
|
|
||||||
"dmerge": "dmerge",
|
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"incl": "incl",
|
|
||||||
"makes": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
],
|
|
||||||
"mdbook-kroki-preprocessor": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
],
|
|
||||||
"microvm": [
|
|
||||||
"std",
|
|
||||||
"blank"
|
|
||||||
],
|
|
||||||
"n2c": "n2c",
|
|
||||||
"nixago": "nixago",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nosys": "nosys",
|
|
||||||
"yants": "yants"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1669987194,
|
|
||||||
"narHash": "sha256-jwqWqdzYfc5UvNW1XpiQMtadshBT2YCfos2EaIGZ6yQ=",
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "std",
|
|
||||||
"rev": "91e736f821d058a9db78560fb18ac24b5292f065",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "divnix",
|
|
||||||
"repo": "std",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"utils": {
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667395993,
|
"lastModified": 1667395993,
|
||||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
@ -425,24 +78,216 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yants": {
|
"gitignore": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"std",
|
"pre-commit-hooks",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667096281,
|
"lastModified": 1660459072,
|
||||||
"narHash": "sha256-wRRec6ze0gJHmGn6m57/zhz/Kdvp9HS4Nl5fkQ+uIuA=",
|
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
|
||||||
"owner": "divnix",
|
"owner": "hercules-ci",
|
||||||
"repo": "yants",
|
"repo": "gitignore.nix",
|
||||||
"rev": "d18f356ec25cb94dc9c275870c3a7927a10f8c3c",
|
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "divnix",
|
"owner": "hercules-ci",
|
||||||
"repo": "yants",
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": [
|
||||||
|
"flake-utils"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670513770,
|
||||||
|
"narHash": "sha256-muL74fsbGA8K8WlZSPNWddOiuBnC54kAajncX6nXrh4=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "054d9e3187ca00479e8036dc0e92900a384f30fd",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"impermanence": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1668668915,
|
||||||
|
"narHash": "sha256-QjY4ZZbs9shwO4LaLpvlU2bO9J1juYhO9NtV3nrbnYQ=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"rev": "5df9108b346f8a42021bf99e50de89c9caa251c3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixos-hardware": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670174919,
|
||||||
|
"narHash": "sha256-XdQr3BUnrvVLRFunLWrZORhwYHDG0+9jUUe0Jv1pths=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"rev": "9d87bc030a0bf3f00e953dbf095a7d8e852dab6b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670332253,
|
||||||
|
"narHash": "sha256-O5SmhlIUt1s+vK4NXeGYqwcBIMwbBPAEZ3GHE3XT28c=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1c9ffcf70786f0966982ce0fc76ec05df2e1dec2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1668984258,
|
||||||
|
"narHash": "sha256-0gDMJ2T3qf58xgcSbYoXiRGUkPWmKyr5C3vcathWhKs=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "cf63ade6f74bbc9d2a017290f1b2e33e8fbfa70a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-22.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": [
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"flake-utils": [
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670413394,
|
||||||
|
"narHash": "sha256-M7sWqrKtOqUv9euX1t3HCxis8cPy9MNiZxQmUf0KF1o=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "1303a1a76e9eb074075bfe566518c413f6fc104e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ragenix": {
|
||||||
|
"inputs": {
|
||||||
|
"agenix": "agenix",
|
||||||
|
"flake-utils": [
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-overlay": "rust-overlay"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667808611,
|
||||||
|
"narHash": "sha256-HHxTosiswFFS5PHLalpa3OKKl3R9BdgMk7pY4tjX2HU=",
|
||||||
|
"owner": "yaxitech",
|
||||||
|
"repo": "ragenix",
|
||||||
|
"rev": "f34618bd9e93edab1f0d62fc3619af7d2d8e5a0c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "yaxitech",
|
||||||
|
"repo": "ragenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"deploy-rs": "deploy-rs",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"impermanence": "impermanence",
|
||||||
|
"nixos-hardware": "nixos-hardware",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit-hooks": "pre-commit-hooks",
|
||||||
|
"ragenix": "ragenix",
|
||||||
|
"templates": "templates"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"ragenix",
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"ragenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667271616,
|
||||||
|
"narHash": "sha256-qR43NUFFoKfDRro3M1SarTYVfTn8WvWznGJX5eNCNZw=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "3cbe6891588e1efad2491f87a54be26aeed1fac0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"templates": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1669413554,
|
||||||
|
"narHash": "sha256-ljlMaTVs/aiygN0MtVWmLL8cJ0btX6GxST6D8klCb6o=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "templates",
|
||||||
|
"rev": "dfd2a90b1507f2eaedb2f9f4798f728f0006ad30",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "templates",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
166
flake.nix
166
flake.nix
|
@ -1,122 +1,76 @@
|
||||||
{
|
{
|
||||||
description = "Personal Infrastructure";
|
description = "oddlama's NixOS Infrastructure";
|
||||||
inputs.std.url = "github:divnix/std";
|
|
||||||
inputs.std.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.std.inputs.mdbook-kroki-preprocessor.follows = "std/blank";
|
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
# tools
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixos-generators.url = "github:nix-community/nixos-generators";
|
deploy-rs = {
|
||||||
nixos-generators.inputs.nixpkgs.follows = "nixpkgs";
|
url = "github:serokell/deploy-rs";
|
||||||
nixos-generators.inputs.nixlib.follows = "nixpkgs";
|
inputs = {
|
||||||
colmena.url = "github:zhaofengli/colmena";
|
nixpkgs.follows = "nixpkgs";
|
||||||
colmena.inputs.nixpkgs.follows = "nixpkgs";
|
flake-compat.follows = "flake-compat";
|
||||||
colmena.inputs.stable.follows = "std/blank";
|
utils.follows = "flake-utils";
|
||||||
colmena.inputs.flake-utils.follows = "std/flake-utils";
|
};
|
||||||
disko.url = "github:nix-community/disko";
|
|
||||||
disko.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
nixos-hardware.url = "github:nixos/nixos-hardware";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# nixpkgs & home-manager
|
flake-compat = {
|
||||||
inputs = {
|
url = "github:edolstra/flake-compat";
|
||||||
nixos.follows = "nixpkgs";
|
flake = false;
|
||||||
home.url = "github:nix-community/home-manager";
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.utils.follows = "flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
|
nixos-hardware.url = "github:NixOS/nixos-hardware";
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
pre-commit-hooks = {
|
||||||
|
url = "github:cachix/pre-commit-hooks.nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
inputs.flake-compat.follows = "flake-compat";
|
||||||
|
};
|
||||||
|
|
||||||
|
ragenix = {
|
||||||
|
url = "github:yaxitech/ragenix";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
templates.url = "github:NixOS/templates";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
std,
|
|
||||||
self,
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
...
|
...
|
||||||
} @ inputs:
|
} @ inputs:
|
||||||
std.growOn {
|
{
|
||||||
inherit inputs;
|
deploy = import ./nix/deploy.nix inputs;
|
||||||
cellsFrom = ./nix;
|
overlays = import ./nix/overlay.nix inputs;
|
||||||
# debug = ["cells" "x86_64-linux"];
|
homeConfigurations = import ./nix/home-manager.nix inputs;
|
||||||
cellBlocks = with std.blockTypes; [
|
nixosConfigurations = import ./nix/nixos.nix inputs;
|
||||||
# modules implement
|
}
|
||||||
(functions "nixosModules")
|
// flake-utils.lib.eachSystem ["aarch64-linux" "x86_64-linux"] (localSystem: {
|
||||||
(functions "homeModules")
|
checks = import ./nix/checks.nix inputs localSystem;
|
||||||
(functions "devshellModules")
|
devShells.default = import ./nix/dev-shell.nix inputs localSystem;
|
||||||
|
|
||||||
# profiles activate
|
packages =
|
||||||
(functions "hardwareProfiles")
|
{
|
||||||
(functions "nixosProfiles")
|
default = self.packages.${localSystem}.all;
|
||||||
(functions "homeProfiles")
|
}
|
||||||
(functions "devshellProfiles")
|
// (import ./nix/host-drvs.nix inputs localSystem);
|
||||||
|
|
||||||
# suites aggregate profiles
|
pkgs = import nixpkgs {
|
||||||
(functions "nixosSuites")
|
inherit localSystem;
|
||||||
(functions "homeSuites")
|
overlays = [
|
||||||
|
self.overlays.default
|
||||||
# configurations can be deployed
|
|
||||||
(data "nixosConfigurations")
|
|
||||||
(data "colmenaConfigurations")
|
|
||||||
(data "homeConfigurations")
|
|
||||||
(data "diskoConfigurations")
|
|
||||||
|
|
||||||
# devshells can be entered
|
|
||||||
(devshells "devshells")
|
|
||||||
|
|
||||||
# jobs can be run
|
|
||||||
(runnables "jobs")
|
|
||||||
|
|
||||||
# library holds shared knowledge made code
|
|
||||||
(functions "library")
|
|
||||||
];
|
];
|
||||||
nixpkgsConfig = {
|
config.allowUnfree = true;
|
||||||
allowUnfree = true;
|
|
||||||
};
|
};
|
||||||
}
|
});
|
||||||
# soil
|
|
||||||
{
|
|
||||||
packages.x86_64-linux = {inherit (inputs.disko.packages.x86_64-linux) disko;};
|
|
||||||
devShells = std.harvest self ["_QUEEN" "devshells"];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# tool: colmena -- "fill the jar on the soil with the honey!"
|
|
||||||
colmenaHive = let
|
|
||||||
makeHoneyFrom = import ./make-honey.nix {
|
|
||||||
inherit (inputs) colmena nixpkgs;
|
|
||||||
cellBlock = "colmenaConfigurations";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
makeHoneyFrom self;
|
|
||||||
|
|
||||||
# tool: nixos-generators -- "get drunk like a bear!"
|
|
||||||
nixosConfigurations = let
|
|
||||||
makeMeadFrom = import ./make-mead.nix {
|
|
||||||
inherit (inputs) nixpkgs;
|
|
||||||
cellBlock = "nixosConfigurations";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
makeMeadFrom self;
|
|
||||||
|
|
||||||
# tool: home-manager -- "drunken sailor, sunken sailor; honeymoon pantaloon."
|
|
||||||
homeConfigurations = let
|
|
||||||
makeMoonshineFrom = import ./make-moonshine.nix {
|
|
||||||
inherit (inputs) nixpkgs;
|
|
||||||
cellBlock = "homeConfigurations";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
makeMoonshineFrom self;
|
|
||||||
|
|
||||||
# tool: disko -- "Tiganizatia, tiganizatia - disko, disko partizani."
|
|
||||||
diskoConfigurations = let
|
|
||||||
makeShantyFrom = import ./make-shanty.nix {
|
|
||||||
inherit (inputs) nixpkgs;
|
|
||||||
cellBlock = "diskoConfigurations";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
makeShantyFrom self;
|
|
||||||
};
|
|
||||||
|
|
||||||
# --- Flake Local Nix Configuration ----------------------------
|
|
||||||
# TODO: adopt spongix
|
|
||||||
nixConfig = {
|
|
||||||
extra-substituters = [];
|
|
||||||
extra-trusted-public-keys = [];
|
|
||||||
};
|
|
||||||
# --------------------------------------------------------------
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
colmena,
|
|
||||||
nixpkgs,
|
|
||||||
cellBlock ? "colmenaConfigurations",
|
|
||||||
}: let
|
|
||||||
l = nixpkgs.lib // builtins;
|
|
||||||
inherit (import ./pasteurize.nix {inherit nixpkgs cellBlock;}) pasteurize stir beeOptions;
|
|
||||||
|
|
||||||
colmenaModules = [
|
|
||||||
colmena.nixosModules.assertionModule
|
|
||||||
colmena.nixosModules.keyChownModule
|
|
||||||
colmena.nixosModules.keyServiceModule
|
|
||||||
colmena.nixosModules.deploymentOptions
|
|
||||||
beeOptions # still present, but we dont care
|
|
||||||
];
|
|
||||||
in
|
|
||||||
self: let
|
|
||||||
comb = pasteurize self;
|
|
||||||
evalNode = extra: name: config: let
|
|
||||||
inherit (stir config) evalConfig system;
|
|
||||||
in
|
|
||||||
evalConfig {
|
|
||||||
inherit system;
|
|
||||||
modules = colmenaModules ++ [extra config];
|
|
||||||
specialArgs = {inherit name;};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
# Exported attributes
|
|
||||||
l.fix (this: {
|
|
||||||
__schema = "v0";
|
|
||||||
|
|
||||||
nodes = l.mapAttrs (evalNode {_module.check = true;}) comb;
|
|
||||||
toplevel = l.mapAttrs (_: v: v.config.system.build.toplevel) this.nodes;
|
|
||||||
deploymentConfig = l.mapAttrs (_: v: v.config.deployment) this.nodes;
|
|
||||||
deploymentConfigSelected = names: l.filterAttrs (name: _: l.elem name names) this.deploymentConfig;
|
|
||||||
evalSelected = names: l.filterAttrs (name: _: l.elem name names) this.toplevel;
|
|
||||||
evalSelectedDrvPaths = names: l.mapAttrs (_: v: v.drvPath) (this.evalSelected names);
|
|
||||||
metaConfig = {
|
|
||||||
name = "oddlama/infranix";
|
|
||||||
inherit (import ./flake.nix) description;
|
|
||||||
machinesFile = null;
|
|
||||||
allowApplyAll = false;
|
|
||||||
};
|
|
||||||
introspect = f:
|
|
||||||
f {
|
|
||||||
lib = nixpkgs.lib // builtins;
|
|
||||||
pkgs = nixpkgs.legacyPackages.${builtins.currentSystem};
|
|
||||||
nodes = l.mapAttrs (evalNode {_module.check = false;}) comb;
|
|
||||||
};
|
|
||||||
})
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
nixpkgs,
|
|
||||||
cellBlock ? "nixosConfigurations",
|
|
||||||
}: let
|
|
||||||
l = nixpkgs.lib // builtins;
|
|
||||||
inherit (import ./pasteurize.nix {inherit nixpkgs cellBlock;}) pasteurize stir beeOptions;
|
|
||||||
in
|
|
||||||
self: let
|
|
||||||
comb = pasteurize self;
|
|
||||||
evalNode = extra: name: config: let
|
|
||||||
inherit (stir config) evalConfig system;
|
|
||||||
in
|
|
||||||
evalConfig {
|
|
||||||
inherit system;
|
|
||||||
modules = [extra beeOptions config];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
l.mapAttrs (evalNode {}) comb
|
|
|
@ -1,26 +0,0 @@
|
||||||
{
|
|
||||||
nixpkgs,
|
|
||||||
cellBlock ? "homeConfigurations",
|
|
||||||
}: let
|
|
||||||
l = nixpkgs.lib // builtins;
|
|
||||||
inherit (import ./pasteurize.nix {inherit nixpkgs cellBlock;}) cure shake showAssertions;
|
|
||||||
in
|
|
||||||
self: let
|
|
||||||
comb = cure self;
|
|
||||||
res = name: config: let
|
|
||||||
inherit
|
|
||||||
(shake config {})
|
|
||||||
evaled
|
|
||||||
;
|
|
||||||
asserted = showAssertions evaled;
|
|
||||||
in {
|
|
||||||
# __schema = "v0";
|
|
||||||
inherit (asserted) options config;
|
|
||||||
inherit (asserted.config.home) activationPackage;
|
|
||||||
newsDisplay = evaled.config.news.display;
|
|
||||||
newsEntries = l.sort (a: b: a.time > b.time) (
|
|
||||||
l.filter (a: a.condition) evaled.config.news.entries
|
|
||||||
);
|
|
||||||
};
|
|
||||||
in
|
|
||||||
l.mapAttrs res comb
|
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
nixpkgs,
|
|
||||||
cellBlock ? "diskoConfigurations",
|
|
||||||
}: let
|
|
||||||
l = nixpkgs.lib // builtins;
|
|
||||||
inherit (import ./pasteurize.nix {inherit nixpkgs cellBlock;}) sing;
|
|
||||||
in
|
|
||||||
sing
|
|
44
nix/checks.nix
Normal file
44
nix/checks.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
pre-commit-hooks,
|
||||||
|
...
|
||||||
|
}: system:
|
||||||
|
with self.pkgs.${system};
|
||||||
|
{
|
||||||
|
pre-commit-check =
|
||||||
|
pre-commit-hooks.lib.${system}.run
|
||||||
|
{
|
||||||
|
src = lib.cleanSource ../.;
|
||||||
|
hooks = {
|
||||||
|
actionlint.enable = true;
|
||||||
|
luacheck.enable = true;
|
||||||
|
nix-linter.enable = true;
|
||||||
|
alejandra.enable = true;
|
||||||
|
statix.enable = true;
|
||||||
|
stylua.enable = true;
|
||||||
|
};
|
||||||
|
settings.nix-linter.checks = [
|
||||||
|
"DIYInherit"
|
||||||
|
"EmptyInherit"
|
||||||
|
"EmptyLet"
|
||||||
|
"EtaReduce"
|
||||||
|
"LetInInheritRecset"
|
||||||
|
"ListLiteralConcat"
|
||||||
|
"NegateAtom"
|
||||||
|
"SequentialLet"
|
||||||
|
"SetLiteralUpdate"
|
||||||
|
"UnfortunateArgName"
|
||||||
|
"UnneededRec"
|
||||||
|
"UnusedArg"
|
||||||
|
"UnusedLetBind"
|
||||||
|
"UpdateEmptySet"
|
||||||
|
"BetaReduction"
|
||||||
|
"EmptyVariadicParamSet"
|
||||||
|
"UnneededAntiquote"
|
||||||
|
"no-FreeLetInFunc"
|
||||||
|
"no-AlphabeticalArgs"
|
||||||
|
"no-AlphabeticalBindings"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// (deploy-rs.lib.deployChecks self.deploy)
|
24
nix/deploy.nix
Normal file
24
nix/deploy.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
deploy-rs,
|
||||||
|
nixpkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
hosts = (import ./hosts.nix).all;
|
||||||
|
|
||||||
|
genNode = hostName: nixosCfg: let
|
||||||
|
inherit (hosts.${hostName}) hostname hostPlatform remoteBuild;
|
||||||
|
inherit (deploy-rs.lib.${hostPlatform}) activate;
|
||||||
|
in {
|
||||||
|
inherit remoteBuild hostname;
|
||||||
|
profiles.system.path = activate.nixos nixosCfg;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
autoRollback = false;
|
||||||
|
magicRollback = true;
|
||||||
|
sshUser = "root";
|
||||||
|
user = "root";
|
||||||
|
sudo = "runuser -u";
|
||||||
|
nodes = lib.mapAttrs genNode self.nixosConfigurations;
|
||||||
|
}
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
nom = {
|
|
||||||
networking.hostName = "nom";
|
|
||||||
deployment = {
|
|
||||||
allowLocalDeployment = true;
|
|
||||||
targetHost = "192.168.1.183";
|
|
||||||
};
|
|
||||||
imports = [cell.nixosConfigurations.nom];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
{
|
|
||||||
nom = {
|
|
||||||
disk = {
|
|
||||||
"Intenso_SSD_3833430-532201046" = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/disk/by-id/ata-Intenso_SSD_3833430-532201046";
|
|
||||||
content = {
|
|
||||||
type = "table";
|
|
||||||
format = "gpt";
|
|
||||||
partitions = [
|
|
||||||
{
|
|
||||||
type = "partition";
|
|
||||||
name = "efi";
|
|
||||||
start = "2048";
|
|
||||||
end = "8GiB";
|
|
||||||
fs-type = "fat32";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "vfat";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
type = "partition";
|
|
||||||
name = "swap";
|
|
||||||
start = "8GiB";
|
|
||||||
end = "100%";
|
|
||||||
content = {
|
|
||||||
type = "swap";
|
|
||||||
randomEncryption = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"Samsung_SSD_980_PRO_1TB_S5GXNX1T325329W" = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/disk/by-id/nvme-Samsung_SSD_980_PRO_1TB_S5GXNX1T325329W";
|
|
||||||
content = {
|
|
||||||
type = "zfs";
|
|
||||||
pool = "rpool";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
zpool = {
|
|
||||||
rpool = {
|
|
||||||
type = "zpool";
|
|
||||||
mode = "mirror";
|
|
||||||
rootFsOptions = {
|
|
||||||
compression = "zstd";
|
|
||||||
acltype = "posix";
|
|
||||||
atime = "off";
|
|
||||||
xattr = "sa";
|
|
||||||
dnodesize = "auto";
|
|
||||||
mountpoint = "none";
|
|
||||||
canmount = "off";
|
|
||||||
devices = "off";
|
|
||||||
encryption = "aes-256-gcm";
|
|
||||||
keyformat = "passphrase";
|
|
||||||
keylocation = "prompt";
|
|
||||||
"autobackup:snap" = "true";
|
|
||||||
"autobackup:home" = "true";
|
|
||||||
};
|
|
||||||
options = {
|
|
||||||
ashift = "12";
|
|
||||||
bootfs = "rpool/root/nixos";
|
|
||||||
};
|
|
||||||
datasets = {
|
|
||||||
"root" = {
|
|
||||||
zfs_type = "filesystem";
|
|
||||||
};
|
|
||||||
"root/nixos" = {
|
|
||||||
zfs_type = "filesystem";
|
|
||||||
options = {
|
|
||||||
canmount = "on";
|
|
||||||
mountpoint = "/";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"home" = {
|
|
||||||
zfs_type = "filesystem";
|
|
||||||
};
|
|
||||||
"home/root" = {
|
|
||||||
zfs_type = "filesystem";
|
|
||||||
options = {
|
|
||||||
canmount = "on";
|
|
||||||
mountpoint = "/root";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
nom = {
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
inputs.disko.nixosModules.disko
|
|
||||||
{disko.devices = cell.diskoConfigurations.nom;}
|
|
||||||
inputs.nixos-hardware.nixosModules.common-cpu-intel
|
|
||||||
inputs.nixos-hardware.nixosModules.common-pc-laptop
|
|
||||||
inputs.nixos-hardware.nixosModules.common-pc-laptop-ssd
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
|
||||||
boot.initrd.kernelModules = [];
|
|
||||||
boot.kernelModules = [];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
# ZFS
|
|
||||||
networking.hostId = "4313abca";
|
|
||||||
boot.supportedFilesystems = ["zfs"];
|
|
||||||
boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
|
|
||||||
|
|
||||||
# WWhen using systemd-networkd it's still possible to use this option,
|
|
||||||
# but it's recommended to use it in conjunction with explicit per-interface
|
|
||||||
# declarations with `networking.interfaces.<interface>.useDHCP`.
|
|
||||||
networking.useDHCP = lib.mkDefault false;
|
|
||||||
|
|
||||||
hardware.enableRedistributableFirmware = true;
|
|
||||||
hardware.enableAllFirmware = true;
|
|
||||||
# high-resolution display
|
|
||||||
hardware.video.hidpi.enable = lib.mkDefault true;
|
|
||||||
|
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
{
|
|
||||||
nom = {pkgs, ...}: {
|
|
||||||
bee.system = "x86_64-linux";
|
|
||||||
bee.pkgs = import inputs.nixos {
|
|
||||||
inherit (inputs.nixpkgs) system;
|
|
||||||
config.allowUnfree = true;
|
|
||||||
overlays = [];
|
|
||||||
};
|
|
||||||
imports = [
|
|
||||||
cell.hardwareProfiles.nom
|
|
||||||
];
|
|
||||||
|
|
||||||
# Disable unnecessary stuff from the nixos defaults.
|
|
||||||
services.udisks2.enable = false;
|
|
||||||
networking.dhcpcd.enable = false;
|
|
||||||
networking.firewall.enable = false;
|
|
||||||
security.sudo.enable = false;
|
|
||||||
|
|
||||||
documentation.dev.enable = true;
|
|
||||||
|
|
||||||
# Use the systemd-boot EFI boot loader.
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
nix.settings = {
|
|
||||||
auto-optimise-store = true;
|
|
||||||
allowed-users = ["@wheel"];
|
|
||||||
trusted-users = ["root" "@wheel"];
|
|
||||||
experimental-features = [
|
|
||||||
"flakes"
|
|
||||||
"nix-command"
|
|
||||||
];
|
|
||||||
accept-flake-config = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
|
||||||
|
|
||||||
# Select internationalisation properties.
|
|
||||||
i18n.defaultLocale = "C.UTF-8";
|
|
||||||
console = {
|
|
||||||
keyMap = "de-latin1-nodeadkeys";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
passwordAuthentication = false;
|
|
||||||
kbdInteractiveAuthentication = false;
|
|
||||||
permitRootLogin = "yes";
|
|
||||||
hostKeys = [
|
|
||||||
{
|
|
||||||
path = "/etc/ssh/ssh_host_ed25519_key";
|
|
||||||
type = "ed25519";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
|
||||||
|
|
||||||
# Configure network proxy if necessary
|
|
||||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
|
||||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
|
||||||
|
|
||||||
services.sshd.enable = true;
|
|
||||||
|
|
||||||
# Enable sound.
|
|
||||||
sound.enable = true;
|
|
||||||
sound.mediaKeys.enable = true;
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
users = {
|
|
||||||
users.root = {
|
|
||||||
initialHashedPassword = "$6$EBo/CaxB.dQoq2W8$lo2b5vKgJlLPdGGhEqa08q3Irf1Zd1PcFBCwJOrG8lqjwbABkn1DEhrMh1P3ezwnww2HusUBuZGDSMa4nvSQg1";
|
|
||||||
openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA5Uq+CDy5Pmt3If5M6d8K/Q7HArU6sZ7sgoj3T521Wm"];
|
|
||||||
};
|
|
||||||
users.myuser = {
|
|
||||||
isNormalUser = true;
|
|
||||||
shell = pkgs.zsh;
|
|
||||||
extraGroups = ["wheel" "audio" "video"]; # Enable ‘sudo’ for the user.
|
|
||||||
packages = with pkgs; [
|
|
||||||
firefox
|
|
||||||
thunderbird
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# List packages installed in system profile. To search, run:
|
|
||||||
# $ nix search wget
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
kitty
|
|
||||||
firefox
|
|
||||||
direnv
|
|
||||||
# Git & Tools
|
|
||||||
git
|
|
||||||
# Nix
|
|
||||||
# nil # nix language server
|
|
||||||
rnix-lsp # nix language server
|
|
||||||
alejandra # nix formatter
|
|
||||||
# Python
|
|
||||||
black # python formatter
|
|
||||||
];
|
|
||||||
|
|
||||||
# Programs configuration
|
|
||||||
programs.neovim.enable = true;
|
|
||||||
programs.neovim.viAlias = true;
|
|
||||||
environment.variables.EDITOR = "nvim";
|
|
||||||
|
|
||||||
programs.starship.enable = true;
|
|
||||||
programs.nix-ld.enable = true; # quality of life for downloaded programs
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
enableCompletion = true;
|
|
||||||
autosuggestions.enable = true;
|
|
||||||
autosuggestions.async = true;
|
|
||||||
syntaxHighlighting.enable = true;
|
|
||||||
shellInit = ''
|
|
||||||
eval "$(direnv hook zsh)"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
programs.git = {
|
|
||||||
enable = true;
|
|
||||||
config = {
|
|
||||||
init.defaultBranch = "main";
|
|
||||||
pull.rebase = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
#programs.ssh = {
|
|
||||||
# extraConfig = ''
|
|
||||||
# Host github.com
|
|
||||||
# User git
|
|
||||||
# Hostname github.com
|
|
||||||
# IdentityFile ~/.ssh/lar
|
|
||||||
# Host gitlab.com
|
|
||||||
# PreferredAuthentications publickey
|
|
||||||
# IdentityFile ~/.ssh/lar
|
|
||||||
# '';
|
|
||||||
#};
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
|
||||||
};
|
|
||||||
}
|
|
28
nix/host-drvs.nix
Normal file
28
nix/host-drvs.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{self, ...}: system: let
|
||||||
|
inherit (self.pkgs.${system}) lib linkFarm;
|
||||||
|
|
||||||
|
hosts = import ./hosts.nix;
|
||||||
|
|
||||||
|
nixosDrvs = lib.mapAttrs (_: nixos: nixos.config.system.build.toplevel) self.nixosConfigurations;
|
||||||
|
homeDrvs = lib.mapAttrs (_: home: home.activationPackage) self.homeConfigurations;
|
||||||
|
hostDrvs = nixosDrvs // homeDrvs;
|
||||||
|
|
||||||
|
structuredHostDrvs =
|
||||||
|
lib.mapAttrsRecursiveCond
|
||||||
|
(as: !(as ? "type" && (lib.elem as.type ["home-manager" "nixos"])))
|
||||||
|
(path: _: hostDrvs.${lib.last path})
|
||||||
|
hosts;
|
||||||
|
|
||||||
|
structuredHostFarms =
|
||||||
|
lib.mapAttrsRecursiveCond
|
||||||
|
(as: !(lib.any lib.isDerivation (lib.attrValues as)))
|
||||||
|
(
|
||||||
|
path: values:
|
||||||
|
(linkFarm
|
||||||
|
(lib.concatStringsSep "-" path)
|
||||||
|
(lib.mapAttrsToList (name: path: {inherit name path;}) values))
|
||||||
|
// values
|
||||||
|
)
|
||||||
|
structuredHostDrvs;
|
||||||
|
in
|
||||||
|
structuredHostFarms
|
35
nix/hosts.nix
Normal file
35
nix/hosts.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
let
|
||||||
|
hosts = {
|
||||||
|
nom = {
|
||||||
|
type = "nixos";
|
||||||
|
hostname = "nom";
|
||||||
|
hostPlatform = "x86_64-linux";
|
||||||
|
remoteBuild = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit (builtins) attrNames concatMap listToAttrs;
|
||||||
|
|
||||||
|
filterAttrs = pred: set:
|
||||||
|
listToAttrs (concatMap (name: let
|
||||||
|
value = set.${name};
|
||||||
|
in
|
||||||
|
if pred name value
|
||||||
|
then [{inherit name value;}]
|
||||||
|
else []) (attrNames set));
|
||||||
|
|
||||||
|
systemPred = system: (_: v: builtins.match ".*${system}.*" v.hostPlatform != null);
|
||||||
|
|
||||||
|
genFamily = filter: hosts: rec {
|
||||||
|
all = filterAttrs filter hosts;
|
||||||
|
|
||||||
|
nixos = genFamily (_: v: v.type == "nixos") all;
|
||||||
|
homeManager = genFamily (_: v: v.type == "home-manager") all;
|
||||||
|
|
||||||
|
linux = genFamily (systemPred "-linux") all;
|
||||||
|
|
||||||
|
aarch64-linux = genFamily (systemPred "aarch64-linux") all;
|
||||||
|
x86_64-linux = genFamily (systemPred "x86_64-linux") all;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
genFamily (_: _: true) hosts
|
43
nix/nixos.nix
Normal file
43
nix/nixos.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
home-manager,
|
||||||
|
impermanence,
|
||||||
|
nixos-hardware,
|
||||||
|
nixpkgs,
|
||||||
|
ragenix,
|
||||||
|
templates,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
hosts = (import ./hosts.nix).nixos.all;
|
||||||
|
|
||||||
|
nixRegistry = {
|
||||||
|
nix.registry = {
|
||||||
|
nixpkgs.flake = nixpkgs;
|
||||||
|
p.flake = nixpkgs;
|
||||||
|
pkgs.flake = nixpkgs;
|
||||||
|
templates.flake = templates;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
genConfiguration = hostname: {hostPlatform, ...}:
|
||||||
|
lib.nixosSystem {
|
||||||
|
modules = [
|
||||||
|
(../hosts + "/${hostname}")
|
||||||
|
{
|
||||||
|
nixpkgs.pkgs = self.pkgs.${hostPlatform};
|
||||||
|
# FIXME: This shouldn't be needed, but is for some reason
|
||||||
|
nixpkgs.hostPlatform = hostPlatform;
|
||||||
|
}
|
||||||
|
nixRegistry
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
impermanence.nixosModules.impermanence
|
||||||
|
ragenix.nixosModules.age
|
||||||
|
];
|
||||||
|
specialArgs = {
|
||||||
|
impermanence = impermanence.nixosModules;
|
||||||
|
nixos-hardware = nixos-hardware.nixosModules;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.mapAttrs genConfiguration hosts
|
23
nix/overlay.nix
Normal file
23
nix/overlay.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
deploy-rs,
|
||||||
|
nixpkgs,
|
||||||
|
ragenix,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
localOverlays =
|
||||||
|
lib.mapAttrs'
|
||||||
|
(f: _:
|
||||||
|
lib.nameValuePair
|
||||||
|
(lib.removeSuffix ".nix" f)
|
||||||
|
(import (./overlays + "/${f}")))
|
||||||
|
(builtins.readDir ./overlays);
|
||||||
|
in
|
||||||
|
localOverlays
|
||||||
|
// {
|
||||||
|
default = lib.composeManyExtensions ((lib.attrValues localOverlays)
|
||||||
|
++ [
|
||||||
|
deploy-rs.overlay
|
||||||
|
ragenix.overlays.default
|
||||||
|
]);
|
||||||
|
}
|
11
nix/overlays/scripts/default.nix
Normal file
11
nix/overlays/scripts/default.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
final: prev:
|
||||||
|
with prev.lib;
|
||||||
|
with builtins;
|
||||||
|
composeManyExtensions
|
||||||
|
(
|
||||||
|
map
|
||||||
|
(f: import (./. + "/${f}"))
|
||||||
|
(remove "default.nix" (attrNames (readDir ./.)))
|
||||||
|
)
|
||||||
|
final
|
||||||
|
prev
|
233
pasteurize.nix
233
pasteurize.nix
|
@ -1,233 +0,0 @@
|
||||||
{
|
|
||||||
nixpkgs,
|
|
||||||
cellBlock,
|
|
||||||
}: let
|
|
||||||
l = nixpkgs.lib // builtins;
|
|
||||||
evalModulesMinimal =
|
|
||||||
(import (nixpkgs + /nixos/lib/default.nix) {
|
|
||||||
inherit (nixpkgs) lib;
|
|
||||||
# don't show the warning.
|
|
||||||
featureFlags.minimalModules = {};
|
|
||||||
})
|
|
||||||
.evalModules;
|
|
||||||
|
|
||||||
beeOptions = {config, ...}: {
|
|
||||||
options.bee = {
|
|
||||||
system = l.mkOption {
|
|
||||||
type = l.types.str;
|
|
||||||
description = "divnix/hive requires you to set the host's system via 'config.bee.system = \"x86_64-linux\";'";
|
|
||||||
};
|
|
||||||
home = l.mkOption {
|
|
||||||
type = l.mkOptionType {
|
|
||||||
name = "input";
|
|
||||||
description = "home-manager input";
|
|
||||||
check = x: (l.isAttrs x) && (l.hasAttr "sourceInfo" x);
|
|
||||||
};
|
|
||||||
description = "divnix/hive requires you to set the home-manager input via 'config.bee.home = inputs.home-22-05;'";
|
|
||||||
};
|
|
||||||
pkgs = l.mkOption {
|
|
||||||
type = l.mkOptionType {
|
|
||||||
name = "packages";
|
|
||||||
description = "instance of nixpkgs";
|
|
||||||
check = x: (l.isAttrs x) && (l.hasAttr "path" x);
|
|
||||||
};
|
|
||||||
description = "divnix/hive requires you to set the nixpkgs instance via 'config.bee.pkgs = inputs.nixos-22.05.legacyPackages;'";
|
|
||||||
apply = x:
|
|
||||||
if (l.hasAttr "${config.bee.system}" x)
|
|
||||||
then x.${config.bee.system}
|
|
||||||
else x;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
combCheckModule = let
|
|
||||||
erase = optionName: {options, ...}: let
|
|
||||||
opt = l.getAttrFromPath optionName options;
|
|
||||||
in {
|
|
||||||
options = l.setAttrByPath optionName (l.mkOption {visible = false;});
|
|
||||||
config._hive_erased = [
|
|
||||||
{
|
|
||||||
assertion = !opt.isDefined;
|
|
||||||
message = ''
|
|
||||||
The option definition `${l.showOption optionName}' in ${l.showFiles opt.files} is not supported by divnix/hive.
|
|
||||||
|
|
||||||
This is a Standard simplification.
|
|
||||||
|
|
||||||
- Please set 'config.bee.pkgs' to an instantiated version of nixpkgs.
|
|
||||||
- Also declare the host system via 'config.bee.system'.
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{config, ...}: {
|
|
||||||
imports = [
|
|
||||||
(erase ["nixpkgs" "config"])
|
|
||||||
(erase ["nixpkgs" "overlays"])
|
|
||||||
(erase ["nixpkgs" "system"])
|
|
||||||
(erase ["nixpkgs" "localSystem"])
|
|
||||||
(erase ["nixpkgs" "crossSystem"])
|
|
||||||
(erase ["nixpkgs" "pkgs"])
|
|
||||||
];
|
|
||||||
config._module = {
|
|
||||||
freeformType = l.types.unspecified;
|
|
||||||
check = true;
|
|
||||||
};
|
|
||||||
options._hive_erased = l.mkOption {
|
|
||||||
type = l.types.listOf l.types.unspecified;
|
|
||||||
internal = true;
|
|
||||||
default = [];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
checkAndTransformConfigFor = site: target: out: config: let
|
|
||||||
_file = "github:oddlama/infranix: ./nix/${site}; target: ${target}";
|
|
||||||
locatedConfig = {
|
|
||||||
imports = [config];
|
|
||||||
inherit _file;
|
|
||||||
};
|
|
||||||
checked = (evalModulesMinimal {modules = [combCheckModule beeOptions locatedConfig];}).config;
|
|
||||||
asserted = let
|
|
||||||
failedAsserts = map (x: x.message) (l.filter (x: !x.assertion) checked._hive_erased);
|
|
||||||
in
|
|
||||||
if failedAsserts != []
|
|
||||||
then throw "\nFailed assertions:\n${l.concatStringsSep "\n" (map (x: "- ${x}") failedAsserts)}"
|
|
||||||
else checked;
|
|
||||||
in
|
|
||||||
locatedConfig // (out asserted);
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
We start with:
|
|
||||||
${system}.${site}.${cellBlock}.${machine} = config;
|
|
||||||
|
|
||||||
We want:
|
|
||||||
${machine}@${site} = config; (filtered by system)
|
|
||||||
|
|
||||||
*/
|
|
||||||
pasteurize = self:
|
|
||||||
l.pipe
|
|
||||||
(
|
|
||||||
l.mapAttrs (system:
|
|
||||||
l.mapAttrs (site: blocks: (
|
|
||||||
l.pipe blocks [
|
|
||||||
(l.attrByPath [cellBlock] {})
|
|
||||||
(l.mapAttrs (machine:
|
|
||||||
checkAndTransformConfigFor site machine (
|
|
||||||
asserted: {
|
|
||||||
environment.etc."nixos/configuration.nix".text = ''
|
|
||||||
throw '''
|
|
||||||
This machine is not managed by nixos-rebuild, but by colmena.
|
|
||||||
'''
|
|
||||||
'';
|
|
||||||
nixpkgs = {
|
|
||||||
inherit (asserted.bee) system pkgs;
|
|
||||||
inherit (asserted.bee.pkgs) config; # nixos modules don't load this
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)))
|
|
||||||
(l.filterAttrs (_: config: config.nixpkgs.system == system))
|
|
||||||
(l.mapAttrs (machine: l.nameValuePair "${machine}@${site}"))
|
|
||||||
]
|
|
||||||
)))
|
|
||||||
(l.intersectAttrs (l.genAttrs l.systems.doubles.all (_: null)) self)
|
|
||||||
) [
|
|
||||||
(l.collect (x: x ? name && x ? value))
|
|
||||||
l.listToAttrs
|
|
||||||
];
|
|
||||||
|
|
||||||
stir = config: {
|
|
||||||
# we consume the already transformed contract here
|
|
||||||
evalConfig = import (config.nixpkgs.pkgs.path + "/nixos/lib/eval-config.nix");
|
|
||||||
system = config.nixpkgs.system;
|
|
||||||
};
|
|
||||||
|
|
||||||
# same as pasteurize, but for home manager configs
|
|
||||||
cure = self:
|
|
||||||
l.pipe
|
|
||||||
(
|
|
||||||
l.mapAttrs (system:
|
|
||||||
l.mapAttrs (site: blocks: (
|
|
||||||
l.pipe blocks [
|
|
||||||
(l.attrByPath [cellBlock] {})
|
|
||||||
(l.mapAttrs (homecfg:
|
|
||||||
checkAndTransformConfigFor site homecfg (
|
|
||||||
# We switched off the home-manager nimpkgs module since it
|
|
||||||
# does a re-import (and we don't tolerate that interface)
|
|
||||||
# so we re-use bee to communicate with the shake function
|
|
||||||
# below
|
|
||||||
asserted: {bee = {inherit (asserted.bee) system pkgs home;};}
|
|
||||||
)))
|
|
||||||
(l.filterAttrs (_: config: config.bee.system == system))
|
|
||||||
(l.mapAttrs (homecfg: l.nameValuePair "${homecfg}@${site}"))
|
|
||||||
]
|
|
||||||
)))
|
|
||||||
(l.intersectAttrs (l.genAttrs l.systems.doubles.all (_: null)) self)
|
|
||||||
) [
|
|
||||||
(l.collect (x: x ? name && x ? value))
|
|
||||||
l.listToAttrs
|
|
||||||
];
|
|
||||||
|
|
||||||
# same as stir, but for home manager configs
|
|
||||||
shake = config: extra: let
|
|
||||||
# we consume the already transformed contract here
|
|
||||||
lib = import (config.bee.home + /modules/lib/stdlib-extended.nix) l;
|
|
||||||
hmModules = import (config.bee.home + /modules/modules.nix) {
|
|
||||||
inherit (config.bee) pkgs;
|
|
||||||
inherit lib;
|
|
||||||
check = true;
|
|
||||||
# we switch off the nixpkgs module, package instantiation needs
|
|
||||||
# to happen on the `std` layer
|
|
||||||
useNixpkgsModule = false;
|
|
||||||
};
|
|
||||||
evaled =
|
|
||||||
# need to use the extended lib
|
|
||||||
lib.evalModules {
|
|
||||||
modules = [config beeOptions extra] ++ hmModules;
|
|
||||||
specialArgs = {
|
|
||||||
modulesPath = l.toString (config.bee.home + /modules);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
inherit evaled;
|
|
||||||
# system = config.bee.system; # not actually used
|
|
||||||
};
|
|
||||||
|
|
||||||
# same as pasteurize, but for disko where the system doesn't matter
|
|
||||||
sing = self:
|
|
||||||
l.pipe
|
|
||||||
(
|
|
||||||
l.mapAttrs (system:
|
|
||||||
l.mapAttrs (site: blocks: (
|
|
||||||
l.pipe blocks [
|
|
||||||
(l.attrByPath [cellBlock] {})
|
|
||||||
(l.filterAttrs (_: _: "x86_64-linux" == system)) # pick one
|
|
||||||
(l.mapAttrs (disko: l.nameValuePair "${disko}.${site}"))
|
|
||||||
]
|
|
||||||
)))
|
|
||||||
(l.intersectAttrs (l.genAttrs l.systems.doubles.all (_: null)) self)
|
|
||||||
) [
|
|
||||||
(l.collect (x: x ? name && x ? value))
|
|
||||||
l.listToAttrs
|
|
||||||
];
|
|
||||||
|
|
||||||
# Error reporting
|
|
||||||
showAssertions = let
|
|
||||||
collectFailed = cfg:
|
|
||||||
l.map (x: x.message) (l.filter (x: !x.assertion) cfg.assertions);
|
|
||||||
showWarnings = res: let
|
|
||||||
f = w: x: l.trace "warning: ${w}" x;
|
|
||||||
in
|
|
||||||
l.fold f res res.config.warnings;
|
|
||||||
in
|
|
||||||
evaled:
|
|
||||||
showWarnings (
|
|
||||||
let
|
|
||||||
failed = collectFailed evaled.config;
|
|
||||||
failedStr = l.concatStringsSep "\n" (map (x: "- ${x}") failed);
|
|
||||||
in
|
|
||||||
if failed == []
|
|
||||||
then evaled
|
|
||||||
else throw "\nFailed assertions:\n${failedStr}"
|
|
||||||
);
|
|
||||||
in {inherit pasteurize stir cure shake sing showAssertions beeOptions;}
|
|
9
users/oddlama/default.nix
Normal file
9
users/oddlama/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
impermanence,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; {
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue