Author SHA1 Message Date
klaatu aa4afea341 chore(gitea/anubis): remove anubis-secret from kustomization
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-05-21 06:05:54 +00:00
klaatu b12731a100 chore(gitea/anubis): remove anubis-secret.yaml, no manual secret needed
buildbot/nix-eval Build done.
2026-05-21 06:05:42 +00:00
klaatu ce2c9c76a7 chore(gitea/anubis): remove ED25519 secret env var, Anubis auto-generates key
buildbot/nix-eval Build done.
2026-05-21 06:05:34 +00:00
root dc083ddf1a feat(gitea): add Anubis anti-crawler sidecar
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
Anubis (https://anubis.techaro.lol) is a lightweight proof-of-work
challenge that protects web services from AI crawlers and scrapers.

Changes:
- Add Anubis as an extraContainers sidecar in the Gitea HelmRelease
  - Listens on :8080, proxies to Gitea at http://localhost:3000
  - DIFFICULTY=4 (default; tune up to increase challenge strength)
  - SERVE_ROBOTS_TXT=true (Anubis manages robots.txt)
  - OG_PASSTHROUGH=true (OpenGraph bots pass through for link previews)
  - Signs challenges with ED25519 key from 'anubis-key' secret
- Add anubis port (8080) to Gitea service via additionalPorts
- Update Ingress to route to the 'anubis' port instead of 'http'
- Add anubis-secret.yaml placeholder with creation instructions

One-time setup required before applying:
  kubectl create secret generic anubis-key \
    --namespace gitea \
    --from-literal=ED25519_PRIVATE_KEY_HEX=$(openssl rand -hex 32)
2026-05-20 03:34:42 -05:00
Greg Hellings 75e71f9ce9 fix: get Matrix running again
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-effects Build done.
buildbot/nix-build Build done.
2026-05-20 03:27:45 -05:00
Greg Hellings 19540ea1da chore: update mariadb-operator version 2026-05-20 03:26:37 -05:00
Greg Hellings 431f78f8af fix: enable minio access for gitea backups 2026-05-19 23:48:34 -05:00
Greg Hellings 95eea6fc26 fix: enable s3 DNS aliases 2026-05-19 23:47:42 -05:00
greg 387a34ffff Merge pull request 'chore: update flake.lock 2026-05-18' (#23) from auto/update-flake-lock-20260518 into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/23
Reviewed-by: klaatu <klaatu@thehellings.com>
2026-05-19 15:16:50 +00:00
greg 37a833887b Merge branch 'main' into auto/update-flake-lock-20260518
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
2026-05-19 07:53:55 +00:00
Greg Hellings a69fc4240a chore: build IVR home config
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-19 02:40:33 -05:00
Greg Hellings 15c586fbdb fix: build failures on darwin
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-19 02:37:25 -05:00
klaatu 2daf74d134 chore: update flake.lock 2026-05-18
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-hms Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-iso Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-proxmoxtemplate Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build Build done.
2026-05-18 17:58:09 +00:00
Greg Hellings 1934787e80 chore: create desktop entry for prismlauncher
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-18 12:45:52 -05:00
Greg Hellings 2a476a7bfe chore: update refined-storage to release 2026-05-18 12:45:34 -05:00
Greg Hellings e94137ecbf fix: enable colmena building with new overlays 2026-05-18 12:45:04 -05:00
Greg Hellings d22f543043 chore: update niks3 pin to fix mega file problem 2026-05-18 12:44:34 -05:00
Greg Hellings e5e4a38cf1 chore: begin updating zim updater
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
Update manifest chart versions / update-manifests (push) Successful in 29s
Update flake.lock / update-flake-lock (push) Successful in 2m49s
2026-05-13 11:01:33 -05:00
Greg Hellings 89faa7d97d fix: update SHA hashes 2026-05-13 10:50:26 -05:00
Greg Hellings fc4430e4f1 fix: system build fixes for new package setup 2026-05-13 08:33:48 -05:00
Greg Hellings f735423d98 chore: make zims separate packages
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-gregs-MacBook-Pro-16-inch-Nov-2024 Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-ivr Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_ht_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-phet-phet_fr_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-phet-phet_en_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikiversity-wikiversity_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikibooks-wikibooks_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wiktionary-wiktionary_fr_all_nopic.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikiversity-wikiversity_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikibooks-wikibooks_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wiktionary-wiktionary_en_all_nopic.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-gutenberg-gutenberg_fr_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikisource-wikisource_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikisource-wikisource_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_fr_all_maxi.zim" Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_en_all_maxi.zim" Build done.
2026-05-13 08:06:57 -05:00
Greg Hellings 985dd927c4 chore: move from attic to niks3
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-12 21:25:24 -05:00
Greg Hellings 10d6f85b5e chore: update pre-commit
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update manifest chart versions / update-manifests (push) Successful in 3s
2026-05-10 01:48:45 -05:00
Greg Hellings 85cdfce6a9 fix: use proper runs-on for updates 2026-05-10 01:47:34 -05:00
Greg Hellings e62757cf1c chore: add Ubuntu 26.04 to matrix 2026-05-10 01:42:28 -05:00
Greg Hellings a1fb195bf4 chore: add podman-tui and other goodies
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Failing after 4s
2026-05-07 08:28:44 -05:00
Greg Hellings 9eb9fdec6c chore: try allowing nix darwin builds
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Failing after 3s
Update manifest chart versions / update-manifests (push) Successful in 4s
2026-04-30 17:18:36 -05:00
Greg Hellings a8323e2396 fix: unstick macOS builds for libdrm missing
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 16:13:36 -05:00
Greg Hellings 855ab6e277 chore: try forcing build of linux-builder packages
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 16:08:23 -05:00
Greg Hellings 2932e9e335 chore: remove vm-gitlab which is no longer in use 2026-04-30 16:06:58 -05:00
Greg Hellings 4940550c62 chore: enable linux-builder on Mac
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 14:42:55 -05:00
Greg Hellings 258934a46b chore: update Claude code usage 2026-04-30 14:42:29 -05:00
Greg Hellings 2476be3799 chore: make builder hostname more accessible
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 10:09:18 -05:00
Greg Hellings 08111e7a8a chore: add ssh key to remote-builder config 2026-04-30 10:08:57 -05:00
Greg Hellings 99cc8efea0 chore: add builders to darwin baseline
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 09:43:46 -05:00
Greg Hellings 09198fda28 Merge branch 'main' of srcpub:greg/nixos 2026-04-30 09:40:34 -05:00
Greg Hellings e16886c62c chore: add mcp-grafana to li 2026-04-30 09:40:25 -05:00
Greg Hellings c939d67cb6 chore: allow genesis to use its own DNS
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 16:11:20 -05:00
Greg Hellings 600aa885d4 chore: add minecraft server 2026-04-29 16:10:31 -05:00
Greg Hellings 8efd97599a chore: remove exodus, which is x86 linux
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:20:04 -05:00
Greg Hellings 686df31049 chore: make garnix builds an array
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:14:55 -05:00
Greg Hellings c3e3ca84a2 chore: cleanup unused packages on Darwin
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:02:12 -05:00
Greg Hellings f8cc47614f chore: remove unused genesis config bits
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-adblock_update Build done.
buildbot/nix-build Build done.
Update flake.lock / update-flake-lock (push) Failing after 8s
Update manifest chart versions / update-manifests (push) Successful in 4s
2026-04-24 18:56:10 -05:00
Greg Hellings 904754e059 fix: re-enable scheduling on Zeke disk replacement
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-24 06:46:29 -05:00
Greg Hellings 673f9b1f8b chore: expose credentials to Claude
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-setup-ssh Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build Build done.
2026-04-22 21:59:30 -05:00
Greg Hellings 993385f1db chore: update flake pins 2026-04-22 21:59:16 -05:00
Greg Hellings 088c1a0033 chore: add new uuid for zeke
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-zim Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
2026-04-22 21:01:42 -05:00
131 changed files with 1559 additions and 2149 deletions
+2 -2
View File
@@ -1,13 +1,13 @@
name: Update flake.lock name: Update flake.lock
on: "on":
schedule: schedule:
- cron: "0 0 * * 0" # Every Sunday at midnight UTC - cron: "0 0 * * 0" # Every Sunday at midnight UTC
workflow_dispatch: workflow_dispatch:
jobs: jobs:
update-flake-lock: update-flake-lock:
runs-on: [bare-metal, nix-latest] runs-on: nix-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
-23
View File
@@ -1,23 +0,0 @@
stages:
- eval
- build
- push
"Evaluate for builds":
stage: eval
tags:
- kubernetes
image: "$CI_REGISTRY/greg/ci-images/builder:latest"
artifacts:
paths:
- gitlab-ci-continue.yml
script: nix run ".#gen-build" > gitlab-ci-continue.yml
"Trigger builds":
stage: build
trigger:
include:
- artifact: gitlab-ci-continue.yml
job: "Evaluate for builds"
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
+3 -2
View File
@@ -17,7 +17,7 @@ repos:
- id: mixed-line-ending - id: mixed-line-ending
- id: trailing-whitespace - id: trailing-whitespace
- repo: https://github.com/adrienverge/yamllint.git - repo: https://github.com/adrienverge/yamllint.git
rev: v1.37.1 rev: v1.38.0
hooks: hooks:
- id: yamllint - id: yamllint
args: args:
@@ -30,8 +30,9 @@ repos:
comments: false comments: false
comments-indentation: false comments-indentation: false
document-start: false document-start: false
line-length: false
- repo: https://github.com/NixOS/nixfmt - repo: https://github.com/NixOS/nixfmt
rev: v1.1.0 rev: v1.2.0
hooks: hooks:
- id: nixfmt-nix - id: nixfmt-nix
- repo: https://github.com/astro/deadnix - repo: https://github.com/astro/deadnix
+24 -24
View File
@@ -1,30 +1,40 @@
{ {
lib,
pkgs, pkgs,
pkgs',
top, top,
... ...
}: }:
let let
builder-config = { system = builtins.replaceStrings [ "darwin" ] [ "linux" ] pkgs.stdenv.hostPlatform.system;
darwin-aarch-builder = top.self.nixosConfigurations.builder-aarch; builderConfig = top.nixunstable.lib.nixosSystem {
darwin-x86-builder = top.self.nixosConfigurations.builder-x86; inherit system;
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation = {
host.pkgs = pkgs;
darwin-builder = {
workingDirectory = "/var/lib/darwin-builder";
hostPort = 22;
};
};
}
];
}; };
builder = arch: let builder = {
b = builder-config."darwin-${arch}-builder"; command = "${builderConfig.config.system.build.macos-builder-installer}/bin/create-builder";
in {
command = "${b.config.system.build.macos-builder-installer}/bin/create-builder";
serviceConfig = { serviceConfig = {
KeepAlive = true; KeepAlive = true;
RunAtLoad = true; RunAtLoad = true;
StandardOutPath = "/var/log/builder-vm-${arch}.log"; StandardOutPath = "/var/log/builder-vm-${system}.log";
StandardErrorPath = "/var/log/builder-vm-${arch}.stderr.log"; StandardErrorPath = "/var/log/builder-vm-${system}.stderr.log";
}; };
}; };
in in
{ {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
agenix agenix
hms pkgs'.hms
]; ];
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
@@ -32,23 +42,13 @@ in
nerd-fonts.hack nerd-fonts.hack
]; ];
#launchd.daemons = lib.genAttrs' [ "x86" "aarch" ] (arch: lib.nameValuePair "builder-${arch}-machine" (builder arch)); #launchd.daemons.darwin-builder = builder;
nix = { nix = {
#buildMachines = [ { systems = ["aarch64-linux"]; sshUser = "builder"; sshKey = "/etc/nix/builder_ed25519"; hostName = "localhost:31022"; protocol = "ssh-ng"; }];
enable = true; enable = true;
buildMachines = [
{
hostName = "ssh-ng://builder@localhost";
system = "aarch64-linux";
maxJobs = 4;
supportedFeatures = [
"kvm"
"benchmarch"
"big-parallel"
];
}
];
gc.interval.Hour = 3; gc.interval.Hour = 3;
#linux-builder.enable = true;
settings.auto-optimise-store = false; # Darwin bugs? settings.auto-optimise-store = false; # Darwin bugs?
}; };
+2 -8
View File
@@ -19,6 +19,7 @@ let
specialArgs = { specialArgs = {
inherit metadata top; inherit metadata top;
inherit (top) self; inherit (top) self;
pkgs' = top.self.packages.${system};
}; };
modules = [ modules = [
{ {
@@ -37,11 +38,4 @@ let
++ lib.optionals (builtins.pathExists ./hosts/${name}) [ ./hosts/${name} ]; ++ lib.optionals (builtins.pathExists ./hosts/${name}) [ ./hosts/${name} ];
}; };
in in
( (lib.genAttrs (builtins.attrNames (builtins.readDir ./hosts)) (name: mac { inherit name; }))
lib.genAttrs
(builtins.attrNames (builtins.readDir ./hosts))
(
name:
mac { inherit name; }
)
)
+1
View File
@@ -31,6 +31,7 @@ in
"bitwarden" "bitwarden"
"bruno" "bruno"
"chromium" "chromium"
"claude"
"dbeaver-community" "dbeaver-community"
"ghostty" "ghostty"
"firefox" "firefox"
+1 -1
View File
@@ -1,4 +1,4 @@
{ config, ... }: { ... }:
let let
username = "greg"; username = "greg";
in in
Generated
+197 -104
View File
@@ -25,19 +25,17 @@
}, },
"buildbot": { "buildbot": {
"inputs": { "inputs": {
"flake-parts": "flake-parts",
"hercules-ci-effects": "hercules-ci-effects",
"nixpkgs": [ "nixpkgs": [
"nixunstable" "nixunstable"
], ],
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1775969270, "lastModified": 1779096866,
"narHash": "sha256-uu+DFoqMI2g2E+QE6EQfVc4g/jibNSnVobSUhxFr20o=", "narHash": "sha256-8HtF1G7OPMXzo+f+0W+7zwzhuBUSk2EMrOS4ZvFw7+I=",
"owner": "nix-community", "owner": "nix-community",
"repo": "buildbot-nix", "repo": "buildbot-nix",
"rev": "df9ff85cf20cedeae2f231dc2997d2e8ca5810cf", "rev": "891f2baba218f4365f0c6ef96ea33f9b277f5ed0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -97,11 +95,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775037210, "lastModified": 1779036909,
"narHash": "sha256-KM2WYj6EA7M/FVZVCl3rqWY+TFV5QzSyyGE2gQxeODU=", "narHash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "06648f4902343228ce2de79f291dd5a58ee12146", "rev": "56c666e108467d87d13508936aade6d567f2a501",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -128,6 +126,22 @@
} }
}, },
"flake-compat_2": { "flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1767039857, "lastModified": 1767039857,
@@ -145,17 +159,14 @@
}, },
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": "nixpkgs-lib"
"buildbot",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1775087534, "lastModified": 1778716662,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -166,14 +177,17 @@
}, },
"flake-parts_2": { "flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": [
"nixvimunstable",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1775087534, "lastModified": 1778716662,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -183,27 +197,6 @@
} }
}, },
"flake-parts_3": { "flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"nixvimunstable",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775087534,
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nurpkgs", "nurpkgs",
@@ -239,31 +232,6 @@
"type": "github" "type": "github"
} }
}, },
"hercules-ci-effects": {
"inputs": {
"flake-parts": [
"buildbot",
"flake-parts"
],
"nixpkgs": [
"buildbot",
"nixpkgs"
]
},
"locked": {
"lastModified": 1773550609,
"narHash": "sha256-neu7ixXHjV3LobVjOndkL97u+6UF6Yoh+CUnzX7kUBQ=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "554f6ed448ca74c00aa2371cde901ae1e73005b9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"type": "github"
}
},
"hmunstable": { "hmunstable": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -271,11 +239,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1776184304, "lastModified": 1779125151,
"narHash": "sha256-No6QGBmIv5ChiwKCcbkxjdEQ/RO2ZS1gD7SFy6EZ7rc=", "narHash": "sha256-bPHT0oJAHe5a43lkkSGAiCEg/RBqpwv5xsFrcj+Bog8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "3c7524c68348ef79ce48308e0978611a050089b2", "rev": "fab3fd7327a0ac7a1fae5095bf140377704fac7f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -306,6 +274,45 @@
"type": "github" "type": "github"
} }
}, },
"minecraft": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs_2",
"systems": "systems_2"
},
"locked": {
"lastModified": 1778039471,
"narHash": "sha256-Arjg44jFcpSqOKK05EIxbKIjhfjou/EGF12COFU+9QA=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
"rev": "87611ef4788116de05f851920c5958f0c37d5b05",
"type": "github"
},
"original": {
"owner": "Infinidoge",
"repo": "nix-minecraft",
"type": "github"
}
},
"niks3": {
"inputs": {
"nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1778839878,
"narHash": "sha256-S2nSP6YWUz8I2uRZuAY93FoAAUa9TiZetLzjBv1n5vk=",
"owner": "Mic92",
"repo": "niks3",
"rev": "c29f3641de064545d75f00318cd45bea2b4ea1d0",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "niks3",
"type": "github"
}
},
"nix-github-actions": { "nix-github-actions": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -329,11 +336,11 @@
}, },
"nix-hardware": { "nix-hardware": {
"locked": { "locked": {
"lastModified": 1775490113, "lastModified": 1779099457,
"narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=", "narHash": "sha256-u73aVD/lUmmT3JV+kPDztl7zPwQKd0eobD1AbJltaGs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7", "rev": "8792fab9d4a6454a9201675f01326f827ce35ead",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -360,11 +367,26 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1774748309, "lastModified": 1777168982,
"narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=", "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "333c4e0545a6da976206c74db8773a1645b5870a", "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-lib_2": {
"locked": {
"lastModified": 1778984393,
"narHash": "sha256-r755Kh5Q0XBTPNuv9rL2rsUJTq8BDhb+lIwRWhl6yYA=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "0d14a58ab7aa3f513c58ccc9e47e77ffd92be204",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -375,11 +397,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1776169885, "lastModified": 1769461804,
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -391,27 +413,59 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1766025857, "lastModified": 1778491576,
"narHash": "sha256-Lav5jJazCW4mdg1iHcROpuXqmM94BWJvabLFWaJVJp0=", "narHash": "sha256-9YOHDS9ANGbRmf3DSQ9UCvas3CyYNIBwBkKGQZTLXGY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1174f92bf37f1a5914be77e1b44482d6fbc75ecc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1778869304,
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "def3da69945bbe338c373fddad5a1bb49cf199ce", "rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1777207419,
"narHash": "sha256-V3bmPWAajDiC+1ClDOp55gianW2EyRJSJOyu1RUQibc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a7ecea3deccfbdbf22945a89984fcc5a169da8aa",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "def3da69945bbe338c373fddad5a1bb49cf199ce", "rev": "a7ecea3deccfbdbf22945a89984fcc5a169da8aa",
"type": "github" "type": "github"
} }
}, },
"nixunstable": { "nixunstable": {
"locked": { "locked": {
"lastModified": 1776169885, "lastModified": 1778869304,
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", "rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -423,18 +477,18 @@
}, },
"nixvimunstable": { "nixvimunstable": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_2",
"nixpkgs": [ "nixpkgs": [
"nixunstable" "nixunstable"
], ],
"systems": "systems_2" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1776350339, "lastModified": 1779116047,
"narHash": "sha256-Rl+tnpvdpf66e/3m+LPNzUoebV3jpiJz7oMxas8FB3I=", "narHash": "sha256-2BnXm4/BvR5B0CH8nxC4CL+y+Z7woqPbPxKO7IMH85U=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "4f75992439d3d554a3681880510e4b645ca2d15b", "rev": "1367315826ebda2bebbf896029f44ac05df523f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -446,15 +500,15 @@
}, },
"nurpkgs": { "nurpkgs": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_4", "flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_4"
}, },
"locked": { "locked": {
"lastModified": 1776350162, "lastModified": 1779124721,
"narHash": "sha256-iGEy0sg4EPO8yivJ6YweACEM3f18rLJfM7wjG/HCz8A=", "narHash": "sha256-Z1q8QkuHAdkmXh4SItOzViVVFVLb+tzaEaYCTHI2UKk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "46a3451d51a24c20062a0db7c00201cdf1cc8e7a", "rev": "ad57d8faf36bb02c65c90012cd0289daa0b2d9c4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -469,9 +523,12 @@
"buildbot": "buildbot", "buildbot": "buildbot",
"colmena": "colmena", "colmena": "colmena",
"darwin": "darwin_2", "darwin": "darwin_2",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts",
"hmunstable": "hmunstable", "hmunstable": "hmunstable",
"minecraft": "minecraft",
"niks3": "niks3",
"nix-hardware": "nix-hardware", "nix-hardware": "nix-hardware",
"nixpkgs-lib": "nixpkgs-lib_2",
"nixunstable": "nixunstable", "nixunstable": "nixunstable",
"nixvimunstable": "nixvimunstable", "nixvimunstable": "nixvimunstable",
"nurpkgs": "nurpkgs", "nurpkgs": "nurpkgs",
@@ -525,6 +582,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": { "treefmt-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -546,16 +618,37 @@
"type": "github" "type": "github"
} }
}, },
"vsext": { "treefmt-nix_2": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_3" "nixpkgs": [
"niks3",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1776310443, "lastModified": 1775636079,
"narHash": "sha256-XQo/vlS6xak3iT3xS2Q3TUMbreeeqe+PR99feUoV0UQ=", "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"vsext": {
"inputs": {
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1779077424,
"narHash": "sha256-2nuxPFMR1R3IlV/OlF65qjs2gGjHhASa7U0+8QX0bJg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-vscode-extensions", "repo": "nix-vscode-extensions",
"rev": "3a6d0ea13d092493b285b9093b5ce81e79df5cee", "rev": "b7bde1772cdb20e77381516fbbb5306a621d0965",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -566,17 +659,17 @@
}, },
"wsl": { "wsl": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_3",
"nixpkgs": [ "nixpkgs": [
"nixunstable" "nixunstable"
] ]
}, },
"locked": { "locked": {
"lastModified": 1776255237, "lastModified": 1777732699,
"narHash": "sha256-LQjlc0VEn55WAT4BiI8sIsokb/2FNlcbBD+Xr3MTE24=", "narHash": "sha256-2uX/XtOWZ/oy2rerRynVhqVA//ZXZ3Fo60PikLHEPQc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "9a8c2a85f1ffdcecfb0f9c52c5a73c49ceb43911", "rev": "5482f113fd31ebac131d1ebeb2ae90bf0d5e41f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
+8 -2
View File
@@ -23,7 +23,10 @@
url = "github:nix-community/home-manager/master"; url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixunstable"; inputs.nixpkgs.follows = "nixunstable";
}; };
minecraft.url = "github:Infinidoge/nix-minecraft";
niks3.url = "github:Mic92/niks3";
nix-hardware.url = "github:nixos/nixos-hardware"; nix-hardware.url = "github:nixos/nixos-hardware";
nixpkgs-lib.url = "github:nix-community/nixpkgs.lib";
nixvimunstable = { nixvimunstable = {
url = "github:nix-community/nixvim/main"; url = "github:nix-community/nixvim/main";
inputs.nixpkgs.follows = "nixunstable"; inputs.nixpkgs.follows = "nixunstable";
@@ -47,6 +50,7 @@
top.nixvimunstable.overlays.default top.nixvimunstable.overlays.default
top.nurpkgs.overlays.default top.nurpkgs.overlays.default
top.vsext.overlays.default top.vsext.overlays.default
top.minecraft.overlay
]; ];
metadata = builtins.fromJSON (builtins.readFile ./network.json); metadata = builtins.fromJSON (builtins.readFile ./network.json);
systems = [ systems = [
@@ -82,6 +86,7 @@
self self
top top
; ;
pkgs' = top.self.packages.x86_64-linux;
}; };
}; };
} }
@@ -143,16 +148,17 @@
pkgs = imported_packages.${system}; pkgs = imported_packages.${system};
}; };
packages = (import ./pkgs { inherit pkgs; }); packages = (import ./pkgs { inherit pkgs top; });
checks = import ./checks.nix { checks = import ./checks.nix {
inherit system top self'; inherit system top self';
inherit (pkgs) lib; inherit (top.nixpkgs-lib) lib;
}; };
devShells = import ./shells.nix { devShells = import ./shells.nix {
inherit pkgs; inherit pkgs;
inherit (top) colmena; inherit (top) colmena;
inherit (self') packages;
}; };
}; };
}; };
+22 -23
View File
@@ -1,24 +1,23 @@
builds: builds:
exclude: # Exclude most things, as I locally build x86_64-linux and aarch64-linux
- "homeConfigurations.*" - exclude:
- "nixosConfigurations.*" - "homeConfigurations.*"
- "packages.*" - "nixosConfigurations.*"
# bitwarden-cli package is broken on aarch64-darwin - "packages.*"
- "packages.aarch64-darwin.img-bitwarden" # These are just images which I will build when
# kmod-31 is not a thing on Darwin # I feel like it
- "packages.aarch64-darwin.qemu-hook" - "devShells.*"
- "packages.aarch64-darwin.vfio_shutdown" include:
- "packages.aarch64-darwin.vfio_startup" - "packages.aarch64-darwin.*"
# This one is a bit of a beast and shouldn't take up Garnix time - darwinConfigurations.MacBook-Pro
- "packages.aarch64-darwin.zim" - darwinConfigurations.MacBook-Prolocal
# These are just images which I will build when - darwinConfigurations.li
# I feel like it # Some specific includes which are not specific enough to override the rules
- "devShells.*" # above, due to the intrepretation of the glob excludes, but which I still
include: # need included
- "packages.aarch64-darwin.*" - include:
- homeConfigurations.exodus # These are Mac homeConfigurations, which I do not have the infra
- darwinConfigurations.MacBook-Pro # to build at home
- darwinConfigurations.MacBook-Prolocal - homeConfigurations."gregory.hellings-mbp"
- darwinConfigurations.li - homeConfigurations.gregs-MacBook-Pro-16-inch-Nov-2024
- nixosConfigurations.builder-x86 - homeConfigurations.ivr
- nixosConfigurations.builder-aarch
+3 -1
View File
@@ -1,5 +1,5 @@
# vim: set filetype=nushell : # vim: set filetype=nushell :
let servers = [isaiah jeremiah zeke genesis vm-gitlab] let servers = [isaiah jeremiah zeke genesis]
def par-map [ items: list, c: closure ] { def par-map [ items: list, c: closure ] {
let results = $items | par-each -k $c let results = $items | par-each -k $c
@@ -71,6 +71,8 @@ def dc [ $cmd: string = "sh" ] {
def claude [ ] { def claude [ ] {
unlock unlock
$env.GITLAB_TOKEN = ^bw get item 7d3da4e9-5f9a-49d0-8e14-b39c010a4001 | from json | get fields | find claudeapi | get value
#$env.ANTHROPIC_API_KEY = ^bw get item e122fd08-3506-4f21-9c6a-b42b00fe5be1 | from json | get login.password
^claude ^claude
} }
+1
View File
@@ -26,6 +26,7 @@
nixcopy = "nix copy --to \"s3://binary-cache/?profile=default&endpoint=nas.home%3A9000&scheme=http\""; nixcopy = "nix copy --to \"s3://binary-cache/?profile=default&endpoint=nas.home%3A9000&scheme=http\"";
r = "run0"; r = "run0";
updateScript = "nix-shell maintainers/scripts/update.nix --argstr package"; updateScript = "nix-shell maintainers/scripts/update.nix --argstr package";
p = "${lib.getExe pkgs.podman-tui}";
# General # General
k = "kubectl"; k = "kubectl";
+1 -1
View File
@@ -5,7 +5,7 @@
# This allows things like SSH in distrobox to read the config file just fine # This allows things like SSH in distrobox to read the config file just fine
home.file.".ssh/config" = { home.file.".ssh/config" = {
target = ".ssh/config_source"; target = ".ssh/config_source";
onChange = ''cat ~/.ssh/config_source > ~/.ssh/config && chmod 600 ~/.ssh/config''; onChange = "cat ~/.ssh/config_source > ~/.ssh/config && chmod 600 ~/.ssh/config";
}; };
programs.ssh = { programs.ssh = {
enable = true; enable = true;
-5
View File
@@ -38,11 +38,6 @@ def _ivr2(args):
vpn("gregory_hellings@ra.ivrtechnology.com", "IVR Technology") vpn("gregory_hellings@ra.ivrtechnology.com", "IVR Technology")
aliases['ivr2'] = _ivr2 aliases['ivr2'] = _ivr2
def _glrestart(args):
sudo nixos-container run gitlab -- systemctl restart gitlab
sudo nixos-container run gitlab -- systemctl restart nginx
aliases['glrestart'] = _glrestart
def _aws_creds(args): def _aws_creds(args):
$AWS_ACCESS_KEY_ID=$(bw get username "AWS Access Key") $AWS_ACCESS_KEY_ID=$(bw get username "AWS Access Key")
$AWS_SECRET_ACCESS_KEY=$(bw get password "AWS Access Key") $AWS_SECRET_ACCESS_KEY=$(bw get password "AWS Access Key")
+5 -6
View File
@@ -10,7 +10,9 @@ let
let let
inherit (metadata.hosts.${host}) system; inherit (metadata.hosts.${host}) system;
pkgs = nixpkgs.${system}; pkgs = nixpkgs.${system};
username = if builtins.hasAttr "user" metadata.hosts.${host} then metadata.hosts.${host}.user else "greg"; pkgs' = top.self.packages.${system};
username =
if builtins.hasAttr "user" metadata.hosts.${host} then metadata.hosts.${host}.user else "greg";
in in
top.hmunstable.lib.homeManagerConfiguration { top.hmunstable.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
@@ -24,6 +26,7 @@ let
host host
username username
metadata metadata
pkgs'
; ;
nixvim = top.nixvimunstable; nixvim = top.nixvimunstable;
gui = false; gui = false;
@@ -31,8 +34,4 @@ let
}; };
}; };
in in
( (lib.genAttrs (builtins.attrNames (builtins.readDir ./hosts)) user)
lib.genAttrs
(builtins.attrNames (builtins.readDir ./hosts))
user
)
+3 -2
View File
@@ -1,5 +1,6 @@
{ {
pkgs, pkgs,
pkgs',
lib, lib,
host ? "most", host ? "most",
top, top,
@@ -38,7 +39,7 @@ in
gh gh
git git
gnupatch gnupatch
hms pkgs'.hms
btop btop
inetutils inetutils
jq jq
@@ -46,7 +47,7 @@ in
nix-prefetch nix-prefetch
nmap nmap
openssl openssl
setup-ssh pkgs'.setup-ssh
tmux tmux
tree tree
unzip unzip
+11 -1
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: { lib, pkgs, ... }:
{ {
greg = { greg = {
@@ -24,6 +24,7 @@
minio-client minio-client
mumble mumble
pre-commit pre-commit
prismlauncher
restic restic
restic-browser restic-browser
tea tea
@@ -35,4 +36,13 @@
settings.SKIP_HOST_UPDATE = true; settings.SKIP_HOST_UPDATE = true;
}; };
}; };
xdg.desktopEntries = {
prismlauncher = {
name = "Prism Launcher - Minecraft";
actions.minecraft = {
name = "Minecraft";
exec = lib.getExe pkgs.prismlauncher;
};
};
};
} }
+1 -1
View File
@@ -22,11 +22,11 @@
home-manager home-manager
python3Packages.ipython python3Packages.ipython
just just
glab
go go
gopls gopls
mariadb mariadb
nixVersions.stable nixVersions.stable
pipenv-ivr
pre-commit pre-commit
python311 python311
python3Packages.flake8 python3Packages.flake8
+18 -10
View File
@@ -4,9 +4,11 @@
... ...
}: }:
let let
python = pkgs.python312.withPackages (p: with p; [ python = pkgs.python312.withPackages (
ipython p: with p; [
]); ipython
]
);
in in
{ {
# Disables hitting local cache # Disables hitting local cache
@@ -27,17 +29,23 @@ in
direnv direnv
home-manager home-manager
just just
mcp-grafana
nixVersions.stable nixVersions.stable
podman
poetry
pre-commit pre-commit
(pulumi.withPackages (p: with p; [ (pulumi.withPackages (
pulumi-aws-native p: with p; [
pulumi-command pulumi-aws-native
pulumi-go pulumi-command
pulumi-nodejs pulumi-go
pulumi-python pulumi-nodejs
])) pulumi-python
]
))
python python
rustc rustc
terraform
]; ];
}; };
+12 -2
View File
@@ -3,19 +3,24 @@
lib, lib,
metadata, metadata,
pkgs, pkgs,
top,
... ...
}: }:
{ {
imports = [ imports = [
../modules/nix-conf.nix ../modules/nix-conf.nix
top.niks3.nixosModules.niks3-auto-upload
]; ];
age.secrets.niks3-api-token.file = ../secrets/niks3/api_token.age;
console = { console = {
font = "Lat2-Terminus16"; font = "Lat2-Terminus16";
keyMap = "us"; keyMap = "us";
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
top.niks3.packages.${pkgs.stdenv.hostPlatform.system}.niks3
agenix agenix
bitwarden-cli bitwarden-cli
bmon bmon
@@ -26,10 +31,9 @@
efibootmgr efibootmgr
findutils findutils
file file
gcc-tune
git git
gnupatch gnupatch
hms # My own home manager switcher top.self.packages.${pkgs.stdenv.hostPlatform.system}.hms # My own home manager switcher
iperf iperf
killall killall
nano nano
@@ -97,6 +101,12 @@
# Enable the OpenSSH daemon for remote control # Enable the OpenSSH daemon for remote control
services = { services = {
locate.enable = true; locate.enable = true;
niks3-auto-upload = {
enable = config.greg.nix.cache;
authTokenFile = config.age.secrets.niks3-api-token.path;
serverUrl = "http://hosea.nebula.thehellings.com:5751";
verifyS3Integrity = true;
};
openssh = { openssh = {
enable = true; enable = true;
settings.X11Forwarding = true; settings.X11Forwarding = true;
+7 -33
View File
@@ -15,11 +15,17 @@ let
}: }:
let let
inherit (metadata.hosts.${name}) system; inherit (metadata.hosts.${name}) system;
pkgs' = top.self.packages.${system};
in in
channel.lib.nixosSystem { channel.lib.nixosSystem {
pkgs = nixpkgs.${system}; pkgs = nixpkgs.${system};
specialArgs = { specialArgs = {
inherit metadata top lib'; inherit
metadata
top
lib'
pkgs'
;
}; };
modules = [ modules = [
{ {
@@ -45,16 +51,6 @@ in
}) })
) )
) )
// (lib.genAttrs
(builtins.attrNames (lib.filterAttrs (_: v: v == "directory") (builtins.readDir ./vm)))
(
name:
(unstable {
inherit name;
extraMods = [ ./vm/${name} ];
})
)
)
// { // {
# nix build '.#nixosConfigurations.wsl.config.system.build.installer' # nix build '.#nixosConfigurations.wsl.config.system.build.installer'
#nixos = wsl { name = "wsl"; }; #nixos = wsl { name = "wsl"; };
@@ -63,26 +59,4 @@ in
# name = "wsl"; # name = "wsl";
# system = "aarch64-linux"; # system = "aarch64-linux";
#}; #};
builder-aarch = lib.nixosSystem {
system = "aarch64-linux";
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation.host.pkgs = import top.nixunstable { system = "aarch64-darwin"; };
boot.loader.grub.devices = [ "/dev/vda" ];
}
];
};
builder-x86 = lib.nixosSystem {
system = "x86_64-linux";
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation.host.pkgs = import top.nixunstable { system = "aarch64-darwin"; };
boot.loader.grub.devices = [ "/dev/vda" ];
}
];
};
} }
-4
View File
@@ -43,10 +43,6 @@
enable = true; enable = true;
tags = [ "mobile" ]; tags = [ "mobile" ];
}; };
runner = {
enable = true;
qemu = true;
};
}; };
hardware = { hardware = {
+117 -47
View File
@@ -2,48 +2,23 @@
# your system. Help is available in the configuration.nix(5) man page # your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help). # and in the NixOS manual (accessible by running nixos-help).
{ lib, pkgs, ... }: {
top,
let pkgs,
adblockUpdate = pkgs.writeShellApplication { pkgs',
name = "adblock-update"; ...
runtimeInputs = with pkgs; [ }:
curl
gnused
systemd
];
text = ''
curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | sed '1,33d' > /etc/adblock_hosts
curl -s https://adaway.org/hosts.txt | sed '1,24d' | sed 's/127.0.0.1/0.0.0.0/' >> /etc/adblock_hosts
# Custom domains that I need to preserve for some reason
for f in "segment.com" "segment.io" "branch.io" "dev.visualwebsiteoptimizer.com" "click.discord.com"; do
sed -i -e "/''${f}/d" /etc/adblock_hosts # Blocks Trelly content for house investors
done
systemctl restart dnsmasq
'';
};
in
{ {
imports = [ imports = [
# Include the results of the hardware scan. # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
./networking.nix ./networking.nix
top.minecraft.nixosModules.minecraft-servers
]; ];
greg = { greg = {
home = true; home = true;
gnome.enable = false; gnome.enable = false;
nebula = {
enable = true;
# genesis IS the routing node for the home LAN — it does not route through itself.
# Override the module default (which points at genesis) to avoid a routing loop.
unsafeRoutes = [ ];
# genesis routes the home LAN (10.42.0.0/16) into the Nebula overlay.
# Sign genesis's cert with -subnets '10.42.0.0/16' (see secrets/nebula/README.md).
routesSubnet = "10.42.0.0/16";
};
proxies = { proxies = {
}; };
}; };
@@ -61,26 +36,121 @@ in
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
create_ssl pkgs'.create_ssl
step-ca step-ca
]; ];
networking.hostName = "genesis"; # Define your hostname. networking.hostName = "genesis"; # Define your hostname.
systemd = { services = {
services.adblock-update = { minecraft-servers = {
after = [ "network-online.target" ]; enable = true;
requires = [ "network-online.target" ]; eula = true;
script = lib.getExe adblockUpdate; openFirewall = true;
serviceConfig.Type = "oneshot";
}; servers = {
timers.adblock-update = { maya = {
wantedBy = [ "multi-user.target" ]; enable = true;
after = [ "network-online.target" ]; operators = {
requires = [ "network-online.target" ]; Almec = {
timerConfig = { bypassesPlayerLimit = true;
OnCalendar = "daily"; uuid = "7884dc5a-ae21-43d5-9506-a934d59be19a";
Unit = "adblock-update.service"; };
};
package = pkgs.fabricServers.fabric.override { jre_headless = pkgs.openjdk25_headless; };
serverProperties = {
allow-flight = true;
motd = "Maya's Minecraft World";
online-mode = true;
};
whitelist = { };
jvmOpts = "-Xms4092M -Xmx4092M";
symlinks = {
mods = pkgs.linkFarmFromDrvs "mods" (
builtins.attrValues {
# Health info
appleskin = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/EsAfCjCV/versions/HwaLJe3v/appleskin-fabric-mc26.1-3.0.9.jar";
hash = "sha256-iNCycR/oxqFpbPGfIcfgfWOm7PzPiIu5AmBWb8asTb4=";
};
# Needed by survivalfly
balm = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7959/843/balm-fabric-26.1.2-26.1.2.4.jar";
hash = "sha256-zDtDxkxOftpW0wUIap7l6abGCjXNczwrF2wLZDztyA0=";
};
# Adds more diverse biomes
# https://www.curseforge.com/minecraft/mc-mods/biomes-o-plenty
biomes = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7977/180/BiomesOPlenty-fabric-26.1.2-26.1.2.0.3.jar";
hash = "sha256-0aPtsRep0ftbkKqbp69PgUnNJyOBLY9vcPsB1mhOy/M=";
};
# Automation engines
# https://www.curseforge.com/minecraft/mc-mods/create
#create = pkgs.fetchurl {
# url = "https://mediafilez.forgecdn.net/files/7963/363/create-1.21.1-6.0.10.jar";
# hash = "sha256-74f+Vwnxuh9bi7IKKSW1r7RmnheP1ti/EMFndZ7v43o=";
#};
fabric_api = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/tnmuHGZA/fabric-api-0.146.1%2B26.1.2.jar";
hash = "sha256-8Jy/xmxRtw4z4GJ+38wwbXHVn4NGYp4w/mFvW9cmvKg=";
};
# Required by biomes-o-plenty
# https://www.curseforge.com/minecraft/mc-mods/glitchcore
glitchcore = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7975/608/GlitchCore-fabric-26.1.2-26.1.2.0.0.jar";
hash = "sha256-IDz+TblWvgt4UxFg3L3DhFMEESoX7y5cTOvXhyccQm8=";
};
# Tooltips
# https://www.curseforge.com/minecraft/mc-mods/jade/
jade = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7886/518/Jade-mc26.1-Fabric-26.0.8.jar";
hash = "sha256-Pc3R5eO4Jf+94mNMPtY/vvpbomp+S+qnAUAVbQk1r2Y=";
};
# Gives info on crafting recipes
# https://www.curseforge.com/minecraft/mc-mods/jei
jei = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7920/925/jei-26.1.2-fabric-29.5.0.26.jar";
hash = "sha256-7nF7fXYPIg9the/mxi6pUYEmKtosZO6yL2b0Dgf8+fI=";
};
# Machines
# https://www.curseforge.com/minecraft/mc-mods/mekanism
#mekanism = pkgs.fetchurl {
# url = "https://mediafilez.forgecdn.net/files/7904/58/Mekanism-1.21.1-10.7.19.85.jar";
# hash = "sha256-AE28nzEG9NGSrqoe4RkN0W7JyoBZ7T0JO4ADT0xXT0M=";
#};
# Shows installed mods
modmenu = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/mOgUt4GM/versions/jvjwXH6l/modmenu-18.0.0-alpha.8.jar";
hash = "sha256-u0gtCOVAnNxyHcslo+y9l/jCGsFb+U/Y8soiUilhZDA=";
};
# Better storage engines
# https://www.curseforge.com/minecraft/mc-mods/refined-storage
refined-storage = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/8086/588/refinedstorage-fabric-3.0.0.jar";
hash = "sha256-LuOF0aYQon78AQeD5fQ8OXHCnekfa+PNKpH7cqimFNs=";
};
# https://www.curseforge.com/minecraft/mc-mods/storage-drawers
#storagedrawers = pkgs.fetchurl {
#url = "https://mediafilez.forgecdn.net/files/7352/799/StorageDrawers-fabric-1.21.11-20.0.0.jar";
#hash = "sha256-eBKCmAtjAhdAjOyLMRneu/NZnNt+orIezxPy6V8g/S8=";
#};
survivalfly = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7870/312/survivalfly-1.3_fabric-mc26.1.1.jar";
hash = "sha256-Kai4wSxckpXbs1yLp8wJ4BmmjNkdDbeqerqWGIz3+Zk=";
};
# Also needed by biomes
# https://www.curseforge.com/minecraft/mc-mods/terrablender-fabric
terrablender = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7933/873/TerraBlender-fabric-26.1.2-26.1.2.0.1.jar";
hash = "sha256-lUrkmMIod54Qj78H0rzT4EYoEeiBG7w6sVOJlRvsnQ4=";
};
}
);
};
};
}; };
}; };
}; };
-3
View File
@@ -22,8 +22,6 @@
# VMs # VMs
10.42.4.1 matrix matrix.thehellings.lan 10.42.4.1 matrix matrix.thehellings.lan
#10.42.4.2 vm-jellyfin vm-jellyfin.thehellings.lan
10.42.4.3 git gitlab git.thehellings.lan gitlab.thehellings.lan
# VIP # VIP
10.42.5.1 longhorn.cluster matrix.cluster pgadmin.cluter postgres.cluster immich.cluster 10.42.5.1 longhorn.cluster matrix.cluster pgadmin.cluter postgres.cluster immich.cluster
@@ -37,7 +35,6 @@
100.88.91.27 dns.home 100.88.91.27 dns.home
100.70.99.91 exodus.home exodus.shire-zebra.ts.net 100.70.99.91 exodus.home exodus.shire-zebra.ts.net
100.96.198.104 genesis.home genesis.shire-zebra.ts.net smart.home zwave.home nixcache.home gitcache.home dashy.home uptime.home speed.home 100.96.198.104 genesis.home genesis.shire-zebra.ts.net smart.home zwave.home nixcache.home gitcache.home dashy.home uptime.home speed.home
100.117.28.111 gitlab.home gitlab.shire-zebra.ts.net gitlab.thehellings.lan registry.thehellings.lan git.thehellings.lan
100.68.203.1 hosea.home hosea.shire-zebra.ts.net grafana.home 100.68.203.1 hosea.home hosea.shire-zebra.ts.net grafana.home
100.84.183.79 isaiah.home isaiah.shire-zebra.ts.net pgadmin.kubernetes longhorn.kubernetes 100.84.183.79 isaiah.home isaiah.shire-zebra.ts.net pgadmin.kubernetes longhorn.kubernetes
100.102.186.39 jeremiah.home jeremiah.shire-zebra.ts.net matrix.kubernetes immich.kubernetes postgres.kubernetes buildbot.home 100.102.186.39 jeremiah.home jeremiah.shire-zebra.ts.net matrix.kubernetes immich.kubernetes postgres.kubernetes buildbot.home
+22 -21
View File
@@ -25,9 +25,20 @@ let
]; ];
in in
{ {
greg.tailscale = { greg = {
enable = true; nebula = {
tags = [ "home" ]; enable = true;
# genesis IS the routing node for the home LAN — it does not route through itself.
# Override the module default (which points at genesis) to avoid a routing loop.
unsafeRoutes = [ ];
# genesis routes the home LAN (10.42.0.0/16) into the Nebula overlay.
# Sign genesis's cert with -subnets '10.42.0.0/16' (see secrets/nebula/README.md).
routesSubnet = "10.42.0.0/16";
};
tailscale = {
enable = true;
tags = [ "home" ];
};
}; };
# Really, why do I still have to force-disable this crap? # Really, why do I still have to force-disable this crap?
@@ -91,6 +102,7 @@ in
metadata.infra.lan metadata.infra.lan
metadata.infra.tailscale metadata.infra.tailscale
metadata.infra.nebula metadata.infra.nebula
"127.0.0.0/8"
]; ];
zones = zones =
let let
@@ -103,10 +115,15 @@ in
"@\tIN\tSOA\t${config.networking.hostName}\tgreg@thehellings.com (1 1m 1m 1m 1m)" "@\tIN\tSOA\t${config.networking.hostName}\tgreg@thehellings.com (1 1m 1m 1m 1m)"
"\tIN\tNS\t${config.networking.hostName}" "\tIN\tNS\t${config.networking.hostName}"
]; ];
makeHost = host: "${host.name}\tIN\tA\t${host.address}"; makeHost =
host:
[ "${host.name}\tIN\tA\t${host.address}" ]
++ lib.map (a: "${a}\tIN\tA\t${host.address}") (
if builtins.hasAttr "aliases" host then host.aliases else [ ]
);
in in
pkgs.writeText "${domain}" ( pkgs.writeText "${domain}" (
builtins.concatStringsSep "\n" (preamble ++ (lib.map makeHost hosts) ++ [ "" ]) builtins.concatStringsSep "\n" (preamble ++ (lib.flatten (lib.map makeHost hosts)) ++ [ "" ])
); );
in in
lib.mapAttrs lib.mapAttrs
@@ -122,22 +139,6 @@ in
lan = "lan"; lan = "lan";
}; };
}; };
prometheus.exporters = {
dnsmasq.enable = true;
blackbox = {
enable = true;
openFirewall = true;
configFile = pkgs.writeText "blackbox.yml" ''
modules:
icmp:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: ip4
'';
};
};
}; # End of services configuration }; # End of services configuration
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
+45 -3
View File
@@ -6,6 +6,7 @@
config, config,
metadata, metadata,
pkgs, pkgs,
top,
... ...
}: }:
let let
@@ -19,11 +20,30 @@ in
# Include the results of the hardware scan. # Include the results of the hardware scan.
./arr.nix ./arr.nix
./hardware-configuration.nix ./hardware-configuration.nix
top.niks3.nixosModules.niks3
]; ];
age.secrets.grafana-secret-key = { age.secrets = {
file = ../../../secrets/grafana-secret-key.age; cache-private-key = {
owner = "grafana"; file = ../../../secrets/cache-private-key.age;
owner = "niks3";
};
grafana-secret-key = {
file = ../../../secrets/grafana-secret-key.age;
owner = "grafana";
};
niks3-access-key-id = {
file = ../../../secrets/niks3/access_key_id.age;
owner = "niks3";
};
niks3-api-token = {
file = ../../../secrets/niks3/api_token.age;
owner = "niks3";
};
niks3-secret-access-key = {
file = ../../../secrets/niks3/secret_access_key.age;
owner = "niks3";
};
}; };
# Bootloader # Bootloader
@@ -98,6 +118,7 @@ in
]; ];
}; };
}; };
firewall.interfaces.nebula0.allowedTCPPorts = [ 5751 ];
nameservers = [ metadata.infra.dns ]; nameservers = [ metadata.infra.dns ];
}; };
@@ -150,6 +171,27 @@ in
analytics.reporting_enabled = false; analytics.reporting_enabled = false;
}; };
}; };
niks3 = {
enable = true;
apiTokenFile = config.age.secrets.niks3-api-token.path;
gc.enable = false;
httpAddr = "${metadata.hosts.hosea.nebulaIp}:5751";
nginx = {
enable = true;
domain = "hosea.nebula";
enableACME = false;
forceSSL = false;
};
s3 = {
accessKeyFile = config.age.secrets.niks3-access-key-id.path;
bucket = "niks3";
endpoint = "nas1.shire-zebra.ts.net:9000";
secretKeyFile = config.age.secrets.niks3-secret-access-key.path;
useSSL = false;
};
signKeyFiles = [ config.age.secrets.cache-private-key.path ];
};
prometheus.exporters.graphite.enable = true; prometheus.exporters.graphite.enable = true;
# Configure keymap # Configure keymap
xserver.xkb = { xserver.xkb = {
-4
View File
@@ -43,10 +43,6 @@
tags = [ "home" ]; tags = [ "home" ];
}; };
remote-builder.enable = true; remote-builder.enable = true;
runner = {
enable = true;
qemu = true;
};
gitea-runner = { gitea-runner = {
enable = true; enable = true;
extraLabels = [ "bare-metal:host" ]; extraLabels = [ "bare-metal:host" ];
-7
View File
@@ -22,8 +22,6 @@ in
]; ];
age.secrets = { age.secrets = {
runner-reg.file = ../../../secrets/gitlab/nixos-qemu-shell.age;
gitea-buildbotWorkersFile = mk ../../../secrets/gitea/buildbotWorkersFile.age; gitea-buildbotWorkersFile = mk ../../../secrets/gitea/buildbotWorkersFile.age;
gitea-oauthToken = mk ../../../secrets/gitea/oauthToken.age; gitea-oauthToken = mk ../../../secrets/gitea/oauthToken.age;
gitea-oauthSecret = mk ../../../secrets/gitea/oauthSecret.age; gitea-oauthSecret = mk ../../../secrets/gitea/oauthSecret.age;
@@ -95,11 +93,6 @@ in
tags = [ "home" ]; tags = [ "home" ];
}; };
remote-builder.enable = true; remote-builder.enable = true;
runner = {
enable = true;
threads = 3;
qemu = true;
};
}; };
hardware = { hardware = {
-16
View File
@@ -66,20 +66,4 @@
immichUrl = "https://immich.shire-zebra.ts.net"; immichUrl = "https://immich.shire-zebra.ts.net";
}; };
}; };
security.sudo.extraRules = [
{
users = [ "gitlab-runner" ];
commands = [
{
command = "/run/current-system/sw/bin/systemctl";
options = [ "NOPASSWD" ];
}
{
command = "/run/current-system/sw/bin/podman";
options = [ "NOPASSWD" ];
}
];
}
];
} }
+13 -31
View File
@@ -2,12 +2,24 @@
# them by the following commands: # them by the following commands:
# nix run nixpkgs.matrix-synapse # nix run nixpkgs.matrix-synapse
# register_new_matrix_user -k "B9EoPr2WV9hzwc7uL2Sx1JmvCeKDEOGCpB0uginQcQtEH4wzRtkSIdo7lltrjSQa" http://localhost:8448 # register_new_matrix_user -k "B9EoPr2WV9hzwc7uL2Sx1JmvCeKDEOGCpB0uginQcQtEH4wzRtkSIdo7lltrjSQa" http://localhost:8448
{ config, lib, ... }: { config, ... }:
let let
domain = "${config.networking.domain}"; domain = "${config.networking.domain}";
fqdn = "matrix.${domain}"; fqdn = "matrix.${domain}";
in in
{ {
greg.proxies."${fqdn}" = {
extraConfig = ''
error_log /var/log/nginx/debug.log debug;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
'';
genAliases = false;
ssl = true;
target = "https://matrix.shire-zebra.ts.net";
};
services.nginx = { services.nginx = {
virtualHosts = { virtualHosts = {
# Server the '.well-known' files to find the Matrix API server # Server the '.well-known' files to find the Matrix API server
@@ -44,36 +56,6 @@ in
return 200 '${builtins.toJSON client}'; return 200 '${builtins.toJSON client}';
''; '';
}; };
# Reverse proxy in front of the actual Matrix server
"${fqdn}" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
error_log /var/log/nginx/debug.log debug;
'';
# Not the appropriate place for the chat client
locations =
(builtins.listToAttrs (
builtins.map
(
val:
lib.nameValuePair "/_${val}" {
proxyPass = "http://matrix.kubernetes";
}
)
[
"matrix"
"synapse"
"dendrite"
]
))
// {
"/".extraConfig = "return 404;";
};
};
}; };
}; };
-6
View File
@@ -24,7 +24,6 @@ in
virtualisation.oci-containers = { virtualisation.oci-containers = {
backend = "podman"; backend = "podman";
containers."homepage" = { containers."homepage" = {
# needs explicit port to match what gitlab-runner sees when pulling
image = "registry.thehellings.com:443/greg/homepage/gregs-homepage:latest"; image = "registry.thehellings.com:443/greg/homepage/gregs-homepage:latest";
ports = [ "${homepage}:80" ]; ports = [ "${homepage}:80" ];
}; };
@@ -35,10 +34,5 @@ in
ssl = true; ssl = true;
genAliases = false; genAliases = false;
}; };
"doubles.thehellings.com" = {
target = "http://localhost:8081";
ssl = true;
genAliases = false;
};
}; };
} }
+7 -2
View File
@@ -1,7 +1,12 @@
{ config, pkgs, ... }: {
config,
pkgs,
pkgs',
...
}:
{ {
environment.systemPackages = [ pkgs.upgrade-pg-cluster ]; environment.systemPackages = [ pkgs'.upgrade-pg-cluster ];
services.postgresql = { services.postgresql = {
enable = true; enable = true;
-4
View File
@@ -28,10 +28,6 @@
}; };
nebula.enable = true; nebula.enable = true;
remote-builder.enable = true; remote-builder.enable = true;
runner = {
enable = true;
vbox = false;
};
tailscale = { tailscale = {
enable = true; enable = true;
tags = [ "home" ]; tags = [ "home" ];
@@ -35,10 +35,11 @@
device = "/dev/nvme0n1p1"; device = "/dev/nvme0n1p1";
fsType = "auto"; fsType = "auto";
}; };
#"/mnt/disk1" = { "/mnt/disk1" = {
#device = "/dev/disk/by-uuid/0bb64e76-8811-499a-b60e-cc97808f2b0e"; device = "/dev/disk/by-uuid/bd04e868-034e-46e8-84ae-cd7347448bbd";
#fsType = "btrfs"; fsType = "xfs";
#}; options = [ "nofail" ];
};
}; };
swapDevices = [ ]; swapDevices = [ ];
-273
View File
@@ -1,273 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
pkgs,
lib,
...
}:
let
registryPort = 5000;
vpnIp = "100.117.28.111";
in
{
imports = [
./hardware-configuration.nix
];
age.secrets =
let
cfg = n: {
file = ../../../secrets/gitlab/${n}.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
in
{
gitlab-secret = cfg "secret";
gitlab-otp = cfg "otp";
gitlab-db = cfg "db";
gitlab-db-password = cfg "db-password";
gitlab-jws = cfg "jws";
gitlab-key = cfg "key";
gitlab-cert = cfg "cert";
gitlab-salt = cfg "salt";
gitlab-primary-key = cfg "primary-key";
gitlab-deterministic-key = cfg "deterministic-key";
minio_access_key_id = {
file = ../../../secrets/minio_access_key_id.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
minio_secret_access_key = {
file = ../../../secrets/minio_secret_access_key.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
};
greg = {
backup.jobs.nas-backup = {
src = "/var/gitlab/state/backup/";
dest = "gitlab";
};
home = true;
tailscale = {
enable = true;
tags = [ "home" ];
};
};
networking = {
hostName = "gitlab"; # Define your hostname.
firewall.allowedTCPPorts = [
80
registryPort
];
};
services = {
gitlab = {
enable = true;
backup = {
keepTime = 288;
startAt = [ "03:00" ];
};
databaseHost = "postgres.kubernetes";
databaseName = "gitlab";
databaseUsername = "gitlab";
databasePasswordFile = config.age.secrets.gitlab-db-password.path;
databaseCreateLocally = false;
extraConfig = {
registry.port = null;
gitlab = {
trustedProxies = [
"${vpnIp}/32" # The system itself
"100.109.86.8/32" # Public server's IP
];
};
object_store = {
enabled = true;
proxy_download = true; # Tell them to reach out to object storage themselves!
connection = {
provider = "AWS";
endpoint = "http://s3.thehellings.lan:9000";
region = "us-east-1";
aws_access_key_id = {
_secret = config.age.secrets.minio_access_key_id.path;
};
aws_secret_access_key = {
_secret = config.age.secrets.minio_secret_access_key.path;
};
path_style = true; # True for MinIO
aws_signature_version = 2;
};
#storage_options = ...;
objects = builtins.listToAttrs (
builtins.map
(
x: lib.attrsets.nameValuePair x { bucket = "gitlab-${builtins.replaceStrings [ "_" ] [ "-" ] x}"; }
)
[
"artifacts"
"ci_secure_files"
"dependency_proxy"
"external_diffs"
"lfs"
"packages"
"pages"
"terraform_state"
"uploads"
]
);
};
};
host = "src.thehellings.com";
https = true;
initialRootEmail = "greg@thehellings.com";
initialRootPasswordFile = pkgs.writeText "initialRootPassword" "root_password";
pages = {
enable = true;
settings.pages-domain = "pages.thehellings.com";
};
port = 443;
puma = {
threadsMax = 6;
threadsMin = 2;
workers = 6;
};
redisUrl = "unix:${config.services.redis.servers.gitlab.unixSocket}";
registry = {
enable = true;
certFile = config.age.secrets.gitlab-cert.path;
keyFile = config.age.secrets.gitlab-key.path;
externalAddress = "registry.thehellings.com";
externalPort = 443;
};
secrets = {
activeRecordDeterministicKeyFile = config.age.secrets.gitlab-deterministic-key.path;
activeRecordPrimaryKeyFile = config.age.secrets.gitlab-primary-key.path;
activeRecordSaltFile = config.age.secrets.gitlab-salt.path;
dbFile = config.age.secrets.gitlab-db.path;
jwsFile = config.age.secrets.gitlab-jws.path;
otpFile = config.age.secrets.gitlab-otp.path;
secretFile = config.age.secrets.gitlab-secret.path;
};
};
nginx = {
enable = true;
clientMaxBodySize = "25000m";
virtualHosts = {
"vm-gitlab.shire-zebra.ts.net" = {
listen = [
{
addr = "0.0.0.0";
port = 443;
ssl = true;
}
];
locations."/" = {
proxyPass = "http://unix:/run/gitlab/gitlab-workhorse.socket";
recommendedProxySettings = true;
};
extraConfig = ''
ssl_certificate /etc/certs/vm-gitlab.shire-zebra.ts.net.crt ;
ssl_certificate_key /etc/certs/vm-gitlab.shire-zebra.ts.net.key ;
client_max_body_size 10000m ;
'';
};
"registry" = {
listen = [
{
addr = "0.0.0.0";
port = registryPort;
ssl = true;
}
];
locations."/" = {
proxyPass = "http://127.0.0.1:4567/";
recommendedProxySettings = true;
};
extraConfig = ''
ssl_certificate /etc/certs/vm-gitlab.shire-zebra.ts.net.crt ;
ssl_certificate_key /etc/certs/vm-gitlab.shire-zebra.ts.net.key ;
client_max_body_size 25000m ;
'';
serverAliases = [
"vm-gitlab.shire-zebra.ts.net"
];
};
};
};
openssh.enable = true;
postgresql.enable = true;
qemuGuest.enable = true;
redis.servers.gitlab = {
enable = true;
};
#resolved.enable = true;
};
# Do not start nginx until we have tailscaled up and running, so it can bind
# to the 100.* addresses
systemd = {
services = {
certRefresh =
let
script = pkgs.writeShellApplication {
name = "cert-refresh";
runtimeInputs = [ pkgs.tailscale ];
text = ''
cd /etc/certs
tailscale cert vm-gitlab.shire-zebra.ts.net
chown nginx ./*
systemctl reload nginx
'';
};
in
{
script = lib.getExe script;
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
nginx = rec {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
wants = after;
serviceConfig = {
RestartMaxDelaySec = "30s";
RestartSteps = "5";
};
};
tailscaled.partOf = [ "network-online.target" ];
};
timers = {
"cert-refresh" = {
wantedBy = [ "cert-refresh.service" ];
timerConfig = {
OnCalendar = "monthly";
Persistent = true;
};
};
};
};
system.stateVersion = lib.mkForce "24.11";
}
@@ -1,58 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
# Bootloader.
boot = {
extraModulePackages = [ ];
initrd = {
availableKernelModules = [
"uhci_hcd"
"ehci_pci"
"ahci"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
kernelModules = [ ];
};
loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
};
};
fileSystems."/" = {
device = lib.mkDefault "/dev/disk/by-uuid/1fdbe86e-ce6f-4af3-a876-aec35731adab";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/1E6A-C3BB";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When 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 true;
# networking.interfaces.enp6s18.useDHCP = lib.mkDefault true;
}
+1
View File
@@ -15,6 +15,7 @@
(name: value: { (name: value: {
inherit name; inherit name;
address = builtins.getAttr netAttr value; address = builtins.getAttr netAttr value;
aliases = lib.optionals (builtins.hasAttr "aliases" value) (builtins.getAttr "aliases" value);
}) })
( (
lib.filterAttrs ( lib.filterAttrs (
+1 -1
View File
@@ -40,7 +40,7 @@ metadata:
}, },
{ {
"path": "/mnt/disk1", "path": "/mnt/disk1",
"allowScheduling": false, "allowScheduling": true,
"tags": ["hdd", "large"] "tags": ["hdd", "large"]
} }
] ]
-3
View File
@@ -21,9 +21,6 @@ spec:
spec: spec:
containers: containers:
- name: bitwarden-cli - name: bitwarden-cli
# Since my gitlab instance depends on the database hosted in k3s, and
# the database depends on this image, I need a way to bootstrap the
# system if # I am doing disaster recovery. And this is it.
image: "ghcr.io/greg-hellings/nixos-config/img-bitwarden:latest" image: "ghcr.io/greg-hellings/nixos-config/img-bitwarden:latest"
#image: >- #image: >-
# registry.thehellings.com/greg/nixos-config/img-bitwarden:latest # registry.thehellings.com/greg/nixos-config/img-bitwarden:latest
-2
View File
@@ -14,14 +14,12 @@ spec:
- 100.88.91.27 # dns? - 100.88.91.27 # dns?
- 100.80.99.48 # exodus - 100.80.99.48 # exodus
- 100.88.91.27 # genesis - 100.88.91.27 # genesis
- 100.117.28.111 # gitlab
- 100.68.203.1 # hosea - 100.68.203.1 # hosea
- 100.84.183.79 # isaiah - 100.84.183.79 # isaiah
- 100.102.186.39 # jeremiah - 100.102.186.39 # jeremiah
- 100.90.74.19 # zeke - 100.90.74.19 # zeke
- 100.115.57.8 # linode - 100.115.57.8 # linode
- 100.65.5.38 # matrix - 100.65.5.38 # matrix
#- 100.127.55.22 # jellyfin
--- ---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP kind: IngressRouteTCP
-1
View File
@@ -4,7 +4,6 @@ resources:
- namespace.yaml - namespace.yaml
- secrets.yaml - secrets.yaml
- postgres-cluster.yaml - postgres-cluster.yaml
- postgres-gitlab.yaml
- postgres-pgadmin.yaml - postgres-pgadmin.yaml
- postgres-matrix.yaml - postgres-matrix.yaml
- ingress.yaml - ingress.yaml
@@ -11,13 +11,6 @@ spec:
managed: managed:
roles: roles:
- name: gitlab
ensure: present
comment: Gitlab user
login: true
superuser: false
passwordSecret:
name: postgres-user-gitlab
- name: pgadmin - name: pgadmin
ensure: present ensure: present
comment: PG Admin user comment: PG Admin user
-9
View File
@@ -1,9 +0,0 @@
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: database-gitlab
spec:
name: gitlab
owner: gitlab
cluster:
name: postgres
-34
View File
@@ -1,39 +1,5 @@
apiVersion: external-secrets.io/v1 apiVersion: external-secrets.io/v1
kind: ExternalSecret kind: ExternalSecret
metadata:
name: postgres-user-gitlab
namespace: db
spec:
target:
name: postgres-user-gitlab
deletionPolicy: Delete
template:
type: Opaque
data:
username: |-
{{ .username }}
password: |-
{{ .password }}
data:
- secretKey: username
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5282ad16-c2dc-49d3-8fb3-b2e9012bab57
property: username
- secretKey: password
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5282ad16-c2dc-49d3-8fb3-b2e9012bab57
property: password
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata: metadata:
name: postgres-user-matrix name: postgres-user-matrix
namespace: db namespace: db
+46
View File
@@ -47,6 +47,12 @@ spec:
type: LoadBalancer type: LoadBalancer
port: 32222 port: 32222
nodePort: 32222 nodePort: 32222
# Anubis sidecar port — ingress routes here; Anubis proxies to :3000
additionalPorts:
- name: anubis
port: 8080
targetPort: 8080
protocol: TCP
gitea: gitea:
admin: admin:
@@ -119,6 +125,46 @@ spec:
cpu: "100m" cpu: "100m"
memory: "2Gi" memory: "2Gi"
# Anubis anti-crawler sidecar
# Anubis listens on :8080 and proxies to Gitea at http://localhost:3000
# Ingress is updated to route to the anubis port instead of http
extraContainers:
- name: anubis
image: ghcr.io/techarohq/anubis:latest
imagePullPolicy: Always
env:
- name: BIND
value: ":8080"
- name: DIFFICULTY
value: "4"
- name: METRICS_BIND
value: ":9090"
- name: SERVE_ROBOTS_TXT
value: "true"
- name: TARGET
value: "http://localhost:3000"
- name: OG_PASSTHROUGH
value: "true"
- name: OG_EXPIRY_TIME
value: "24h"
resources:
limits:
cpu: "750m"
memory: "256Mi"
requests:
cpu: "250m"
memory: "256Mi"
securityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
strategy: strategy:
type: RollingUpdate type: RollingUpdate
rollingUpdate: rollingUpdate:
-1
View File
@@ -76,4 +76,3 @@ spec:
secretKeyRef: secretKeyRef:
name: gitea-config name: gitea-config
key: minio_secret key: minio_secret
+2 -1
View File
@@ -8,7 +8,8 @@ spec:
service: service:
name: gitea-release-http name: gitea-release-http
port: port:
name: http # Route through Anubis anti-crawler sidecar instead of directly to Gitea
name: anubis
tls: tls:
- hosts: - hosts:
- gitea - gitea
+2 -2
View File
@@ -15,8 +15,8 @@ spec:
storage: |- storage: |-
MINIO_ACCESS_KEY_ID={{ .minio_nas1_key }} MINIO_ACCESS_KEY_ID={{ .minio_nas1_key }}
MINIO_SECRET_ACCESS_KEY={{ .minio_nas1_secret }} MINIO_SECRET_ACCESS_KEY={{ .minio_nas1_secret }}
#minio_key: "{{ .minio_nas1_key }}" minio_key: "{{ .minio_nas1_key }}"
#minio_secret: "{{ .minio_nas1_secret }}" minio_secret: "{{ .minio_nas1_secret }}"
secretStoreRef: secretStoreRef:
name: bitwarden-login name: bitwarden-login
kind: ClusterSecretStore kind: ClusterSecretStore
-64
View File
@@ -1,64 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: gitlab-runner
spec:
interval: "24h"
url: https://charts.gitlab.io
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitlab-runner
spec:
interval: 10m
chart:
spec:
chart: gitlab-runner
version: "0.83.1"
sourceRef:
kind: HelmRepository
name: gitlab-runner
interval: "1h"
dependsOn:
- name: external-secrets
namespace: external-secrets
- name: tailscae
namespace: tailscale
values:
crds:
create: true
includeCRDs: true
gitlabUrl: https://src.thehellings.com
runners:
secret: gitlab-runner
imagePullSecrets:
- name: image-pull-secrets
rbac:
create: true
serviceAccount:
create: true
metrics:
enabled: true
extraEnv:
CACHE_TYPE: s3
CACHE_SHARED: "true"
CACHE_S3_BUCKET_NAME: gitlab-runner-cache
CACHE_S3_INSECURE: "true"
extraEnvFrom:
PACKER_GITHUB_API_TOKEN:
secretKeyRef:
name: gitlab-runner
key: PACKER_GITHUB_API_TOKEN
CACHE_S3_SERVER_ADDRESS:
secretKeyRef:
name: gitlab-runner
key: CACHE_S3_SERVER_ADDRESS
CACHE_S3_ACCESS_KEY:
secretKeyRef:
name: s3-access
key: username
CACHE_S3_SECRET_KEY:
secretKeyRef:
name: s3-access
key: password
@@ -1,6 +0,0 @@
namespace: gitlab-runner
resources:
- namespace.yaml
- secrets.yaml
- chart.yaml
-4
View File
@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: gitlab-runner
-101
View File
@@ -1,101 +0,0 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: gitlab-runner
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-fields
kind: ClusterSecretStore
target:
name: gitlab-runner
deletionPolicy: Delete
template:
type: Opaque
data:
runner-registration-token: ""
runner-token: "{{ .runnerToken }}"
PACKER_GITHUB_API_TOKEN: "{{ .PACKER_GITHUB_API_TOKEN }}"
CACHE_S3_SERVER_ADDRESS: "{{ .CACHE_S3_SERVER_ADDRESS }}"
data:
- secretKey: runnerToken
remoteRef:
key: &key 53719920-b100-4355-8c80-b2f9002fad22
property: CI_SERVER_TOKEN
- secretKey: PACKER_GITHUB_API_TOKEN
remoteRef:
key: *key
property: PACKER_GITHUB_API_TOKEN
- secretKey: CACHE_S3_SERVER_ADDRESS
remoteRef:
key: *key
property: CACHE_S3_SERVER_ADDRESS
# Includes
# CI_SERVER_TOKEN
# PACKER_GITHUB_API_TOKEN
# CACHE_S3_SERVER_ADDRESS
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: s3-access
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
target:
name: s3-access
deletionPolicy: Delete
data:
- secretKey: username
remoteRef:
key: &key 04dd39c2-268d-4a33-aa4c-b1550166139f
property: username
- secretKey: password
remoteRef:
key: *key
property: password
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: image-pull-secrets
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
target:
deletionPolicy: Delete
template:
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: >-
{
"auths": {
"https://index.docker.io/v1/": {
"username": "{{ .user }}",
"password": "{{ .password }}",
"email": "greg.hellings@gmail.com",
"auth": "{{ .auth }}"
}
}
}
data:
- secretKey: user
remoteRef:
key: &key f560ae38-368c-4e58-898c-aeb90012d597
property: username
- secretKey: password
remoteRef:
key: *key
property: password
- secretKey: auth
sourceRef:
storeRef:
name: bitwarden-fields
kind: ClusterSecretStore
remoteRef:
key: *key
property: auth
-1
View File
@@ -7,7 +7,6 @@ resources:
- mariadb-operator - mariadb-operator
- databases - databases
- matrix - matrix
#- gitlab-runner
- immich - immich
- monitoring - monitoring
- pinchflat - pinchflat
+2
View File
@@ -19,6 +19,7 @@ spec:
kind: HelmRepository kind: HelmRepository
name: mariadb-operator name: mariadb-operator
interval: "1h" interval: "1h"
version: "26.3.0"
--- ---
apiVersion: helm.toolkit.fluxcd.io/v2 apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease kind: HelmRelease
@@ -33,6 +34,7 @@ spec:
kind: HelmRepository kind: HelmRepository
name: mariadb-operator name: mariadb-operator
interval: "1h" interval: "1h"
version: "26.3.0"
dependsOn: dependsOn:
- name: mariadb-operator-crds - name: mariadb-operator-crds
- name: longhorn - name: longhorn
@@ -11,6 +11,7 @@ spec:
kind: HelmRepository kind: HelmRepository
name: mariadb-operator name: mariadb-operator
interval: "1h" interval: "1h"
version: "26.3.0"
dependsOn: dependsOn:
- name: mariadb-operator-crds - name: mariadb-operator-crds
- name: mariadb-operator - name: mariadb-operator
+2
View File
@@ -158,6 +158,8 @@ in
"https://thehellings.com" "https://thehellings.com"
else else
"https://kuma.shire-zebra.ts.net/"; "https://kuma.shire-zebra.ts.net/";
"devtools.debugger.remote-enabled" = true;
"devtools.debugger.remote-port" = 9222;
"doh-rollout.doorhanger-decision" = "UIDisabled"; "doh-rollout.doorhanger-decision" = "UIDisabled";
"doh-rollout.doneFirstRun" = true; "doh-rollout.doneFirstRun" = true;
"signon.rememberSignons" = false; "signon.rememberSignons" = false;
+15 -7
View File
@@ -9,6 +9,7 @@
let let
builderHosts = lib.filterAttrs (_n: v: (builtins.hasAttr "builder" v) && v.builder) metadata.hosts; builderHosts = lib.filterAttrs (_n: v: (builtins.hasAttr "builder" v) && v.builder) metadata.hosts;
cfg = config.greg.nix; cfg = config.greg.nix;
hostname = x: if cfg.cache then "${x}.shire-zebra.ts.net" else "${x}.thehellings.lan";
in in
{ {
options.greg.nix = { options.greg.nix = {
@@ -22,7 +23,7 @@ in
programs.ssh.extraConfig = builtins.concatStringsSep "\n" ( programs.ssh.extraConfig = builtins.concatStringsSep "\n" (
lib.map (x: '' lib.map (x: ''
Host ${x}-builder Host ${x}-builder
Hostname ${x}.shire-zebra.ts.net Hostname ${hostname x}
User remote-builder-user User remote-builder-user
'') (lib.attrNames builderHosts) '') (lib.attrNames builderHosts)
); );
@@ -57,12 +58,18 @@ in
"gregory.hellings" "gregory.hellings"
]; # For home and for work machines ]; # For home and for work machines
substituters = substituters =
(if cfg.cache then [ (
#"http://chronicles.shire-zebra.ts.net:9000/binary-cache/" if cfg.cache then
"http://nas1.shire-zebra.ts.net:8080/default" [
] else [ #"http://chronicles.shire-zebra.ts.net:9000/binary-cache/"
"http://nas1.thehellings.lan:8080/default" "http://nas1.shire-zebra.ts.net:9000/niks3"
]) #"http://nas1.shire-zebra.ts.net:8080/default"
]
else
[
"http://nas1.thehellings.lan:8080/default"
]
)
++ [ ++ [
"https://ai.cachix.org" "https://ai.cachix.org"
"https://nixpkgs-python.cachix.org" "https://nixpkgs-python.cachix.org"
@@ -72,6 +79,7 @@ in
"https://nixhelm.cachix.org" "https://nixhelm.cachix.org"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"niks3:8iztr/NACwYEK5O7JJtGFGuv+ho/cmwql8NeoCiXNto="
#"chronicles.shire-zebra.ts.net:0qWYHn3gGllXChhAaaxKlNZtRy6yG/XJs1RFSqV3nW8=" #"chronicles.shire-zebra.ts.net:0qWYHn3gGllXChhAaaxKlNZtRy6yG/XJs1RFSqV3nW8="
"default:DTGxNijw2D8FrZJPT1pFTWcLqbt60tovL+9Z+VW0HRY=" "default:DTGxNijw2D8FrZJPT1pFTWcLqbt60tovL+9Z+VW0HRY="
"ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc=" "ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc="
+35
View File
@@ -0,0 +1,35 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.greg.adblockUpdate;
in
{
options.greg.adblockUpdate = {
enable = lib.mkEnableOption "Enable auto-update of block list";
};
config = lib.mkIf cfg.enable {
systemd = {
services.adblock-update = {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
script = lib.getExe pkgs.adblockUpdate;
serviceConfig.Type = "oneshot";
};
timers.adblock-update = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
timerConfig = {
OnCalendar = "daily";
Unit = "adblock-update.service";
};
};
};
};
}
+1 -1
View File
@@ -4,12 +4,12 @@
{ {
imports = [ imports = [
./adblock-update.nix
./albyhub.nix ./albyhub.nix
./backup.nix ./backup.nix
./ceph.nix ./ceph.nix
./db.nix ./db.nix
./gitea-runner.nix ./gitea-runner.nix
./gitlab-runner.nix
./gnome.nix ./gnome.nix
./home.nix ./home.nix
./kde.nix ./kde.nix
+5
View File
@@ -45,22 +45,27 @@ in
"debian-latest:docker://node:25-trixie" "debian-latest:docker://node:25-trixie"
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest" "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
"ubuntu-26.04:docker://docker.gitea.com/runner-images:ubuntu-26.04"
"ubuntu-24.04:docker://docker.gitea.com/runner-images:ubuntu-24.04" "ubuntu-24.04:docker://docker.gitea.com/runner-images:ubuntu-24.04"
"ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04" "ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"
"ubuntu-full-latest:docker://ghcr.io/catthehacker/ubuntu:full-latest" "ubuntu-full-latest:docker://ghcr.io/catthehacker/ubuntu:full-latest"
"ubuntu-full-26.04:docker://ghcr.io/catthehacker/ubuntu:full-26.04"
"ubuntu-full-24.04:docker://ghcr.io/catthehacker/ubuntu:full-24.04" "ubuntu-full-24.04:docker://ghcr.io/catthehacker/ubuntu:full-24.04"
"ubuntu-full-22.04:docker://ghcr.io/catthehacker/ubuntu:full-22.04" "ubuntu-full-22.04:docker://ghcr.io/catthehacker/ubuntu:full-22.04"
"ubuntu-act-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest" "ubuntu-act-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest"
"ubuntu-act-26.04:docker://ghcr.io/catthehacker/ubuntu:act-26.04"
"ubuntu-act-24.04:docker://ghcr.io/catthehacker/ubuntu:act-24.04" "ubuntu-act-24.04:docker://ghcr.io/catthehacker/ubuntu:act-24.04"
"ubuntu-act-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04" "ubuntu-act-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04"
"ubuntu-runner-latest:docker://ghcr.io/catthehacker/ubuntu:runner-latest" "ubuntu-runner-latest:docker://ghcr.io/catthehacker/ubuntu:runner-latest"
"ubuntu-runner-26.04:docker://ghcr.io/catthehacker/ubuntu:runner-26.04"
"ubuntu-runner-24.04:docker://ghcr.io/catthehacker/ubuntu:runner-24.04" "ubuntu-runner-24.04:docker://ghcr.io/catthehacker/ubuntu:runner-24.04"
"ubuntu-runner-22.04:docker://ghcr.io/catthehacker/ubuntu:runner-22.04" "ubuntu-runner-22.04:docker://ghcr.io/catthehacker/ubuntu:runner-22.04"
"ubuntu-rust-latest:docker://ghcr.io/catthehacker/ubuntu:rust-latest" "ubuntu-rust-latest:docker://ghcr.io/catthehacker/ubuntu:rust-latest"
"ubuntu-rust-26.04:docker://ghcr.io/catthehacker/ubuntu:rust-26.04"
"ubuntu-rust-24.04:docker://ghcr.io/catthehacker/ubuntu:rust-24.04" "ubuntu-rust-24.04:docker://ghcr.io/catthehacker/ubuntu:rust-24.04"
"ubuntu-rust-22.04:docker://ghcr.io/catthehacker/ubuntu:rust-22.04" "ubuntu-rust-22.04:docker://ghcr.io/catthehacker/ubuntu:rust-22.04"
-82
View File
@@ -1,82 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.greg.runner;
environmentVariables = {
EFI_DIR = "${pkgs.OVMF.fd}/FV/";
STORAGE_URL = "s3.thehellings.lan:9000";
};
runnerCfg = file: {
inherit environmentVariables;
authenticationTokenConfigFile = file;
executor = "shell";
limit = cfg.threads;
};
in
# We want exactly one of these to be true, but not both. Neither can both be false
{
options.greg.runner = {
enable = lib.mkEnableOption "Enable as a gitlab-runner with both libvirt and virtualbox";
threads = lib.mkOption {
default = 5;
type = lib.types.int;
description = "The maximum number of concurrent jobs";
};
qemu = lib.mkEnableOption "Enable the qemu host (mutually exclusive with vbox)";
vbox = lib.mkEnableOption "Enable the vbox host (mutually exclusive with qemu)";
};
config = lib.mkIf cfg.enable ({
# assertions = [
# {
# assertion = cfg.qemu || cfg.vbox && (cfg.qemu != cfg.vbox);
# message = "You must enable exactly one of qemu or vbox";
# }
# ];
# Shared configurations
age.secrets = {
qemu.file = ../../secrets/gitlab/nixos-qemu-shell.age;
vbox.file = ../../secrets/gitlab/nixos-vbox-shell.age;
};
services.gitlab-runner = {
enable = false;
settings.concurrent = cfg.threads;
services = {
qemu = lib.mkIf cfg.qemu (runnerCfg config.age.secrets.qemu.path);
vbox = lib.mkIf cfg.vbox (runnerCfg config.age.secrets.vbox.path);
};
};
systemd.services.gitlab-runner = {
serviceConfig = {
DevicePolicy = lib.mkForce "auto";
User = "root";
DynamicUser = lib.mkForce false;
};
};
users.extraGroups.vboxusers.members = lib.optional cfg.vbox "greg";
virtualisation = {
libvirtd = lib.mkIf cfg.qemu {
enable = true;
allowedBridges = [
"br0"
"virbr0"
];
onBoot = "ignore"; # only restart VMs labeled 'autostart'
};
virtualbox.host = lib.mkIf cfg.vbox {
enable = true;
enableExtensionPack = true;
};
};
});
}
+1 -1
View File
@@ -27,7 +27,7 @@ let
nebulaDomain = "nebula.thehellings.com"; nebulaDomain = "nebula.thehellings.com";
# Linode's public address — used by all non-lighthouse hosts to reach it. # Linode's public address — used by all non-lighthouse hosts to reach it.
# Override with greg.nebula.lighthouseAddr if the public IP ever changes. # Override with greg.nebula.lighthouseAddr if the public IP ever changes.
defaultLighthouseAddr = "linode.${nebulaDomain}"; defaultLighthouseAddr = "thehellings.com";
in in
{ {
options.greg.nebula = { options.greg.nebula = {
+1 -1
View File
@@ -54,7 +54,7 @@ with lib;
target = mkOption { target = mkOption {
type = types.str; type = types.str;
description = ''The destination that is being proxied.''; description = "The destination that is being proxied.";
example = "http://localhost:8080"; example = "http://localhost:8080";
}; };
+1
View File
@@ -57,6 +57,7 @@ with lib;
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBLOqwbp4hFYkiJpokh9i2RToa/6tQcwthDNQH69tyBF root@vm-matrix.thehellings.lan" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBLOqwbp4hFYkiJpokh9i2RToa/6tQcwthDNQH69tyBF root@vm-matrix.thehellings.lan"
# Mac # Mac
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBT5BFHQz1I5k/zkLQNLjL77EaqfdpRiF2Ci4eS9LMDK gregory.hellings@jude.thehellings.lan" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBT5BFHQz1I5k/zkLQNLjL77EaqfdpRiF2Ci4eS9LMDK gregory.hellings@jude.thehellings.lan"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPVlMoN2pkKRRwKNuMbMczki5ybR34wvjdgDNlgR74Wh greg@gregs-MacBook-Pro-16-inch-Nov-2024"
]; ];
homeMode = "500"; homeMode = "500";
isNormalUser = true; isNormalUser = true;
-1
View File
@@ -18,7 +18,6 @@ with lib;
devices = { devices = {
chronicles.id = "7FI6Y3M-C7YQEDI-IB345L6-RKLXMB6-AEIV57Y-3J2RCXQ-MK6QRNK-EINPXAE"; chronicles.id = "7FI6Y3M-C7YQEDI-IB345L6-RKLXMB6-AEIV57Y-3J2RCXQ-MK6QRNK-EINPXAE";
genesis.id = "YDTH4SD-GUAC5AA-SSYWYPZ-YMJW5LK-LE7PZKJ-GV2UJFZ-CU7LZAD-GTYWCQK"; genesis.id = "YDTH4SD-GUAC5AA-SSYWYPZ-YMJW5LK-LE7PZKJ-GV2UJFZ-CU7LZAD-GTYWCQK";
gitlab.id = "GKNOZWI-CNC2Q2F-R5GGGDX-RYFGHK4-CCC37LC-GVOEMJI-46QPC6G-AWFEOQE";
linode.id = "IJMMXPR-WNALZBD-FMJH5W5-WV7XGJY-HLJTKGT-5TKHJIH-75LT56D-UUZCYQE"; linode.id = "IJMMXPR-WNALZBD-FMJH5W5-WV7XGJY-HLJTKGT-5TKHJIH-75LT56D-UUZCYQE";
}; };
options = { options = {
+2 -4
View File
@@ -13,7 +13,8 @@
"ip": "10.42.1.4", "ip": "10.42.1.4",
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBecZUva9OnZuXLaBun6/1ITo5f9p0YMLPD+q0egLRS", "pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBecZUva9OnZuXLaBun6/1ITo5f9p0YMLPD+q0egLRS",
"external": true, "external": true,
"ts": "100.119.228.115" "ts": "100.119.228.115",
"aliases": [ "s3" ]
}, },
"exodus": { "exodus": {
"ip": null, "ip": null,
@@ -121,9 +122,6 @@
"external": true, "external": true,
"system": "x86_64-linux" "system": "x86_64-linux"
}, },
"gitlab": {
"system": "x86_64-linux"
},
"wsl": { "wsl": {
"external": true, "external": true,
"system": "aarch64-linux" "system": "aarch64-linux"
-3
View File
@@ -10,7 +10,6 @@ final: prev:
in in
{ {
daikinone = cp ./daikinone.nix { }; daikinone = cp ./daikinone.nix { };
xonsh-apipenv = cp ./xonsh-apipenv.nix { };
} }
) )
]; ];
@@ -25,11 +24,9 @@ final: prev:
withBDplus = true; withBDplus = true;
}; };
handbrake = prev.handbrake.override { libbluray = final.libbluray-custom; }; handbrake = prev.handbrake.override { libbluray = final.libbluray-custom; };
pipenv-ivr = prev.callPackage ./pipenv.nix { };
OVMFFull = prev.OVMFFull.override { OVMFFull = prev.OVMFFull.override {
secureBoot = true; secureBoot = true;
msVarsTemplate = true; msVarsTemplate = true;
tpmSupport = true; tpmSupport = true;
}; };
} }
// (import ../pkgs { pkgs = prev; })
-92
View File
@@ -1,92 +0,0 @@
{
lib,
stdenv,
python3,
fetchFromGitHub,
installShellFiles,
}:
let
runtimeDeps =
ps:
with ps;
[
certifi
pysocks
setuptools
(pip.overridePythonAttrs {
dependencies = [ ps.pysocks ];
})
virtualenv
virtualenv-clone
]
++ lib.optionals stdenv.hostPlatform.isAndroid [ pyjnius ];
pythonEnv = python3.withPackages runtimeDeps;
in
python3.pkgs.buildPythonApplication rec {
pname = "pipenv";
version = "2023.11.15";
format = "pyproject";
src = fetchFromGitHub {
owner = "pypa";
repo = "pipenv";
rev = "refs/tags/v${version}";
hash = "sha256-kxwyws22xJkqBy/hXXcAPHZR2NgZHbmwZr9vYqce434=";
};
env.LC_ALL = "en_US.UTF-8";
nativeBuildInputs = with python3.pkgs; [
installShellFiles
setuptools
wheel
];
postPatch = ''
# pipenv invokes python in a subprocess to create a virtualenv
# and to call setup.py.
# It would use sys.executable, which in our case points to a python that
# does not have the required dependencies.
substituteInPlace pipenv/utils/virtualenv.py \
--replace "sys.executable" "'${pythonEnv.interpreter}'"
'';
propagatedBuildInputs = runtimeDeps python3.pkgs;
preCheck = ''
export HOME="$TMPDIR"
'';
nativeCheckInputs = with python3.pkgs; [
mock
pytestCheckHook
pytest-xdist
pytz
requests
];
disabledTests = [
"test_convert_deps_to_pip"
"test_download_file"
];
disabledTestPaths = [ "tests/integration" ];
postInstall = ''
installShellCompletion --cmd pipenv \
--bash <(_PIPENV_COMPLETE=bash_source $out/bin/pipenv) \
--zsh <(_PIPENV_COMPLETE=zsh_source $out/bin/pipenv) \
--fish <(_PIPENV_COMPLETE=fish_source $out/bin/pipenv)
'';
meta = with lib; {
description = "Python Development Workflow for Humans";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ berdario ];
};
}
-31
View File
@@ -1,31 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
toPythonModule,
pipenv,
setuptools,
}:
buildPythonPackage rec {
pname = "xonsh-apipenv";
version = "0.6.0";
pyproject = true;
src = fetchFromGitHub {
owner = "greg-hellings";
repo = "xontrib-apipenv";
rev = version;
hash = "sha256-Wa8iev0ow1oh95tPCv5tAJUMBYiStWms8I31WbVcOok=";
};
dependencies = [ (toPythonModule pipenv) ];
build-system = [ setuptools ];
meta = with lib; {
description = "Auto pipenv support for Xonsh";
homepage = "https://github.com/greg-hellings/xontrib-apipenv";
license = licenses.mit;
maintainers = [ ];
};
}
+21
View File
@@ -0,0 +1,21 @@
{
writeShellApplication,
curl,
gnused,
}:
writeShellApplication {
name = "adblock-update";
runtimeInputs = [
curl
gnused
];
text = ''
curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | sed '1,33d' > /etc/adblock_hosts
curl -s https://adaway.org/hosts.txt | sed '1,24d' | sed 's/127.0.0.1/0.0.0.0/' >> /etc/adblock_hosts
# Custom domains that I need to preserve for some reason
for f in "segment.com" "segment.io" "branch.io" "dev.visualwebsiteoptimizer.com" "click.discord.com"; do
sed -i -e "/''${f}/d" /etc/adblock_hosts # Blocks Trelly content for house investors
done
'';
}
+29 -27
View File
@@ -1,35 +1,37 @@
{ {
pkgs, pkgs,
system ? pkgs.stdenv.hostPlatform.system, system ? pkgs.stdenv.hostPlatform.system,
top,
... ...
}: }:
let let
c = pkgs.callPackage; c = pkgs.newScope packages;
packages = if system == "x86_64-linux" then (allSys // x86Linux) else allSys;
allSys = {
#default = iso;
#iso = top.self.nixosConfigurations.iso.config.system.build.isoImage;
#iso-beta = self.nixosConfigurations.iso-beta.config.system.build.isoImage;
aacs = c ./aacs.nix { };
adblock_update = c ./adblock_update.nix { };
brew = c ./homebrew.nix { };
create_ssl = c ./create_ssl.nix { };
gcc-tune = c ./gcc-tune.nix { };
#gen-build = c ./gen-build { };
hms = c ./hms { };
inject-darwin = c ./inject-darwin.nix { };
inject = c ./inject.nix { };
setup-ssh = c ./setup-ssh { };
upgrade-pg-cluster = c ./upgrade-pg-cluster.nix { };
};
x86Linux = {
qemu-hook = c ./qemu-hook.nix { };
vfio_startup = c ./vfio_startup.nix { };
vfio_shutdown = c ./vfio_shutdown.nix { };
}
// (import ./zim {
inherit (top.nixpkgs-lib) lib;
inherit pkgs;
});
in in
{ packages
#default = iso;
#iso = top.self.nixosConfigurations.iso.config.system.build.isoImage;
#iso-beta = self.nixosConfigurations.iso-beta.config.system.build.isoImage;
aacs = c ./aacs.nix { };
brew = c ./homebrew.nix { };
create_ssl = c ./create_ssl.nix { };
gcc-tune = c ./gcc-tune.nix { };
#gen-build = c ./gen-build { };
hms = c ./hms { };
inject-darwin = c ./inject-darwin.nix { };
inject = c ./inject.nix { };
setup-ssh = c ./setup-ssh { };
upgrade-pg-cluster = c ./upgrade-pg-cluster.nix { };
}
// (
if system == "x86_64-linux" then
{
qemu-hook = c ./qemu-hook.nix { };
vfio_startup = c ./vfio_startup.nix { };
vfio_shutdown = c ./vfio_shutdown.nix { };
zim = c ./zim.nix { };
}
else
{ }
)
+48 -32
View File
@@ -1,72 +1,88 @@
{ {
"en": { "en": {
"gutenberg": { "gutenberg": {
"name": "gutenberg_en_all_2023-08.zim", "name": "gutenberg_en_all",
"hash": "sha256-wWi0vTyMD/Es0w/jk9uyg4DN94080thPfT5uphEqbUc=" "version": "2023-08",
"hash": "sha256-OXmdHdsLZcW4nCUQsy7sMpUssS8NV7ztkCgS/nsISuw="
}, },
"phet": { "phet": {
"name": "phet_en_all_2025-03.zim", "name": "phet_en_all",
"hash": "sha256-HT/gVNydkOitny6oUl2A+JvbFDGAIeb0h+xbMeQ2Rqs=" "version": "2025-03",
"hash": "sha256-ARuUzU2o17J2/ZedHc2acXl33dtHCbQJEb72UQUEm1Y="
}, },
"wikibooks": { "wikibooks": {
"name": "wikibooks_en_all_maxi_2025-10.zim", "name": "wikibooks_en_all_maxi",
"hash": "sha256-zmcvrvGO+LEHt7x8/SoguBDODUyRXy9x5LUGAkS+fF8=" "version": "2025-10",
"hash": "sha256-ONBh/ze1Fv2Ffm5b9vDzYS/i2cWSa4pM4MLZnozr2n8="
}, },
"wikipedia": { "wikipedia": {
"name": "wikipedia_en_all_maxi_2025-08.zim", "name": "wikipedia_en_all_maxi",
"hash": "sha256-r7Cd0vjEb84Ftw+EwZSlqb8qhqm8WA3LAPdHAav7wrg=" "version": "2026-02",
"hash": "sha256-vwhTv5TtjFNSTl7mcoi8SJiBm8nUlq8rP4UrZYir3Sc="
}, },
"wikisource": { "wikisource": {
"name": "wikisource_en_all_maxi_2025-11.zim", "name": "wikisource_en_all_maxi",
"hash": "sha256-jPHh/C20PARN6K7aPNw3k9fFHhpwzsREi/1o1DIISS4=" "version": "2025-11",
"hash": "sha256-p1Jio+PMTZVSLIDIOBeMG3acXJg83CwQM7zIWDUyozM="
}, },
"wikiversity": { "wikiversity": {
"name": "wikiversity_en_all_maxi_2025-11.zim", "name": "wikiversity_en_all_maxi",
"hash": "sha256-0DaE2EUdHvaX3XqD3f0lwurSAaDZ4hEKtrMEutL5xt0=" "version": "2025-11",
"hash": "sha256-IG/gAUdc/vHRrIWGHhw8vMJdLWwqrNbfh+SiclQRIAI="
}, },
"wiktionary": { "wiktionary": {
"name": "wiktionary_en_all_nopic_2025-09.zim", "name": "wiktionary_en_all_nopic",
"hash": "sha256-EzrrruJQWY/3pP93WCTeCCfaPvpshqdkR0TFxVz7bEI=" "version": "2025-09",
"hash": "sha256-Ghcb60qeGaSJtTKQkJoMx/XucX7Lt1XY145lD3gHlMg="
} }
}, },
"fr": { "fr": {
"gutenberg": { "gutenberg": {
"name": "gutenberg_fr_all_2025-10.zim", "name": "gutenberg_fr_all",
"hash": "sha256-1gU7v//LYX/2LyIRjO02A1fWPQz9Y7Qt5ftgeazd3G8=" "version": "2025-10",
"hash": "sha256-gLHxLXJNwwcxM/mZHtoJ8ojbGQ1fugxgni/+RXccwhU="
}, },
"phet": { "phet": {
"name": "phet_fr_all_2025-03.zim", "name": "phet_fr_all",
"hash": "sha256-K56i55WPu5EMQHIrnnqhgJ32WozZ6oYD9X3IBytGA0A=" "version": "2025-03",
"hash": "sha256-CSboZNTIowLLhp1u9wkxH8xmu3LvQNx5q493AOYJRIc="
}, },
"wikibooks": { "wikibooks": {
"name": "wikibooks_fr_all_maxi_2025-09.zim", "name": "wikibooks_fr_all_maxi",
"hash": "sha256-PQSdPbBHwK3IfFPH5GsKaxkNGTlZVJNJEI8gNioBl1U=" "version": "2025-09",
"hash": "sha256-KHCc/73L5Bd9iZ47SRV6vpI8fVM1v9hk1TpEvTro2uo="
}, },
"wikipedia": { "wikipedia": {
"name": "wikipedia_fr_all_maxi_2025-06.zim", "name": "wikipedia_fr_all_maxi",
"hash": "sha256-zzDhITMd1nRMYTUlvn56l4VBnpFuhiNrhhYMcrrBuOQ=" "version": "2025-06",
"hash": "sha256-ve7Mbh96/ObNbV/KVNYZpfLN+HdWlJ7C5LItEdVkRH0="
}, },
"wikisource": { "wikisource": {
"name": "wikisource_fr_all_maxi_2025-09.zim", "name": "wikisource_fr_all_maxi",
"hash": "sha256-2gEY5nTBecrmg61VJerxO4/oV7dZJmRgzLkqrcocW/0=" "version": "2025-09",
"hash": "sha256-FdLYCjoT6Yk34AZKFND/NaBHNe+GzW9Ibpd6mVPWlxI="
}, },
"wikiversity": { "wikiversity": {
"name": "wikiversity_fr_all_maxi_2025-09.zim", "name": "wikiversity_fr_all_maxi",
"hash": "sha256-4vOxYiX3TYht7ARY+PeCJ0ArVZZn9TeGtwCieqn3xUw=" "version": "2025-09",
"hash": "sha256-55fdtw/cRezq6nkRp6wuwkukBiqsQKdwh9QWVAgFcBI="
}, },
"wiktionary": { "wiktionary": {
"name": "wiktionary_fr_all_nopic_2025-11.zim", "name": "wiktionary_fr_all_nopic",
"hash": "sha256-oQS8DzKioceCER1p1oAvaS1gRooMLJLYnCqy1aLARi4=" "version": "2025-11",
"hash": "sha256-P0CJptee5rDzccxyRDBzyRLuuFOcaLsJYi6DkBFUfIc="
} }
}, },
"ht": { "ht": {
"phet": { "phet": {
"name": "phet_ht_all_2025-03.zim", "name": "phet_ht_all",
"hash": "sha256-UjC0REJ5d5wIKccutZADX74IxvZuF+CD/caVzZfHg9s=" "version": "2025-03",
"hash": "sha256-bHrPzE8H7ptrP6r5wPlXSsXNlTiKxJ9KatABC4kwx+s="
}, },
"wikipedia": { "wikipedia": {
"name": "wikipedia_ht_all_maxi_2025-09.zim", "name": "wikipedia_ht_all_maxi",
"hash": "sha256-spT7EFXLnI0FWT9Vlvp7QEP0urntmQ2C+fQB5bVLoLE=" "version": "2026-04",
"hash": "sha256-qUX0pKxIyNsWX4V6kNIsP4Z9nc6TDhwdDR0MmpDOQFs="
} }
} }
} }
+24
View File
@@ -0,0 +1,24 @@
{ pkgs, lib, ... }:
let
zimMetadata = builtins.fromJSON (builtins.readFile ./blobs.json);
oneZim =
sourceType: info:
pkgs.callPackage ./one_zim.nix {
inherit sourceType;
sourceName = info.name;
sourceHash = info.hash;
sourceVersion = info.version;
};
# Preserves structure in the blobs.json file, turning leaves into drvs
zimFileDrvs = builtins.mapAttrs (
_language: types: (builtins.mapAttrs (sourceType: info: oneZim sourceType info) types)
) zimMetadata;
# Flattens leaf drvs into the structure that flake packages expects
zimFilePkgs = builtins.listToAttrs (
lib.mapAttrsToListRecursiveCond (_path: x: !(x ? "name")) (_path: drv: {
inherit (drv) name;
value = drv;
}) zimFileDrvs
);
in
zimFilePkgs
+33
View File
@@ -0,0 +1,33 @@
{
sourceType,
sourceName,
sourceVersion,
sourceHash,
fetchurl,
stdenvNoCC,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
name = "zim-${sourceType}-${sourceName}.zim";
version = sourceVersion;
src = (
fetchurl {
url = "https://download.kiwix.org/zim/${sourceType}/${sourceName}_${sourceVersion}.zim";
hash = sourceHash;
}
# fetchtorrent {
# inherit (val) hash;
# url = "https://download.kiwix.org/zim/${type}/${val.name}.torrent";
# backend = "transmission";
# postUnpack = "mkdir -p $downloadedDirectory/tmp; mv $downloadedDirectory/*.zim $downloadedDirectory/tmp";
# }
);
phases = [ "installPhase" ];
preferLocalBuild = true;
installPhase = ''
set -x
ln -s ${finalAttrs.src} $out
'';
})
+2 -1
View File
@@ -83,7 +83,7 @@ func getHash(ch chan result, file, category, language string) {
// TODO: Only call this if the file doesn't already have a hash // TODO: Only call this if the file doesn't already have a hash
// in the existing file // in the existing file
fmt.Printf("Fetching hash for %s\n", file) fmt.Printf("Fetching hash for %s\n", file)
cmd := exec.Command( "nix-prefetch-url", fmt.Sprintf("%s/%s/%s.torrent", BASE, category, file)) cmd := exec.Command( "nix-prefetch-url", fmt.Sprintf("%s/%s/%s", BASE, category, file))
out, err := cmd.Output() out, err := cmd.Output()
if err != nil { if err != nil {
fmt.Printf("Error fetching hash for %s (category: %s, language: %s): %v\n", file, category, language, err) fmt.Printf("Error fetching hash for %s (category: %s, language: %s): %v\n", file, category, language, err)
@@ -115,6 +115,7 @@ type result struct {
type Zim struct { type Zim struct {
Name string `json:"name"` Name string `json:"name"`
Version string `json:"version"`
Hash string `json:"hash"` Hash string `json:"hash"`
} }
+36 -37
View File
@@ -1,38 +1,37 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 87huqg HqGj+5hXjRLJcrRMC3biBE8K9B/OAJj68gqTqg9ja1k -> ssh-ed25519 87huqg LKhlbZI1BygDI8E4kkzhw0/Y1BfWnzekf/URa/Bma30
K25Z2YGlWnUK02EUQmdNo0QM13apME/mc5w0gydrEDc uT7QzE8DPX8j3us7oNRKwu6hPUFpQosbcMRmMNgS/Gw
-> ssh-ed25519 8UnW5Q Pj4iDE8Q9FhzudZ341W+V2aaWuotfzOZzN18fRnPqh8 -> ssh-ed25519 8UnW5Q dDAJI5EnPMIhs5H21wLT84GWhkROEJRXE1QVp1aOH38
kujFDr1mL/0YrsyoVpWQhkEwwjXr3l3AbbD2787z8zo qZJt4Kip5qVZl9QoIFEXgrhtrlQEpbkfLarCgaHugj8
-> ssh-ed25519 UFfTmg Ga4FQrnrejoa6uSNDh0VMgB7ntPrp4Z2Ic8n5XCosHM -> ssh-ed25519 UFfTmg kbrSoge204JvRPBszhAfMewPM4oHg0HkF52BNeb9kx8
cquCWegeBg6Mtv3/t5RAEmh66p6oHBlQvbuJMaZTB6g E4ASRdn0pjF//GiFCjmRlgXRS2wiJxIXDFSjldMtTdQ
-> ssh-ed25519 xNtnoA Mf9EJ6mB79mWBN383e8t/BZQVjB7mXuFKvhyJdT9GA0 -> ssh-ed25519 xNtnoA 7b9/Z/qUEmRnFCiCYzVGJVvxvV8onjZemSg6sllaDyA
QnnrGVbZIHMDBS4ZZrj8BDwx6deSP10t2kLLzu2ewXs bQosZIGbaSsUqFO2JuRpIhm3FJd79JyYS43A9+zr+1w
-> ssh-ed25519 aY2AXA 0Lop9E46qiaGNrFTVbgg0O1yKbqwCFmG9pjssoclMUM -> ssh-ed25519 aY2AXA m4gIzzAX8pkBHHzsSykIy24E6Kru/I4uNnjihKH3JHg
I5lOVEogB8XV9pkyqmYcFojvZlAX31ADlMyHgDluxjY S18CWIY5wNcR5PVkCqbjp1FJRrGxco6fdoykQeHhyX0
-> ssh-ed25519 AQhf1g Ktn1BuWcwx0eJS0ZJugnRiTmvAht6ABOVzTDcw58HlM -> ssh-ed25519 AQhf1g LBmvyUbKRLKtPGIEqt+NwOSrtGwlFt2zqgdmRDHu9n8
7Vm9rx9P+rXDvrxTQnxxpUBZbvNRgd6UafmzuG0ePwM zb8OnKRsJBEkH6eJ76mlKvJmtZ8NvVwVS9/0tsZlMUk
-> ssh-ed25519 mOmPfg VhUpDomkduEthbPGMr4bFpLqVcXgn3OrQojPjA+s8k4 -> ssh-ed25519 mOmPfg TuPbRMlX9eRATxSbv6v88TtzGhOKWn5FOkIg4xR6FH0
1nrS2JxDSSe6PvPRK9VNBh7RTMiFChSiM3xbCQAQw/4 NLNzJM/9r2jZ70Y2r5Hsc36gcRTSPw40Aabn/H7OE+4
-> ssh-ed25519 YJiRbw XVylSfHTRne3B5zWru6x+yhAPJEp9Jj27P0Y63Wp2SE -> ssh-ed25519 YJiRbw bVMyOOgBcFFRNulym46YwKAIPlOkbQhmQAo9kl4dRx8
APDEG5J9tBR1boxpsUBarSC8vN6q34KElRUK98fsQ+0 5W2fIxGXCXbzULOismGg4NxE+VQ8LDEbODlJ0OpFMiI
-> ssh-ed25519 0/WsKg FVXUmVyse3msAkDSkznhcUw5VYd4vwsKd9PCDBJwLiM -> ssh-ed25519 Nl/5yA ydFS0bVjjDzymhQFaBJ3YqDREQDpVO6VzgS2MBtuOUo
hRIDpMGWWFu127Q/jvxr+ieSM7KQfNagqhUZUnTwJMM tNzj/85BiYe6th2N6A9ZkMSPKduwAIe/qnf2NVJiHOg
-> ssh-ed25519 Nl/5yA qO4YJ4/gnfbLOdJFyGq1J4AJH5pMTPhR2IvEKMt4IlM -> ssh-ed25519 GdLgCQ wmfT7bCzwnkwEtn2mRnElIM75MmdRw+33MhSegSHJWk
Dyhj/RQQ3LxgJVc5drDdgw0cAJi1t3zCFnO1zWKaWIw YHrCYB1wF1njNjzpIy3hKZ9l1cj7m5yicLuj71TvKr8
-> ssh-ed25519 GdLgCQ GyVGc/nK0Zu3/Gm76KRvXHwjdnRvoM+WuY/psFaIv2Y -> ssh-ed25519 tOH/HQ z5/GMQOtkpMWwWdMXqxmf12MM84xkgXL/OLliq3RHh0
1O56ZsNvSBzhcFRPoIOyUCMQCGQYn3w5ES2AfGP75uw mVhBt+uc7z/YkoIAyXTqBgv00cJOrZ0bsBP0lD9S24c
-> ssh-ed25519 tOH/HQ wR3dxHjLSzkHIG/6UX45qiGFqX0cHA18/oEFatBthUc -> ssh-ed25519 FpzvfQ D8N5JQ+3rGdSZIPmzlZqO5VpS90v6r99WMXtyUqCGiw
J/gpGWp8kOdmtFs9A65B68lsnD68gxfheiOZfp0AeI4 A2SSvI4H5TRY13R/iOa60bCdc0zR6lUAHJVHfAUR5mQ
-> ssh-ed25519 FpzvfQ 0sdlOKrumgCJedenPUNY/QSIDmhrP3J077qZxTwvdQE -> ssh-ed25519 2UotMw eaM1Kkzw53Oq8lW0BFn3rqWFcTQaTz9jcDsULDg/fwU
DdWxilImsFB/XXgbZNYXEjSCoqmVd0vaTH7rhR73fsw 3QVYFrhKnvwWDpIdsyTp0amontUXePko8z8PeUub9EE
-> ssh-ed25519 kdPvzQ 9PxMQp7Y4Gh0V2uMa8K6SmldUhcqcBfYgVtMkzzzdAc -> ssh-ed25519 kdPvzQ 08LE8a24S5cvuK9DVWD2ta0GjJMNzUidmgYT4RfhQDA
sS8Fqm1p72IPOKNZfJKIJTxTLoNt3MQaOI6w8qYCTRo cRFH8vOr2y1/C9F2wZWV2deUxUpoL34IFRyOBHPYifI
-> ssh-ed25519 onmXpg Ig9ABzLLazyW4wxkUmq87XR7hmUt6l5/X0R9Zf2qBlE -> ssh-ed25519 onmXpg J5MKGIovNwv4FyTN4ofExlHV8qYzU/J9O3MI4tZYcTo
n3DO7o4NdWRefqEkexyIJLeOQ8w1q9QN+wIslQNXIF4 iagT0Ypo8gTwvGpV66XNuNPedefx2S72q9hyeB2Rz/w
-> ssh-ed25519 CnhD0g wtGoi7CzfIAs8ezcIF7ecjTXshD96xG8ZLlhYYaM6HQ -> ssh-ed25519 CnhD0g se/N4hrYxOiukByYzsIhxToceXNuBO7J7VmM4muJ3Dk
4hwG3V1Cf/iYDsNXT0RmzWJnW5kxnBWNvX3ECrP1/oE cW+WW8iWjj3eXDqDO8aEON1ZH/+6AXQGAEXkLRbL3AI
-> ssh-ed25519 4ep2UA AKSh5d04251XgyZKKscIJjU7RSpKclMqO5qPTEMQygo -> ssh-ed25519 4ep2UA uyjvubY39oSGeCNsX3/VIdM5CzNBlrnRpkF+YN5MBCo
wSyIxArdlbLafOKmUyrlUqOZQbF1PXZND/PAFYCjClU xiNuksI7olV5Db392Vjz/7uDNDIssGmI9bez6vSOXTk
--- DnRePhJDkX5QDmrkH5jiZkuljvOFaVm1BrqYMTDP3tg --- VsGbd8K7JzHe/eoYUeTMwcg/GrY9SXVzNxL4HZ23tKQ
\bºîç:ý]3\ô<™rÔhމ׋|ÈFz.R{FEÝá<RòôœÊ'=ðY”­v xˆ˜o½ß ÌF £_÷t/¢ªØËVÎÞ}7J'%?™Á‰Å0“¤¼^õ¿-„ÏÛ„äu4¥ù‹íäóü0!®ÝîËðMÜÅ·
q ¤lî0¥ä»
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36 -36
View File
@@ -1,37 +1,37 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 87huqg gv0jzWC7KtVxSEeepOckxiDwxN6VdPzYaXjZryNlUjE -> ssh-ed25519 87huqg CsPCBXcVp7krsPi1k0WbjKFZxUzuZNJkkpOImMDWNns
04mMQsL99xW+VbpELVdnWehgq/3u50l5f98ZFTscSwU h6evECCNa5VGBe1dtbVwOBFBPkzwUKPFyVdQsTNMUXo
-> ssh-ed25519 8UnW5Q GzZDPqTzZNU5Dun3u7rSane+MXkDcbIM3TlEEJr7cUI -> ssh-ed25519 8UnW5Q 1pioLo4kA+RJ6r35H9FNCQ5LZqmYUmxZTVyTdD0o92Q
Dh/3ObCIG56797AvmSh5yrUk+MWqjxJ42/b4i2smnos 4r/sOb3IcQElEJnKAgmYeHtubm1Hk/cdiY6gUI1GkHg
-> ssh-ed25519 UFfTmg 7EWxx0WGxxAP2sErB6Rfteg2o1su5n1ELN7oCUsodEQ -> ssh-ed25519 UFfTmg ruMzDG9lKKSHo2I1L/2wigVZs1Jhi6aTNmrr4zAyEiI
S5x8TAYvjxjtCJgmY4ttCxvoZDdHMxY2RbsAJ7DxfJY 3gsAmzM6fE8RL/fLL63pPIH75P9TW954nw11/JpU77M
-> ssh-ed25519 xNtnoA 9mPAgc7YI355QYNlTlJWmMhaScCNbCH9EofQcJJDeWk -> ssh-ed25519 xNtnoA eTZoJFu1SqUoUGPcdVDw/2wW82xvRiSCnAmQSZPQT2w
QSlYi9COKd5ZjkC7Qxp8IcmmVJifJ1qy70VnExASqBM Y9Cf+/h80vn2w6G9n+V4uNV7bj3tpOT1KWRKajM7d5k
-> ssh-ed25519 aY2AXA JUIOcOAjshTPueqEo/GDXWzEubBt1JuMM4NLv89zfTA -> ssh-ed25519 aY2AXA c4MkdSio2FFkulOBKDSAG3Iq71ghRdw8/SQF0B98chY
njcVfVgCmT374IdMqke8AWGyGcpCgpu5rGs2zrn/A2Y lvT+m2ey5+HqipuC7MrPQIKu8KrSsLHM0XRK8c0iS8w
-> ssh-ed25519 AQhf1g faN3428QM/K0P7o6nlPxT3lHlx88PBIWxw1mSN07zy8 -> ssh-ed25519 AQhf1g vLig+8a5jPo3cQhdmQw/C/P1hgzKHiVkVwUTkMBNmTk
6G8FARubsbz7TtQWeQ5biww7XoXZrs0xDFdxKwyov/U N5ROr2EtHpTwti7NByDiR8R3pOQ/STwlIuNeY1pDA20
-> ssh-ed25519 mOmPfg b7LviVrLo50sU195qKNxtD6lEqq/QJBnHFkQ3WdKT2g -> ssh-ed25519 mOmPfg WcbxDQfraXfxkN1+IGaArpIHOmlUlhGjBijQt5ZYSxE
USSSrAIA3v3Luzt2Kft6fpMx4fXHAPBtWQVAAliiV2o 6KHLewxXWwo8fVIuaTuY/T/igsI6CKqEl2tyM/gkn6g
-> ssh-ed25519 YJiRbw QjrEHQL9zx6pIR/HzrKyM94JF7efjkMo+ArkVOjkQlU -> ssh-ed25519 YJiRbw IblKWpY9DeDSWDfvlEmNeWSV1lGdz9aHcv2oQVmKQFI
MfUl5yYO/LtxrENlcw2KgzyJiLpd/Xk0CbEJicxgG0E qPcdGcA6Z7YaLL5umR8ZOKzOyNIUJVHRBpV5HyAJeqw
-> ssh-ed25519 0/WsKg ER1PXYwpONwb3U77qUoH2ZDFmfvRQ7SV8lkgHqRJQig -> ssh-ed25519 Nl/5yA wr0Q96yztc+Rf88q6ooiDHlKqpVdWPkRWApfJsc7uQc
MCRbKzFD72DdZwoVrV5DesMbNG6ikMlL5C6mTSVGtj8 hQZTwZ36mkajMcSbxDsL+TtAezJIY+H+J7VaU1QOqEo
-> ssh-ed25519 Nl/5yA XKaH3S150ZwHo4uyLwaBrn2od5v6MRvc0bOR83Sz5Ag -> ssh-ed25519 GdLgCQ LiwfxrAh9dLjMeo6FglQzvUQ3hfWRAZr2naADkB5/WM
RqQn4/jo122fZA1oujOkwe4gbnGfn5BK8CJXi42NsDM Bn4fnoqTvKPd73qi28NAgAN8AZl4EWcr9e/uhuUwVgI
-> ssh-ed25519 GdLgCQ XVrC/NooMQFg4bSPQ09avkJ2mwROHp8mYbBA7dWjSCs -> ssh-ed25519 tOH/HQ x35ypXVDI9C1wpquWxDUFYXYHxEsD2NJ0VIDosRONyE
Q72VZnjs6Y574eRwheabzTW2GH8A2oEOEyk1Mkh+NzU Aa5eZt98GQQZmKlBDzRC9KRyMCy2z1htSAsjKNGCuFw
-> ssh-ed25519 tOH/HQ b55WhSZiczkXRQQTxAFBeN4HKyi2orpR+ikGiSyaonU -> ssh-ed25519 FpzvfQ jlAbIzsWi8eX+PTKn100NaiSoezN1kXzZ3gWUOKfQVg
woTljkdrDmI6iCwUnJ7i1kLdfH3QaZgkxxQ+Upik6/E NQARp2qsxIdSG3OLJyP33A97r6cBRaMSaneT8NBnhDI
-> ssh-ed25519 FpzvfQ +kFO6lyChWKyGs1vN8XmRnp5wNUrOvKGAMtQB5gYJyQ -> ssh-ed25519 2UotMw 53sXK937St2F3MzVIhmsjH6WeCSRdkpv4oFa2ZBaelI
xQbRbUfvk9Eoi/JLfzugHeUVbPGfFItkul33A7MVx3Y lNsjlQzS8Szj0FcAvrQno9rDO17iKDjMN7VwMLvIleE
-> ssh-ed25519 kdPvzQ dv1xr07TrUQRGwl6jbxMQlocvvYlTmyzyZpbRAU5rg0 -> ssh-ed25519 kdPvzQ YdeMlv40jR9bFnXVjPJDpvCnqn091dCKAB60m4Obwgo
IYO9Af8yAxY5499AArmWCy1aV/ZB3w3deBS4OAHq+LY vgPAO0evfCXQUX7Tu/G9ERUhLO3KiWXqpxIqATDl5vw
-> ssh-ed25519 onmXpg 8cNof6Uwd2MpA3ydHLQHAQvFvl7Kk5moWMRD5qVFxGs -> ssh-ed25519 onmXpg mrDB6F061SjeYOZuUJVvZP8SzOVrFdpAAEfgPOzp608
hTMO0oPxHajokrzMIWB5ksbrVFcpQGo6Jje9FWoiPxE AzAEEHK6Q71YxPfiljl7ZCy0b3YBdSBMKORJd7Opkck
-> ssh-ed25519 CnhD0g kqhzl+91aQ7CDRrXzrLPo+P5GuEOSF0MGQlfZESPJDA -> ssh-ed25519 CnhD0g Ov3v97PyY79WoXUDAdvXEZvTE7ruIgDeXVz3jD5O1HY
64xA1PirxldhnScyJ0njwaOMZ/EgPRm1hQzojJIa+84 +0rSmiqdxP6PgplxLkim4AJtKPcjn7OlkXpcu0BsI4s
-> ssh-ed25519 4ep2UA Zss5olMIbVxEJT8XdrFSrBOppplv8+x5ej3CktSUNDs -> ssh-ed25519 4ep2UA bDGTw6Msbh9sOp66l1VKGrT53AlrPv+QG2T6ZJv1pDk
ldPkN2iSBrU8M7WCZx+PlgUhEIZEoUmRWRgRHvG7+Dk WvHFJ3LIlpiuVhHUxY6egKifWNepzIB7Ls2R4Kx1Kng
--- emzp8uRGi0GDRt9HS6E6NvmwB7LyI8mWED2Mof9KFrA --- Ec6/6bQEn4GQOedrSzE+Yw1xRjQA34sj29Tr3zLFgZo
WK 烾ÄÆý;m7…%cl48Wáå‡÷'D} ýœ.l»fGºj«yàÈI2ˆ~h•YKè‚Ͼ†ÙŃɺ …"VÕ"(HQ>å­EAG€æx1 NïP¢uGc!Wcݼ¯£ \¼ìæ—K-©;]Ðu¹!,ó$#nŒ¶dZ‹«­¦yž“-kX’BÕÙƒ°·ªc'‡Lò¯Flݪš6L‚n˸n’Ý£f$ƒðÀ´ê
Binary file not shown.
Binary file not shown.
+36 -36
View File
@@ -1,37 +1,37 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 87huqg iDDZb1/mBldfguf43wN0TSuqOXsEScH+aDZDKrVl9m0 -> ssh-ed25519 87huqg ua9lzblqM2d0AmRbEj9c6p8LVBxNkYYr/vH5+HFoDEI
FSHO4h9Csu9lJqlNpsY3bcDt58eSUxi9ENr365lBvEs Y08ot6KWTZdHXjYUsc2hcKnQlJBtcmE1oD5+OX86J80
-> ssh-ed25519 8UnW5Q TzreBNEiSrZEVSzdZCzm4J7BP0IJ0U3U+FdINlUvMRw -> ssh-ed25519 8UnW5Q QW+RWL8RfOoPfZEb+m2XHNgvlUoLZqPSDjx6riMCXDk
X1SKp6T7YVTuqRD9ozJWl9wGLQS2XpL2SsP9JLHdoHo DyJSnhbUWRCMUWlHYnz/jbqBxazGXEaxe6/T6CNtvsc
-> ssh-ed25519 UFfTmg F2LDdqKDkBIHrvcT4lZs7fnpRVH83/Rxnt65ATqVETk -> ssh-ed25519 UFfTmg XcNVYggkFQmj591cbFEpz0ishJgp90W1Eu1OWphmj1g
did174XGfcJQNubK1B7W9F5+ZL4XDQfa7zb+3WXsd1g 3/GL+Q2euyXgcapUXDt8Mw5Q2+bbk2C2voQgGuTtiUU
-> ssh-ed25519 xNtnoA H/lAt2D/IK8qCWzTDh8hrm54OrO42ETYJIcOqYgF7Uo -> ssh-ed25519 xNtnoA CYfNyaWgYlM4oe/G2sI99gvldiKY9ScDsi7XPLnDTjU
+yOkmOn65o1X5Mv5PiQhAhFDJ/R//6f96i7PslUsNYw h07PCdnOUF4o6YggrJ27Cdc/Gb9cu5CE0cZegyqLiKc
-> ssh-ed25519 aY2AXA N98Z0KfofoC/OOYyEhUnzQNMJIuKQN/n3t34/j7rHDQ -> ssh-ed25519 aY2AXA NxBftj7RM1QeZ5Np3Mt/xsxZ12XMtgHh/foWN2uyyT8
sL2tca3lYlgrz8BE6cSbWyOL8/p3ocgpR75BmP14tpY nXUQI/tjhtPSYH6GFDxw5oIQnrLrQHYfNpriXXqH5fg
-> ssh-ed25519 AQhf1g w0czfp/ljjiS6a5SU/stgWSw1yIIxgxaEQAQPFUzrjE -> ssh-ed25519 AQhf1g 8BTUwRGn9xPBIO+Ez2viFtp1B0LzWR69Aer0B/OfhS0
mdVPm1r9VTXvAaGS7Bajg/yiUE4Hv8UMF9dSsTTwEiA uKAkoOTpuyLFnqKPXgTPYBriaNCQZz/hwSLkUKypBwo
-> ssh-ed25519 mOmPfg oh9DqeeAL5sFTB6baYe5QGcyZOi+/90kIltmTA/bpmE -> ssh-ed25519 mOmPfg FNLltRffV5bNxipVpxAOkfviS/RKJfrZ1TBWIVSspHM
jA6K/lAEBjhSdgpoZ+qLlCtS0RpbyOMrETXtuvOxv4s ML0HeuZwms//wyIBfXspWQPLh/DSbl5YkcyHHJ4vZ/8
-> ssh-ed25519 YJiRbw 1dT8jG+xx1GNSISZdT7WAmaP2ltxkMKmPAGCde+ucRM -> ssh-ed25519 YJiRbw rgJDr6qSeN679l+aIfDuhonxcoGw1h5C+nVGS0ce3nE
gYae0N5DuZRZ4S7KufXlO5K6kC71YTGbEVx4p3oYBT8 c5xynEMZNtHuPb3wc9d8QADay6Pgf5dhSw9jLw5jkjw
-> ssh-ed25519 0/WsKg 5z5D+ckewk4cXzygfGrcPE4e01rDKo2yFU8MFzxjz34 -> ssh-ed25519 Nl/5yA /5IxJynZ+oP2iBZikH1dePktiwHrjYMSSeEn0wR4ywc
Su0ZzamKBmyALZ06iU/4fthHnaimTX+MZ7g+SMNCmYg My8esaXF11AgCEOeyNX+JRgLGuMlSPYGHqJIbxG3XWk
-> ssh-ed25519 Nl/5yA SpZyA5mzLrtF0TyAUnAf4pplmAda/ZkNP/2mW1VbhEQ -> ssh-ed25519 GdLgCQ zKBABsXQE98vU0BgEj5onnfHs/Ta9qWwMgKKPFI//n4
HcHUXgrdd8MobLl2KonByGUg3xIF3LtJ8dfAjTMeubc h0cMTFqCZ3pON8JwZBfJz1E2HPWVEqH9fRc2ry59HaM
-> ssh-ed25519 GdLgCQ 9ty+jQ1QEmakbYfYRglH3aYRiWDlWVoyoAvr4mhaIhI -> ssh-ed25519 tOH/HQ oPtW9p3QZzva2unDORMZURJAl7VVbuGF91HCe+wbTzo
AWurwo3gS/sqFYA2x43uf6bVQMPgIScTl3bO6rBTH2Q 9bTm0B3q1tFNVepL20MIU5hWUFK6uUn3781NDqhWkv8
-> ssh-ed25519 tOH/HQ xf9oXzcY8WhHKo0+igVMXftblQEgtsYRiQr2HIBvWDY -> ssh-ed25519 FpzvfQ R4ZCZsgf2tlN4h07M6mzgR/lhaZnP7uyUxajO+oC+UE
ErehHTChNeBt8QL6LGduelH38xmH6g+EJ3HeLcGKfqI iJnJWKYrushgkegJPxw7M2aimtQ/dqOB31BHnMaFTm8
-> ssh-ed25519 FpzvfQ WwI5B4bhYqUd+kyv/qfsdZF++vPwv0z/VHs1rLgA+EQ -> ssh-ed25519 2UotMw eIow72TygjpYbhJLCqt2vm2X7bu3NjY6MFTOWjl+pgI
TbZcSqK++NDFivpCvDbVJsrgh99BlkTtrEaX8N7AyO0 2EgimzYzga4FW5c79N3ppEMVvREAmh5wx3lI8gh0/BU
-> ssh-ed25519 kdPvzQ SzDbjtauFcizhjnZfG4QWtU/OuAP6A3zAC5IU1bVgyI -> ssh-ed25519 kdPvzQ 5XbOccIDpMFKcCaBWFRWWCaUh3p1LBJ0ayolQroZeA4
f6VAcC6ZJ/a/Iqy+nAQcR6QSIOxQ0w9rEV3Dl1AcgSc Jb+n0HeR3gDYizA0kta1TBvEiZryKlDwbuoa2u8PyKM
-> ssh-ed25519 onmXpg 6N3pFYE/eAfEHSos6DJCqWj98lzh8eKWTX8cKqtr9BQ -> ssh-ed25519 onmXpg PZR1T8ylkM55nGIBYiCroNWNTwBcEA5PZU1YWH3tsWA
f8q/cHQ3+n49H5VP9/KERqJelasa34FZvBe6Suj0SR4 LsOHqiryBJkA7b463zyg3IToKy1Teo/miyPfENewGnQ
-> ssh-ed25519 CnhD0g gGrIh8bxCV52xGc83dGIUBvfSwVLW4Vg0iKlc9Gz+nI -> ssh-ed25519 CnhD0g j8T3e67+tDXJFRsX/gC9qqQn6YGFxgAMwWsQ9vlDsGg
TjgGfOIDKMtha50mPumPHqgaITYRnuEXVfrBGmxzlVI KAOrCxfTTo4uB0EjrV6VwAx71hbrNiJuP6G8F9lOr2Q
-> ssh-ed25519 4ep2UA TdsseBn5UGPnXtrChro0wf4IHMrudNTNYKzbRiG3AxE -> ssh-ed25519 4ep2UA wC0BaXPYM2iRPRBhQlOo2QRM0nX084cDp6brzKWjkzo
USm6bS3A3m8vUO3JY54dcTtODZAdZsJSbAuRD1y5Rt0 wNBztDXiPi6K9q+HJRXsr56/nf6k/aQJQIEpVCjQjQE
--- htoy3HVrfZj0Pfl6qkK8DCj+kARn6O8M/BhkXpLcu1E --- IsVY/KsFoTGubmdpOdoTI64+O40RJplehy026aS1RJc
º~\t¦Ü×a|Ä“ôá ׯQʯw(˜ÔÃ.•SeJÜkÔ‹‹¹Ùâ·ùazµS&Í5Î7*›ÔKèfÌo«KT©5ų0·Ý\Ø£GE2‰Ký ]̃R…ÊYá½²1ù\½LœÙkœ”­“¡Q:ÙŸý6 š¶¥b»Ø*ÙI­ÝZ3ýAóQÆ%HÑ4Êða0,ìvÇåÙ÷Ä­Äþ7ð-
Binary file not shown.
Binary file not shown.
+36 -37
View File
@@ -1,38 +1,37 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 87huqg iCgUGB5ce7TRS5Cm7+ROuxs4Rc4LXGsIEFFRd3Is+DQ -> ssh-ed25519 87huqg iZk0mtBXNJEHptCG6sm5Bre86Ittrbshc7mgBg8lHwA
95deqc2X7cXJOkBAJOu6mdk/gf4g0mOV41vWupQmRIo YgWizpWE1BvU8p4A2nnVM+KEW+pP/VQfeXNyn2C+RkY
-> ssh-ed25519 8UnW5Q QTtK5n/dtnm5JzzeNrxh1JmvnVQMgu2Wz1G6MAq3LCk -> ssh-ed25519 8UnW5Q rWJlpARVcYaUwReRg3WP0Lo5EK1WHXnDF281NfRCTh0
WAIkKpMJLYMATfHCyj0AJVzTPnAlMGqqirn83NLXVeY 6JMBB4BVRxh4irXU5jR7NEtGgHUKEnATl05kPLkIJVk
-> ssh-ed25519 UFfTmg t+Deer+hgn2+45pkjuzW+hzJRocLdTSwZpbVRSrSeHA -> ssh-ed25519 UFfTmg r5QfXMP2yX1sT5/NSZOk81uKuUD2gHKCJ00OUfMstxg
2Gb9IEKRPmSwE/lWS/lwQszl+y2YsiO7wIv21h2wXnw 9vQme3i/ip6BdyWXSqKf9KtBciD/xWnlTfU5bF9n6KM
-> ssh-ed25519 xNtnoA 4pov/sXP+HqiW3T6/kmOtOPlsmUGEScRRTq/ajvVGV4 -> ssh-ed25519 xNtnoA kiD+2ao6nBdkn3Us43lwCK4FMTWUX83AXZTdNS2ct1k
eVXJAcNQ5JoFC9lZF8vtmLfGUiUqWUouvQSaMFpYGS0 BQaO2/DuYW42uSRu9XLz8A3N7H1H3LZk8kz1Za12qTk
-> ssh-ed25519 aY2AXA FPATcHTZrjb709XkHJp6iqYQYtr0DECYHQiqM1jH71g -> ssh-ed25519 aY2AXA cG0+CVmbBoR3El6TwvwrJhHbuLKpO0FNLMQQuAMU5XA
cLK2Fm7oDL6L2BBH5Gnoy3pn3bEJIIoAczYefN6+Dk4 uedc7XXzPp1q877M4Kb2AfGAafp2unNIB8Hz/15hSbg
-> ssh-ed25519 AQhf1g XQfu4fJWgrdr7rm1kWVGq44wWTMa2ihE1XDi3etugxI -> ssh-ed25519 AQhf1g ZIT944IUaACBEPFVv0/Q3Era9425gfYPDHTKQDFj0TA
4utpAuup+QisLRX62TiwjzkDxWRQ1OCX6JAdVXRTC8w nJsuyOXfhNqejnljvd07tiGAH/6cVebb8N9op+yUkaQ
-> ssh-ed25519 mOmPfg DkI63znwJU3S1gjsSu++DZwV6ESAJ2gOroj2JgEToUI -> ssh-ed25519 mOmPfg O+i/JqV2MSpDtjq2fGYsZk4cGe4mY1IMxfFiVsZX8FE
9gxNErI/wYffYOno/1s5tTDj8qrFOUOfM2BHR/p8am4 mqjMKCEPYrP9T5QvrPgrqpuQj90syD5Nly3xcZzlu+s
-> ssh-ed25519 YJiRbw X2PJfMTDs6kQ+pecTkVATjtm5kzGNs0hKuM01GqzBVw -> ssh-ed25519 YJiRbw cww2VvvXfFmWdspOqp0fYNizYF5gOJoWo2z0cmc2Q3E
pp5IZxmsNI8DaYyETCPz72BHdamsmT9e/0HH6M59kOA t746Geby8GdPXb4G6PSnYWxAYHhwEygAy2kWOTNlQSE
-> ssh-ed25519 0/WsKg sYiDJlriTlNsDiE/pJx62UVmaiuB4TLuhMJ034PKUgA -> ssh-ed25519 Nl/5yA /sbUMK+/aNe604RdYYGhC76NUAUV0zWC/d/BOFUMdDE
jv7IHgZBEBSslBfN0AbiEc7BzFAogvLLzt2zLD3IlRs UYGmy1Cq4aZCJ6XghmqJVgCI+Q50NXKzVTbDV0cwCVo
-> ssh-ed25519 Nl/5yA kFZMA1SVQI2X5S2aXjnQMFZ2C/meQxb5Lte56Cgq5D0 -> ssh-ed25519 GdLgCQ 7DVn9soiWBMSoWH8s0vJh9CxTnOGqwT1kCD2kKJffXo
FtlS4Y2cEkLuMJ8WNSh93S9GougZaIQrx+mFht2VKg4 1S3yC99Gp7im+ntDy5BF6Gbja0qI1iAcbBnUGBOdG2U
-> ssh-ed25519 GdLgCQ pe/bkOigydEzsrqu+Oq5YIHT0T09VZwSYEEMPEwTTVw -> ssh-ed25519 tOH/HQ HjMJb09INVPg9p6eFWDq0x6aXxtv3e9WHns/b9dRq1w
iqSeqHCuJ1Nz9cylReoHpHZGKIiX+eCRK5K4x3Lm5XU rol+78bs1kWGNNT9uGgpyhLo8Qg2KFZOZNV40o9ngjI
-> ssh-ed25519 tOH/HQ HY+keQnvJe7RsG9/fCNKwgEpOvSg7WsmkI5KUwaMvn8 -> ssh-ed25519 FpzvfQ DYtu2GOhQMVefKgpFzGsUwQE93AABG7o7zlYBx4Sax0
YiJNm2UHF9xOlmU8JR5qL+/IhmVOmRx/ZvRYLky+baU p9aaahOTOcwTwJh887brzzAz0K9eM1Q2okGwS6wcPWA
-> ssh-ed25519 FpzvfQ OJUnmvwDnsLGdlXFuhWvpR4GAUBG8OHHNIAHPOLi+Ao -> ssh-ed25519 2UotMw XrenSoEXsC9g8pF+nIYu3/mEEE92h9NsjQlMHWf9RVo
ADIq39poY1hwe9OqvwMvwy/yuXTZsgdWfwRfTEUgJDk c3GnMhYdVXnTZ4zBpp+ZOL47i4iQ7PKKreWCrLz1JC4
-> ssh-ed25519 kdPvzQ W8njxBXDY6IAzwpduheN8oCQo9WBUuFCwPB15wbLDiM -> ssh-ed25519 kdPvzQ wKe++MlxxvHTN1fogMxxO/Ek8ytLnUY4rS3/TGwYun0
wKeT83JqP4OqzDWzAZXfOnQouuMSMgHZyHvD0EgQNNk yERY9pzUSb7/YSkVPuhX9fJ6SHFZhgBztvx42wRU9i0
-> ssh-ed25519 onmXpg k3DbEOOt17SYDvExM+3CpBAfepCPKAYz//4xHEkGSi0 -> ssh-ed25519 onmXpg fccql4vrSXq2rmGNJAwNmnXXj/6rMp9rQL2/T19AeAs
kmn3tBnfmzRcNCn/bsWM5hTlgymBE+gVwn70UTOmztM 41pFfrrmas1ttzD/wpQjJIbzgi27p80hJtuyXhpwE+4
-> ssh-ed25519 CnhD0g jCWQ/TzgDBXzQGVa7y+OFGamymNFQGYGRLEi6vYyJy0 -> ssh-ed25519 CnhD0g cgwxIxMn6IFqHIaFhTrN1ycr9d4B+sSVcLZeiHaVn28
49hU8S/thJ56pQrT8pYN16FSMN589CYeTFumVuXYze8 WFaOrcE8RuxatVGWCU+EAYTOZmks9bfKTme7s7VrDpM
-> ssh-ed25519 4ep2UA fY4fefeCcrRv90sudPnyQ2k9EKeoYOIKCjzd5n+B5wU -> ssh-ed25519 4ep2UA zStnhLrVw1+BNhOd+LQ1euusmCQnyQx7/ukUSgEs10w
IYs/RtzBzDQVSffyWk3FxR2NbRTOthtZRCoxik0H0Z0 NDzx2fwKDs+of+62Gj9dE3l1+Wh0aVQAfjXPjYFjVc8
--- 5XoWoRuBZkC+4WE1lzTwVlwj2XoFOfB/fEmzRWb0+MY --- 63bVjaHZOWE+1hpG5yDQN8vMspyOOfw3NnXLCYSL3eE
+]ÇÉyw aÚ»Ke¡üq9o m^x¶Aüíù˜Ó Ú![„•j-C3[äæª0µj gÄ Ñ³ª‚È(Lv¹•Õ¬›Øþá2Eý+qæ%ªѹP­ÃŒíËÑLs;3˜ù,³7]\¯–
q‘ù¿)0&ìO}§V“\4jÌþ-êu;z“3ïû+ˆ|P\jÿ fŸ»9—l
+37 -37
View File
@@ -1,38 +1,38 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 87huqg A6H5BG0J9CcPatDKkraXHy+RSdgxtEH/jAaBMJrOT3o -> ssh-ed25519 87huqg 9bSltGjltla8XkrCzhfU6yqy/Kb73jHmaaxpgE/mYjc
67qMA+bupmSdVl3n/Htt0F2DbCjoaHXazrFz5DQNqUQ q+UwMDloa3ud2r09prz5/nsIF98LI9xDqnxW12GPx0k
-> ssh-ed25519 8UnW5Q rw5VvXm+g+clTmHSEruaUhZBxCjtdEoFxZtnDNH3kEQ -> ssh-ed25519 8UnW5Q MjKIEX54pROJm4wMTQFP9vc1uhz/gN81zyy69zQA2A8
uyHJMFUC164ggrAoU19kHisWRLxuKke73a5aYArSwCk B71KLdMEXUgyD1lg1nyJPXnZXxDSKyvRb0BBOMN/y6E
-> ssh-ed25519 UFfTmg Yby4BvS1V+Rh75Y3blU6c94G4pzrc2B1AiXkz/GdHXs -> ssh-ed25519 UFfTmg fk/DRRcki6qQf/TnwBA+FIgLVdrYdktLR9yf9r/82Uc
Q9J5HrXkuPmpEh8s28Sx+lM0sR+soekQ22g7ri9eu6w PUpzNkavVk/VfO8X+mb2IfKrseA1yJJ6xNnap9W+FUM
-> ssh-ed25519 xNtnoA zUICmSlbcLHf8fUW2yZMqwtVVoM62K3X8iq32DNVpR0 -> ssh-ed25519 xNtnoA 8wXxop/HSkpNJe2W+Lq6J1dPLk8P1w75xHKUxUjv918
FawGMjW+sjkYZFGOvXft2Is/1Y4eCBq0IZxVaq06rO4 may0BdqkiYxgaUGxv80Udz+UVCI/+pFgzlCZetEzLoY
-> ssh-ed25519 aY2AXA 1gQtbMWqdwlaH7vUBMukz61J3vuF8FR+xSxHaY6ON2k -> ssh-ed25519 aY2AXA /GeX9PATA0svXJ2cq7IIoWAx+Jap36OYFFw52mbtZ3A
aocdKBkmsZ3J45Fyy1jFovWW8Rh9tQL+AvWBH5C3dW8 BEOqSa4F8PVxGkVT4lSsP8FiloINw4mEjtZ+Dq6u9Kw
-> ssh-ed25519 AQhf1g u9qN6jmuYK4KtkBFhOcIzxbpFCY1EkqMCYIYx6q/P08 -> ssh-ed25519 AQhf1g URV4/G7uUPxZNpP09qyS6Tok7KlcfjYCGqEGftwkM3o
KtvwX3NN6HMc5lOMphqddXEjhuK4rUrFJ3nO8TJxJTg +l4j3tVMj8TcCE7KobympPIv3fRlLu7UGnZFeNZP4xY
-> ssh-ed25519 mOmPfg oB/4Gy5dWL7EJLwIDLMr4+K2oUlgUIWBy/g7Yx8QyyM -> ssh-ed25519 mOmPfg NoIRVRE3P4/nnerdYsAw+S9csK6NB+AhnjYQj7NZZk0
ZfIjUqOell70m8FJYSNKaLweU+jXtNXafeZ0mktVkac GUuYluAhGcuiIfB6oh9rvfcd1Trhb/Jeyb7FAz4Plcs
-> ssh-ed25519 YJiRbw 53FFjal/MjaqaVT3rNqNlmKVKc/P+lp64gW++C4GkxY -> ssh-ed25519 YJiRbw n3/TMqijUG2LdAsqrq13Jelw4hEenbjMu70YknGrtCE
Tu19fCXb/JMXuPqya6GNf1E45c6CmvAe51yFoSiXHMU LCfUQDnpe2a7dD5YOKcteXQ4K8FyZNQ1gZi1GPkuCYs
-> ssh-ed25519 0/WsKg TrIDepX4dHixH4AwWaOnwjcHO9RVAqlqwBdr5MlQlmE -> ssh-ed25519 Nl/5yA W0IMc+9Mpjehqib77k1LLeUoKSp8QwJkz0aEfAttMTo
MWUCyLN0YWVXg7VD7vvSYTGdmzm/TBx9fHHffb5OjWU 0yrHlLQR3g5JGAuICMYQ8UBQ1SEdkPCiVq/j4PBLm+I
-> ssh-ed25519 Nl/5yA aRu6l7Vib4imh9LqQKhoTA33KF5siMIlmK5DktnKJDc -> ssh-ed25519 GdLgCQ W1evgMNEDrmT5cgqRPK7NsTde8igIIiYbjRPBu38WSw
qJeB4YB9Sdm+9NTBwueFLCnbhdi4N6O+ELTVGbJDvz8 5gDQVJxEcChyAGak31Qh70eFjOu3z4iLXZejBRXjUwo
-> ssh-ed25519 GdLgCQ f93Q/At6T7Vt827F7ytV1bxZEOLtLZFUavsIaeW3agg -> ssh-ed25519 tOH/HQ iGA0Bf0Moa6UsXC484hFHp+4by41o8QhjsrCtnlnjDw
xoChxHLnyEQs1T5ZnuotnwyyMZlZh4PJceOX+tmHAiI YELtzO3zBhul4CCPdSaOm5KctPAoU1y27Jgfrs1H7KU
-> ssh-ed25519 tOH/HQ jFZTM/OQpLUXZT4ENX+1Qq9iVJXXpEY+rfLpXJvM5Dk -> ssh-ed25519 FpzvfQ LcehUBu0dDyGfYKqbdfxS7d6aTtYTgpokG+GWHnjtzI
f3ZC7CbikEQpBwZcqYfhBIws4up3ZmMk/2mOS/Rf2vg 6Rcos5SJmbUXXtMFqge/CRUb4RVYaHrt/H9V9tprBxQ
-> ssh-ed25519 FpzvfQ rxuFxwpguxrqUBe10asuNe33Xg6Ebdoh9oNZdz3fqCo -> ssh-ed25519 2UotMw Az0wVK6RPjD6Mm5H+gvCZDRuNbHFmuVXRGMKBgL1SAY
MfEGIDV2nsX/MhUFEQDbLsWywFLHrk65gbbMVVPdJ/0 hf/DmLzyPoMQIYoV1A7CEifAdKQD8nOy7kWfpiJnuN0
-> ssh-ed25519 kdPvzQ SdjtFcZ2kzuBSDOF/I6m+e/R/sJdf1gst9AYOpefDVw -> ssh-ed25519 kdPvzQ mP9FISgXfkj1Vflxun3bgnlwwqLFhL/RI7knX+Qpml4
G0+6qeS8QKHvWKbZjOv6+6lR324OVdAo31kTZJ1baC0 ax99X2ePfqnYIsA3knPz19lcEv35pTF3YgEAI7FI/Xo
-> ssh-ed25519 onmXpg x3F8aAlT9ndzfeWqiOz6HX0Zs9kNIP4sW7mE+caJQmg -> ssh-ed25519 onmXpg 1Hg7Hf+HW28fBH4fMvrNUAd1XwiLOFGDQ7Tscqn7UzM
bz+YEEnu/ETBhqBTZiLRyVnSX1SRJkfWSmrEx2Tzqgc Cr1Y/Z60BwLm9b7GA94QnlNBwgmUqe8X8ksAZMHcgCk
-> ssh-ed25519 CnhD0g fNddA6YIHeuKUVFaAkwU9f/rSfYzQXPuw7QbhQD4YFQ -> ssh-ed25519 CnhD0g TR6lw5KiTVLkgoErQMMTbgDAhV/Vdka35izHR5SJIjI
4Vq9uwumfzpgMxtvmxt73EPkkqrhS2qApaJZoQwUEDM EJs5EOZlprrfpQfpJgE4//VI3bAWE/OPV6bNOF7O3s4
-> ssh-ed25519 4ep2UA MslFSRrk0185JfNOhRYkJH+GMtKIg4gEcsdsT6CBAX4 -> ssh-ed25519 4ep2UA pSDKM7BZFXY+6BAfJYTar/eZ2eE2U18iFGdfmb7xPzo
Ta+Wz13G2NOcdJ7qxZHqBYiDz9fU+ax++BTPSEi6ZVQ 0Og+gnsiBQcoCJzLIDSfTLRbnPf9ZqF62HKbtNcknrI
--- E31e3DZgEDqDTnYzMI/Pbh1pyQT16bWTzYz3XZY0LsI --- 8adV1z73QFaTnpZABU9wkK/QfvnFdsVamSgndB6aGx4
\™l—`]yɺâY-‰g£‰ \!Ïç>ín;¥.\¿±¹üÆBsC Ò#é!)D}ÆPx ï`
E»ÊÓ~oÜEåŽÍÓGo« ø/ܧXg<.Oº €<ƒúÙ °Øû ¢ƒC½cûÎðô©UËB( O±zøCÙFB¾tèÞÝnë½ßÇxÊŸ÷صÿ @²8
Binary file not shown.
-37
View File
@@ -1,37 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 87huqg Eh2E7tXjZj6ydDOSsFD8UKMjSjLWW6YZg/5bzcdMaSU
0vXZ9AGU3N8Jbep6TRijGKoo89jK0yauG1LmErtdT70
-> ssh-ed25519 8UnW5Q UxbfpTqUcjkdevd0WwFtUxifEtDvedj8l+V2wFVjThw
6aYQDmzFj1fin7G7e0cUCn55PBU8bDolkw4l+5A25qY
-> ssh-ed25519 UFfTmg Dfm/r13wimRQT2hQSWKhyr14BZliLrLGn/sZq3G3yTY
qzZLiowHu+HnSY31yXBOFPEYn2lJSJ5MyWvKSe2QZcI
-> ssh-ed25519 xNtnoA AltIha0Z9BqZY4V8LOzCcr5KPWAvoNoyktReER3Glgs
ac51BT1NGldAn6N/s7KEkNrRLhmntwx09SguGdZRR5o
-> ssh-ed25519 aY2AXA EmE9Bjzme13LSSMZDnJsPFvpXGamtc/H3DOziP+d+Cg
VN5z1+EzLF6N232QwkO5TT5Kf9NpoPDL2T50qCpCfgc
-> ssh-ed25519 AQhf1g Z3Ezie7ikLb/8u+iNALI8x327lFqLN1NRIqHLfjqNFs
QQDDH6Dio4zc0FCsLDRWl3ywaEdkp4zwGG+Iaegmi3I
-> ssh-ed25519 mOmPfg mSW3OSIm9/8myqUxEJlsf0LT7vCO9i6/D3WkWKCD7l4
U6TkEVyzxnb+9B2wLeEkQ4g6w5s31Q30/Q4ehQplf3c
-> ssh-ed25519 YJiRbw Gs9VBwzEPr1QA1PcaQUCUwS+jwXYVniqe5TaZBjrJmQ
rFS24MN8bzA+vj6/sJHuEC4yYglpf0OJT0GgUVm0HTs
-> ssh-ed25519 0/WsKg MbcckXyUg5JfGafnhidk4dH6mEuhZOPac4YncYeYOR4
oeFwgCrjDPauQSCgE1Q1/Smz6SI44TVfuNH0oP9WcdM
-> ssh-ed25519 Nl/5yA 9xL4/5nxpciN9HFFO/X3xQ1oMe+EvLohnI6631amwhw
n4As363EPOxuzN5f5RNuUrlEDFgmhVvjtEosQKTPVII
-> ssh-ed25519 GdLgCQ P+jwMHdoS74jIdGQjOx4sDngWs+zxNpnzSgrDXD7Vkk
NuGd8agrw/8PT+dw9RirCYATZRPnF5rKDSfyDaJ17iw
-> ssh-ed25519 tOH/HQ u7gM8oYWpfFFW54TqoisGDEeX5MKxaVxT+ozl4miF0I
avmdzbzCSDv4ovYMMmqx//G5FVEuz+hOJpr9/49w1Rk
-> ssh-ed25519 FpzvfQ 3bDfVBMNavjfMFaKO8C5VvXiDMQxfB4WYp9mJ1LnIQI
bl1KwNL5M8gJlqE/R5/lY7UlLOgeftiwinyC8yDb71A
-> ssh-ed25519 kdPvzQ 2Y9lCbnjBhF3N0BTzhBqxJ/NDe7Z9/Vpkd8bbL29D0k
pL4VMb6jnQv4bwt5SjcORlTWsvSWOhTNZXNYEkCZH5E
-> ssh-ed25519 onmXpg 2Nw16oXRct8XDRqs6TRiOK6tBk9kNZcR2VDLy9GvOkM
N95+6Ia9lpbKenojMDDAuLrT4cqjENsWzrwplcBKiUs
-> ssh-ed25519 CnhD0g j7udTMCoQHrqYnH/mxGgRzor7RaTm2HjaSwuoVQqCGw
ivg32RGKKCqe2yBjq58ym8shWlrYNfcvuK7xy1F2mmg
-> ssh-ed25519 4ep2UA bBdPC5asgGcu60Y/i0yVKvAQc9U+7Jruik0xT8rDUA0
ul6uiMBstdXVVmuIpgsZPSt6MQiyklPGYSbxOTLndeQ
--- 5mAFqAG9hgU00QxYRKkhNl3fJ1KwDevvTnUhf0xYUog
TW" ȧ]h|nÁdÇ„Œô¡QFWv¬à©»®¨oµiÅZÂSŸŽ‡ÑG–í`|Д "¬ó8n}:Î:ú6”
-37
View File
@@ -1,37 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 87huqg KMaYb+ubBiCqBKr08lmrIhiuNcvH/WnnEDYYvdgnvgk
lJM8dGwT3LYvI9NtPZOzY94bFhk6sxO6F4NCMJBDBuA
-> ssh-ed25519 8UnW5Q rUXfXe6S1jgTfJJGhT3NfIGhvYaf4aUAuD7wAa5GaxU
OCe5kE+IM1MHqMPfLpgO5spYxDm1SDp5euubLkOF6K4
-> ssh-ed25519 UFfTmg 8ZIBc9wr/hoQE/ItltZhSbqlZ3qEQMyLajy0cORbOQo
DocUbgXT5m8CgExF1ICAJv+Nu4rBogwaYz5vJKNRQhs
-> ssh-ed25519 xNtnoA x0uU0K78XzA9yYXg+jR6MIJASRxsJ9eMZctm276tP08
SGZYFFkfbQpLVqV9OUQMMbOmv+0qNS3bO7IkWWjqohE
-> ssh-ed25519 aY2AXA D5xP6cDYNLUsGeLgLO2x2gkBzfPByR58G2PjjGs/rxA
wiqNVVjyQPnZop7q0PXmOOw7cJr8WKQVl1mk7zL+/cM
-> ssh-ed25519 AQhf1g MJuVLCVIdZ7fKnXVvtJvSLriX1Q+2u20Y+aNI7N75hM
EocXr6NlaanErb3Nmc9R+3DSdfoCAyHa5gDYzBX+xJk
-> ssh-ed25519 mOmPfg wbQrmVm8CEeAHpJIjCyFI7Mfhn3i9bER7FppanAneTQ
jAvjziCLYUl//6ZlZ5d3gE1ONRjhEnPLTabvTJEhFg4
-> ssh-ed25519 YJiRbw 6ZAb7+mWKPCkYZrpcW1g1JoL9Q72rWwLIEZJtPx4ayY
WtKeYr7wxCVisATDyejwnasFcVRtGa175wJoXNzhyKk
-> ssh-ed25519 0/WsKg yyQBUeYAFIJUuH6xsMYztjO8zeswUWFCgqiNoMqxijY
y5azJJfyU9NgyY8kuIoWRfY1kMJUzgxx8UtqJ3XBNvI
-> ssh-ed25519 Nl/5yA Ffb3McX/NVo56cJXA51n9yrpeSTvD5/0S9n7ObeYrXA
Wg1EhU0nk/Wh3Jf3+LY6dVLXBNbAM8miuC8gYdabIwY
-> ssh-ed25519 GdLgCQ x/k3xO9fHAPFeOdeAwgWVNqWtU9u6RVXXNUnhUXk1B8
aNeOSmnUILJTjof6+7sN8h2zA+pqBmU6cpmD81xcmtw
-> ssh-ed25519 tOH/HQ ZEBu38T0q6tZkZSZIbGc3Kn9acTGqSbquPC6xlXt90o
LPvS9dVaPUiE5nxVV8LsAjfRdyKBNmCwGTxOcyCxWMA
-> ssh-ed25519 FpzvfQ iU+7myrJIbc+xbVZf7OxGSBy7Vq+FqItVYECvrvV7V4
YkMvBRDnkGf+zznWTVSbFbR/2BaqOT1ja7piiyRL+uM
-> ssh-ed25519 kdPvzQ cuzIgrPaJK1SY4soXT2lQkF8Ji7GZq+ihH2vYmbyDXY
E7cA3PDHBsqm7Z9SbflHXQXMzv7B0uxYR4UQv9NHZ70
-> ssh-ed25519 onmXpg aNcwAfrg7CfnC9Whp/qjikADbZzeSVM0m+kLkjExg1A
1RWx1F4Q6zA91UHxBmvuxqABv+mZZwNayAVAz0EqGQg
-> ssh-ed25519 CnhD0g LrFzQX5UKZAizqYkDCT/k6CWdFZYFqPguyLjgfcfQ2U
O7Ta5mpAcLI2XswerqtW2fC0evmy/gdSQqLgW7L99zo
-> ssh-ed25519 4ep2UA 8B0v6mE+hB0iKaZNrkvdlI4E2y4lWNR4zJ8oJS75jR0
l5M6WSWKGuHMCiL5V5PCyDfFCElGNmR5UIkXRivSl5Y
--- 1PM/nhbi3rtn26S1rtNwUT97plbJJvHOmPNzIYAsK4w
W'SàeÚäß>pÎ_­Çª´vcHN›×9¥Å¡àè 6L,_ž[3Ì _ìaØí¬¤Õ¦‚>¶¯D0Þ„lô‡F4.Ó’‰µ5±:úà0ò±É
Binary file not shown.
-37
View File
@@ -1,37 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 87huqg 3CNYW4sCTBsHWQaRdsyRomLXQ5V9jjzV+V9vHcKtqjc
ZjGxC8Fqddlzmdd4uZxQWs9aAut+COJ9zWXZFQvRdG8
-> ssh-ed25519 8UnW5Q rgmZ4hwUDXX8VdQQWxZn5NO70j4IuJ1l9aD6uXjAWiE
SfmW+u09bGEP164j1awAoGpvchg9UZS7tgtSdLeepB8
-> ssh-ed25519 UFfTmg MPZCtrzXXzusawPkfZ+fBWepH7MZihKXlz9ztfp/bBU
RkLU9HPTJjyiaRczJU3sYMT0RT+oSvL3TozGRxOZM6s
-> ssh-ed25519 xNtnoA HqhyTh67Yww4wHVR9i5+K7388nvAYwkPr1T95Sn3WDk
entg7nxJXWqq+N0LMUwv+psL+O6ivZjnGo+KbgKthxM
-> ssh-ed25519 aY2AXA XTpM0SssYVVEtnWPCfooazXvVccdO4IX+Zmp7dxoDUY
mz6v4rzOpLT4fu+XYC5BwkXndNoBbEpazUt2wh0tutk
-> ssh-ed25519 AQhf1g bUAsCyBen89j8JqUV3qAVTZ5QrxluYOmUO7D68Sd50k
14ebyL+xFEK8NMBzxAArVaxCPZwBPLNBLdalC9TGB/I
-> ssh-ed25519 mOmPfg Mv+p2kGC4PunQGSVD28emoEDra/ohZHK/xxTQVhafTM
gUrUjDQCxMfgcjWkbGWmi1A2GF5X07pUKdZuuaXWdcE
-> ssh-ed25519 YJiRbw 0jxrJSU71zCnF1bDUieGOsc/TAeR9gv/1ks2kPN2sD0
yho+rheLys+ET7uKrrlsljQZQ8VuUnzg5eUj7gVMgAk
-> ssh-ed25519 0/WsKg yxsm0H6tRCron9th/e9KfX+zFl5T3DH0/B602ak0s28
kkmfbZ1SyXLJxlM/EeBRJEf0Rb+15w3nXZEZ35xuCug
-> ssh-ed25519 Nl/5yA IoFwKIz+jrNUm4PB3wX5okeqtPKANPP+/lcZaJ+mZ00
0ChPqTpzLCCz7die5lgOnO+Yz8JQIqjTX5oLwXv/IbU
-> ssh-ed25519 GdLgCQ Fo9YJGiJMTpnhRQKd2cQ7XfQXLvOQ8+V5rlZvqOhWgQ
Lhie4dV3210DbNvbkBWFStgycrH3xgE3tt5PYF0OjEU
-> ssh-ed25519 tOH/HQ 7BXNJ/wYMc9HIswKCTkXQF42UXKXCCqcD7/RQINx5g0
G2HbqhnEuoCGmuowye/EWQJ1UWojp1cFLoyu6b5AaGA
-> ssh-ed25519 FpzvfQ l5jORObNye/4CGt9D0pkP7CAqhWZPPlEhCSmuc5JxVE
5P/S8vQEzlYgXcM+TxlQnlyO6fK0lUkxBElfTZ8dR14
-> ssh-ed25519 kdPvzQ rbwguFPeDqBJye6fzNAR+zqo3vA13o8VBqTDMtq/xF0
0wjGYDkSgeB1H4GvjFfM5HIxCFs1s6R/6US0TFv/o0I
-> ssh-ed25519 onmXpg GB5Hi8wAOxRaoyzcDuHK96+JNd/zfBdmR6oJdpYkmi8
svDcX5tYRR8IzuQi36TpxqKu/vKiDj290e1Hx/RoBAs
-> ssh-ed25519 CnhD0g 4vM1+uQTV/dYAbYP7Nsj9DZFjFVc1yFqNzKxWyz1OWQ
G7ifv77YIefxMqK1vSEzxPCxQaf8Sd2cdpyoy3DxGZg
-> ssh-ed25519 4ep2UA V+2q8xrX8eAQzuNV8Se/BUtut4EbkRsy/svnbRVO1TM
WYJTqLxIqFC3a4z3UtMp4z7CAXEZ2NJUGzxftIvgoeQ
--- t27r1Bedv2MW11oCtfWXl0ijG9/aiiWMdEbgymIqdSY
§66^¹‹§ÌVUÃuï6°â$ ÜQ[a²UW*©Ò&s9Iª23HœR÷ÖOJŠüÒ§É)CXeRýŽXi¾6yØB:b<tWÓ­¹nÀ>\+ûî
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More