Compare commits
No commits in common. "main" and "#85-test-forgejo" have entirely different histories.
main
...
#85-test-f
55 changed files with 1172 additions and 889 deletions
|
@ -6,8 +6,6 @@ on:
|
||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
push:
|
push:
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
paths:
|
paths:
|
||||||
- applications/**/*
|
- applications/**/*
|
||||||
- machines/**/*
|
- machines/**/*
|
||||||
|
@ -22,22 +20,18 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- run: nix fmt -- --check .
|
- run: nix fmt -- --check .
|
||||||
- run: nix --version
|
|
||||||
|
|
||||||
#if: github.repository == 'Skynet/nixos'
|
#if: github.repository == 'Skynet/nixos'
|
||||||
build:
|
build:
|
||||||
runs-on: nix
|
runs-on: nix
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- run: nix develop -v
|
- run: nix develop
|
||||||
# - name: Archive Test Results
|
- run: colmena build -v --on @active-dns
|
||||||
# if: always()
|
- run: colmena build -v --on @active-core
|
||||||
# run: sleep 100m
|
- run: colmena build -v --on @active
|
||||||
# - run: colmena build -v --on @active-dns
|
- run: colmena build -v --on @active-ext
|
||||||
# - run: colmena build -v --on @active-core
|
- run: colmena build -v --on @active-gitlab
|
||||||
# - run: colmena build -v --on @active
|
|
||||||
# - run: colmena build -v --on @active-ext
|
|
||||||
# - run: colmena build -v --on @active-gitlab
|
|
||||||
|
|
||||||
deploy_dns:
|
deploy_dns:
|
||||||
runs-on: nix
|
runs-on: nix
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
name: Update_Forgejo
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
runs-on: nix
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- run: colmena apply -v --on @active-gitlab --show-trace
|
|
||||||
shell: bash
|
|
|
@ -1,13 +1,11 @@
|
||||||
name: Update_Flake
|
name: Update_Flake
|
||||||
|
|
||||||
run-name: "[Update Flake] ${{ inputs.input_to_update }}"
|
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
input_to_update:
|
input_to_update:
|
||||||
description: 'Flake input to update'
|
description: 'Flake input to update'
|
||||||
required: false
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -24,7 +22,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
token: ${{ secrets.PIPELINE_TOKEN }}
|
token: ${{ secrets.PIPELINE_TOKEN }}
|
||||||
- run: nix flake update ${{ inputs.input_to_update }}
|
- run: nix flake lock --update-input "${{ inputs.input_to_update }}"
|
||||||
shell: bash
|
shell: bash
|
||||||
- uses: https://github.com/stefanzweifel/git-auto-commit-action@v5
|
- uses: https://github.com/stefanzweifel/git-auto-commit-action@v5
|
||||||
with:
|
with:
|
||||||
|
|
|
@ -42,4 +42,3 @@ SKYNET_FIREWALL_00030,Add,i24-06-04_017,Complete,193.1.99.83,SKYNET00020,193.1.9
|
||||||
SKYNET_FIREWALL_00031,Add,i24-06-04_017,Complete,All,-,193.1.99.83,SKYNET00020,"80, 443",-,Web interface for Metrics server
|
SKYNET_FIREWALL_00031,Add,i24-06-04_017,Complete,All,-,193.1.99.83,SKYNET00020,"80, 443",-,Web interface for Metrics server
|
||||||
SKYNET_FIREWALL_00032,Remove,i24-06-04_017,Complete,All,-,193.1.99.90,SKYNET00016,8080,-,Had incorrectly opened 8080 on the main panel
|
SKYNET_FIREWALL_00032,Remove,i24-06-04_017,Complete,All,-,193.1.99.90,SKYNET00016,8080,-,Had incorrectly opened 8080 on the main panel
|
||||||
SKYNET_FIREWALL_00033,Add,i24-06-04_017,Complete,All,-,193.1.99.91,SKYNET00017,8080,-,Websocket for admin panel on games management server
|
SKYNET_FIREWALL_00033,Add,i24-06-04_017,Complete,All,-,193.1.99.91,SKYNET00017,8080,-,Websocket for admin panel on games management server
|
||||||
,Add,i24-07-15_112,Denied,193.1.99.75,-,-,-,22,-,Response from ITD - 'Our IT Security team have advised that port 22 and port 2222 are only to be allowed through the VPN and will not be opened to allow inbound ssh connections directly from the internet'
|
|
|
|
@ -19,4 +19,3 @@ SKYNET00017,bumblebee,Active,193.1.99.91,Debian-12,Game server - Minecraft
|
||||||
SKYNET00018,calculon,Active,193.1.99.82,Nixos-24.05,"Public Services such as binary cache, Open Governance and Keyserver"
|
SKYNET00018,calculon,Active,193.1.99.82,Nixos-24.05,"Public Services such as binary cache, Open Governance and Keyserver"
|
||||||
SKYNET00019,deepthought,Active,193.1.99.112,Nixos-24.05,Backup Test Server using restic
|
SKYNET00019,deepthought,Active,193.1.99.112,Nixos-24.05,Backup Test Server using restic
|
||||||
SKYNET00020,ariia,Active,193.1.99.83,Nixos-24.05,"Metrics, Grafana and Prometheus"
|
SKYNET00020,ariia,Active,193.1.99.83,Nixos-24.05,"Metrics, Grafana and Prometheus"
|
||||||
SKYNET00021,ash,Active,193.1.99.114,NA,Server Room Network access
|
|
|
9
LICENSE
9
LICENSE
|
@ -1,9 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024 Skynet
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -32,9 +32,9 @@ in {
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
email = "admin_acme@skynet.ie";
|
email = "admin_acme@skynet.ie";
|
||||||
credentialsFile = config.age.secrets.acme.path;
|
|
||||||
# we use our own dns authorative server for verifying we own the domain.
|
# we use our own dns authorative server for verifying we own the domain.
|
||||||
dnsProvider = "rfc2136";
|
dnsProvider = "rfc2136";
|
||||||
|
credentialsFile = config.age.secrets.acme.path;
|
||||||
};
|
};
|
||||||
|
|
||||||
certs = {
|
certs = {
|
||||||
|
|
324
applications/bitwarden/bitwarden-directory-connector-cli.nix
Normal file
324
applications/bitwarden/bitwarden-directory-connector-cli.nix
Normal file
|
@ -0,0 +1,324 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.services.bitwarden-directory-connector-cli;
|
||||||
|
in {
|
||||||
|
disabledModules = ["services/security/bitwarden-directory-connector-cli.nix"];
|
||||||
|
|
||||||
|
options.services.bitwarden-directory-connector-cli = {
|
||||||
|
enable = mkEnableOption "Bitwarden Directory Connector";
|
||||||
|
|
||||||
|
package = mkPackageOption pkgs "bitwarden-directory-connector-cli" {};
|
||||||
|
|
||||||
|
domain = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "The domain the Bitwarden/Vaultwarden is accessible on.";
|
||||||
|
example = "https://vaultwarden.example.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "User to run the program.";
|
||||||
|
default = "bwdc";
|
||||||
|
};
|
||||||
|
|
||||||
|
interval = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "*:0,15,30,45";
|
||||||
|
description = lib.mdDoc "The interval when to run the connector. This uses systemd's OnCalendar syntax.";
|
||||||
|
};
|
||||||
|
|
||||||
|
ldap = mkOption {
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Options to configure the LDAP connection.
|
||||||
|
If you used the desktop application to test the configuration you can find the settings by searching for `ldap` in `~/.config/Bitwarden\ Directory\ Connector/data.json`.
|
||||||
|
'';
|
||||||
|
default = {};
|
||||||
|
type = types.submodule ({
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
freeformType = types.attrsOf (pkgs.formats.json {}).type;
|
||||||
|
|
||||||
|
config.finalJSON = builtins.toJSON (removeAttrs config (filter (x: x == "finalJSON" || ! options.${x}.isDefined or false) (attrNames options)));
|
||||||
|
|
||||||
|
options = {
|
||||||
|
finalJSON = mkOption {
|
||||||
|
type = (pkgs.formats.json {}).type;
|
||||||
|
internal = true;
|
||||||
|
readOnly = true;
|
||||||
|
visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ssl = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Whether to use TLS.";
|
||||||
|
};
|
||||||
|
startTls = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Whether to use STARTTLS.";
|
||||||
|
};
|
||||||
|
|
||||||
|
hostname = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "The host the LDAP is accessible on.";
|
||||||
|
example = "ldap.example.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 389;
|
||||||
|
description = lib.mdDoc "Port LDAP is accessible on.";
|
||||||
|
};
|
||||||
|
|
||||||
|
ad = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Whether the LDAP Server is an Active Directory.";
|
||||||
|
};
|
||||||
|
|
||||||
|
pagedSearch = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Whether the LDAP server paginates search results.";
|
||||||
|
};
|
||||||
|
|
||||||
|
rootPath = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Root path for LDAP.";
|
||||||
|
example = "dc=example,dc=com";
|
||||||
|
};
|
||||||
|
|
||||||
|
username = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "The user to authenticate as.";
|
||||||
|
example = "cn=admin,dc=example,dc=com";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
sync = mkOption {
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Options to configure what gets synced.
|
||||||
|
If you used the desktop application to test the configuration you can find the settings by searching for `sync` in `~/.config/Bitwarden\ Directory\ Connector/data.json`.
|
||||||
|
'';
|
||||||
|
default = {};
|
||||||
|
type = types.submodule ({
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
freeformType = types.attrsOf (pkgs.formats.json {}).type;
|
||||||
|
|
||||||
|
config.finalJSON = builtins.toJSON (removeAttrs config (filter (x: x == "finalJSON" || ! options.${x}.isDefined or false) (attrNames options)));
|
||||||
|
|
||||||
|
options = {
|
||||||
|
finalJSON = mkOption {
|
||||||
|
type = (pkgs.formats.json {}).type;
|
||||||
|
internal = true;
|
||||||
|
readOnly = true;
|
||||||
|
visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
removeDisabled = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = lib.mdDoc "Remove users from bitwarden groups if no longer in the ldap group.";
|
||||||
|
};
|
||||||
|
|
||||||
|
overwriteExisting = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description =
|
||||||
|
lib.mdDoc "Remove and re-add users/groups, See https://bitwarden.com/help/user-group-filters/#overwriting-syncs for more details.";
|
||||||
|
};
|
||||||
|
|
||||||
|
largeImport = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Enable if you are syncing more than 2000 users/groups.";
|
||||||
|
};
|
||||||
|
|
||||||
|
memberAttribute = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Attribute that lists members in a LDAP group.";
|
||||||
|
example = "uniqueMember";
|
||||||
|
};
|
||||||
|
|
||||||
|
creationDateAttribute = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Attribute that lists a user's creation date.";
|
||||||
|
example = "whenCreated";
|
||||||
|
};
|
||||||
|
|
||||||
|
useEmailPrefixSuffix = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "If a user has no email address, combine a username prefix with a suffix value to form an email.";
|
||||||
|
};
|
||||||
|
emailPrefixAttribute = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "The attribute that contains the users username.";
|
||||||
|
example = "accountName";
|
||||||
|
};
|
||||||
|
emailSuffix = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Suffix for the email, normally @example.com.";
|
||||||
|
example = "@example.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
users = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Sync users.";
|
||||||
|
};
|
||||||
|
userPath = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "User directory, relative to root.";
|
||||||
|
default = "ou=users";
|
||||||
|
};
|
||||||
|
userObjectClass = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Class that users must have.";
|
||||||
|
default = "inetOrgPerson";
|
||||||
|
};
|
||||||
|
userEmailAttribute = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Attribute for a users email.";
|
||||||
|
default = "mail";
|
||||||
|
};
|
||||||
|
userFilter = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "LDAP filter for users.";
|
||||||
|
example = "(memberOf=cn=sales,ou=groups,dc=example,dc=com)";
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
groups = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = lib.mdDoc "Whether to sync ldap groups into BitWarden.";
|
||||||
|
};
|
||||||
|
groupPath = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Group directory, relative to root.";
|
||||||
|
default = "ou=groups";
|
||||||
|
};
|
||||||
|
groupObjectClass = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "A class that groups will have.";
|
||||||
|
default = "groupOfNames";
|
||||||
|
};
|
||||||
|
groupNameAttribute = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "Attribute for a name of group.";
|
||||||
|
default = "cn";
|
||||||
|
};
|
||||||
|
groupFilter = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = lib.mdDoc "LDAP filter for groups.";
|
||||||
|
example = "(cn=sales)";
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
secrets = {
|
||||||
|
ldap = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Path to file that contains LDAP password for user in {option}`ldap.username";
|
||||||
|
};
|
||||||
|
|
||||||
|
bitwarden = {
|
||||||
|
client_path_id = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Path to file that contains Client ID.";
|
||||||
|
};
|
||||||
|
client_path_secret = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Path to file that contains Client Secret.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.groups."${cfg.user}" = {};
|
||||||
|
users.users."${cfg.user}" = {
|
||||||
|
isSystemUser = true;
|
||||||
|
group = cfg.user;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
timers.bitwarden-directory-connector-cli = {
|
||||||
|
description = "Sync timer for Bitwarden Directory Connector";
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
after = ["network-online.target"];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = cfg.interval;
|
||||||
|
Unit = "bitwarden-directory-connector-cli.service";
|
||||||
|
Persistent = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.bitwarden-directory-connector-cli = {
|
||||||
|
description = "Main process for Bitwarden Directory Connector";
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
BITWARDENCLI_CONNECTOR_APPDATA_DIR = "/tmp";
|
||||||
|
BITWARDENCLI_CONNECTOR_PLAINTEXT_SECRETS = "true";
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = "${cfg.user}";
|
||||||
|
PrivateTmp = true;
|
||||||
|
ExecStartPre = pkgs.writeShellScript "bitwarden_directory_connector-config" ''
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
${lib.getExe cfg.package} data-file
|
||||||
|
touch /tmp/data.json.tmp
|
||||||
|
chmod 600 /tmp/data.json{,.tmp}
|
||||||
|
|
||||||
|
${lib.getExe cfg.package} config server ${cfg.domain}
|
||||||
|
|
||||||
|
# now login to set credentials
|
||||||
|
export BW_CLIENTID="$(< ${escapeShellArg cfg.secrets.bitwarden.client_path_id})"
|
||||||
|
export BW_CLIENTSECRET="$(< ${escapeShellArg cfg.secrets.bitwarden.client_path_secret})"
|
||||||
|
${lib.getExe cfg.package} login
|
||||||
|
|
||||||
|
${lib.getExe pkgs.jq} '.authenticatedAccounts[0] as $account
|
||||||
|
| .[$account].directoryConfigurations.ldap |= $ldap_data
|
||||||
|
| .[$account].directorySettings.organizationId |= $orgID
|
||||||
|
| .[$account].directorySettings.sync |= $sync_data' \
|
||||||
|
--argjson ldap_data ${escapeShellArg cfg.ldap.finalJSON} \
|
||||||
|
--arg orgID "''${BW_CLIENTID//organization.}" \
|
||||||
|
--argjson sync_data ${escapeShellArg cfg.sync.finalJSON} \
|
||||||
|
/tmp/data.json \
|
||||||
|
> /tmp/data.json.tmp
|
||||||
|
|
||||||
|
mv -f /tmp/data.json.tmp /tmp/data.json
|
||||||
|
|
||||||
|
# final config
|
||||||
|
${lib.getExe cfg.package} config directory 0
|
||||||
|
${lib.getExe cfg.package} config ldap.password --secretfile ${cfg.secrets.ldap}
|
||||||
|
'';
|
||||||
|
|
||||||
|
ExecStart = "${lib.getExe cfg.package} sync";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.maintainers = with maintainers; [Silver-Golden];
|
||||||
|
}
|
|
@ -6,7 +6,9 @@
|
||||||
}: let
|
}: let
|
||||||
user = "bwdc";
|
user = "bwdc";
|
||||||
in {
|
in {
|
||||||
imports = [];
|
imports = [
|
||||||
|
./bitwarden-directory-connector-cli.nix
|
||||||
|
];
|
||||||
|
|
||||||
options = {};
|
options = {};
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ in {
|
||||||
#backups = [ "/etc/silver_ul_ical/database.db" ];
|
#backups = [ "/etc/silver_ul_ical/database.db" ];
|
||||||
|
|
||||||
age.secrets.discord_token.file = ../secrets/discord/token.age;
|
age.secrets.discord_token.file = ../secrets/discord/token.age;
|
||||||
|
age.secrets.discord_ldap.file = ../secrets/discord/ldap.age;
|
||||||
age.secrets.discord_mail.file = ../secrets/email/details.age;
|
age.secrets.discord_mail.file = ../secrets/email/details.age;
|
||||||
age.secrets.discord_wolves.file = ../secrets/wolves/details.age;
|
age.secrets.discord_wolves.file = ../secrets/wolves/details.age;
|
||||||
|
|
||||||
|
@ -30,9 +31,12 @@ in {
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
discord = config.age.secrets.discord_token.path;
|
discord = config.age.secrets.discord_token.path;
|
||||||
|
ldap = config.age.secrets.discord_ldap.path;
|
||||||
mail = config.age.secrets.discord_mail.path;
|
mail = config.age.secrets.discord_mail.path;
|
||||||
wolves = config.age.secrets.discord_wolves.path;
|
wolves = config.age.secrets.discord_wolves.path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
discord.server = "689189992417067052";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,14 +13,11 @@
|
||||||
current_date = self.lastModified;
|
current_date = self.lastModified;
|
||||||
|
|
||||||
# this gets a list of all domains we have records for
|
# this gets a list of all domains we have records for
|
||||||
domains = lib.lists.naturalSort (lib.lists.unique (
|
domains = lib.lists.naturalSort (
|
||||||
|
lib.lists.unique (
|
||||||
lib.lists.forEach records (x: x.domain)
|
lib.lists.forEach records (x: x.domain)
|
||||||
));
|
)
|
||||||
|
);
|
||||||
# get the ip's of our servers
|
|
||||||
servers = lib.lists.naturalSort (lib.lists.unique (
|
|
||||||
lib.lists.forEach (sort_records_a_server records) (x: x.value)
|
|
||||||
));
|
|
||||||
|
|
||||||
domains_owned = [
|
domains_owned = [
|
||||||
# for historic reasons we own this
|
# for historic reasons we own this
|
||||||
|
@ -33,12 +30,9 @@
|
||||||
|
|
||||||
# gets a list of records that match this type
|
# gets a list of records that match this type
|
||||||
filter_records_type = records: r_type: builtins.filter (x: x.r_type == r_type) records;
|
filter_records_type = records: r_type: builtins.filter (x: x.r_type == r_type) records;
|
||||||
# Get all the A records that are for servers (base record for them)
|
filter_records_server = records: builtins.filter (x: builtins.hasAttr "server" x && x.server) (filter_records_type records "A");
|
||||||
filter_records_a_server = records: builtins.filter (x: builtins.hasAttr "server" x && x.server) (filter_records_type records "A");
|
|
||||||
# Every other A record
|
|
||||||
filter_records_a = records: builtins.filter (x: builtins.hasAttr "server" x && !x.server) (filter_records_type records "A");
|
filter_records_a = records: builtins.filter (x: builtins.hasAttr "server" x && !x.server) (filter_records_type records "A");
|
||||||
|
|
||||||
# These functions are to get the final 3 digits of an IP address so we can use them for reverse pointer
|
|
||||||
process_ptr = records: lib.lists.forEach records (x: process_ptr_sub x);
|
process_ptr = records: lib.lists.forEach records (x: process_ptr_sub x);
|
||||||
process_ptr_sub = record: {
|
process_ptr_sub = record: {
|
||||||
record = builtins.substring 9 3 record.record;
|
record = builtins.substring 9 3 record.record;
|
||||||
|
@ -47,49 +41,39 @@
|
||||||
};
|
};
|
||||||
ip_ptr_to_int = ip: lib.strings.toInt (builtins.substring 9 3 ip);
|
ip_ptr_to_int = ip: lib.strings.toInt (builtins.substring 9 3 ip);
|
||||||
|
|
||||||
# filter and sort records so we cna group them in the right place later
|
sort_records_server = records: builtins.sort (a: b: a.record < b.record) (filter_records_server records);
|
||||||
sort_records_a_server = records: builtins.sort (a: b: a.record < b.record) (filter_records_a_server records);
|
|
||||||
sort_records_a = records: builtins.sort (a: b: (ip_ptr_to_int a.value) < (ip_ptr_to_int b.value)) (filter_records_a records);
|
sort_records_a = records: builtins.sort (a: b: (ip_ptr_to_int a.value) < (ip_ptr_to_int b.value)) (filter_records_a records);
|
||||||
sort_records_cname = records: builtins.sort (a: b: a.value < b.value) (filter_records_type records "CNAME");
|
sort_records_cname = records: builtins.sort (a: b: a.value < b.value) (filter_records_type records "CNAME");
|
||||||
sort_records_ptr = records: builtins.sort (a: b: (lib.strings.toInt a.record) < (lib.strings.toInt b.record)) (process_ptr (filter_records_type records "PTR"));
|
sort_records_ptr = records: builtins.sort (a: b: (lib.strings.toInt a.record) < (lib.strings.toInt b.record)) (process_ptr (filter_records_type records "PTR"));
|
||||||
sort_records_srv = records: builtins.sort (a: b: a.record < b.record) (filter_records_type records "SRV");
|
sort_records_srv = records: builtins.sort (a: b: a.record < b.record) (filter_records_type records "SRV");
|
||||||
|
|
||||||
# a tad overkill but type guarding is useful
|
|
||||||
max = x: y:
|
max = x: y:
|
||||||
assert builtins.isInt x;
|
assert builtins.isInt x;
|
||||||
assert builtins.isInt y;
|
assert builtins.isInt y;
|
||||||
if x < y
|
if x < y
|
||||||
then y
|
then y
|
||||||
else x;
|
else x;
|
||||||
|
|
||||||
# get teh max length of a list of strings
|
|
||||||
max_len = records: lib.lists.foldr (a: b: (max a b)) 0 (lib.lists.forEach records (record: lib.strings.stringLength record.record));
|
max_len = records: lib.lists.foldr (a: b: (max a b)) 0 (lib.lists.forEach records (record: lib.strings.stringLength record.record));
|
||||||
|
|
||||||
# Now that we can get teh max lenth of a list of strings
|
|
||||||
# we can pad it out to the max len +1
|
|
||||||
# this is so that teh generated file is easier for a human to read
|
|
||||||
format_records = records: let
|
format_records = records: let
|
||||||
offset = (max_len records) + 1;
|
offset = (max_len records) + 1;
|
||||||
in
|
in
|
||||||
lib.strings.concatMapStrings (x: "${padString x.record offset} IN ${padString x.r_type 5} ${x.value}\n") records;
|
lib.strings.concatMapStrings (x: "${padString x.record offset} IN ${padString x.r_type 5} ${x.value}\n") records;
|
||||||
|
|
||||||
# small function to add spaces until it reaches teh required length
|
# small function to trim it down a tad
|
||||||
padString = text: length: fixedWidthString_post length " " text;
|
padString = text: length: fixedWidthString_post length " " text;
|
||||||
|
|
||||||
# like lib.strings.fixedWidthString but postfix
|
# like lib.strings.fixedWidthString but postfix
|
||||||
# recursive function to extend a string up to a limit
|
|
||||||
fixedWidthString_post = width: filler: str: let
|
fixedWidthString_post = width: filler: str: let
|
||||||
strw = lib.stringLength str;
|
strw = lib.stringLength str;
|
||||||
reqWidth = width - (lib.stringLength filler);
|
reqWidth = width - (lib.stringLength filler);
|
||||||
in
|
in
|
||||||
# this is here because we were manually setting teh length, now max_len does that for us
|
|
||||||
assert lib.assertMsg (strw <= width) "fixedWidthString_post: requested string length (${toString width}) must not be shorter than actual length (${toString strw})";
|
assert lib.assertMsg (strw <= width) "fixedWidthString_post: requested string length (${toString width}) must not be shorter than actual length (${toString strw})";
|
||||||
if strw == width
|
if strw == width
|
||||||
then str
|
then str
|
||||||
else (fixedWidthString_post reqWidth filler str) + filler;
|
else (fixedWidthString_post reqWidth filler str) + filler;
|
||||||
|
|
||||||
# base config for domains we own (skynet.ie, csn.ul.ie, ulcompsoc.ie)
|
# base config for domains we own (skynet.ie, csn.ul.ie, ulcompsoc.ie)
|
||||||
# ";" are comments in this file
|
|
||||||
get_config_file = (
|
get_config_file = (
|
||||||
domain: records: ''
|
domain: records: ''
|
||||||
$TTL 60 ; 1 minute
|
$TTL 60 ; 1 minute
|
||||||
|
@ -110,7 +94,7 @@
|
||||||
; ------------------------------------------
|
; ------------------------------------------
|
||||||
; Server Names (A Records)
|
; Server Names (A Records)
|
||||||
; ------------------------------------------
|
; ------------------------------------------
|
||||||
${format_records (sort_records_a_server records)}
|
${format_records (sort_records_server records)}
|
||||||
|
|
||||||
; ------------------------------------------
|
; ------------------------------------------
|
||||||
; A (non server names
|
; A (non server names
|
||||||
|
@ -136,6 +120,8 @@
|
||||||
; SRV
|
; SRV
|
||||||
; ------------------------------------------
|
; ------------------------------------------
|
||||||
${format_records (sort_records_srv records)}
|
${format_records (sort_records_srv records)}
|
||||||
|
|
||||||
|
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -165,33 +151,31 @@
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
|
||||||
# arrays of teh two nameservers
|
# arrys of teh two nameservers
|
||||||
nameserver_1 = ["193.1.99.109"];
|
tmp1 = ["193.1.99.109"];
|
||||||
nameserver_2 = ["193.1.99.120"];
|
tmp2 = ["193.1.99.120"];
|
||||||
|
|
||||||
primaries = (
|
primaries = (
|
||||||
if cfg.server.primary
|
if cfg.server.primary
|
||||||
then
|
then
|
||||||
# primary servers have no primaries (ones they listen to)
|
# primary servers have no primaries (ones they listen to)
|
||||||
[]
|
[]
|
||||||
else if builtins.elem cfg.server.ip nameserver_1
|
else if builtins.elem cfg.server.ip tmp1
|
||||||
then nameserver_2
|
then tmp2
|
||||||
else nameserver_1
|
else tmp1
|
||||||
);
|
);
|
||||||
|
|
||||||
secondaries = (
|
secondaries = (
|
||||||
if cfg.server.primary
|
if cfg.server.primary
|
||||||
then
|
then
|
||||||
if builtins.elem cfg.server.ip nameserver_1
|
if builtins.elem cfg.server.ip tmp1
|
||||||
then nameserver_2
|
then tmp2
|
||||||
else nameserver_1
|
else tmp1
|
||||||
else []
|
else []
|
||||||
);
|
);
|
||||||
|
|
||||||
# small function to tidy up the spam of the cache networks, would use teh subnet except all external traffic has the ip of teh router
|
# small function to tidy up the spam of the cache networks, would use teh subnet except all external traffic has the ip of teh router
|
||||||
# now limited explicitly to servers that we are administering
|
create_cache_networks = map (x: "193.1.99.${toString x}/32") (lib.lists.range 71 126);
|
||||||
# See i24-09-30_050 for more information
|
|
||||||
create_cache_networks = map (x: "${toString x}/32") servers;
|
|
||||||
|
|
||||||
# standard function to create the etc file, pass in the text and domain and it makes it
|
# standard function to create the etc file, pass in the text and domain and it makes it
|
||||||
create_entry_etc_sub = domain: text: {
|
create_entry_etc_sub = domain: text: {
|
||||||
|
@ -203,19 +187,17 @@
|
||||||
# The UNIX file mode bits
|
# The UNIX file mode bits
|
||||||
mode = "0664";
|
mode = "0664";
|
||||||
|
|
||||||
# content of the file
|
|
||||||
text = text;
|
text = text;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# (text.owned "csn.ul.ie")
|
||||||
|
|
||||||
# standard function to create the etc file, pass in the text and domain and it makes it
|
# standard function to create the etc file, pass in the text and domain and it makes it
|
||||||
create_entry_etc = domain: type: let
|
create_entry_etc = domain: type: let
|
||||||
domain_records = lib.lists.filter (x: x.domain == domain) records;
|
domain_records = lib.lists.filter (x: x.domain == domain) records;
|
||||||
in
|
in
|
||||||
# this is the main type of record that most folks are used to
|
|
||||||
if type == "owned"
|
if type == "owned"
|
||||||
then create_entry_etc_sub domain (get_config_file domain domain_records)
|
then create_entry_etc_sub domain (get_config_file domain domain_records)
|
||||||
# reverse lookups allow for using an IP to find domains pointing to it
|
|
||||||
else if type == "reverse"
|
else if type == "reverse"
|
||||||
then create_entry_etc_sub domain (get_config_file_rev domain)
|
then create_entry_etc_sub domain (get_config_file_rev domain)
|
||||||
else {};
|
else {};
|
||||||
|
@ -256,7 +238,7 @@
|
||||||
*/
|
*/
|
||||||
++ builtins.concatLists (
|
++ builtins.concatLists (
|
||||||
lib.attrsets.mapAttrsToList (
|
lib.attrsets.mapAttrsToList (
|
||||||
key: value: value.config.services.skynet.dns.records
|
key: value: value.config.services.skynet."${name}".records
|
||||||
)
|
)
|
||||||
nodes
|
nodes
|
||||||
);
|
);
|
||||||
|
@ -347,7 +329,6 @@ in {
|
||||||
group = "named";
|
group = "named";
|
||||||
};
|
};
|
||||||
|
|
||||||
# basic but ensure teh dns ports are open
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedTCPPorts = [53];
|
allowedTCPPorts = [53];
|
||||||
allowedUDPPorts = [53];
|
allowedUDPPorts = [53];
|
||||||
|
|
|
@ -202,7 +202,7 @@ in {
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
services.skynet.backup.normal.backups = [
|
services.skynet.backup.normal.backups = [
|
||||||
#"/var/vmail"
|
"/var/vmail"
|
||||||
"/var/dkim"
|
"/var/dkim"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -76,12 +76,6 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# for signing reasons
|
|
||||||
programs.gnupg.agent = {
|
|
||||||
enable = true;
|
|
||||||
enableSSHSupport = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.forgejo = {
|
services.forgejo = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.forgejo;
|
package = pkgs.forgejo;
|
||||||
|
@ -98,21 +92,11 @@ in {
|
||||||
|
|
||||||
# You can temporarily allow registration to create an admin user.
|
# You can temporarily allow registration to create an admin user.
|
||||||
service.DISABLE_REGISTRATION = true;
|
service.DISABLE_REGISTRATION = true;
|
||||||
|
|
||||||
# Add support for actions, based on act: https://github.com/nektos/act
|
# Add support for actions, based on act: https://github.com/nektos/act
|
||||||
actions = {
|
# actions = {
|
||||||
ENABLED = true;
|
# ENABLED = true;
|
||||||
DEFAULT_ACTIONS_URL = "github";
|
# DEFAULT_ACTIONS_URL = "github";
|
||||||
};
|
|
||||||
|
|
||||||
# Allow for signing off merge requests
|
|
||||||
# "repository.signing" = {
|
|
||||||
# SIGNING_KEY = "5B2DED0FE9F8627A";
|
|
||||||
# SIGNING_NAME = "Skynet";
|
|
||||||
# SIGNING_EMAIL = "forgejo@glados.skynet.ie";
|
|
||||||
# MERGES = "always";
|
|
||||||
# };
|
# };
|
||||||
|
|
||||||
# Sending emails is completely optional
|
# Sending emails is completely optional
|
||||||
# You can send a test email from the web UI at:
|
# You can send a test email from the web UI at:
|
||||||
# Profile Picture > Site Administration > Configuration > Mailer Configuration
|
# Profile Picture > Site Administration > Configuration > Mailer Configuration
|
||||||
|
|
|
@ -107,12 +107,6 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.kernel.sysctl."net.ipv4.ip_forward" = true; # 1
|
|
||||||
virtualisation.docker.enable = true;
|
|
||||||
|
|
||||||
# taken from https://github.com/NixOS/nixpkgs/issues/245365#issuecomment-1663854128
|
|
||||||
virtualisation.docker.listenOptions = ["/run/docker.sock" "127.0.0.1:2375"];
|
|
||||||
|
|
||||||
# the actual runner
|
# the actual runner
|
||||||
services.gitea-actions-runner = {
|
services.gitea-actions-runner = {
|
||||||
package = pkgs.forgejo-actions-runner;
|
package = pkgs.forgejo-actions-runner;
|
||||||
|
@ -124,8 +118,8 @@ in {
|
||||||
labels = [
|
labels = [
|
||||||
## optionally provide native execution on the host:
|
## optionally provide native execution on the host:
|
||||||
"nix:host"
|
"nix:host"
|
||||||
"docker:docker://node:22-bookworm"
|
"docker:docker://node:16-bullseye"
|
||||||
"ubuntu-latest:docker://node:22-bookworm"
|
"ubuntu-latest:docker://node:16-bullseye"
|
||||||
];
|
];
|
||||||
|
|
||||||
hostPackages = with pkgs; [
|
hostPackages = with pkgs; [
|
||||||
|
@ -134,24 +128,16 @@ in {
|
||||||
coreutils
|
coreutils
|
||||||
curl
|
curl
|
||||||
gawk
|
gawk
|
||||||
git
|
gitMinimal
|
||||||
gnused
|
gnused
|
||||||
nodejs
|
nodejs
|
||||||
wget
|
wget
|
||||||
|
|
||||||
# useful to have in path
|
|
||||||
jq
|
|
||||||
which
|
|
||||||
dpkg
|
|
||||||
zip
|
|
||||||
git-lfs
|
|
||||||
|
|
||||||
# used in deployments
|
# used in deployments
|
||||||
inputs.colmena.defaultPackage."x86_64-linux"
|
inputs.colmena.defaultPackage."x86_64-linux"
|
||||||
attic-client
|
attic-client
|
||||||
lix
|
nix
|
||||||
openssh
|
openssh
|
||||||
sudo
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
123
applications/git/gitlab_runner.nix
Normal file
123
applications/git/gitlab_runner.nix
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
name = "gitlab_runner";
|
||||||
|
cfg = config.services.skynet."${name}";
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
];
|
||||||
|
|
||||||
|
options.services.skynet."${name}" = {
|
||||||
|
enable = mkEnableOption "Skynet Gitlab Runner";
|
||||||
|
|
||||||
|
runner = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
gitlab = mkOption {
|
||||||
|
default = "https://gitlab.skynet.ie";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
description = mkOption {
|
||||||
|
default = cfg.runner.name;
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
docker = {
|
||||||
|
image = mkOption {
|
||||||
|
default = "alpine:latest";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
cleanup_dates = mkOption {
|
||||||
|
# https://man.archlinux.org/man/systemd.time.7#CALENDAR_EVENTS
|
||||||
|
# it will use a lot of storage so clear it daily, may change to hourly if required
|
||||||
|
default = "daily";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# https://search.nixos.org/options?from=0&size=50&sort=alpha_desc&type=packages&query=services.gitlab-runner.
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.gitlab-runner
|
||||||
|
];
|
||||||
|
|
||||||
|
age.secrets.runner_01_nix.file = ../../secrets/gitlab/runners/runner01.age;
|
||||||
|
age.secrets.runner_02_general.file = ../../secrets/gitlab/runners/runner02.age;
|
||||||
|
|
||||||
|
boot.kernel.sysctl."net.ipv4.ip_forward" = true; # 1
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
# taken from https://github.com/NixOS/nixpkgs/issues/245365#issuecomment-1663854128
|
||||||
|
virtualisation.docker.listenOptions = ["/run/docker.sock" "127.0.0.1:2375"];
|
||||||
|
|
||||||
|
services.gitlab-runner = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# clear-docker-cache = {
|
||||||
|
# enable = true;
|
||||||
|
# dates = cfg.runner.docker.cleanup_dates;
|
||||||
|
# };
|
||||||
|
|
||||||
|
services = {
|
||||||
|
# might make a function later to have multiple runners, might never need it though
|
||||||
|
runner_nix = {
|
||||||
|
cloneUrl = cfg.runner.gitlab;
|
||||||
|
description = "For Nix only";
|
||||||
|
registrationFlags = ["--docker-host" "tcp://127.0.0.1:2375"];
|
||||||
|
registrationConfigFile = config.age.secrets.runner_01_nix.path;
|
||||||
|
dockerImage = cfg.runner.docker.image;
|
||||||
|
|
||||||
|
# from https://nixos.wiki/wiki/Gitlab_runner
|
||||||
|
dockerVolumes = [
|
||||||
|
"/nix/store:/nix/store:ro"
|
||||||
|
"/nix/var/nix/db:/nix/var/nix/db:ro"
|
||||||
|
"/nix/var/nix/daemon-socket:/nix/var/nix/daemon-socket:ro"
|
||||||
|
];
|
||||||
|
dockerDisableCache = true;
|
||||||
|
preBuildScript = pkgs.writeScript "setup-container" ''
|
||||||
|
mkdir -p -m 0755 /nix/var/log/nix/drvs
|
||||||
|
mkdir -p -m 0755 /nix/var/nix/gcroots
|
||||||
|
mkdir -p -m 0755 /nix/var/nix/profiles
|
||||||
|
mkdir -p -m 0755 /nix/var/nix/temproots
|
||||||
|
mkdir -p -m 0755 /nix/var/nix/userpool
|
||||||
|
mkdir -p -m 1777 /nix/var/nix/gcroots/per-user
|
||||||
|
mkdir -p -m 1777 /nix/var/nix/profiles/per-user
|
||||||
|
mkdir -p -m 0755 /nix/var/nix/profiles/per-user/root
|
||||||
|
mkdir -p -m 0700 "$HOME/.nix-defexpr"
|
||||||
|
. ${pkgs.nix}/etc/profile.d/nix-daemon.sh
|
||||||
|
${pkgs.nix}/bin/nix-channel --add https://nixos.org/channels/nixos-unstable nixpkgs
|
||||||
|
${pkgs.nix}/bin/nix-channel --update nixpkgs
|
||||||
|
${pkgs.nix}/bin/nix-env -i ${concatStringsSep " " (with pkgs; [lix cacert git openssh])}
|
||||||
|
nix --version
|
||||||
|
'';
|
||||||
|
environmentVariables = {
|
||||||
|
ENV = "/etc/profile";
|
||||||
|
USER = "root";
|
||||||
|
NIX_REMOTE = "daemon";
|
||||||
|
PATH = "/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/default/sbin:/bin:/sbin:/usr/bin:/usr/sbin";
|
||||||
|
NIX_SSL_CERT_FILE = "/nix/var/nix/profiles/default/etc/ssl/certs/ca-bundle.crt";
|
||||||
|
};
|
||||||
|
tagList = ["nix"];
|
||||||
|
};
|
||||||
|
|
||||||
|
runner_general = {
|
||||||
|
cloneUrl = cfg.runner.gitlab;
|
||||||
|
description = "General Runner";
|
||||||
|
registrationFlags = ["--docker-host" "tcp://127.0.0.1:2375"];
|
||||||
|
registrationConfigFile = config.age.secrets.runner_02_general.path;
|
||||||
|
dockerImage = cfg.runner.docker.image;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -40,6 +40,7 @@ in {
|
||||||
#backups = [ "/etc/silver_ul_ical/database.db" ];
|
#backups = [ "/etc/silver_ul_ical/database.db" ];
|
||||||
|
|
||||||
age.secrets.ldap_details.file = ../../secrets/ldap/details.age;
|
age.secrets.ldap_details.file = ../../secrets/ldap/details.age;
|
||||||
|
age.secrets.ldap_discord.file = ../../secrets/discord/ldap.age;
|
||||||
age.secrets.ldap_mail.file = ../../secrets/email/details.age;
|
age.secrets.ldap_mail.file = ../../secrets/email/details.age;
|
||||||
age.secrets.ldap_wolves.file = ../../secrets/wolves/details.age;
|
age.secrets.ldap_wolves.file = ../../secrets/wolves/details.age;
|
||||||
|
|
||||||
|
@ -68,6 +69,7 @@ in {
|
||||||
# contains teh password in env form
|
# contains teh password in env form
|
||||||
env = {
|
env = {
|
||||||
ldap = config.age.secrets.ldap_details.path;
|
ldap = config.age.secrets.ldap_details.path;
|
||||||
|
discord = config.age.secrets.ldap_discord.path;
|
||||||
mail = config.age.secrets.ldap_mail.path;
|
mail = config.age.secrets.ldap_mail.path;
|
||||||
wolves = config.age.secrets.ldap_wolves.path;
|
wolves = config.age.secrets.ldap_wolves.path;
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,7 +45,6 @@ in {
|
||||||
services.skynet.acme.domains = [
|
services.skynet.acme.domains = [
|
||||||
domain
|
domain
|
||||||
"onlyoffice.${domain}"
|
"onlyoffice.${domain}"
|
||||||
"whiteboard.${domain}"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
services.skynet.dns.records = [
|
services.skynet.dns.records = [
|
||||||
|
@ -59,18 +58,13 @@ in {
|
||||||
r_type = "CNAME";
|
r_type = "CNAME";
|
||||||
value = config.services.skynet.host.name;
|
value = config.services.skynet.host.name;
|
||||||
}
|
}
|
||||||
# {
|
|
||||||
# record = "whiteboard.${cfg.domain.sub}";
|
|
||||||
# r_type = "CNAME";
|
|
||||||
# value = config.services.skynet.host.name;
|
|
||||||
# }
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# /var/lib/nextcloud/data
|
# /var/lib/nextcloud/data
|
||||||
|
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.nextcloud30;
|
package = pkgs.nextcloud28;
|
||||||
hostName = domain;
|
hostName = domain;
|
||||||
https = true;
|
https = true;
|
||||||
|
|
||||||
|
@ -84,8 +78,8 @@ in {
|
||||||
|
|
||||||
appstoreEnable = true;
|
appstoreEnable = true;
|
||||||
|
|
||||||
extraApps = {
|
extraApps = with config.services.nextcloud.package.packages.apps; {
|
||||||
inherit (config.services.nextcloud.package.packages.apps) richdocuments;
|
inherit forms groupfolders maps notes onlyoffice polls;
|
||||||
};
|
};
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
|
@ -96,21 +90,10 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# environment.etc."nextcloud-whiteboard-secret".text = ''
|
|
||||||
# JWT_SECRET_KEY=test123
|
|
||||||
# '';
|
|
||||||
#
|
|
||||||
# services.nextcloud-whiteboard-server = {
|
|
||||||
# enable = true;
|
|
||||||
# settings.NEXTCLOUD_URL = "https://nextcloud.skynet.ie";
|
|
||||||
# secrets = ["/etc/nextcloud-whiteboard-secret"];
|
|
||||||
# };
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
# impacted by https://github.com/NixOS /nixpkgs/issues/352443
|
services.onlyoffice = {
|
||||||
# services.onlyoffice = {
|
enable = true;
|
||||||
# enable = true;
|
};
|
||||||
# };
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
services.nginx.virtualHosts = {
|
||||||
${domain} = {
|
${domain} = {
|
||||||
|
@ -122,14 +105,6 @@ in {
|
||||||
useACMEHost = "skynet";
|
useACMEHost = "skynet";
|
||||||
locations."/".proxyPass = "http://127.0.0.1:8000";
|
locations."/".proxyPass = "http://127.0.0.1:8000";
|
||||||
};
|
};
|
||||||
# "whiteboard.${domain}" = {
|
|
||||||
# forceSSL = true;
|
|
||||||
# useACMEHost = "skynet";
|
|
||||||
# locations."/" = {
|
|
||||||
# proxyPass = "http://localhost:3002";
|
|
||||||
# proxyWebsockets = true;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
recommendedProxySettings = true;
|
recommendedProxySettings = true;
|
||||||
|
|
||||||
|
statusPage = true;
|
||||||
|
|
||||||
# give Nginx access to our certs
|
# give Nginx access to our certs
|
||||||
group = "acme";
|
group = "acme";
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,6 +15,7 @@ https://docs.attic.rs/introduction.html
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
|
@ -22,6 +23,7 @@ with lib; let
|
||||||
cfg = config.services.skynet."${name}";
|
cfg = config.services.skynet."${name}";
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
|
inputs.attic.nixosModules.atticd
|
||||||
];
|
];
|
||||||
|
|
||||||
options.services.skynet."${name}" = {
|
options.services.skynet."${name}" = {
|
||||||
|
@ -51,7 +53,7 @@ in {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# Replace with absolute path to your credentials file
|
# Replace with absolute path to your credentials file
|
||||||
environmentFile = "/etc/atticd.env";
|
credentialsFile = "/etc/atticd.env";
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
listen = "127.0.0.1:8080";
|
listen = "127.0.0.1:8080";
|
||||||
|
|
|
@ -40,16 +40,7 @@ in {
|
||||||
"wiki.skynet.ie" = {
|
"wiki.skynet.ie" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
useACMEHost = "skynet";
|
useACMEHost = "skynet";
|
||||||
root = "${inputs.skynet_website_wiki.defaultPackage."x86_64-linux"}";
|
root = "${inputs.skynet_website_renew.defaultPackage."x86_64-linux"}";
|
||||||
# https://stackoverflow.com/a/38238001/11964934
|
|
||||||
extraConfig = ''
|
|
||||||
location / {
|
|
||||||
if ($request_uri ~ ^/(.*)\.html) {
|
|
||||||
return 302 /$1;
|
|
||||||
}
|
|
||||||
try_files $uri $uri.html $uri/ =404;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# redirect old links to the new wiki
|
# redirect old links to the new wiki
|
||||||
|
|
|
@ -85,20 +85,6 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
services.nginx.virtualHosts = {
|
||||||
"outinul.ie" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
locations = {
|
|
||||||
"/" = {
|
|
||||||
alias = "/home/outinul/public_html/";
|
|
||||||
index = "index.html";
|
|
||||||
extraConfig = ''
|
|
||||||
autoindex on;
|
|
||||||
'';
|
|
||||||
tryFiles = "$uri$args $uri$args/ /index.html";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# main site
|
# main site
|
||||||
"*.users.skynet.ie" = {
|
"*.users.skynet.ie" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
|
|
|
@ -12,13 +12,6 @@
|
||||||
config = {
|
config = {
|
||||||
skynet.records =
|
skynet.records =
|
||||||
[
|
[
|
||||||
# wifi in server room
|
|
||||||
{
|
|
||||||
record = "ash";
|
|
||||||
r_type = "A";
|
|
||||||
value = "193.1.99.114";
|
|
||||||
server = true;
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
record = "optimus";
|
record = "optimus";
|
||||||
r_type = "A";
|
r_type = "A";
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
{
|
{lib, ...}:
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
with lib; let
|
||||||
port_backend = "8087";
|
port_backend = "8087";
|
||||||
cfg = config.skynet.users;
|
|
||||||
in {
|
in {
|
||||||
options.skynet = {
|
options.skynet = {
|
||||||
users = {
|
users = {
|
||||||
|
@ -49,37 +44,30 @@ in {
|
||||||
|
|
||||||
config.skynet = {
|
config.skynet = {
|
||||||
users = {
|
users = {
|
||||||
committee = lib.lists.unique (
|
committee = [
|
||||||
# Committee - Core
|
|
||||||
[
|
|
||||||
"silver"
|
"silver"
|
||||||
"eoghanconlon73"
|
"eoghanconlon73"
|
||||||
"nanda"
|
|
||||||
"emily1999"
|
|
||||||
"dgr"
|
|
||||||
]
|
|
||||||
# Committee - OCM
|
|
||||||
++ [
|
|
||||||
"sidhiel"
|
"sidhiel"
|
||||||
|
"maksimsger1"
|
||||||
|
"kaiden"
|
||||||
|
"pine"
|
||||||
|
"nanda"
|
||||||
|
"sourabh1805"
|
||||||
|
"kronsy"
|
||||||
"skyapples"
|
"skyapples"
|
||||||
"eliza"
|
"emi05h"
|
||||||
"amymucko"
|
];
|
||||||
"archiedms"
|
|
||||||
]
|
|
||||||
# Committee - SISTEM
|
|
||||||
++ [
|
|
||||||
"peace"
|
|
||||||
]
|
|
||||||
# Admins are part of Committee as well
|
|
||||||
++ cfg.admin
|
|
||||||
);
|
|
||||||
admin = [
|
admin = [
|
||||||
"silver"
|
"silver"
|
||||||
"evanc"
|
"evanc"
|
||||||
|
"eoghanconlon73"
|
||||||
"eliza"
|
"eliza"
|
||||||
"esy"
|
"esy"
|
||||||
];
|
];
|
||||||
trainee = [];
|
trainee = [
|
||||||
|
"milan"
|
||||||
|
"kronsy"
|
||||||
|
];
|
||||||
lifetime = [];
|
lifetime = [];
|
||||||
banned = [];
|
banned = [];
|
||||||
|
|
||||||
|
|
782
flake.lock
782
flake.lock
File diff suppressed because it is too large
Load diff
106
flake.nix
106
flake.nix
|
@ -7,55 +7,91 @@
|
||||||
# Return to using unstable once the current master is merged in
|
# Return to using unstable once the current master is merged in
|
||||||
# nixpkgs.url = "nixpkgs/nixos-unstable";
|
# nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
lix-module = {
|
|
||||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# utility stuff
|
# utility stuff
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
agenix.url = "github:ryantm/agenix";
|
agenix.url = "github:ryantm/agenix";
|
||||||
arion.url = "github:hercules-ci/arion";
|
arion.url = "github:hercules-ci/arion";
|
||||||
alejandra = {
|
alejandra = {
|
||||||
url = "github:kamadorueda/alejandra";
|
url = "github:kamadorueda/alejandra/3.0.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
colmena.url = "github:zhaofengli/colmena";
|
colmena.url = "github:zhaofengli/colmena";
|
||||||
|
attic.url = github:zhaofengli/attic;
|
||||||
|
|
||||||
# we host our own
|
# email
|
||||||
|
# simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
|
||||||
simple-nixos-mailserver = {
|
simple-nixos-mailserver = {
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
url = "git+https://forgejo.skynet.ie/Skynet/misc_nixos-mailserver";
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "misc%2Fnixos-mailserver";
|
||||||
};
|
};
|
||||||
|
|
||||||
######################
|
# account.skynet.ie
|
||||||
### skynet backend ###
|
skynet_ldap_backend = {
|
||||||
######################
|
type = "gitlab";
|
||||||
skynet_ldap_backend.url = "git+https://forgejo.skynet.ie/Skynet/ldap_backend";
|
host = "gitlab.skynet.ie";
|
||||||
skynet_ldap_frontend.url = "git+https://forgejo.skynet.ie/Skynet/ldap_frontend";
|
owner = "compsoc1%2Fskynet";
|
||||||
skynet_website_wiki.url = "git+https://forgejo.skynet.ie/Skynet/wiki";
|
repo = "ldap%2Fbackend";
|
||||||
skynet_website_games.url = "git+https://forgejo.skynet.ie/Skynet/website_games";
|
};
|
||||||
skynet_discord_bot.url = "git+https://forgejo.skynet.ie/Skynet/discord-bot";
|
skynet_ldap_frontend = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "ldap%2Ffrontend";
|
||||||
|
};
|
||||||
|
skynet_website_renew = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "website%2Falumni-renew";
|
||||||
|
};
|
||||||
|
skynet_website_games = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "website%2Fgames.skynet.ie";
|
||||||
|
};
|
||||||
|
skynet_discord_bot = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "discord-bot";
|
||||||
|
};
|
||||||
|
compsoc_public = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fcompsoc";
|
||||||
|
repo = "presentations%2Fpresentations";
|
||||||
|
};
|
||||||
|
|
||||||
#####################
|
# skynet.ie
|
||||||
### compsoc stuff ###
|
skynet_website = {
|
||||||
#####################
|
type = "gitlab";
|
||||||
compsoc_public.url = "git+https://forgejo.skynet.ie/Computer_Society/presentations_compsoc";
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
#################
|
repo = "website%2F2017";
|
||||||
### skynet.ie ###
|
};
|
||||||
#################
|
skynet_website_2023 = {
|
||||||
|
type = "gitlab";
|
||||||
# this should always point to teh current website
|
host = "gitlab.skynet.ie";
|
||||||
skynet_website.url = "git+https://forgejo.skynet.ie/Skynet/website_2017";
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "website%2F2017";
|
||||||
# these are past versions of teh website
|
rev = "c4d61c753292bf73ed41b47b1607cfc92a82a191";
|
||||||
skynet_website_2023.url = "git+https://forgejo.skynet.ie/Skynet/website_2017?rev=c4d61c753292bf73ed41b47b1607cfc92a82a191";
|
};
|
||||||
# this is not 100% right since this is from teh archive from 2022 or so
|
skynet_website_2017 = {
|
||||||
skynet_website_2017.url = "git+https://forgejo.skynet.ie/Skynet/website_2017?rev=edd922c5b13fa1f520e8e265a3d6e4e189852b99";
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
# this is more of 2012 than 2009 but started in 2009
|
owner = "compsoc1%2Fskynet";
|
||||||
skynet_website_2009.url = "git+https://forgejo.skynet.ie/Skynet/website_2009";
|
repo = "website%2F2017";
|
||||||
|
};
|
||||||
|
skynet_website_2009 = {
|
||||||
|
type = "gitlab";
|
||||||
|
host = "gitlab.skynet.ie";
|
||||||
|
owner = "compsoc1%2Fskynet";
|
||||||
|
repo = "website%2F2009";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
|
|
|
@ -20,9 +20,6 @@ in {
|
||||||
|
|
||||||
# base application config for all servers
|
# base application config for all servers
|
||||||
../applications/_base.nix
|
../applications/_base.nix
|
||||||
|
|
||||||
#
|
|
||||||
inputs.lix-module.nixosModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
options.skynet = {
|
options.skynet = {
|
||||||
|
@ -120,20 +117,19 @@ in {
|
||||||
# https://discourse.nixos.org/t/systemd-networkd-wait-online-934764-timeout-occurred-while-waiting-for-network-connectivity/33656/9
|
# https://discourse.nixos.org/t/systemd-networkd-wait-online-934764-timeout-occurred-while-waiting-for-network-connectivity/33656/9
|
||||||
systemd.network.wait-online.enable = false;
|
systemd.network.wait-online.enable = false;
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = [
|
||||||
# for flakes
|
# for flakes
|
||||||
git
|
pkgs.git
|
||||||
git-lfs
|
|
||||||
# useful tools
|
# useful tools
|
||||||
ncdu_2
|
pkgs.ncdu_2
|
||||||
htop
|
pkgs.htop
|
||||||
nano
|
pkgs.nano
|
||||||
nmap
|
pkgs.nmap
|
||||||
bind
|
pkgs.bind
|
||||||
zip
|
pkgs.zip
|
||||||
traceroute
|
pkgs.traceroute
|
||||||
openldap
|
pkgs.openldap
|
||||||
screen
|
pkgs.screen
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ Notes:
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
|
../applications/git/gitlab_runner.nix
|
||||||
../applications/git/forgejo_runner.nix
|
../applications/git/forgejo_runner.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -39,6 +40,12 @@ in {
|
||||||
services.skynet = {
|
services.skynet = {
|
||||||
host = host;
|
host = host;
|
||||||
backup.enable = true;
|
backup.enable = true;
|
||||||
|
|
||||||
|
gitlab_runner = {
|
||||||
|
enable = true;
|
||||||
|
runner.name = "runner01";
|
||||||
|
};
|
||||||
|
|
||||||
forgejo_runner.enable = true;
|
forgejo_runner.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,19 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA xqavLiNuEoc7Gn7MchvoSEC2RrsFDrf9MEGFYVf5vEs
|
-> ssh-ed25519 V1pwNA pcFat8+oFhOWSZyYBM1Ij11K5vLcrGSWGcopZTIUv3M
|
||||||
ZwOkERtRi8yxlZ6sUl+mzJ+YFw/h82vV0WzhRjQOTo0
|
NDNVRUQU3SqOPRm3N/rCMhf+DyMg21d9uAJkrqLrKcc
|
||||||
-> ssh-ed25519 4PzZog eiC4yLeOytE1jTUaQDOxtVHsM2jJAvGLrI75XJXRCSA
|
-> ssh-ed25519 4PzZog xwjC1NO/yqurBivCPbTQgtsavmBmOcHMrjcB/W+wy0o
|
||||||
HJg+GqSKlXld1uB2WPTM28XEygsm3+4iObC7SCMWl8c
|
zdFH8I0W4ItbKVlAW4mHIPNDPPlIwdSLnIIu/1kEXBs
|
||||||
-> ssh-ed25519 dA0vRg rStUstoZRf0i7Ot/0Gn6zd1cQMQjDlLQ8ScEIM3XMXE
|
-> ssh-ed25519 5Nd93w ojB2kKZWtrcbf34sdYPNKIUJ65nGskCXU4wOq/SbH3A
|
||||||
PR2UGWuO5VOBVee3bndRxipU/m2ZRXMo0HQkX8pvTyk
|
hhr/RyiTv0tFC/pvNHBFxFenHuVWpiW1hzVcyH8Iplo
|
||||||
-> ssh-ed25519 5Nd93w hn5Oo+ZoIG+UwAb/DUUJmkDcey35fG5WDBgbe494T2s
|
-> ssh-ed25519 q8eJgg DA1GO1/lDUAnFI9lPoOUQ1C33SHpNGVvqAF6aZCoLlU
|
||||||
TxUgeQb8UdxlowGV1/j2Tr7DTNqc6d56NGaFGZfeidQ
|
9Cyl198clJHzc/pYmOe3hMM4EZVi/EE6XjSlSnLeRdc
|
||||||
-> ssh-ed25519 q8eJgg vcWProg0hXGuIRVWXpFSzyS4Ei4YHSdq17A08avwCmI
|
-> ssh-ed25519 KVr8rw NNeHe1ExbX5I4CdibTc1772nJoiEHHcC5gs/t4v6/wE
|
||||||
4iKGWyyGfCKEliEa/9r8y+D5LsyLglFvcUeXyzO+FCg
|
FeSYrhUeMxCWJ/DOmp66w+KJlhKnXCsBqCJ+lDGT1kM
|
||||||
-> ssh-ed25519 KVr8rw 2kNscJDgyfKH6WrfSKWnX5dgRM0Kk7FztGhoJ89VUWw
|
-> ssh-ed25519 fia1eQ yZVFUGXdWqNW1fnNRHTrBGN1WYoXemIkGdRwKPF613U
|
||||||
/biNgciz7/fDOyY6GfwEI57ESdUyRwmKaI4OG5pJs20
|
k/7eulnPGaePxUzXtt9tHOfhOyhJlTT4pQ1KfhzTwfI
|
||||||
-> ssh-ed25519 fia1eQ lv06SnwwoBlmG4AVAeNpeIFgISkt6FktNuRq+P0eJgs
|
-> ssh-ed25519 IzAMqA +TNjvQx4ee/T30kv/UyFu1rCf8aG71T8WUJj3WBnVzg
|
||||||
VX8O0FYWrEyBVR13t8AkvIq1VpwFdkMX+wBUQHBzXPI
|
3ooxsLz09cBO88/BRChFrMXpx7QjZVFfopgSEcxlfpw
|
||||||
-> ssh-ed25519 IzAMqA b0DnkDgWeERguN/u9wgiBB1sbxHaMXmMZdPOJ14/UDg
|
--- kRZI09vrkArnL0mRQaSvoY6bpH8OTV4nT8JbDzP8nWo
|
||||||
tmKw26Fs6iKbVq7BBK60UoQSjykp4BzLW59/ZbbD0hw
|
î+<2B>ó
PçüÉ×:( ³8.Ðm(ªe+ÚigH ªWzqRvMø|¯–ý$ízâµ<דí}Cˆ´{·)qõõ¬ÂAgþÑþ`¡á*Å
|
||||||
--- rR+hloCeC8YmoV34TBL7hLk/4CSfmYKwtAbmtUjHvKE
|
|
||||||
<EFBFBD>7ü¶RHSIΔC#‡Ä/ù:öH•ôImId÷ëójkõlàa˜Ñlõb\ƒL¶²¬6Ø¥†/ôPÜ¢+cº÷’U‰MÅYt©
|
|
|
@ -1,19 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA LbYb1XP9bLe1lcsAfGwPkK2/r2+TnkkEgfS9fi1YKRo
|
-> ssh-ed25519 V1pwNA zomyV86JWdw5KWZz/hpIQ4L9VXEW4wTDqI4cLGsNsn0
|
||||||
Z20C/zQluu+Qanf4d9GSj4pLirCyqJpa60H9hodMt5k
|
yy7TKiwisPKlQQUWOXCykxbYSrwE5eGKMNP8OBAUkO0
|
||||||
-> ssh-ed25519 4PzZog IFlhg/gbQpiMugcQZUHwfAnSvhxCwW67XmfSNmYOSQE
|
-> ssh-ed25519 4PzZog A4x9YKQ/YCTglMRY7X7PVkqwkktO6R8yavKrrPvgFiY
|
||||||
nOp4xPFMvIhUH9OUVz8B3L8GI+Um2egjHV0FgmdNwwM
|
r2GUQPkQDBR7a9NGkEYhgE5XyWJUbNYPBYcGUMBmK70
|
||||||
-> ssh-ed25519 dA0vRg OAmV1KiprjoIgOPHCYcme2uLiU1xEdohTWA5CiN0yG8
|
-> ssh-ed25519 5Nd93w pUJi0inWzU9zrNeE2JbFDMltBfMjIZV5e+aAvkX0pnc
|
||||||
4/LHk5LCGrpMISvpjfo7QuhnRrE3ycFGwGTQ1i6VaZE
|
oE06oHbCZiy36XZiPrI3yeKWuD82XT9dF3WsqZTvIsg
|
||||||
-> ssh-ed25519 5Nd93w jv27aiNze8Nxp2ohY7NIRtZv5lBxAdKYGWdqWD12zU0
|
-> ssh-ed25519 q8eJgg 76Xais8jMd3AVu9fjnklTjoYA+4dLV7iYhw9E6djiy4
|
||||||
E5Rk0r8To4B39UsaZavEkAZlIPiaXswsShMgsyNPMoY
|
gIGci/h85lVxQCpnzcmgi/8Ddef4JY7J1u1HOUkBGAg
|
||||||
-> ssh-ed25519 q8eJgg /o798N6b1KlQfMM9gQf48TF9V7nXORxW4SOpcpYCuhI
|
-> ssh-ed25519 KVr8rw aLuWLwlVKlfsRetAGXib+wyewtokiLiHpg5+6PWhEUE
|
||||||
RVYXWwZLFL6ZUjGbmXBzEj0+Pe2wpZFPIj5yH9kRIwY
|
JE+Kn+1uxViDQj+8M1VvOqJ/wpIzNlsL9xM7grMt5yw
|
||||||
-> ssh-ed25519 KVr8rw +N2w/8vvD7/uG3TMYb+9vml/vZhLkoS+03KEDlQWNhs
|
-> ssh-ed25519 fia1eQ txZ0C5zd+2MTRH5sw6ORuxvuCGuxVmnD0opKvUMzRhs
|
||||||
Hne+3S6vVc5Sx7QJ+OCrPCt4s5usZ7B7WwusnFQLmSo
|
joVv8myJAWCZnSXZ1PzqxQdB2uTUrVzgITTU3ZIgHEw
|
||||||
-> ssh-ed25519 fia1eQ PJYYKfL1GolRt90KC52dvUyZ/HjWRJm9vMTjBvrCOkQ
|
-> ssh-ed25519 IzAMqA Ns6XpHFkrBjofBVY6rXY9h/tQPadJ9RgaKKaUWjWsVo
|
||||||
Xc7SpT5TZLTOORLO3uE8tPXKx7thUwaJi3ixngLRljM
|
3Q/3v74wemS5/tglw6cefS8j/z/0vz1C/sDAPnf+0HA
|
||||||
-> ssh-ed25519 IzAMqA AtoNahZ3dTQasdfP3wf7U1RJyx//Kt82e1TMSIkW6QA
|
--- AK6Yp/Zk8mqKBt/zzp6bpGc54h/dyPWWv29bDuxURSU
|
||||||
neLAeCvnsl4RDq2H1slZJ+5i3JErqy4aRGoscpRUi/0
|
ÿ‹¶´Õùc©LËÊŒœÅbgåÏA8Ÿ¨à:Ⳝõk<–P“²N~X¢|‚èÜòTq±Ñô}Ztï.ôY<C3B4>>§
|
||||||
--- W8B6kla08fEkl4Kpp+0eAHj7B1j3WYCDcuwJvAIEW58
|
|
||||||
)8ýG(ž¶ ìò<C3AC><C3B2>žÛær_št¤Ö©zµ¥|>¢od…ð×ù6µø*0j»…r‚´ñTü«\*v^#‚
|
|
|
@ -1,26 +1,24 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA 6NKUbOSUbwVjzW/ZUpl8qEiUTTegFlji4+tVJyqY3SE
|
-> ssh-ed25519 V1pwNA oKU5WHTVFbMzlj3VCOz8SK6HUXSMx/+O0GRBgrHz4SE
|
||||||
fRQvaKnLMkVBboTEriQpWlGY9VBAP3ppsEbAB2QTScs
|
UhAfuzpx+3pVzaADb8IboXPrVdjc+6nTBs58vl6UM5Y
|
||||||
-> ssh-ed25519 4PzZog mp/+b5LpB+DvRduqAZiKWqkZq6+tlyQgVTZz7Oge2Us
|
-> ssh-ed25519 4PzZog P8oILoh4jxjLWlJ/8P6ZFo3gVnPLf/5rCXKt+VNbwno
|
||||||
OycqmZyDr3levWSfRFxypJOkITLDix0Q15Todya6BNc
|
Z2LPtqT7vxDVXo67vUE++kZsgR8EW/g5p6ukannudWk
|
||||||
-> ssh-ed25519 dA0vRg yp/4LvS9DbdatHFWFsP5qhH8CP8Bs0IjVSenUtG4+Xs
|
-> ssh-ed25519 5Nd93w SCPXtK32yRY9SHlXW37lWn5o3kVyGLvE25JC7OYrqgY
|
||||||
hHiJEtl1ffYXltsJzuEMLGUl2i/i3pFzv4bjbx/cbOI
|
jXDPZBtkFaQ0zrWQ+q4t7gPXdzH3FXxi/GoGQ6A5Xp8
|
||||||
-> ssh-ed25519 5Nd93w BTngmy4NGLGKhC8lPos63QEVBKoQT82KswQ22EypcQQ
|
-> ssh-ed25519 q8eJgg c0Pm3CbI20Xx+ZDG21YFBBYcRXhm7XJtL4upmfQk7Sc
|
||||||
OCnJMkOwwXQVbtCitUizXM4nynC6a1tiPSkm7MxulWA
|
zoj5rfYv0LlKNcqxPCEmgn7Q9fC/zglkacJ+RdRGFAA
|
||||||
-> ssh-ed25519 q8eJgg NaEjVcDBVICRgXuJchEdE4vg3qmkNmJAbDDxLq1fX0M
|
-> ssh-ed25519 KVr8rw dlnvbfFVgq8/fCJ+VVNt82McHYcCYOyej2q4Xw7lHQc
|
||||||
YFwUmEPwJIik5YJ2SV5IAmqGlY+h24voJJlrBaoCBwA
|
7GvA1OChHOY8H+tNtBc7t0dGX0htnwru/xiOk22uz2g
|
||||||
-> ssh-ed25519 KVr8rw ZnyVITZFkuozEs/rbTdxXDQNS3Nggo+JkBL1Icht2SM
|
-> ssh-ed25519 fia1eQ WkNk6q+ujMGaMndfrj4RCUhE2UTkYze9Hj7iDueXqgE
|
||||||
B4jVVts5lK1kIlOWMl0eiN7TpsTeJZWIu7NqildxeGE
|
70nqJIlhPFLAUCt8p4c/GulYOCc45hvqKDFuh1TkaP0
|
||||||
-> ssh-ed25519 fia1eQ kvzARRScl/eypC2a5cY66sXcH+TZqz4sYg4W/k9iJxQ
|
-> ssh-ed25519 IzAMqA 4ribVEiuHMHX7rZYHi6iiW/5BwvVvydrsBzlVgRjT14
|
||||||
Ga+4TVvXiQ6i5/+fgUQ3E5tJiLqdBsEsXjenXEpRV/A
|
OaEvZPbPJKAbOySo/7DcIuwM7F8Lowa8mnYSkXmKMwA
|
||||||
-> ssh-ed25519 IzAMqA 5sizvlhLhAhAR1bViHJtRJ8fAIO56TAuLVSOwE177QE
|
-> ssh-ed25519 uZzB3g HBpDQeuRn/7ST7n+K9V1O6uLNnbu6qinqrjO000lyDg
|
||||||
b9oJ8BC2xiBjvc3D0H0EF7bSNDlpvIidyBCTf04ndJI
|
ACVdyMFSsJgRcHxU85ns7RVTWlKTCRbUqkvgmSr/7CI
|
||||||
-> ssh-ed25519 uZzB3g g9y66zNmQbqP6Rbhg2t06W3YOgy8DkRvJZbWVegT71s
|
-> ssh-ed25519 Hb0ipQ zThy7Iiq+mfgOic4F8FN94LfUvxqFM/k2Z3Qrs4NNUI
|
||||||
2dH7E76tDMrWQJbLPefyORP66iaPHQnSjwu8NCdSyJo
|
E8HEerENg4ypEiV3PnvghUzBuL85SkWSBeEdQw7xUUo
|
||||||
-> ssh-ed25519 Hb0ipQ azOzBLXfshInlFVpV0PzIBidL/VzA/+kKRXFFVD6ZF4
|
-> ssh-ed25519 IzAMqA hvEU3NLfxGsQkA1hlwkumtgEgscd0HRcBKHbavr22Ro
|
||||||
iXBF/Wcv4KWo5qUXUlyimuo0l6aClKxOCtkm3MxAIBc
|
omEGJ/nRcqeXRI8HQkWD1lnabodUNSipnmedtZjNyfA
|
||||||
-> ssh-ed25519 IzAMqA EWitYyV8RsPIB6HEFE2OI/C1zcC6WfBEeDI62rGVmkk
|
--- OeFgK+AG4MnUHFFRjJYmDKDonM8qNnGZ7sQzdv9GZK0
|
||||||
Bk9tdSqIjLjat21J2LM8RXAt9GwdQxYdfPzqDtCjunE
|
³{J7¦¨bWþ")«û{Nð62þl”8íQ ¥A«ƒ
|
||||||
--- waY7j+HMEOdqEZs/TcLEhUY9gJs6ZSc51VNfuCmCxJ4
|
-¤'qGr‡}ÁÖ¤‹#¸, ŒB§°ÄÞž(Â~IÇm
/¬FŸ<12>>`°RœF+tC-p—û]Í¡#òù
Œm |Yó7Èã*„«+ô¼f{°×·úÝÆÊRô*X»UØl:ÉÏy²MÒã–;my9&ñ1Ëég ¬ßÀÓ‘î+1=¥ÜOÉ¥B˜I<CB9C>Ø6µÛ
|
||||||
Ý;dÙ9A‡vÔé±nq<“ê;TèáƒB؇$ÐGÌvï¯h
|
|
||||||
»\^Žé§lÖ¯`š¼ÄÎ?l¸<0C>au~üЧ×yâ[ךju²üvÂ;]!œ6Ëè±ãXIs4ÇŒ!Ù@ß϶û¬‘|›úïª">eÈÿ[VVŠž´,ÿ5˜ý8N§¹Œh<04><>[ƒ×´ZD,zý&âñíó¡”õIØ>ŠØù¡<C3B9>|ÎézÉm
|
|
Binary file not shown.
|
@ -1,49 +1,47 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA 5xvtgxFvEOX/bVAOdBBF2Fyb0euGt95YjhOcfpGgHk4
|
-> ssh-ed25519 V1pwNA Um8k62xQfUTDj8C2uQxdr96NUaLjukWQM5yzDKyW90c
|
||||||
6oN4Xba0W5g/d3EX2aC4N6UFVf/oHGgdTxBcMbjIdHo
|
JiwqfZvGtjkx2UyOns3shdLkhOjnxyp9jEMGsgtVFhA
|
||||||
-> ssh-ed25519 4PzZog SjAcOftaZBEAAZ/P+Z9OTira4/QLSMRefC+JkQcf0G8
|
-> ssh-ed25519 4PzZog Y7myy2+E0GGxudigs/ejtOUabVBNOIavuA+hfxApBl8
|
||||||
zG0R3/r+PBjWj7WBABmHPXpqx18uLyuFMJKB2az9i2E
|
+tNnI8V2H68H4Rl7yLvPT7vFcF3zBEgunyJdHZR5pRI
|
||||||
-> ssh-ed25519 dA0vRg k8fekPA7w/QFMVnDfCrpOlfv531/nw9tO7B0d+mWHiA
|
-> ssh-ed25519 5Nd93w EjOZVoDbJ/HZpL3KxqIi0dDvDRrZREOR5Gxtsu/qETo
|
||||||
jp+DndebWEdk9+wt/nvS0LfRsFf8T7+dMffWmx3tPw8
|
yLXSvQ46vg0O++bQUKx9PXH/vCWLpYAkqLGue7Zjzz4
|
||||||
-> ssh-ed25519 5Nd93w dYe/tZ5qHoacI1IBa7yvDL/grZU7Lc40gU8boQY8Wj0
|
-> ssh-ed25519 q8eJgg VE5foMAIJxrF7E9a0INJMZ57iUUAXThqMcD1JQP+GFc
|
||||||
eBs8fYre18RGW8+RH4J4AleG3kNpCZ0agAfcojSCy2Y
|
qonLC+VctWN1Gh7TGTjwRDd2k7xirwndhvTBfDYbhq0
|
||||||
-> ssh-ed25519 q8eJgg 9UZdBq2oZ29U/kzeNOGn+q8RbkLbJwM0eSJHqSLV6Ek
|
-> ssh-ed25519 KVr8rw 3C9ikWuujEVCC4ciVUImhozN8JF9pADC/BkvzfyJZgE
|
||||||
vqa610t5XxHiKBSf7veOc09ZFYW7EF1KpIbCpdCsegw
|
Sm2sH0W2/ilXe9nBaXcBr+k//N3htLMKxuNY/PE5pH8
|
||||||
-> ssh-ed25519 KVr8rw 1CkykLAC3c615TDRlOeI4GHmqu0VT2kclWkr+DT9dSM
|
-> ssh-ed25519 fia1eQ c7DXyzxmlimzysAITeoJ/uZpiwvwpZyEE8OUaOZsHVk
|
||||||
0MyPNEmkHICQZxpKt0jBZpce13c+jn4WC7IJL4uWZHo
|
mpBnKteU2Elj9h0myNcVr6EC7p/Mvhv1PF5rdTQCQxw
|
||||||
-> ssh-ed25519 fia1eQ OtFYStmc1y+yqYNaNgHxEheIIVykYAa/uR0dKS4xX3Y
|
-> ssh-ed25519 /Gb5gQ o+gM7Ah4qpe7cndwNSqaHDsMcrdzyCKzM5eowSTdeGY
|
||||||
c2HYDyrD6Db3FNLP8tebLngtS2S8LHsmHovbofsUk3U
|
chfpUPkmMuw2h2vrk9mpS/R4tMbV3hRIedxMjiwpjKw
|
||||||
-> ssh-ed25519 /Gb5gQ rAc4CqbqdkIAFystL0rLqGNH56GrKxOBamqhiIFAY3c
|
-> ssh-ed25519 NtlN/A WTNZAVvkf5+DzohU63Q9E1un3hTgnHlJhUsB47tilCo
|
||||||
RR+NsZe0HQdQv6SgeIqy9IcIChXdvrsspNDBngW6Byw
|
hzAqYw5BI0RSHafoDqf/0gsC2Ao6p0RywnB0ywRJlEw
|
||||||
-> ssh-ed25519 NtlN/A 93citgkp9Aj1LDK5UdzJqYVVYaWgt/Cc6yMJka+ccyY
|
-> ssh-ed25519 v2Y09A f2AfFJBa2Z4DAWk0Q+02c0MRJqsY4uCyaQbdETWlj3M
|
||||||
KTcyd/SygOLp4mPI1zGDTKCNT7LfVUw12Bw/qnTnMpE
|
nzGicXSpX3ePk1wcXx9zn0LjD1zJ3m+hMwttne7ZQcY
|
||||||
-> ssh-ed25519 v2Y09A +fWNE2zU+lz5KGu2Ed2MHb9UXzJPUAUuBWilF/AS1Qo
|
-> ssh-ed25519 XSrA6w pS8EsxTW2DxmNIseAXIZSlgl+GHvSZYlqu3ptttSf0s
|
||||||
UVJWnAjRcD7X6iA/heoWdZTcsUS+1VMG5leIHxWZGNA
|
dgwMl7qTgBrRgy5nQo0tVGygHDuGLtOCTa+VKV0qUvI
|
||||||
-> ssh-ed25519 XSrA6w fft3i85PNprS9QqQo2yKr3lx3qHuSVFeVYuT5Gtfyng
|
-> ssh-ed25519 DVzSig 4IVV8Eouy9g7D7Bm4+kR7C/WenXSRJ/LyEpi4etVVz8
|
||||||
lNOo2jQXvaMElQawI9x8vnQN5bnnNefEyYXD3YqwOwM
|
jevtHMcYxkII90eLLa0abp7sZouHYv34Y/Hh3uRLwtk
|
||||||
-> ssh-ed25519 DVzSig a5q+imjqWqTzyM3aU+UvvGv3wH3RLTPl+kva+qVSSFs
|
-> ssh-ed25519 uZzB3g gS8fmDFZKdiB4I/E2lcuNADCrSafO/nfdWynlUBeNQ4
|
||||||
Pobzi/5ZVyfGhVK4cMqvMqaAol9X4+P3hEaUeHdiacY
|
D2UsbMklhDI6epY4S7zlyeWT6B8em8QZOW2m6xCu7Dc
|
||||||
-> ssh-ed25519 uZzB3g B1D2S87+yPr66EikAqLw7s5pazfQeQUxAj4FFnk0nAE
|
-> ssh-ed25519 yvS9bw J89yiWrxj+OyTCRz8nTVQwYYFjfMPSQ9YRreHbWetCY
|
||||||
3lEw0t99aSGqkZdi+ILl3+s+JWRKpY4BHLXdrHfFxng
|
vx+SspyK+GAYHDWEvComBs9RaF7/OusNyumxJqulUl4
|
||||||
-> ssh-ed25519 CqOTGQ urZpNzMYvDnGR1UgjgrRYp06gKWcTEWUDjyb4fdDTD0
|
-> ssh-ed25519 IzAMqA TErMgW9Bj/l9N3WAZ/WOwAEFeYieyCgAw5AhxozmJUY
|
||||||
7jeFeoMBitwGFQLSynYVyIYsEhHe7A8mdl65goiX5c8
|
YcnB9vDoozUIcLEgi1vieNlZtcBZu784D3ieUVo4z1Y
|
||||||
-> ssh-ed25519 IzAMqA QmtcH5afcef4NMRX4AMrUHW1tCPGOlJ+gIhhDFkUCSY
|
-> ssh-ed25519 Hb0ipQ JVqCZ+LmJV0Oa+hQVhnxn0icj5apL/D5wEa7ovyreAs
|
||||||
I4Yg8vgoYGcsV43qq04+nrhzMJ20eaQjOD4EJM0z2xw
|
Mgfclli+cvJ+6utfqCTjjwHdqIWJeFRSedminG9duVw
|
||||||
-> ssh-ed25519 Hb0ipQ CO7nQSSKrmkQ/C6DuJxesIMJmm99eQytLzJ+3/Q38AI
|
-> ssh-ed25519 3pl/Kw 0KIvDRrDxzA7F7Gk9UmLCu/QG1CgxPKD0U3HYasmpGw
|
||||||
/kBnqeivoQLMaAA7nX0t4/UAvcOIchEu9bJWxIuUOV0
|
ejGuEcMeMKO0ROgp4zgIx1orjfizSsKnkFpLlWImLIE
|
||||||
-> ssh-ed25519 3pl/Kw qUD++i8FGbEAuqa+/v6f664tlVTwHGYF3AmTo0cuZyA
|
-> ssh-ed25519 SqDBmA VfUmSzAEJlPxrzJ/bBVzqCMQStoyU38MsYP0xNFCY1Q
|
||||||
vjImiKQm0SHiuO7jZTKRg/3MKzDExfE+p9ZT2nHZr4M
|
3r7n8/LGveiHJ8C4UfcfVoG2wxofTwIKduxQXBWlEYM
|
||||||
-> ssh-ed25519 SqDBmA BGwTqAeEptBFRbwwVkHZWX+OKQpALqrPvA2+Cl356D4
|
-> ssh-ed25519 UE6fcQ 1WD6yUAVxCfzjjl8wsehzJMGmJKFicn/5cGDxJBfQVQ
|
||||||
Gg69WAtr+AAfYT1G+WcTSIlCbNqS5DyxsZw81DaBSkk
|
BLNcPo+7qSR91bXb2A+doVrxFwuVEW+1j2ZpZC1V29Y
|
||||||
-> ssh-ed25519 UE6fcQ 4JZzLWThfgJQSNDDtDp8ayM7N9o5tQ6PVwKMj28inC8
|
-> ssh-ed25519 YFaxCg sOaoF1xjTiHc9Wo1f1Zk7EZuoJFK8GvpLe/9Ofbwrlk
|
||||||
RyEWRmMbuXezYZntsTdVIbjy/YEbrflqMpirdg08UVQ
|
MPZ1AM6Nbu3fyijTSxBW0uyvdyF3EM4G24bKou1pdWI
|
||||||
-> ssh-ed25519 YFaxCg LTsikBkuBwOuc2qrnTAMVtRawZyBosZScefH8qWIqzQ
|
-> ssh-ed25519 elCEeg ZiGYDevzSY2L6YClsw9DALPsto6bTturc7sMsleAnkY
|
||||||
aLiVK7XFI8iDRTCGH2yJnUpydjTp7NF1Ygok6D2Fo44
|
2DP/GGO/Rfcn44urZa1xp4OtzIze9e1iJZIjWQTTVLc
|
||||||
-> ssh-ed25519 elCEeg TKQKeAvY3kn5IuvHoS0SWtX647nEn1txDftt7pPQEG8
|
-> ssh-ed25519 8vZ9CQ U7ViISMwmHpvR3FWB9Pw/QtlrF2u5beitbnDS04hSFc
|
||||||
OPAFqPGdSS3Ud+gFtMXG0shrXSmVrIBzvwc19Ac1NJQ
|
ZebAfjK0qoQe3n9QJ6mP/9L/A1eu6BHT7eaTdhlJLbE
|
||||||
-> ssh-ed25519 8vZ9CQ NGLF9epPqcfbQWcbtMeYIcH0jAZMvO4P7UbKtl8lGRY
|
-> ssh-ed25519 rmrvjw ptV34JwMY2JAK/LhYvM8u0CZ4FZXJUUbXsa98HRvLXs
|
||||||
ZJ5afGOI32OYBpWs6pe15z2IB+5xgO04/OsKp6ixT5o
|
72jkFGbgqHoj/x/ctXRywhhHmgkhRoXPhXKcOvn9yVw
|
||||||
-> ssh-ed25519 rmrvjw tfgMxvtTE2vv2qQJtQk1J+YV2UC/2iZSs0nvbVzV1Hc
|
--- 0gWQm5+bd+WmWs3PITuJ2GSfG2WnCtB3CFiaELSmc9Y
|
||||||
HW86DML/9MXoTs0WWn/zNi4Rh9SBhaHl2WC2bkiLbmw
|
8¾4FeÞÓVþXœÄÑ«¶nBãl‡Tt2ErDQ1÷³Ù`b~)þbÓûBŒ ðŸ<C3B0>u¶/Ç!úQŠ`Ãånû“X–Ë"<05>|ßßà0*~…=kÀg;v5z»IÑàÍRKV]¡s~X’‰hΟ›TMð<}.2*Ñ
¤rž×vR¸<H¨,À²‘ *Ùc6mÆž9ºrƒõ¶²?ÎÞ3Ði«wqœ=xê4ñ Fúϧꃊp” 4s¬)˜ÊJ¼Z®¤9-2åx©ÛüãÛzºÂl<>×
|
||||||
--- Q4amxZgWmdHcf7aqav2TpKA8KX8B8ZHuBhzIcKwbFTs
|
|
||||||
E¾ã™r<0F><\Å?ë @î}ËkRÕ(ƒù;È^3P–ÐJäO“ãSÜ‹Ø â`¶¦ sb?9ø¢¯Âÿx$ñû/<2F>ø~4ÊFŸv_¨þp4{5 GZ²f"’<<3C>x×"q‹ºbj¯:cTuWå>BͶ'<27>ã)/¥×]«ôÁÈëöà•wžÉK%þo B*&Þ׫{\ZŒ•pë£KöŒƒ³Î¯k}ÏåíßÔ}P=Œ¸û·?<õ¬ºyB…‡sbŠ„<C5A0>ÿѪ%â$¢#"
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,19 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA 8acWnck16a9QK194orAzlQgQKINum/cyUzJqO6i0rkg
|
-> ssh-ed25519 V1pwNA bGirG6sUND19fSIwyvtjS3RDjyNUc+kXmzRoN4P1bC8
|
||||||
In2UpSbBR6QoTMTZR/GpZJN3x+5CK3hZcEvr5fORoOI
|
kPJr2S9BlGWWnoggce6dx1OR0/r57AB5Rcgz+qY0qKE
|
||||||
-> ssh-ed25519 4PzZog /YeuXUmWrWFohgOSEmUygaTax668bLZpYO2T7KXl8n8
|
-> ssh-ed25519 4PzZog iciiKCHhfK38SwvSPrdoMK7C250qTV5eBgv657iyKwU
|
||||||
mgnBBIsPycR6RMhLk4HQei5xQLzVHiBHaooOzZdb4YA
|
dEiSS1FuxEpovNAl1HPZk+MRCcjLGiKgTfpi5Ssi38M
|
||||||
-> ssh-ed25519 dA0vRg DidrxIBYvAfPkwNzQXy2+f6inafUafoX8cfUChA7l2Q
|
-> ssh-ed25519 5Nd93w FFgxLg0NNK6Op64FHu24sjaerv3jgDaPz6uKPi/A8AE
|
||||||
/wfxyJAyrQ3Uycxwov+0b9pKKOxPP9mySRK5g4BzMnY
|
ZvHbJ2K3T7CUJSrrpF9fMmP6FWCQ3i6m/5Fi2UNtbew
|
||||||
-> ssh-ed25519 5Nd93w i+oP7x/eHY/Roj4mdpOFHrBe5rxUL7/4617F4O3jPh8
|
-> ssh-ed25519 q8eJgg nVm1H/mbEsGt2O87i7VKUL5do6Rc7n5nvSilUtQ4cBU
|
||||||
yTVD0dR3ljoUSv1qyuKcOvr1fMRm9C8YAZKKjURtCPk
|
WWtsNbIatU5ZostueLntGgKD/nxcavZPheU9afRvbH0
|
||||||
-> ssh-ed25519 q8eJgg Y0yxgrLm9/E8nYBg6Yvd0GPbY7PwCJCumQ9CtgWFxxo
|
-> ssh-ed25519 KVr8rw Nnroz2PgUoJsd/frf+N+b7xdJDAzj3NsmJaogsIkYGk
|
||||||
9BfGPSP7pTTM8Dm9qXagKaw95hbqvvp7qsFkhQgQco4
|
xX73tnCCYGBNA3BRjjPMn/IV+qwjIwEUk+IZbhCCfHY
|
||||||
-> ssh-ed25519 KVr8rw pXha2ebkoIFX9dMX3uRz+0rcbwcQ1mwPnLWp/wCzx10
|
-> ssh-ed25519 fia1eQ GLYqWGKYKwkBRwQ7SxSnErmz1MFw5gPCexfap8VM9Rk
|
||||||
BQQ77pXJl75c6myecmKlEpqHtWB/rSdG6Pwpbxzcfbk
|
Z+dIKhk+JH7W07diX1Abr/Deezkw8xGkzXQuYn1HfJI
|
||||||
-> ssh-ed25519 fia1eQ gCgas1CqGNZ7n09J7iXOvh2xeGgoszn36ABZwiskBBw
|
-> ssh-ed25519 yvS9bw Lwo77pDciewUZemyFc1EUboIlXFCBx3CY6BGuizach4
|
||||||
3a7WMN9aB6ZvwFyP98At9V9K99hD1vkvSJgnY16/JKY
|
AkWzgV1zRJzLtfRxkfhmd80EU8fW1w+5sxMAfWgdEMI
|
||||||
-> ssh-ed25519 CqOTGQ DU1oon3RPo4MCdzigrM2+b3KnTzzTSG/WDSvtBaF1VE
|
--- ac6h3StxSHr+HFsyPIBPENQRcfKzXX8fzJlZ0MER/8c
|
||||||
zwKaQnXT004dMojYFXPz9UERL4ULe7mPZ+vwlZMxFvY
|
å¯ñ„üzwyCÉ>þÖ¸Æ\k¡±êu/<2F>óí{z§©€<>¢Õ®¼<C2AE>º<EFBFBD>ø£jDÇÐÒßã4õ{^mÃDsÝ妞ÂÎ#kiné“xo
|
||||||
--- FWICxx8MWe7awI8P5t0XsbA4Ye0zbxCdMbapTs325HI
|
|
||||||
wûùÿŒ-”¥d!Ñ×=gŸ&ÜžH¬©ó?÷IçÛ’ÚᕪªêÏ<C3AA>Ò¢Ù„öLÒLË-<08>Ù¸ÏñU¿? )ûVýJæb®éÄÎC
|
|
Binary file not shown.
|
@ -1,19 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA aYjPUkjZHoQm86XHx3VbGswLy6VdKNaaHe3f3CGa1ls
|
-> ssh-ed25519 V1pwNA x1pwBhVm/KthEkGo+I95yIzv8A3kZze+KYmwKDZFBmE
|
||||||
HMuWoZj4tY/nWj1nrgOxob1hJJD/mPD3kQnDgJJafeI
|
blUPnpuFaftdnZCdZVCIbay+d/XMVR8raF9cn0+FFDc
|
||||||
-> ssh-ed25519 4PzZog GojGaXIg5RK7WjJSCZxJksXvsm9TZTlbHITuksMivBY
|
-> ssh-ed25519 4PzZog r6D+Bx2eVeQD6lcd+6XYsmvExaxqJQUr8m/PrupzmTg
|
||||||
4oAuKXtJ4ksvusFX3OM3VpdzfArrglxJTN8kCdhIjrU
|
Kglh8yHYc8dvQmUvn2hHV3B7OzPI9ClQEk2U0fjLuGo
|
||||||
-> ssh-ed25519 dA0vRg AzGx90D7iz93gHtSvV5oIbBkwgQEpVY7DTRQIZ16IiQ
|
-> ssh-ed25519 5Nd93w gWJmZgxPsJm/T/gBHzRNZXHX4Qfhii/I/aJyuwy960Q
|
||||||
GlMsor4NxuhHs1HJg62O3ZtPF6CHHFc46din6fm89G8
|
zoj1RMphiFK7GySdSkFpd38s93NWAYs9oOWm44kOApg
|
||||||
-> ssh-ed25519 5Nd93w oAyaZjUSGC9moA7pLR4+dzoKAggFuKUNMnRbn/fm2FQ
|
-> ssh-ed25519 q8eJgg Pyj5EFRrXh4E1kdUrg71nwG/QZb3HEd1meRQIO2x+iI
|
||||||
eHa/2iLWrqv/pPXjgfxtk68MgBX6EYW1YWfs1kXkazU
|
QiFatsVgMKf5ABDoW28Ip6QhPavPGSwMkfHUHWgVdOE
|
||||||
-> ssh-ed25519 q8eJgg xBdXNLjZqKi2o+cbCXGdOOSFnlfPgaxjQb+IK60MYHw
|
-> ssh-ed25519 KVr8rw IZ/LqiJ4Xho6a0pd03TQwD0DiFBz8fMIsF4zzA6BhGQ
|
||||||
dxV3kTuaJ1ANFgRaYchwAa0kjGZHZ3POc/Wrw/per+w
|
dA25Gq5xIXFcvZkI0Xu8YZJzxw7tQmZITAHjfs0gyzQ
|
||||||
-> ssh-ed25519 KVr8rw TR3AjhWy5K1ntzMx3mZZZWGYi7EvcWiFpTHyU/+pV3Q
|
-> ssh-ed25519 fia1eQ HLpuVSNnosCH6jPmgc3sYmmExkitXnY7+QanxRCuOhg
|
||||||
Y/xu0hrhaFZdO9YY8vINp3796HZ+LAL+QvBmIWmoS7A
|
hOqar2lMqJrnMcvJ12vsu29pLsfNyL8v8Ze7a0ykztQ
|
||||||
-> ssh-ed25519 fia1eQ zF6CArF4sVXzIRenfDq7WHz06WXFdo7vMgD15NI/sR4
|
-> ssh-ed25519 uZzB3g fK6dbVNuYiADu4KKkDtb5nF0Oiq88r4OLWxtv9a1VGE
|
||||||
m3sGJNMtAeY/yIq+D2nNncGNxX+KKXt0wCO1WMZmSTI
|
YZVQs1+gn1G4K3sTFTZ21ZZgbYM/c+Sn2IHA7SpVgfk
|
||||||
-> ssh-ed25519 uZzB3g pTocgT3gT7VHD7BWt+rGRIqUZYuh2G+1VeTJxyb7Xxs
|
--- Kla1gxQ5C6NX/1dF6ClooiIhPVvnhnr1iRyvokrk3LI
|
||||||
q5UYfrUVbgaqJCxWKegc0q0PvPR6AZ7AlI5ff4ePfjM
|
tÝ̨ dFŠÞøÓuc…ílIüM«<4D>“Ž<<3C>Mÿs×<73>7<04>ÔK ˆ¥rõ“›<«÷—=ý<>‘¹¼TH¼
RìgCqTNÛZÛº}‰õjúù]˜6çøÓ3‹pò‡µï’Úó\Í’týÛ<>rWÃŽ%Œ¡10±þ<C2B1>#WCjG™Í¼“tÊÊv ‡>cYæm›úCR®…hUó²
|
||||||
--- 9KS9xFBleYVsxyktikZ+TX9++1wqXmDBZxU3g7vwwLU
|
|
||||||
<{r<>U/˜½Œ°ßR¦*°Jd)¥<>“»,#ø9ns!LsÈW#_ÙwÒ<77>¤äÃéÐMÃM‰Ãýð8sÏØ]ß•üƒ—8ð3ˆ¤7@·YNØçXlÿ¸æÜ庚¾Il^0p"aºMf«¬çG SÂdBŸ/»sêéÌ×,¡4!ãÌ<C3A3>rPÖ¢Ñ-Cáòky‚<H˜ƒÆ ÞZì'
|
|
|
@ -1,20 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA RT5AJD4kBHmv0pPNB9TASl4j8h4cIS418P3V9rUUjWs
|
-> ssh-ed25519 V1pwNA a4NtEaRWmr9kaG//BjsnHUViki8x0BVOzhCxs+LPNUU
|
||||||
tupAAUlbIdszxHMO3T/LgFcl0LlyxnSmu2E7MWuCFDI
|
rNnvjk9OL2dMhNtLlM/9fPwba0JKdF7Lgp8OrlPg0+w
|
||||||
-> ssh-ed25519 4PzZog Vq8xPSUr64TjNwWY/5aV9tw2UqmCcflWphHQgl1qNmM
|
-> ssh-ed25519 4PzZog NzrMhIesa3mh17B0GY89q8LykrLZbs2ZbYYKpDui3iY
|
||||||
WBWAJUfJ5+otsz5ubRqIMPvk5p0/h/yQhyg+sV41hBE
|
R40VQvvVK+qkL7z+JYG3/GShIS0NgWhn+gQ5VCJ8/Lk
|
||||||
-> ssh-ed25519 dA0vRg Hkzhdyy2NueyE6zrVxzkXvPBzPiczjCYsT63XpqcSHY
|
-> ssh-ed25519 5Nd93w 07HrZszUf5f1EIpBU7cGyWx4FJes5NdEwzPBHENjWH8
|
||||||
bP2gd7I43q9vjKdyvrxddxxlG9b3mRq+NS8gC6NXc78
|
wkpbLH4QJxN+Vu3JTG5jlBLn3QRih4mC3vHKABuRil0
|
||||||
-> ssh-ed25519 5Nd93w SLwM7TepNucy+RZJpEHm6ZffUInNzsNVqbqYz1QcGFo
|
-> ssh-ed25519 q8eJgg HYQ1pJ7UZ/wt/dzgaNOW+YCYV0JR9WjeTu1jtT8sNDg
|
||||||
nnxkYPOQkHkDFIBOVoB0/96NblBpy3sBwSf4JHjQWMA
|
WDqCEkt/zXkLbYRnqqdGF4yKy0bVKO937BADdp1wcGk
|
||||||
-> ssh-ed25519 q8eJgg GZpY0Ya99WQl+SaQ9+uROl00vRnQ7AKfAL7L/f2UEjc
|
-> ssh-ed25519 KVr8rw gvJBgBa/1llkpO7b/Mu6EgdujBYOldYCln0wIsysyXs
|
||||||
Ylvcy7f/6whLkWW8a9V7cFHQynznmoiK59d1KouN+nA
|
UlizPe1iqUaci6Qd9EGmpoV5BUjYCJ6BL5pOqBEoK3k
|
||||||
-> ssh-ed25519 KVr8rw dkq2lBd6MX7QwX7VLYoERu0TH1kl5mQps+oPtrwcUBc
|
-> ssh-ed25519 fia1eQ uHt487+wluXVQNoB+v7ED+VfUjedj6FPCvV3o5cjHyE
|
||||||
gAdFa9ycxKUDErboYQRgIs1B6QK9ExWLkl6bzwHjOcE
|
tqMzgDKazDYe+79uftPwazyW/ao5sI+BbInU6MV36hs
|
||||||
-> ssh-ed25519 fia1eQ PBbnQ2fhPW2GB5y8DpYAu9Kugb3sdWb86h0bSYwXRzc
|
-> ssh-ed25519 uZzB3g rrVSIoiWI+BQcCozUmwV6AUI33bwNZS7q1PXZHp04W0
|
||||||
1HVvMRgb7c9V53ApEasPXetfBvsz9GSArJOxGtRXbMM
|
WaRnO24QTA5GFexSQMe/U0Br//PNPt9OPIxWuM/vdb0
|
||||||
-> ssh-ed25519 uZzB3g BMRR0RZLtsSAzI1EsQzeeLx1JyCZ7QzhnGvn255rlyk
|
--- 9CleuN83VCsUUIsMLbU8274FdYLcy0IWe57C7ffU8sE
|
||||||
jPWO8HsZFX2TGtRbxwHV6x2OWwbCJb+sPl45f0mAHp0
|
ŸRŒK{aØ ï:@ÏÑHËÂÐ;÷᯽ oîhÙ¬Àû|wé‰PPq7fŠ{]Rï%Í‘rÎy±sëÐÛÉøPû%Î.äă-±5¢DOfuFÒ ÚL.F×ýj4ø—€À$Ã+Y)«f<ånëT¬ÔÑ ¹…^$QûŸð>¹¬vØDÎ0/Y÷}òŽUTlÊ>L³";Ÿà
|
||||||
--- J1ejh1XpuAwFhOdWUga4WiJzgFmFdAgLpp2pe0K7cnA
|
|
||||||
ÒEзP¯s¬*ãÇw´€Þ⎲[ ~Äž6H=].ú!C?‰#›$å5ëáóàAv<0C> øEïý§asöxKñ‚d ÉV’Ñ¿·ï¹DQ¼×²$Ü;µé-S;‡ƒ%0Òï<C392>ÍËEˆ•œÛ‚•ŠÿR0äô¢ø½<C3B8>)ÐFéˆÒ)¦§ãb<C3A3>¦ê1åD¸ è›
|
|
||||||
¡yʪ<ÙßñG®7Ð@åMú
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,20 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA rEsQ/q9FmFkVdXfXfYG3zHN4KvXTfRmZBLEibdzbQBo
|
-> ssh-ed25519 V1pwNA 7I3aWhw7iw2mwJnswJkVfIQ246p80yB//uG+0sEyqTA
|
||||||
fJSlFRK0Oi4OpGBf7Z65U5+OFu4+Ts8MqKe7B2G+gYM
|
adGO+PNHWVXIlDQKyxSPXvZH5XFONNNPr9iLeVq2OfA
|
||||||
-> ssh-ed25519 4PzZog aOPnUpH7F3AS6IauahbpQYYYSX7hSJcix2C1CgUsoi8
|
-> ssh-ed25519 4PzZog 1MB3obSvF4K2IHF8beEcTwZ6gisII/iXq7uGKsDK4GQ
|
||||||
h83ikYOIqng/YKfo2RJc9MwbdaKV0V3DFLj5socRi6A
|
dVPFnOW0d/IuqNtrcLdr9AtNCWV4NYXTtVHHZS+kVHM
|
||||||
-> ssh-ed25519 dA0vRg oK+zniCPQd3Hw/Bm1/cG6d0If6Wq7VVdxR1nrH/MHAQ
|
-> ssh-ed25519 5Nd93w CNxhP+Y45tiXD7WvDbQgo7ejsWfBoq40SygJDhksCz8
|
||||||
c9Q6gyqil1XvTsl/QB9dpvYHa9Bi8bbfWNNfEx2wwo8
|
h3usonhy4UfpnSkuHw5pKEV1WS7IMvWqqd1Y6t8J1lo
|
||||||
-> ssh-ed25519 5Nd93w B1mA5u9RHQ28ZopDLlJh8Z5Q530tJ9wjOzhMzsJSTUE
|
-> ssh-ed25519 q8eJgg yZ7BmDxy1tXK7q51r5oAFvhM9mQYHtexwOILnq/2BD8
|
||||||
KbCpkJ666a/dnnatT5QIcPbEOMP+dUkiMERcc9tRMvc
|
dKwf0oHUUiVBNQod8Zbvxn/YfMnhXNZbqo3Qv5uIdME
|
||||||
-> ssh-ed25519 q8eJgg ps+fnslUfJUthZB+bLXZdvwXgaM/Jsec5YVJiTZy6AU
|
-> ssh-ed25519 KVr8rw L3rQAswf0dc7Ok5AuTFlSl6fuOhcRNKI+donwmJj9B8
|
||||||
vpwxjfgKkieWlxSjWz+b6U0p16zJq4Q+NqO2zXISWbg
|
BO7TsPdPqhxy8KfzPW0QU1qHWKd07fZSQ7TqS7+2ep0
|
||||||
-> ssh-ed25519 KVr8rw sIxHbaWSfSZVoMIchJnvEPH0S1ZrSa0sS+Pa++yUZ1o
|
-> ssh-ed25519 fia1eQ aEskvIGIekFwG8z+jlK3VOlhhBGLYPsEnS/1w42cKg4
|
||||||
3pn9e3IzOF0JxohMP424AFWw6IrCPm+fnS70cfnKZ1U
|
phKYN4MjToHeljP1s4/gb42D4t6dlLnbyut24vBFjB8
|
||||||
-> ssh-ed25519 fia1eQ XPBMusFIRQ2mqQgnYPpbn40heCrqiqa2P5tiq5H9fgY
|
-> ssh-ed25519 uZzB3g lczlYBZbn3f39jfC1fp52EXXRYX3nDrQ2c7X1QlqbRU
|
||||||
7T2S+TJ5jd7cfnCa9iWLaf2zUHG3YIUZFnt/ek3pHUk
|
eBjI6305+Zigh8+3esXt+qbmJOVJIARVPA9ROeedtIk
|
||||||
-> ssh-ed25519 uZzB3g NxRK4Dsc4U7a3MPQoApPTNdybonx2RdXUGc61WB8l0I
|
--- LOIDMgRcQ6CDPqWhDTSW0vzaTV6XggXW2/HDF2nB8fA
|
||||||
YHoL+K85aXdCTAm33Oc9d1/BD6xFXCHZ8uJCqqn8pQ0
|
jtFÞ©±\Ÿµþâà1¦1}Õ&QwÿwVÁNæG©z‹QS?Õ]êK£D:ÒKæ6ßó75GÙp·=ré‚ó‘<0E>›ýã«;$bN8Ô/F¹›V,ç!ŸÓJ¾¬%¡Q<C2A1>˜"²"=ozŠÔ”f‘<66>¼T€£¹ÔåØp“~Œ‚mZ„¶Ÿf÷ŹTŽ2í岪½0_Ô~âôÿ¾¹ü<C2B9>š‡”
|
||||||
--- BHDuf9Sxnh49jes8mUA6Rq2cTNqBxpsz51UZgL2np4c
|
|
||||||
þC
<<3C>\ã2fkÛ×L+\¶‰éÿزµp‘&‹®6~<7E>Ø<àÌv¯sé<73>ærx§.ùO¢Y
|
|
||||||
jÚEA-ýûyã&N2&M•<4D>ïn‚
4!c²™^$¬^;¿XJÁ@éFÿÍûf*²BIÉ<49>`g†e{„ÍGžËm<C38B>ý…ñ?U¨i«toažìŠ<!”3ä— <E28094>Ó›l1~2W7óC
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,20 +1,17 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 V1pwNA wC7Nch41YKEjrwpf/sDR+SUWKm1porqP2DyQhz/MLh0
|
-> ssh-ed25519 V1pwNA rsxHHZv+xG+iJisNaFeX5WbKBhvjd4jntP7+peGvPUc
|
||||||
Mu8NGcxWphZZLgb0F7h10EJGCPiontn6y2lWNSldNGw
|
r5WN+Sea6cecItEpql6KWiYiQL6NjIoC9LjGgH0fuZY
|
||||||
-> ssh-ed25519 4PzZog 6H6fsEDq6xiIkmIy6gUUGL+Mm03HSEaSGnjel3EO8EU
|
-> ssh-ed25519 4PzZog /DJ29u2BYSSpk3GvrKStCQZJSGkCfIJ9Li4zQwuC3S8
|
||||||
xzqv1RZijhQqeiWIFq7ReVzh2JLtBoo9HmZJ1VXrMPU
|
S243BTRk7bfOCmQRzy5+3StzgipYEUn5GazN+lmVRZw
|
||||||
-> ssh-ed25519 dA0vRg UC9Vm0pLH8N9XGxKAZ/3Efe/9SRvx/rlxCYx0u5oljg
|
-> ssh-ed25519 5Nd93w CAau55luv9BjQeDY4zppvkn1KjqgE7IjAMVSac+Mmmc
|
||||||
gF4IFYdCIXfvPPrOsJFvGMf1PzrSyureKpOP66ZHB1Q
|
9W6PtfpUx1A0q5l4Ey0gT519Vs0qqD4c36iNDwlN0mI
|
||||||
-> ssh-ed25519 5Nd93w 338ts/scFEwjZ+3f4Vcd8C9Q//E/ZGoSxIutAxKgpAo
|
-> ssh-ed25519 q8eJgg zMdYGgPr7smwvTAIsgPjecuzjem3Lu3vEMrS37qvyiU
|
||||||
C0vs3fiisD9FsZ8gYJZj/I81mT3Psw3g1jN5ztyuDQ4
|
rgm1RP21BDXYnARlxlpR7ANN4dN7BW1M10fRR9+K4pI
|
||||||
-> ssh-ed25519 q8eJgg eIHEYfE/50IRNy+gnNmqQD4jtVgJRla4ilAQp2gYfjE
|
-> ssh-ed25519 KVr8rw VB5vgPySOPVoZPoylXo+rprkWkUkdEfk84NWdGyQ5lM
|
||||||
bFNJA6KPlBiZWrB5vjyTilXC+rkW+xqVSWcvHln9H/8
|
cxbbOQ4XpTbhHCa2p5mZ583A4JJfxGn+OMuMdhaB7iQ
|
||||||
-> ssh-ed25519 KVr8rw Kq/0pxm2r136ezrKRugC1So2cIIx2VTShPv6WTc6m1E
|
-> ssh-ed25519 fia1eQ 3t2LnYQB9vgsj0d+Z88aiyNsJRLlM/iGpv8Eg/NUyho
|
||||||
W7VrsPf9jkkxqndVjrFuGBwqJR3v4hwig7Fed9xJSAI
|
Qq0zuWYCI3bYzmTSdc6TsTy8RfdeYqnlHVuQiKHly4M
|
||||||
-> ssh-ed25519 fia1eQ 1sA1YfEKVatTzHV5Wd/tzqwRiIPUBQlfoKZkJpxRYig
|
-> ssh-ed25519 YFaxCg a+E0mXvB794agVPpk2uCKl3UHzytGijvXW1LBzLJLk4
|
||||||
lLtPzvg8H0y+FpfGfF/Q5g1nCap1TgW2wipIKU+Q+WA
|
VgqnvihuBnBuJ4JGx9Evu+gaKa7tE43Sg41K9rUs9/w
|
||||||
-> ssh-ed25519 YFaxCg zUYYpsC6BXvPRcIignITwUmvBhfhy9EnxFeCFg1niQk
|
--- hH0UWx2WXfw7HeDUfLAVfpKFwHpJR/fjJhbt1U8euIo
|
||||||
QcmAhpDajw2lJyttDX9kn+0bdugmYYifSl1esaa3xpU
|
úúþ¾5抈áÐsä&±kG}Ê”Eé»'®àá~žÑ5?žAÁk\ ÖÌï’ü<12>òl24ùÚ¶#³ê:~‡zñÖ!8ÿÿ¹*PÝ°
|
||||||
--- 0sQ4g4YxMBe/VBe39F9ZfwVh9XEOHYHqgiX5oakBzPU
|
|
||||||
¦cò±hðWÚp@å
‘
"L·<4C>åÒ[)’ØtŠ¼/<2F>+”MyÍä¾ò'
|
|
||||||
‘8K¼ƒ[©m›}·qÿÈ1«{²µ¯]·OS%ᙯ>»
|
|
|
@ -1,7 +1,6 @@
|
||||||
let
|
let
|
||||||
admin = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK6DjXTAxesXpQ65l659iAjzEb6VpRaWKSg4AXxifPw9 Skynet Admin";
|
admin = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK6DjXTAxesXpQ65l659iAjzEb6VpRaWKSg4AXxifPw9 Skynet Admin";
|
||||||
silver_laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFQWfVKls31yK1aZeAu5mCE+xycI9Kt3Xoj+gfvEonDg silver@helios";
|
silver_laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFQWfVKls31yK1aZeAu5mCE+xycI9Kt3Xoj+gfvEonDg NixOS Laptop";
|
||||||
silver_laptop_2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOmm4CCnpT+tF7vecSrku0+7aDA1z3pQ+PDqZvoCynCR silver@aether";
|
|
||||||
silver_desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN34yTh0nk7HAz8id5Z/wiIX3H7ptleDyXy5bfbemico Desktop";
|
silver_desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN34yTh0nk7HAz8id5Z/wiIX3H7ptleDyXy5bfbemico Desktop";
|
||||||
thenobrainer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKjaKI97NY7bki07kxAvo95196NXCaMvI1Dx7dMW05Q1 thenobrainer";
|
thenobrainer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKjaKI97NY7bki07kxAvo95196NXCaMvI1Dx7dMW05Q1 thenobrainer";
|
||||||
eliza = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIJaVEGPDxG/0gbYJovPB+tiODgBDUABlgc1OokmF3WA eliza-skynet";
|
eliza = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIJaVEGPDxG/0gbYJovPB+tiODgBDUABlgc1OokmF3WA eliza-skynet";
|
||||||
|
@ -10,7 +9,6 @@ let
|
||||||
users = [
|
users = [
|
||||||
admin
|
admin
|
||||||
silver_laptop
|
silver_laptop
|
||||||
silver_laptop_2
|
|
||||||
silver_desktop
|
silver_desktop
|
||||||
thenobrainer
|
thenobrainer
|
||||||
eliza
|
eliza
|
||||||
|
@ -23,7 +21,7 @@ let
|
||||||
galatea = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII3Mke5YtaMkLvXJxJ3y7YAIEBesoJk3qJyJsnoLUWgW root@galatea";
|
galatea = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII3Mke5YtaMkLvXJxJ3y7YAIEBesoJk3qJyJsnoLUWgW root@galatea";
|
||||||
optimus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIqYbbWy3WWtxvD96Hx+RfTx7fJPPirIEa5bOvUILi9r root@optimus";
|
optimus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIqYbbWy3WWtxvD96Hx+RfTx7fJPPirIEa5bOvUILi9r root@optimus";
|
||||||
glados = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6go7ScvOga9vYqC5HglPfh2Nu8wQTpEKpvIZuMAZom root@glados";
|
glados = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6go7ScvOga9vYqC5HglPfh2Nu8wQTpEKpvIZuMAZom root@glados";
|
||||||
wheatly = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIPlgCGtyvd3xwYg9ZNyjTJNB/LvUSJO01SzN8PGcDLP root@wheatly";
|
wheatly = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEehcrWqZbTr4+do1ONE9Il/SayP0xXMvhozm845tonN root@wheatly";
|
||||||
kitt = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPble6JA2O/Wwv0Fztl/kiV0qj+QMjS+jTTj1Sz8k9xK root@kitt";
|
kitt = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPble6JA2O/Wwv0Fztl/kiV0qj+QMjS+jTTj1Sz8k9xK root@kitt";
|
||||||
gir = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINL2qk/e0QBqpTQ2xDjF7Cv4c92jJ53jW2fuu88hAF/u root@gir";
|
gir = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINL2qk/e0QBqpTQ2xDjF7Cv4c92jJ53jW2fuu88hAF/u root@gir";
|
||||||
neuromancer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEFAs6lBJSUBRhtZO3zGKhEIlWvqnHFGAQuQ//9FdAn6 root@neuromancer";
|
neuromancer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEFAs6lBJSUBRhtZO3zGKhEIlWvqnHFGAQuQ//9FdAn6 root@neuromancer";
|
||||||
|
@ -149,6 +147,7 @@ in {
|
||||||
"backup/restic_pw.age".publicKeys = users ++ restic;
|
"backup/restic_pw.age".publicKeys = users ++ restic;
|
||||||
|
|
||||||
# discord bot and discord
|
# discord bot and discord
|
||||||
|
"discord/ldap.age".publicKeys = users ++ ldap ++ discord;
|
||||||
"discord/token.age".publicKeys = users ++ discord;
|
"discord/token.age".publicKeys = users ++ discord;
|
||||||
|
|
||||||
# email stuff
|
# email stuff
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue