initial commit, after deletion :)
This commit is contained in:
commit
9ec37597b3
20 changed files with 1006 additions and 0 deletions
37
.forgejo/workflows/deploy.yaml
Normal file
37
.forgejo/workflows/deploy.yaml
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
- name: install necessary packages
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
apt update
|
||||||
|
apt install rsync -y
|
||||||
|
- name: add ssh key
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
mkdir -p /root/.ssh
|
||||||
|
ssh-keyscan toufy.me >> /root/.ssh/known_hosts
|
||||||
|
chmod -R 600 /root/.ssh
|
||||||
|
eval $(ssh-agent -s)
|
||||||
|
echo "${{ secrets.SSH_KEY }}" | tr -d "\r" | ssh-add -
|
||||||
|
- name: copy repo to target
|
||||||
|
run: rsync -az . root@toufy.me:/tmp/deploy
|
||||||
|
- name: nixos-rebuild test
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
ssh root@toufy.me -C "nixos-rebuild test --flake /tmp/deploy --impure"
|
||||||
|
[ "$?" == 0 ] || exit 1
|
||||||
|
- name: nixos-rebuild switch
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
ssh root@toufy.me -C "nixos-rebuild switch --flake /tmp/deploy --impure"
|
||||||
|
[ "$?" == 0 ] || exit 1
|
||||||
|
- name: clean up
|
||||||
|
run: ssh root@toufy.me -C "rm -rf /tmp/deploy"
|
||||||
7
.sops.yaml
Normal file
7
.sops.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
keys:
|
||||||
|
- &toufy age1jcl6pr27ne5qmnadh723lhlu0js5dnt050akvaxmhvapm3yz9yqqkpakxs
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets.yaml$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *toufy
|
||||||
30
config/configuration.nix
Normal file
30
config/configuration.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{config, ...}: {
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||||
|
networking.hostName = "adonis";
|
||||||
|
networking.firewall.logRefusedPackets = true;
|
||||||
|
|
||||||
|
customOps.owner = "toufy";
|
||||||
|
customOps.domain = "toufy.me";
|
||||||
|
|
||||||
|
sops.secrets."ssh/authorizedKeys/owner" = {};
|
||||||
|
|
||||||
|
users.users.root.openssh.authorizedKeys.keyFiles = [
|
||||||
|
config.sops.secrets."ssh/authorizedKeys/owner".path
|
||||||
|
];
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [22];
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
KbdInteractiveAuthentication = false;
|
||||||
|
AllowUsers = null;
|
||||||
|
UseDns = true;
|
||||||
|
X11Forwarding = false;
|
||||||
|
PermitRootLogin = "prohibit-password";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
23
config/default.nix
Normal file
23
config/default.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
{inputs, ...}: {
|
||||||
|
imports = [
|
||||||
|
./disks.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
./configuration.nix
|
||||||
|
./options.nix
|
||||||
|
./devops
|
||||||
|
./mail
|
||||||
|
./nvim
|
||||||
|
./http
|
||||||
|
./search
|
||||||
|
];
|
||||||
|
system.stateVersion = "25.05";
|
||||||
|
|
||||||
|
system.autoUpgrade = {
|
||||||
|
enable = true;
|
||||||
|
flake = inputs.self.outPath;
|
||||||
|
flags = ["--print-build-logs"];
|
||||||
|
dates = "00:00";
|
||||||
|
runGarbageCollection = true;
|
||||||
|
operation = "switch";
|
||||||
|
};
|
||||||
|
}
|
||||||
31
config/devops/actions_runner.nix
Normal file
31
config/devops/actions_runner.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
sops.secrets."actions_runner/token" = {};
|
||||||
|
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
sops.secrets."ssh/authorizedKeys/nix-deploy" = {};
|
||||||
|
|
||||||
|
users.users.root.openssh.authorizedKeys.keyFiles = [
|
||||||
|
config.sops.secrets."ssh/authorizedKeys/nix-deploy".path
|
||||||
|
];
|
||||||
|
|
||||||
|
services.gitea-actions-runner = {
|
||||||
|
package = pkgs.forgejo-runner;
|
||||||
|
instances.default = {
|
||||||
|
enable = true;
|
||||||
|
name = "monolith";
|
||||||
|
url = config.services.forgejo.settings.actions.DEFAULT_ACTIONS_URL;
|
||||||
|
tokenFile = config.sops.secrets."actions_runner/token".path;
|
||||||
|
labels = [
|
||||||
|
"debian-latest:docker://debian:latest"
|
||||||
|
"ubuntu-latest:docker://node:current-bullseye"
|
||||||
|
"alpine-latest:docker://node:current-alpine"
|
||||||
|
"nix-latest:docker://nixos/nix:latest"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
config/devops/default.nix
Normal file
6
config/devops/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./forgejo.nix
|
||||||
|
./actions_runner.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
128
config/devops/forgejo.nix
Normal file
128
config/devops/forgejo.nix
Normal file
|
|
@ -0,0 +1,128 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
customDomain = config.customOps.domain;
|
||||||
|
mail = "forgejo@${customDomain}";
|
||||||
|
cfg = config.services.forgejo;
|
||||||
|
srv = cfg.settings.server;
|
||||||
|
in {
|
||||||
|
sops.secrets = {
|
||||||
|
"forgejo/mail".owner = "forgejo";
|
||||||
|
"forgejo/admin".owner = "forgejo";
|
||||||
|
"mailserver/forgejo".owner = "dovecot2";
|
||||||
|
};
|
||||||
|
|
||||||
|
mailserver.loginAccounts.${mail} = lib.mkIf config.mailserver.enable {
|
||||||
|
hashedPasswordFile = config.sops.secrets."mailserver/forgejo".path;
|
||||||
|
sendOnly = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts.${srv.DOMAIN} = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
extraConfig = ''
|
||||||
|
client_max_body_size 512M;
|
||||||
|
'';
|
||||||
|
locations."/".proxyPass = "http://localhost:${toString srv.HTTP_PORT}";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
lfs.enable = true;
|
||||||
|
settings = {
|
||||||
|
DEFAULT = {
|
||||||
|
APP_NAME = "git.${customDomain}";
|
||||||
|
APP_SLOGAN = "the git repositories of ${config.customOps.owner}'s projects";
|
||||||
|
APP_DISPLAY_NAME_FORMAT = "${config.customOps.owner}'s forge | {APP_NAME}";
|
||||||
|
};
|
||||||
|
server = {
|
||||||
|
DOMAIN = "git.${customDomain}";
|
||||||
|
ROOT_URL = "https://${srv.DOMAIN}/";
|
||||||
|
HTTP_PORT = 3000;
|
||||||
|
SSH_PORT = lib.head config.services.openssh.ports;
|
||||||
|
LANDING_PAGE = "/${config.customOps.owner}";
|
||||||
|
};
|
||||||
|
actions = {
|
||||||
|
ENABLED = true;
|
||||||
|
DEFAULT_ACTIONS_URL = "https://${srv.DOMAIN}";
|
||||||
|
};
|
||||||
|
repository = {
|
||||||
|
DISABLE_STARS = true;
|
||||||
|
};
|
||||||
|
ui = {
|
||||||
|
DEFAULT_THEME = "forgejo-auto";
|
||||||
|
THEMES = "forgejo-auto,forgejo-light,forgejo-dark";
|
||||||
|
DEFAULT_SHOW_FULL_NAME = true;
|
||||||
|
PREFERRED_TIMESTAMP_TENSE = "absolute";
|
||||||
|
};
|
||||||
|
"ui.meta" = {
|
||||||
|
AUTHOR = cfg.settings.DEFAULT.APP_NAME;
|
||||||
|
DESCRIPTION = cfg.settings.DEFAULT.APP_SLOGAN;
|
||||||
|
};
|
||||||
|
admin = {
|
||||||
|
DISABLE_REGULAR_ORG_CREATION = true;
|
||||||
|
};
|
||||||
|
security = {
|
||||||
|
INSTALL_LOCK = true;
|
||||||
|
GLOBAL_TWO_FACTOR_REQUIREMENT = "all";
|
||||||
|
PASSWORD_COMPLEXITY = "lower,upper,digit,spec";
|
||||||
|
DISABLE_QUERY_AUTH_TOKEN = true;
|
||||||
|
};
|
||||||
|
service = {
|
||||||
|
DISABLE_REGISTRATION = true;
|
||||||
|
VALID_SITE_URL_SCHEMES = "https";
|
||||||
|
};
|
||||||
|
"service.explore" = {
|
||||||
|
DISABLE_USERS_PAGE = true;
|
||||||
|
};
|
||||||
|
picture = {
|
||||||
|
ENABLE_FEDERATED_AVATAR = true;
|
||||||
|
AVATAR_MAX_FILE_SIZE = 10485760;
|
||||||
|
REPOSITORY_AVATAR_FALLBACK = "random";
|
||||||
|
};
|
||||||
|
federation = {
|
||||||
|
ENABLED = true;
|
||||||
|
};
|
||||||
|
mailer = lib.mkIf config.mailserver.enable {
|
||||||
|
ENABLED = true;
|
||||||
|
SMTP_ADDR = config.mailserver.fqdn;
|
||||||
|
FROM = mail;
|
||||||
|
USER = mail;
|
||||||
|
};
|
||||||
|
i18n = {
|
||||||
|
LANGS =
|
||||||
|
"en-US,zh-CN,zh-HK,zh-TW,da,de-DE,nds,fr-FR"
|
||||||
|
+ ",nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR"
|
||||||
|
+ ",pt-PT,pl-PL,bg,it-IT,fi-FI,fil,eo,tr-TR"
|
||||||
|
+ ",cs-CZ,sl,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,"
|
||||||
|
+ "id-ID,ar";
|
||||||
|
NAMES =
|
||||||
|
"English,简体中文,繁體中文(香港)"
|
||||||
|
+ ",繁體中文(台灣),Dansk,Deutsch,Plattdüütsch"
|
||||||
|
+ ",Français,Nederlands,Latviešu,Русский,Українська"
|
||||||
|
+ ",日本語,Español,Português do Brasil"
|
||||||
|
+ ",Português de Portugal,Polski,Български,Italiano"
|
||||||
|
+ ",Suomi,Filipino,Esperanto,Türkçe,Čeština,Slovenščina"
|
||||||
|
+ ",Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv"
|
||||||
|
+ ",Bahasa Indonesia,العربية";
|
||||||
|
};
|
||||||
|
other = {
|
||||||
|
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
secrets = lib.mkIf config.mailserver.enable {
|
||||||
|
mailer.PASSWD = config.sops.secrets."forgejo/mail".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.forgejo.preStart = let
|
||||||
|
adminCmd = "${lib.getExe cfg.package} admin user";
|
||||||
|
passwd = config.sops.secrets."forgejo/admin".path;
|
||||||
|
user = config.customOps.owner;
|
||||||
|
email = "root@${config.mailserver.fqdn}";
|
||||||
|
in ''
|
||||||
|
${adminCmd} create --admin --email "${email}" --username ${user} --password "$(tr -d '\n' < ${passwd})" || true
|
||||||
|
'';
|
||||||
|
}
|
||||||
60
config/disks.nix
Normal file
60
config/disks.nix
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/vda";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
priority = 1;
|
||||||
|
name = "ESP";
|
||||||
|
start = "1M";
|
||||||
|
end = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = ["fmask=0022" "dmask=0022"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
extraArgs = ["-f"];
|
||||||
|
subvolumes = {
|
||||||
|
"/root" = {
|
||||||
|
mountOptions = ["compress=zstd"];
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
|
mountOptions = ["compress=zstd"];
|
||||||
|
mountpoint = "/home";
|
||||||
|
};
|
||||||
|
"/nix" = {
|
||||||
|
mountOptions = [
|
||||||
|
"compress=zstd"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/nix";
|
||||||
|
};
|
||||||
|
"/swap" = {
|
||||||
|
mountpoint = "/swap";
|
||||||
|
mountOptions = ["noatime"];
|
||||||
|
swap.swapfile = {
|
||||||
|
size = "8G";
|
||||||
|
path = "swapfile";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
16
config/hardware-configuration.nix
Normal file
16
config/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk"];
|
||||||
|
boot.initrd.kernelModules = [];
|
||||||
|
boot.kernelModules = [];
|
||||||
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
}
|
||||||
29
config/http/default.nix
Normal file
29
config/http/default.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{config, ...}: let
|
||||||
|
customDomain = config.customOps.domain;
|
||||||
|
in {
|
||||||
|
networking.firewall.allowedTCPPorts = [80 443];
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedUwsgiSettings = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
recommendedBrotliSettings = true;
|
||||||
|
|
||||||
|
sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
|
||||||
|
|
||||||
|
virtualHosts.${customDomain} = {
|
||||||
|
root = "/var/www/${customDomain}";
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
defaults.email = "security@${config.mailserver.fqdn}";
|
||||||
|
};
|
||||||
|
}
|
||||||
60
config/mail/default.nix
Normal file
60
config/mail/default.nix
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
{config, ...}: let
|
||||||
|
mailDomain = config.customOps.domain;
|
||||||
|
in {
|
||||||
|
sops.secrets = {
|
||||||
|
"mailserver/contact".owner = "dovecot2";
|
||||||
|
};
|
||||||
|
|
||||||
|
mailserver = {
|
||||||
|
enable = true;
|
||||||
|
stateVersion = 3;
|
||||||
|
fqdn = mailDomain;
|
||||||
|
domains = [mailDomain];
|
||||||
|
|
||||||
|
systemDomain = mailDomain;
|
||||||
|
systemName = mailDomain;
|
||||||
|
|
||||||
|
dmarcReporting.enable = true;
|
||||||
|
fullTextSearch.enable = true;
|
||||||
|
|
||||||
|
mailboxes = {
|
||||||
|
Archive = {
|
||||||
|
auto = "subscribe";
|
||||||
|
specialUse = "Archive";
|
||||||
|
};
|
||||||
|
Drafts = {
|
||||||
|
auto = "subscribe";
|
||||||
|
specialUse = "Drafts";
|
||||||
|
};
|
||||||
|
Junk = {
|
||||||
|
auto = "subscribe";
|
||||||
|
specialUse = "Junk";
|
||||||
|
};
|
||||||
|
Sent = {
|
||||||
|
auto = "subscribe";
|
||||||
|
specialUse = "Sent";
|
||||||
|
};
|
||||||
|
Trash = {
|
||||||
|
auto = "subscribe";
|
||||||
|
specialUse = "Trash";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
loginAccounts = {
|
||||||
|
"contact@${mailDomain}" = {
|
||||||
|
hashedPasswordFile = config.sops.secrets."mailserver/contact".path;
|
||||||
|
aliases = [
|
||||||
|
"root@${mailDomain}"
|
||||||
|
"postmaster@${mailDomain}"
|
||||||
|
"security@${mailDomain}"
|
||||||
|
"abuse@${mailDomain}"
|
||||||
|
"webmaster@${mailDomain}"
|
||||||
|
"admin@${mailDomain}"
|
||||||
|
"info@${mailDomain}"
|
||||||
|
"support@${mailDomain}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
certificateScheme = "acme";
|
||||||
|
};
|
||||||
|
}
|
||||||
27
config/nvim/config.lua
Normal file
27
config/nvim/config.lua
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
-- global
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
vim.g.maplocalleader = "\\"
|
||||||
|
|
||||||
|
-- opts
|
||||||
|
vim.opt.nu = true
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
vim.opt.shiftwidth = 4
|
||||||
|
vim.opt.tabstop = 4
|
||||||
|
vim.opt.softtabstop = 4
|
||||||
|
vim.opt.expandtab = false
|
||||||
|
vim.opt.smartindent = true
|
||||||
|
vim.opt.wrap = false
|
||||||
|
vim.opt.hlsearch = false
|
||||||
|
vim.opt.incsearch = true
|
||||||
|
vim.opt.scrolloff = 6
|
||||||
|
vim.opt.cursorline = true
|
||||||
|
vim.opt.cursorcolumn = true
|
||||||
|
vim.opt.mouse = nil
|
||||||
|
vim.opt.clipboard = "unnamedplus"
|
||||||
|
vim.opt.completeopt = { "menu", "menuone", "noselect" }
|
||||||
|
vim.opt.winborder = "rounded"
|
||||||
|
|
||||||
|
-- keymap
|
||||||
|
vim.keymap.set("n", "<leader>cd", vim.cmd.Ex)
|
||||||
|
vim.keymap.set("n", "<leader>|", vim.cmd.vsplit)
|
||||||
|
vim.keymap.set("n", "<leader>_", vim.cmd.split)
|
||||||
14
config/nvim/default.nix
Normal file
14
config/nvim/default.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
|
||||||
|
configure = {
|
||||||
|
customRC = ''
|
||||||
|
luafile ${./config.lua}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
21
config/options.nix
Normal file
21
config/options.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{lib, ...}: {
|
||||||
|
options = with lib; {
|
||||||
|
customOps = mkOption {
|
||||||
|
description = "custom options";
|
||||||
|
type = types.submodule {
|
||||||
|
options = {
|
||||||
|
owner = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = null;
|
||||||
|
description = "machine owner username";
|
||||||
|
};
|
||||||
|
domain = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = null;
|
||||||
|
description = "machine domain name";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
95
config/search/default.nix
Normal file
95
config/search/default.nix
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
{config, ...}: let
|
||||||
|
searxDomain = "search.${config.customOps.domain}";
|
||||||
|
in {
|
||||||
|
imports = [./engines.nix];
|
||||||
|
|
||||||
|
sops.secrets.searx.owner = "searx";
|
||||||
|
|
||||||
|
services.searx = {
|
||||||
|
enable = true;
|
||||||
|
redisCreateLocally = true;
|
||||||
|
|
||||||
|
limiterSettings = {
|
||||||
|
real_ip = {
|
||||||
|
x_for = 1;
|
||||||
|
ipv4_prefix = 32;
|
||||||
|
ipv6_prefix = 56;
|
||||||
|
};
|
||||||
|
|
||||||
|
botdetection = {
|
||||||
|
ip_limit = {
|
||||||
|
filter_link_local = true;
|
||||||
|
link_token = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
debug = false;
|
||||||
|
instance_name = "${config.customOps.owner}'s search";
|
||||||
|
donation_url = false;
|
||||||
|
contact_url = false;
|
||||||
|
privacypolicy_url = false;
|
||||||
|
enable_metrics = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ui = {
|
||||||
|
static_use_hash = true;
|
||||||
|
default_locale = "en";
|
||||||
|
query_in_title = false;
|
||||||
|
infinite_scroll = true;
|
||||||
|
center_alignment = false;
|
||||||
|
default_theme = "simple";
|
||||||
|
theme_args.simple_style = "auto";
|
||||||
|
search_on_category_select = true;
|
||||||
|
hotkeys = "vim";
|
||||||
|
url_formatting = "full";
|
||||||
|
};
|
||||||
|
|
||||||
|
search = {
|
||||||
|
safe_search = 0;
|
||||||
|
autocomplete_min = 2;
|
||||||
|
autocomplete = "duckduckgo";
|
||||||
|
favicon_resolver = "";
|
||||||
|
ban_time_on_fail = 5;
|
||||||
|
max_ban_time_on_fail = 120;
|
||||||
|
};
|
||||||
|
|
||||||
|
server = {
|
||||||
|
base_url = "https://${searxDomain}";
|
||||||
|
port = 8888;
|
||||||
|
bind_address = "127.0.0.1";
|
||||||
|
secret_key = config.sops.secrets.searx.path;
|
||||||
|
limiter = true;
|
||||||
|
public_instance = true;
|
||||||
|
image_proxy = false;
|
||||||
|
method = "POST";
|
||||||
|
};
|
||||||
|
|
||||||
|
outgoing = {
|
||||||
|
request_timeout = 5.0;
|
||||||
|
max_request_timeout = 15.0;
|
||||||
|
pool_connections = 100;
|
||||||
|
pool_maxsize = 15;
|
||||||
|
enable_http2 = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
enabled_plugins = [
|
||||||
|
"Basic Calculator"
|
||||||
|
"Hash plugin"
|
||||||
|
"Tor check plugin"
|
||||||
|
"Open Access DOI rewrite"
|
||||||
|
"Hostnames plugin"
|
||||||
|
"Unit converter plugin"
|
||||||
|
"Tracker URL remover"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts.${searxDomain} = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/".proxyPass = "http://localhost:8888";
|
||||||
|
};
|
||||||
|
}
|
||||||
163
config/search/engines.nix
Normal file
163
config/search/engines.nix
Normal file
|
|
@ -0,0 +1,163 @@
|
||||||
|
{lib, ...}: {
|
||||||
|
services.searx.settings.engines = lib.mapAttrsToList (name: value: {inherit name;} // value) {
|
||||||
|
# unnecessary
|
||||||
|
"dictzone".disabled = true;
|
||||||
|
"lingva".disabled = true;
|
||||||
|
"mymemory translated".disabled = true;
|
||||||
|
"mozhi".disabled = true;
|
||||||
|
"presearch".disabled = true;
|
||||||
|
"presearch images".disabled = true;
|
||||||
|
"presearch videos".disabled = true;
|
||||||
|
"presearch news".disabled = true;
|
||||||
|
"seznam".disabled = true;
|
||||||
|
"goo".disabled = true;
|
||||||
|
"naver".disabled = true;
|
||||||
|
"naver videos".disabled = true;
|
||||||
|
"naver images".disabled = true;
|
||||||
|
"naver news".disabled = true;
|
||||||
|
"alexandria".disabled = true;
|
||||||
|
"ask".disabled = true;
|
||||||
|
"crowdview".disabled = true;
|
||||||
|
"mwmbl".disabled = true;
|
||||||
|
"searchmysite".disabled = true;
|
||||||
|
"stract".disabled = true;
|
||||||
|
"bpb".disabled = true;
|
||||||
|
"tagesschau".disabled = true;
|
||||||
|
"wikimini".disabled = true;
|
||||||
|
"findthatmeme".disabled = true;
|
||||||
|
"frinkiac".disabled = true;
|
||||||
|
"livespace".disabled = true;
|
||||||
|
"sepiasearch".disabled = true;
|
||||||
|
"mediathekviewweb".disabled = true;
|
||||||
|
"ina".disabled = true;
|
||||||
|
"niconio".disabled = true;
|
||||||
|
"acfun".disabled = true;
|
||||||
|
"iqiyi".disabled = true;
|
||||||
|
"wolframalpha".disabled = true;
|
||||||
|
"ansa".disabled = true;
|
||||||
|
"il post".disabled = true;
|
||||||
|
"deezer".disabled = true;
|
||||||
|
"habrahabr".disabled = true;
|
||||||
|
"btdigg".disabled = true;
|
||||||
|
"duden".disabled = true;
|
||||||
|
"woxikon.de synonyme".disabled = true;
|
||||||
|
"jisho".disabled = true;
|
||||||
|
"moviepilot".disabled = true;
|
||||||
|
"senscritique".disabled = true;
|
||||||
|
"geizhals".disabled = true;
|
||||||
|
"duckduckgo weather".disabled = true;
|
||||||
|
"openmeteo".disabled = true;
|
||||||
|
"fyyd".disabled = true;
|
||||||
|
"yummly".disabled = true;
|
||||||
|
"chefkoch".disabled = true;
|
||||||
|
"destatis".disabled = true;
|
||||||
|
# big brother
|
||||||
|
"google".disabled = true;
|
||||||
|
"google play movies".disabled = true;
|
||||||
|
"google play apps".disabled = true;
|
||||||
|
"google news".disabled = true;
|
||||||
|
"google images".disabled = true;
|
||||||
|
"google videos".disabled = true;
|
||||||
|
"google scholar".disabled = true;
|
||||||
|
"youtube".disabled = true;
|
||||||
|
"bing".disabled = true;
|
||||||
|
"bing images".disabled = true;
|
||||||
|
"bing videos".disabled = true;
|
||||||
|
"bing news".disabled = true;
|
||||||
|
"microsoft learn".disabled = true;
|
||||||
|
"material icons".disabled = true;
|
||||||
|
"apple maps".disabled = true;
|
||||||
|
"apple app store".disabled = true;
|
||||||
|
"goodreads".disabled = true;
|
||||||
|
# captcha
|
||||||
|
"mojeek".disabled = true;
|
||||||
|
"mojeek images".disabled = true;
|
||||||
|
"mojeek news".disabled = true;
|
||||||
|
"qwant".disabled = true;
|
||||||
|
"qwant images".disabled = true;
|
||||||
|
"qwant videos".disabled = true;
|
||||||
|
"qwant news".disabled = true;
|
||||||
|
"cppreference".disabled = true;
|
||||||
|
"lib.rs".disabled = true;
|
||||||
|
"sourcehut".disabled = true;
|
||||||
|
"free software directory".disabled = true;
|
||||||
|
"searchcode code".disabled = true;
|
||||||
|
"pdbe".disabled = true;
|
||||||
|
"1337x".disabled = true;
|
||||||
|
"kickass".disabled = true;
|
||||||
|
"library genesis".disabled = true;
|
||||||
|
"openrepos".disabled = true;
|
||||||
|
"tokyotoshokan".disabled = true;
|
||||||
|
"startpage".disabled = true;
|
||||||
|
"mulvaddelta".disabled = true;
|
||||||
|
"mulvaddelta brave".disabled = true;
|
||||||
|
"brave".disabled = true;
|
||||||
|
# non-free
|
||||||
|
"tineye".disabled = true;
|
||||||
|
"1x".disabled = true;
|
||||||
|
"adobe stock".disabled = true;
|
||||||
|
"adobe stock video".disabled = true;
|
||||||
|
"adobe stock audio".disabled = true;
|
||||||
|
"deviantart".disabled = true;
|
||||||
|
"flickr".disabled = true;
|
||||||
|
"imgur".disabled = true;
|
||||||
|
"library of congress".disabled = true;
|
||||||
|
"pinterest".disabled = true;
|
||||||
|
"unsplash".disabled = true;
|
||||||
|
"bilibili".disabled = true;
|
||||||
|
"dailymotion".disabled = true;
|
||||||
|
"vimeo".disabled = true;
|
||||||
|
"yahoo".disabled = true;
|
||||||
|
"yahoo news".disabled = true;
|
||||||
|
"genius".disabled = true;
|
||||||
|
"mixcloud".disabled = true;
|
||||||
|
"soundcloud".disabled = true;
|
||||||
|
"huggingface".disabled = true;
|
||||||
|
"huggingface datasets".disabled = true;
|
||||||
|
"huggingface spaces".disabled = true;
|
||||||
|
"9gag".disabled = true;
|
||||||
|
"reddit".disabled = true;
|
||||||
|
"imdb".disabled = true;
|
||||||
|
"rottentomatoes".disabled = true;
|
||||||
|
# shady
|
||||||
|
"right dao".disabled = true;
|
||||||
|
"quark".disabled = true;
|
||||||
|
"quark images".disabled = true;
|
||||||
|
"sogou".disabled = true;
|
||||||
|
"sogou images".disabled = true;
|
||||||
|
"sogou wechat".disabled = true;
|
||||||
|
"sogou videos".disabled = true;
|
||||||
|
# LLM
|
||||||
|
"cloudflareai".disabled = true;
|
||||||
|
"yacy".disabled = true;
|
||||||
|
"yacy images".disabled = true;
|
||||||
|
"yep".disabled = true;
|
||||||
|
"yep images".disabled = true;
|
||||||
|
"yep news".disabled = true;
|
||||||
|
"360search".disabled = true;
|
||||||
|
"360search videos".disabled = true;
|
||||||
|
"baidu".disabled = true;
|
||||||
|
"baidu images".disabled = true;
|
||||||
|
"baidu kaifa".disabled = true;
|
||||||
|
"seekr images".disabled = true;
|
||||||
|
"seekr news".disabled = true;
|
||||||
|
"seekr videos".disabled = true;
|
||||||
|
"github".disabled = true;
|
||||||
|
# censorship
|
||||||
|
"reuters".disabled = true;
|
||||||
|
# far-right/disinformation/misinformation
|
||||||
|
"bitchute".disabled = true;
|
||||||
|
"rumble".disabled = true;
|
||||||
|
"bandcamp".disabled = true;
|
||||||
|
# slow
|
||||||
|
"crossref".disabled = true;
|
||||||
|
"wikidata".disabled = true;
|
||||||
|
|
||||||
|
# enabled
|
||||||
|
"wiby".disabled = false;
|
||||||
|
"duckduckgo".disabled = false;
|
||||||
|
"duckduckgo images".disabled = false;
|
||||||
|
"duckduckgo videos".disabled = false;
|
||||||
|
"duckduckgo news".disabled = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
188
flake.lock
generated
Normal file
188
flake.lock
generated
Normal file
|
|
@ -0,0 +1,188 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"blobs": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1604995301,
|
||||||
|
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766150702,
|
||||||
|
"narHash": "sha256-P0kM+5o+DKnB6raXgFEk3azw8Wqg5FL6wyl9jD+G5a4=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "916506443ecd0d0b4a0f4cf9d40a3c22ce39b378",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1761588595,
|
||||||
|
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"git-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": [
|
||||||
|
"simple-nixos-mailserver",
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"simple-nixos-mailserver",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1763319842,
|
||||||
|
"narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"simple-nixos-mailserver",
|
||||||
|
"git-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766736597,
|
||||||
|
"narHash": "sha256-BASnpCLodmgiVn0M1MU2Pqyoz0aHwar/0qLkp7CjvSQ=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "f560ccec6b1116b22e6ed15f4c510997d99d5852",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-25.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1764020296,
|
||||||
|
"narHash": "sha256-6zddwDs2n+n01l+1TG6PlyokDdXzu/oBmEejcH5L5+A=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a320ce8e6e2cc6b4397eef214d202a50a4583829",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-25.11-small",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"disko": "disko",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"simple-nixos-mailserver": "simple-nixos-mailserver",
|
||||||
|
"sops-nix": "sops-nix"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"simple-nixos-mailserver": {
|
||||||
|
"inputs": {
|
||||||
|
"blobs": "blobs",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"git-hooks": "git-hooks",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766537863,
|
||||||
|
"narHash": "sha256-HEt+wbazRgJYeY+lgj65bxhPyVc4x7NEB2bs5NU6DF8=",
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "nixos-mailserver",
|
||||||
|
"rev": "23f0a53ca6e58e61e1ea2b86791c69b79c91656d",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"ref": "nixos-25.11",
|
||||||
|
"repo": "nixos-mailserver",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sops-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766894905,
|
||||||
|
"narHash": "sha256-pn8AxxfajqyR/Dmr1wnZYdUXHgM3u6z9x0Z1Ijmz2UQ=",
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"rev": "61b39c7b657081c2adc91b75dd3ad8a91d6f07a7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
37
flake.nix
Normal file
37
flake.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
description = "toufy's server config";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-25.11";
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = inputs @ {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
sops-nix,
|
||||||
|
simple-nixos-mailserver,
|
||||||
|
disko,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
nixosConfigurations.adonis = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
specialArgs = {inherit inputs;};
|
||||||
|
modules = [
|
||||||
|
./config
|
||||||
|
./secrets.nix
|
||||||
|
disko.nixosModules.disko
|
||||||
|
sops-nix.nixosModules.sops
|
||||||
|
simple-nixos-mailserver.nixosModule
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
5
secrets.nix
Normal file
5
secrets.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
sops.defaultSopsFile = ./secrets.yaml;
|
||||||
|
sops.defaultSopsFormat = "yaml";
|
||||||
|
sops.age.keyFile = "/root/.config/sops/age/keys.txt";
|
||||||
|
}
|
||||||
29
secrets.yaml
Normal file
29
secrets.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
ssh:
|
||||||
|
authorizedKeys:
|
||||||
|
owner: ENC[AES256_GCM,data:LqatOCIAcAvYF354I5itm/rAp5S8UdyONgtK/CEvUq66isiqp+QhV3L1WiW10R8OOm4+nD70uzu4hMnSVxGfNPd8ysE7PUoTGstNFf06uwDtbRiVkJ8=,iv:LW2LwZexi/WliJ7zsoWG0nUSjk2rk5y5++LFI80qLBQ=,tag:3MpE+WVLtMwl8XeFno5FBQ==,type:str]
|
||||||
|
nix-deploy: ENC[AES256_GCM,data:UVCAdWsy0U53uF2LXNQWI8zqI9LGWS/PpS05qhNuBekZiUXUhC0TMK9RlPhbmjTGfWiQi/bJOzUlZq7C/KRLxIGV6ulAlrsS8YHhX3Oo3r0/o30d/yPMjG+sysdV,iv:UjjFJQlt+kcYHNGI+gVXcee0lFOn2DpF0+R/HOnhWCk=,tag:zYDRE878cL6FhTsoDrI/jw==,type:str]
|
||||||
|
mailserver:
|
||||||
|
contact: ENC[AES256_GCM,data:bDC9e4GzBn6c+yT4NOOVlcqQ86ynDkTZhKKE6Ck6xlwWpPYfngP+rffzsX0bL61N0ruMUuUD1XEcdRNz,iv:wqgBzTYa3ipeuUN7YhkH87U6vKb9pGyOS89SekqojLc=,tag:lQfSZm9OVYJ9dgT2WoBYsg==,type:str]
|
||||||
|
forgejo: ENC[AES256_GCM,data:nDGMlxhJIlLr3ynR9ftRPqSdKNxxy8FVItRNLXVrbbbaIttpHUve68hz7O7s/v9qo1a14HvP5Z/NKuErRVsUzJJFRuDqwoywWg==,iv:eyf33mOOCOtEfRGLQqXFO2KEIJzWAflUXssf8qWwck4=,tag:sti3pRMbhunTsAVqQ6JJVw==,type:str]
|
||||||
|
searx: ENC[AES256_GCM,data:n451XLvOi2D2YvL0/+ko+HyXWEU7uuVlivkFsKxIzq1EWqMVEhFgEAt1k8W15AdgLY1xo455fUbL6/W1uSFO8w==,iv:QfX7s4l4QuZ8/85Q/+0OWezDGqOKXdY7B5M6wq/5tAM=,tag:ppZXewIAN0IdRMgrIIKTmg==,type:str]
|
||||||
|
actions_runner:
|
||||||
|
token: ENC[AES256_GCM,data:K3l1i8TlOh4P0m0HvI/U97weP2BzPxkiz1DYvAFL8ergFVYHsE62A92rVxIAlQ==,iv:BIITpfqKa/IA7dQfmoNTA2dhB91jn7Ay7Ihib+2Mddg=,tag:Ojk4407BhM7b4LjmnPuZjA==,type:str]
|
||||||
|
forgejo:
|
||||||
|
admin: ENC[AES256_GCM,data:yWvcNrmQJJTyUrML8ibkxLlDgp7/Ac4JD4GZ8ArwmJdZeDuedSIWZV8j/nr0Tg==,iv:AqDV5QEneIZ+KcrJF1mBEZiXZ7QxFfwxnSGxGVWAhCc=,tag:EPfeCvDAGsMLkhE4QawoDQ==,type:str]
|
||||||
|
mail: ENC[AES256_GCM,data:+pohnzkYs6RsusDhuX7s48stYRJfS66AXx05J3xi6RdL3d3eJ2iCIcwQs1wIzbVsyA==,iv:7dV2B0Tyh65iQlfemaynYJFvt0NOXWWSonwu0y7grG8=,tag:Km7cKbe9RMxtT2lJDizYpQ==,type:str]
|
||||||
|
secret: ENC[AES256_GCM,data:/c9me5lpSIX2AFjqWm+YFdP+5dIxMI+k55GA7agDiTX0A3hlbDaqSZCE9R5YtlBXTeiY1jvoksMZVoW0340RzA==,iv:/CL9L3PH7viJaVxMLv2MVJY9akD3lbk9TThJkn9g4bg=,tag:q9eChmyBd/vzY9UlGGP2gw==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1jcl6pr27ne5qmnadh723lhlu0js5dnt050akvaxmhvapm3yz9yqqkpakxs
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyRnQxVjFqZ1pCbzJZT2xZ
|
||||||
|
c0E2THE5TDZjeHpHUEozZk91WGJ3VkFuTWxBCk5rVFcxYTZCWndVWjZDSkJqczMx
|
||||||
|
dVR5Q1hYcWxZQjlnOVBtYXhIN1JmQUUKLS0tIEorMTJuOVNTcXhwZm82a2x2cWwx
|
||||||
|
L0NsZWFmd3UwblExc3UrVVVraHVTTm8KyUN1t1NgQG8+zHViKXT4fwnuFBVgzhYw
|
||||||
|
WbCHfzut3a55ta1B50hQGFlPcUZDPImUg4wKmkdc7vurg02vOTgwUQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2026-01-07T01:38:01Z"
|
||||||
|
mac: ENC[AES256_GCM,data:Rz2uGZ46LkmwoWhzNSIYTWdWAYpibmFyHvR3gwCNN8FRGKugm0IPES7ApJJW/0Ihf65BgeIbHe3rPzqDsNVsLvvJdfBP4jCD+SaIVuhVptLofDuO9UC4G69eXsjl1wceww4ZMjZJr69UUUXFe+0+c1+Mvdvah6KZWQJLoQraq3w=,iv:og9XkeYN523o8jsRKKus0/Jq7LKlLabO1Mz2Z+BYiLA=,tag:2leOjdHn83wTsfN94IGHiQ==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.11.0
|
||||||
Loading…
Add table
Add a link
Reference in a new issue