Compare commits

...

54 Commits

Author SHA1 Message Date
chn
1a463ee716 add znver4 support 2024-01-06 14:10:12 +08:00
chn
78a0a55bed localPackages: update misskey 2024-01-06 13:06:36 +08:00
chn
2a465b55ec modules.system: fstrim set to weekly (default) 2024-01-05 12:41:58 +08:00
chn
ea3f4bb00c modules.system: remove versionSuffix 2024-01-05 12:26:40 +08:00
chn
bbf601f5a8 modules.packages.desktop-fat.steam: replace chinese comment 2024-01-04 22:32:54 +08:00
chn
8543130661 packages.desktop: add firefoxpwa 2024-01-03 23:01:04 +08:00
chn
aa93dd53b6 packages.server.ssh: prefer askPassword 2024-01-03 22:43:28 +08:00
chn
0031080837 system.kernel: enable preempt as default 2024-01-02 22:21:05 +08:00
chn
d3f38c3b55 packages.server: enable gpg 2023-12-31 10:46:57 +08:00
chn
0c49c71899 services.nginx.applications.main: fix 2023-12-29 20:22:21 +08:00
chn
b0e543d324 packages.server.ssh: enable ssh agent forward 2023-12-29 20:22:02 +08:00
chn
51c8a516ff packages.server: remove gnupg agent 2023-12-29 15:33:06 +08:00
chn
f3c8017959 Revert "try to enable codex"
This reverts commit 3867469fc5.
2023-12-28 21:04:45 +08:00
chn
3867469fc5 try to enable codex 2023-12-28 21:03:38 +08:00
chn
f23f7101e4 update zsh-lsd 2023-12-28 12:55:18 +08:00
chn
8eea6ffdc3 packages.server.zsh: remove zsh-nix-shell 2023-12-28 12:29:35 +08:00
chn
729df7ab63 update misskey 2023-12-28 11:05:52 +08:00
chn
c1737fcb08 packages.server.ssh: set askPassword to systemd-ask-password 2023-12-27 17:42:53 +08:00
chn
50862f0e33 users.chn: add forwardAgent 2023-12-27 17:18:04 +08:00
chn
5b30aebfae services.frpClient: stcp allow all users 2023-12-27 15:11:15 +08:00
chn
f5e82ee889 localPackages.misskey: use nodejs 21 2023-12-25 20:50:42 +08:00
chn
a6241a201a try to fix pc power bug 2023-12-25 20:50:15 +08:00
chn
db3571b8e5 revert nodejs update 2023-12-25 20:46:27 +08:00
chn
bd6a867ab3 localPackages.misskey: use nodejs 20 2023-12-24 22:46:33 +08:00
chn
045de2b18e update nodejs 2023-12-24 22:45:26 +08:00
chn
501df43b0c services.misskey: increase statement_timeout 2023-12-24 14:58:20 +08:00
chn
fee1f32a0a localPackages.misskey: remove re2 2023-12-24 14:40:27 +08:00
chn
71c4426e53 Merge branch 'misskey' 2023-12-24 09:22:30 +08:00
chn
7cd03dd163 packages.server: add hexo-cli 2023-12-23 22:43:39 +08:00
chn
4941582aec update misskey 2023-12-23 22:42:04 +08:00
chn
29fef229d8 Revert "system: try to fix ipv6"
This reverts commit 303d67ca06.
2023-12-23 15:31:44 +08:00
chn
303d67ca06 system: try to fix ipv6 2023-12-23 10:03:09 +08:00
chn
3732d19de0 packages.server.ssh: auto cd in jykang 2023-12-22 11:39:10 +08:00
chn
26eec4d375 packages.server: split zsh 2023-12-22 11:38:56 +08:00
chn
ac362289de services.synapse: fix 2023-12-20 16:20:23 +08:00
chn
3bb5e840e7 services.synapse: fix 2023-12-20 15:26:35 +08:00
chn
8b3ef05d3b services.nginx.applications.main: fix alias 2023-12-20 15:14:51 +08:00
chn
0fd63c01f7 services.synapse: fix 2023-12-20 14:39:23 +08:00
chn
61c644a4b1 services.synapse: enable sliding sync 2023-12-20 14:33:14 +08:00
chn
788709aac9 services.synapse: fix 2023-12-20 12:33:17 +08:00
chn
f5053ae284 services.postgresql: add initializeFlags 2023-12-20 12:23:05 +08:00
chn
6a6625d585 system.kernel: port some change from xddxdd/nur-packages 2023-12-20 11:31:12 +08:00
chn
69c528a03d switch back to xanmod 2023-12-20 11:04:40 +08:00
chn
6c496b7b8e services.postgresql: fix locale setting 2023-12-19 22:09:35 +08:00
chn
13652e7c0e services.synapse: correct locale 2023-12-19 22:07:27 +08:00
chn
2160e453eb services.postgresql: allow set locale 2023-12-19 22:06:41 +08:00
chn
71acf32da3 vps7: enable second synapse instance 2023-12-19 21:43:48 +08:00
chn
aac7bad20a packages.workstation: add nheko 2023-12-19 21:19:27 +08:00
chn
1d9a3ad2c0 enable laptop-mode 2023-12-19 18:56:08 +08:00
chn
f55576883c system.kernel: switch to zen 2023-12-19 18:36:45 +08:00
chn
e71a08586d Revert "Revert "drop acpi workaround""
This reverts commit 8c2b6530a6.
2023-12-19 13:43:28 +08:00
chn
8c2b6530a6 Revert "drop acpi workaround"
This reverts commit 72e1e0140a.
2023-12-19 13:29:17 +08:00
chn
38d3d8c7df update kernel 2023-12-19 12:56:24 +08:00
chn
72e1e0140a drop acpi workaround 2023-12-19 12:51:43 +08:00
28 changed files with 514 additions and 341 deletions

12
flake.lock generated
View File

@@ -1124,11 +1124,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1702811583, "lastModified": 1704292225,
"narHash": "sha256-QKifzSH6PSxuCdn+qJsYdQ5uomwX2UCnxxFTj/ONAJ8=", "narHash": "sha256-UVLp373pJ9AbsG1+aiwvPQRG3lJSjNLLGUIsflgWL/0=",
"owner": "CHN-beta", "owner": "CHN-beta",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e8dff8ee0ef5f66f7044f3e4a4d13b6b7269f264", "rev": "38bebe0e71de109725f1dbbfa8e4922e7b4095b3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1140,11 +1140,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1702811556, "lastModified": 1704292168,
"narHash": "sha256-jyHGQzmgFqlVoqpTz7bVXnbn1PHul7i4ORhSBu5xKKs=", "narHash": "sha256-a2qeYhRSd7RFxyn52L/K0+rsKb7/HyMquHwzIsToCC4=",
"owner": "CHN-beta", "owner": "CHN-beta",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6d4bfbee38915ba83d8c6a1c2740f60153e6835c", "rev": "2d0e9eed1f0daef1fbc4791d6912a9fbc5b0be62",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -111,14 +111,16 @@
"znver2" "znver3" "znver2" "znver3"
# CX16 SAHF FXSR HLE RDSEED # CX16 SAHF FXSR HLE RDSEED
"broadwell" "broadwell"
"znver4"
]; ];
keepOutputs = true; keepOutputs = true;
}; };
nixpkgs = nixpkgs =
{ march = "alderlake"; cuda = { enable = true; capabilities = [ "8.6" ]; forwardCompat = false; }; }; { march = "alderlake"; cuda = { enable = true; capabilities = [ "8.6" ]; forwardCompat = false; }; };
kernel.patches = [ "cjktty" ]; kernel.patches = [ "cjktty" "lantian" ];
impermanence.enable = true; impermanence.enable = true;
networking.hostname = "pc"; networking.hostname = "pc";
sysctl.laptop-mode = 5;
}; };
hardware = hardware =
{ {
@@ -201,8 +203,8 @@
}; };
bugs = bugs =
[ [
"intel-hdmi" "suspend-hibernate-no-platform" "hibernate-iwlwifi" "suspend-lid-no-wakeup" "xmunet" "suspend-hibernate-no-platform" "hibernate-iwlwifi" "suspend-lid-no-wakeup" "xmunet"
"suspend-hibernate-waydroid" "acpi" "suspend-hibernate-waydroid" "power"
]; ];
}; };
vps6 = vps6 =
@@ -255,7 +257,10 @@
[ "nix-store" "xn--qbtm095lrg0bfka60z" ])) [ "nix-store" "xn--qbtm095lrg0bfka60z" ]))
// (builtins.listToAttrs (builtins.map // (builtins.listToAttrs (builtins.map
(site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.vps7.chn.moe"; }) (site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.vps7.chn.moe"; })
[ "xn--s8w913fdga" "misskey" "synapse" "send" "kkmeeting" "api" "git" "grafana" ])); [
"xn--s8w913fdga" "misskey" "synapse" "syncv3.synapse" "matrix" "syncv3.matrix"
"send" "kkmeeting" "api" "git" "grafana"
]));
applications = applications =
{ {
element.instances."element.chn.moe" = {}; element.instances."element.chn.moe" = {};
@@ -324,7 +329,11 @@
misskey.hostname = "xn--s8w913fdga.chn.moe"; misskey.hostname = "xn--s8w913fdga.chn.moe";
misskey-old = { port = 9727; redis.port = 3546; meilisearch.enable = false; }; misskey-old = { port = 9727; redis.port = 3546; meilisearch.enable = false; };
}; };
synapse.instances.synapse.matrixHostname = "synapse.chn.moe"; synapse.instances =
{
synapse.matrixHostname = "synapse.chn.moe";
matrix = { port = 8009; redisPort = 6380; slidingSyncPort = 9001; };
};
xrdp = { enable = true; hostname = [ "vps7.chn.moe" ]; }; xrdp = { enable = true; hostname = [ "vps7.chn.moe" ]; };
vaultwarden.enable = true; vaultwarden.enable = true;
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 1024; }; }; beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 1024; }; };
@@ -348,7 +357,6 @@
wireguardIp = "192.168.83.2"; wireguardIp = "192.168.83.2";
externalIp = "95.111.228.40"; externalIp = "95.111.228.40";
}; };
akkoma.enable = true;
}; };
}; };
nas = nas =

View File

@@ -4,7 +4,7 @@
vesta = callPackage ./vesta {}; vesta = callPackage ./vesta {};
oneapi = callPackage ./oneapi {}; oneapi = callPackage ./oneapi {};
rsshub = callPackage ./rsshub {}; rsshub = callPackage ./rsshub {};
misskey = callPackage ./misskey {}; misskey = callPackage ./misskey { nodejs = nodejs_21; };
mk-meili-mgn = callPackage ./mk-meili-mgn {}; mk-meili-mgn = callPackage ./mk-meili-mgn {};
# vasp = callPackage ./vasp # vasp = callPackage ./vasp
# { # {

View File

@@ -1,95 +1,45 @@
{ {
lib, stdenv, mkPnpmPackage, fetchFromGitHub, fetchurl, nodejs_20, writeShellScript, buildFHSEnv, lib, stdenv, mkPnpmPackage, fetchFromGitHub, fetchurl, nodejs, writeShellScript, buildFHSEnv,
bash, cypress, vips, pkg-config bash, cypress, vips, pkg-config
}: }:
let let
pname = "misskey"; pname = "misskey";
version = "2023.11.1"; version = "2023.12.2";
src = fetchFromGitHub src = fetchFromGitHub
{ {
owner = "CHN-beta"; owner = "CHN-beta";
repo = "misskey"; repo = "misskey";
rev = "1e5134816cc23600a0448a62b34aadfe573c3bbc"; rev = "cd1d0ab06eb6b7e06afdfae9a12b2d2829564229";
sha256 = "ihkFVTpwEELmxAw4Lw01pWr8j6u2oLpfcw3laVUFCO4="; hash = "sha256-sKEZ1ZpyA/02CNwiOMIOS5f/csx6ELDwCVJYc+oMChM=";
fetchSubmodules = true; fetchSubmodules = true;
}; };
originalPnpmPackage = mkPnpmPackage originalPnpmPackage = mkPnpmPackage
{ {
inherit pname version src; inherit pname version src nodejs;
nodejs = nodejs_20;
copyPnpmStore = true; copyPnpmStore = true;
}; };
startScript = writeShellScript "misskey" startScript = writeShellScript "misskey"
'' ''
export PATH=${lib.makeBinPath [ bash nodejs_20 nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress ]}:$PATH export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress ]}:$PATH
export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress" export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress"
export NODE_ENV=production export NODE_ENV=production
pnpm run migrateandstart pnpm run migrateandstart
''; '';
re2 = stdenv.mkDerivation rec
{
pname = "re2";
version = "1.20.8";
srcs =
[
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-120.br";
sha256 = "0f2l658xxc2112mbqpkyfic3vhjgdyafbfi14b6n40skyd6lijcq";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-120.gz";
sha256 = "1v5n8i16188xpwx1jr8gcc1a99v83hlbh5hldl4i376vh0lwsxlq";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-115.br";
sha256 = "0cyqmgqk5cwik27wh4ynaf94v4w6p1fsavm07xh8xfmdim2sr9kd";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-115.gz";
sha256 = "0i3iykw13d5qfd5s6pq6kx6cbd64vfb3w65f9bnj87qz44la84ic";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-108.br";
sha256 = "1467frfapqhi839r2v0p0wh76si3lihwzwgl9098mj7mwhjfl4lx";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-108.gz";
sha256 = "0hykpqdrn55x83v1kzz6bdvrp24hgz3rwmwbdfl2saz576krzg1c";
})
];
phases = [ "installPhase" ];
installPhase =
''
mkdir -p $out/${version}
for i in $srcs
do
cp $i $out/${version}/''${i#*-}
done
'';
};
in in
stdenv.mkDerivation rec stdenv.mkDerivation rec
{ {
inherit version src pname; inherit version src pname;
buildInputs = buildInputs =
[ [
bash nodejs_20 nodejs_20.pkgs.typescript nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress vips pkg-config bash nodejs nodejs.pkgs.typescript nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress vips pkg-config
]; ];
nativeBuildInputs = buildInputs; nativeBuildInputs = buildInputs;
CYPRESS_RUN_BINARY = "${cypress}/bin/Cypress"; CYPRESS_RUN_BINARY = "${cypress}/bin/Cypress";
NODE_ENV = "production"; NODE_ENV = "production";
RE2_DOWNLOAD_MIRROR = "${re2}";
RE2_DOWNLOAD_SKIP_PATH = "true";
configurePhase = configurePhase =
'' ''
export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME
export npm_config_nodedir=${nodejs_20} export npm_config_nodedir=${nodejs}
runHook preConfigure runHook preConfigure
@@ -121,6 +71,6 @@ in
''; '';
passthru = passthru =
{ {
inherit originalPnpmPackage startScript re2; inherit originalPnpmPackage startScript;
}; };
} }

View File

@@ -5,8 +5,6 @@ inputs:
inherit (inputs.lib) mkMerge mkIf mkOption types; inherit (inputs.lib) mkMerge mkIf mkOption types;
bugs = bugs =
{ {
# intel i915 hdmi
intel-hdmi.boot.kernelPatches = [{ name = "intel-hdmi"; patch = ./intel-hdmi.patch; }];
# suspend & hibernate do not use platform # suspend & hibernate do not use platform
suspend-hibernate-no-platform.systemd.sleep.extraConfig = suspend-hibernate-no-platform.systemd.sleep.extraConfig =
'' ''
@@ -80,7 +78,7 @@ inputs:
}; };
}; };
firefox.programs.firefox.enable = inputs.lib.mkForce false; firefox.programs.firefox.enable = inputs.lib.mkForce false;
acpi.boot.kernelParams = [ ''acpi_osi="Windows 2022"'' ]; power.boot.kernelParams = [ "cpufreq.default_governor=powersave" ];
}; };
in in
{ {

View File

@@ -1,14 +0,0 @@
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 55544d484318..d6f257f8fd14 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2708,7 +2708,7 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
if (i915->display.vbt.ports[port]) {
drm_dbg_kms(&i915->drm,
"More than one child device for port %c in VBT, using the first.\n",
port_name(port));
- return;
+ // return;
}
sanitize_device_type(devdata, port);

View File

@@ -3,6 +3,7 @@ inputs:
imports = inputs.localLib.mkModules imports = inputs.localLib.mkModules
[ [
./chromium.nix ./chromium.nix
./steam.nix
]; ];
config = config =
let let
@@ -42,6 +43,6 @@ inputs:
] ++ (with inputs.lib; filter isDerivation (attrValues plasma5Packages.kdeGear)); ] ++ (with inputs.lib; filter isDerivation (attrValues plasma5Packages.kdeGear));
}; };
}; };
programs = { steam.enable = true; kdeconnect.enable = true; }; programs.kdeconnect.enable = true;
}; };
} }

View File

@@ -0,0 +1,23 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "desktop-fat" inputs.config.nixos.packages._packageSets)
{
programs.steam =
{
enable = true;
package = inputs.pkgs.steam.override (prev:
{
steam = prev.steam.overrideAttrs (prev:
{
postInstall = prev.postInstall +
''
sed -i 's#Comment\[zh_CN\]=.*$#Comment\[zh_CN\]=®#' $out/share/applications/steam.desktop
'';
});
});
};
};
}

View File

@@ -19,6 +19,7 @@ inputs:
mpv nomacs mpv nomacs
# themes # themes
tela-circle-icon-theme tela-circle-icon-theme
firefoxpwa
]; ];
users.sharedModules = users.sharedModules =
[{ [{
@@ -33,7 +34,12 @@ inputs:
{ {
adb.enable = true; adb.enable = true;
wireshark = { enable = true; package = inputs.pkgs.wireshark; }; wireshark = { enable = true; package = inputs.pkgs.wireshark; };
firefox = { enable = true; languagePacks = [ "zh-CN" "en-US" ]; }; firefox =
{
enable = true;
languagePacks = [ "zh-CN" "en-US" ];
nativeMessagingHosts.packages = [ inputs.pkgs.firefoxpwa ];
};
vim.package = inputs.pkgs.vim-full; vim.package = inputs.pkgs.vim-full;
}; };
nixpkgs.config.packageOverrides = pkgs: nixpkgs.config.packageOverrides = pkgs:

View File

@@ -3,6 +3,8 @@ inputs:
imports = inputs.localLib.mkModules imports = inputs.localLib.mkModules
[ [
./ssh ./ssh
./zsh
./gpg.nix
]; ];
config = config =
let let
@@ -47,70 +49,13 @@ inputs:
# office # office
todo-txt-cli todo-txt-cli
# development # development
gdb try inputs.topInputs.plasma-manager.packages.x86_64-linux.rc2nix gdb try inputs.topInputs.plasma-manager.packages.x86_64-linux.rc2nix hexo-cli
] ++ (with inputs.config.boot.kernelPackages; [ cpupower usbip ]); ] ++ (with inputs.config.boot.kernelPackages; [ cpupower usbip ]);
}; };
users.sharedModules = [(home-inputs: users.sharedModules = [(home-inputs:
{ {
config.programs = config.programs =
{ {
zsh =
{
enable = true;
initExtraBeforeCompInit =
''
# p10k instant prompt
P10K_INSTANT_PROMPT="$XDG_CACHE_HOME/p10k-instant-prompt-''${(%):-%n}.zsh"
[[ ! -r "$P10K_INSTANT_PROMPT" ]] || source "$P10K_INSTANT_PROMPT"
HYPHEN_INSENSITIVE="true"
export PATH=~/bin:$PATH
function br
{
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
alias todo="todo.sh"
'';
plugins =
[
{
file = "powerlevel10k.zsh-theme";
name = "powerlevel10k";
src = "${inputs.pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k";
}
{
file = "p10k.zsh";
name = "powerlevel10k-config";
src = ./p10k-config;
}
{
name = "zsh-lsd";
src = inputs.pkgs.fetchFromGitHub
{
owner = "z-shell";
repo = "zsh-lsd";
rev = "029a9cb0a9b39c9eb6c5b5100dd9182813332250";
sha256 = "sha256-oWjWnhiimlGBMaZlZB+OM47jd9hporKlPNwCx6524Rk=";
};
}
];
history =
{
path = "${home-inputs.config.xdg.dataHome}/zsh/zsh_history";
extended = true;
save = 100000000;
size = 100000000;
};
};
direnv = { enable = true; nix-direnv.enable = true; }; direnv = { enable = true; nix-direnv.enable = true; };
git = git =
{ {
@@ -163,21 +108,7 @@ inputs:
{ {
nix-index-database.comma.enable = true; nix-index-database.comma.enable = true;
nix-index.enable = true; nix-index.enable = true;
zsh =
{
enable = true;
syntaxHighlighting.enable = true;
autosuggestions.enable = true;
enableCompletion = true;
ohMyZsh =
{
enable = true;
plugins = [ "git" "colored-man-pages" "extract" "history-substring-search" "autojump" ];
customPkgs = with inputs.pkgs; [ zsh-nix-shell ];
};
};
command-not-found.enable = false; command-not-found.enable = false;
gnupg.agent = { enable = true; enableSSHSupport = true; };
autojump.enable = true; autojump.enable = true;
git = git =
{ {

View File

@@ -0,0 +1,10 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "server" inputs.config.nixos.packages._packageSets)
{
programs.gnupg.agent = { enable = true; pinentryFlavor = "tty"; };
};
}

View File

@@ -96,8 +96,16 @@ inputs:
else [] else []
)) ))
(attrsToList servers))); (attrsToList servers)));
programs.ssh =
{
startAgent = true;
enableAskPassword = true;
askPassword = "${inputs.pkgs.systemd}/bin/systemd-ask-password";
extraConfig = "AddKeysToAgent yes";
};
environment.sessionVariables.SSH_ASKPASS_REQUIRE = "prefer";
nixos.users.sharedModules = nixos.users.sharedModules =
[{ [(hmInputs: {
config.programs.ssh = config.programs.ssh =
{ {
enable = true; enable = true;
@@ -122,12 +130,27 @@ inputs:
{ {
PubkeyAcceptedAlgorithms = "+ssh-rsa"; PubkeyAcceptedAlgorithms = "+ssh-rsa";
HostkeyAlgorithms = "+ssh-rsa"; HostkeyAlgorithms = "+ssh-rsa";
SetEnv = "TERM=chn_unset_ls_colors:xterm-256color"; SetEnv =
let
usernameMap =
{
chn = "linwei/chn";
};
cdString =
if host == "jykang" && (usernameMap ? ${hmInputs.config.home.username}) then
":chn_cd:${usernameMap.${hmInputs.config.home.username}}"
else "";
in "TERM=chn_unset_ls_colors${cdString}:xterm-256color";
# in .bash_profile: # in .bash_profile:
# if [[ $TERM == chn_unset_ls_colors* ]]; then # if [[ $TERM == chn_unset_ls_colors* ]]; then
# export TERM=${TERM#*:} # export TERM=${TERM#*:}
# export CHN_LS_USE_COLOR=1 # export CHN_LS_USE_COLOR=1
# fi # fi
# if [[ $TERM == chn_cd* ]]; then
# export TERM=${TERM#*:}
# cd ~/${TERM%%:*}
# export TERM=${TERM#*:}
# fi
# in .bashrc # in .bashrc
# [ -n "$CHN_LS_USE_COLOR" ] && alias ls="ls --color=auto" # [ -n "$CHN_LS_USE_COLOR" ] && alias ls="ls --color=auto"
}; };
@@ -141,6 +164,6 @@ inputs:
gitea = { host = "gitea"; hostname = "ssh.git.chn.moe"; }; gitea = { host = "gitea"; hostname = "ssh.git.chn.moe"; };
}; };
}; };
}]; })];
}; };
} }

View File

@@ -0,0 +1,78 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "server" inputs.config.nixos.packages._packageSets)
{
nixos.users.sharedModules = [(home-inputs: { config.programs.zsh =
{
enable = true;
initExtraBeforeCompInit =
''
# p10k instant prompt
P10K_INSTANT_PROMPT="$XDG_CACHE_HOME/p10k-instant-prompt-''${(%):-%n}.zsh"
[[ ! -r "$P10K_INSTANT_PROMPT" ]] || source "$P10K_INSTANT_PROMPT"
HYPHEN_INSENSITIVE="true"
export PATH=~/bin:$PATH
function br
{
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
alias todo="todo.sh"
'';
plugins =
[
{
file = "powerlevel10k.zsh-theme";
name = "powerlevel10k";
src = "${inputs.pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k";
}
{
file = "p10k.zsh";
name = "powerlevel10k-config";
src = ./p10k-config;
}
{
name = "zsh-lsd";
src = inputs.pkgs.fetchFromGitHub
{
owner = "z-shell";
repo = "zsh-lsd";
rev = "65bb5ac49190beda263aae552a9369127961632d";
hash = "sha256-JSNsfpgiqWhtmGQkC3B0R1Y1QnDKp9n0Zaqzjhwt7Xk=";
};
}
];
history =
{
path = "${home-inputs.config.xdg.dataHome}/zsh/zsh_history";
extended = true;
save = 100000000;
size = 100000000;
};
};})];
programs.zsh =
{
enable = true;
syntaxHighlighting.enable = true;
autosuggestions.enable = true;
enableCompletion = true;
ohMyZsh =
{
enable = true;
plugins = [ "git" "colored-man-pages" "extract" "history-substring-search" "autojump" ];
};
};
};
}

View File

@@ -20,7 +20,7 @@ inputs:
nix-prefetch-docker pnpm-lock-export bundix nix-prefetch-docker pnpm-lock-export bundix
# instant messager # instant messager
zoom-us signal-desktop qq nur-xddxdd.wechat-uos slack inputs.config.nur.repos.linyinfeng.wemeet zoom-us signal-desktop qq nur-xddxdd.wechat-uos slack inputs.config.nur.repos.linyinfeng.wemeet
cinny-desktop cinny-desktop nheko
# office # office
libreoffice-qt texstudio poppler_utils pdftk gnuplot pdfchain hdfview libreoffice-qt texstudio poppler_utils pdftk gnuplot pdfchain hdfview
(texlive.combine { inherit (texlive) scheme-full; inherit (localPackages) citation-style-language; }) (texlive.combine { inherit (texlive) scheme-full; inherit (localPackages) citation-style-language; })

View File

@@ -113,6 +113,7 @@ inputs:
type = "stcp"; type = "stcp";
transport.useCompression = true; transport.useCompression = true;
secretKey = inputs.config.sops.placeholder."frp/stcp/${stcp.name}"; secretKey = inputs.config.sops.placeholder."frp/stcp/${stcp.name}";
allowUsers = [ "*" ];
inherit (stcp.value) localIp localPort; inherit (stcp.value) localIp localPort;
}) })
(attrsToList frpClient.stcp)); (attrsToList frpClient.stcp));

View File

@@ -89,7 +89,7 @@ inputs:
user: misskey_${replaceStrings [ "-" ] [ "_" ] instance.name} user: misskey_${replaceStrings [ "-" ] [ "_" ] instance.name}
pass: ${placeholder."postgresql/misskey_${replaceStrings [ "-" ] [ "_" ] instance.name}"} pass: ${placeholder."postgresql/misskey_${replaceStrings [ "-" ] [ "_" ] instance.name}"}
extra: extra:
statement_timeout: 60000 statement_timeout: 600000
dbReplications: false dbReplications: false
redis: redis:
host: 127.0.0.1 host: 127.0.0.1

View File

@@ -5,7 +5,7 @@ inputs:
type = types.attrsOf (types.submodule (submoduleInputs: { options = type = types.attrsOf (types.submodule (submoduleInputs: { options =
{ {
hostname = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; }; hostname = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
defaultServer = mkOption { type = types.nullOr types.nonEmptyStr; default = "element.chn.moe"; }; defaultServer = mkOption { type = types.nullOr types.nonEmptyStr; default = "matrix.chn.moe"; };
};})); };}));
default = {}; default = {};
}; };

View File

@@ -7,15 +7,16 @@ inputs:
config = config =
let let
inherit (inputs.config.nixos.services.nginx.applications) main; inherit (inputs.config.nixos.services.nginx.applications) main;
in inherit (inputs.lib) mkIf;
in mkIf main.enable
{ {
nixos.services.nginx.https."chn.moe".location = nixos.services.nginx.https."chn.moe".location =
{ {
"/".return.return = "302 https://xn--s8w913fdga.chn.moe/@chn"; "/".return.return = "302 https://xn--s8w913fdga.chn.moe/@chn";
"/.well-known/matrix/server".proxy = "/.well-known/matrix/server".proxy =
{ {
setHeaders.Host = "synapse.chn.moe"; setHeaders.Host = "matrix.chn.moe";
upstream = "https://synapse.chn.moe"; upstream = "https://matrix.chn.moe";
}; };
}; };
}; };

View File

@@ -10,6 +10,7 @@ inputs:
database = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; }; database = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
user = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; }; user = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
passwordFile = mkOption { type = types.nullOr types.nonEmptyStr; default = null; }; passwordFile = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
initializeFlags = mkOption { type = types.attrsOf types.nonEmptyStr; default = {}; };
};})); };}));
default = {}; default = {};
}; };
@@ -51,7 +52,6 @@ inputs:
# chattr +C /path/to/dir # chattr +C /path/to/dir
# cp -a --reflink=never /path/to/dir_old/. /path/to/dir # cp -a --reflink=never /path/to/dir_old/. /path/to/dir
# rm -rf /path/to/dir_old # rm -rf /path/to/dir_old
ensureDatabases = map (db: db.value.database) (attrsToList postgresql.instances);
ensureUsers = map (db: { name = db.value.user; }) (attrsToList postgresql.instances); ensureUsers = map (db: { name = db.value.user; }) (attrsToList postgresql.instances);
}; };
postgresqlBackup = postgresqlBackup =
@@ -68,15 +68,26 @@ inputs:
passwordFile = passwordFile =
if db.value.passwordFile or null != null then db.value.passwordFile if db.value.passwordFile or null != null then db.value.passwordFile
else inputs.config.sops.secrets."postgresql/${db.value.user}".path; else inputs.config.sops.secrets."postgresql/${db.value.user}".path;
in initializeFlag =
# set user password if db.value.initializeFlags != {} then
"$PSQL -tAc \"ALTER USER ${db.value.user} with encrypted password '$(cat ${passwordFile})'\"" " WITH "
# set db owner + (concatStringsSep " " (map
+ "\n" (flag: ''${flag.name} = "${flag.value}"'')
+ "$PSQL -tAc \"select pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d" (attrsToList db.value.initializeFlags)))
+ " WHERE d.datname = '${db.value.database}' ORDER BY 1\"" else "";
+ " | grep -E '^${db.value.user}$' -q" in
+ " || $PSQL -tAc \"ALTER DATABASE ${db.value.database} OWNER TO ${db.value.user}\"") # create database if not exist
"$PSQL -tAc \"SELECT 1 FROM pg_database WHERE datname = '${db.value.database}'\" | grep -q 1"
+ " || $PSQL -tAc 'CREATE DATABASE \"${db.value.database}\"${initializeFlag}'"
# set user password
+ "\n"
+ "$PSQL -tAc \"ALTER USER ${db.value.user} with encrypted password '$(cat ${passwordFile})'\""
# set db owner
+ "\n"
+ "$PSQL -tAc \"select pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d"
+ " WHERE d.datname = '${db.value.database}' ORDER BY 1\""
+ " | grep -E '^${db.value.user}$' -q"
+ " || $PSQL -tAc \"ALTER DATABASE ${db.value.database} OWNER TO ${db.value.user}\"")
(attrsToList postgresql.instances))); (attrsToList postgresql.instances)));
sops.secrets = listToAttrs (map sops.secrets = listToAttrs (map
(db: { name = "postgresql/${db.value.user}"; value.owner = inputs.config.users.users.postgres.name; }) (db: { name = "postgresql/${db.value.user}"; value.owner = inputs.config.users.users.postgres.name; })

View File

@@ -3,21 +3,32 @@ inputs:
{ {
options.nixos.services.synapse.instances = let inherit (inputs.lib) mkOption types; in mkOption options.nixos.services.synapse.instances = let inherit (inputs.lib) mkOption types; in mkOption
{ {
type = types.attrsOf (types.submodule { options = type = types.attrsOf (types.submodule (submoduleInputs: { options =
{ {
autoStart = mkOption { type = types.bool; default = true; }; autoStart = mkOption { type = types.bool; default = true; };
port = mkOption { type = types.ints.unsigned; default = 8008; }; port = mkOption { type = types.ints.unsigned; default = 8008; };
redisPort = mkOption { type = types.ints.unsigned; default = 6379; }; redisPort = mkOption { type = types.ints.unsigned; default = 6379; };
hostname = mkOption { type = types.nonEmptyStr; default = "synapse.chn.moe"; }; slidingSyncPort = mkOption { type = types.ints.unsigned; default = 9000; };
hostname = mkOption
{
type = types.nonEmptyStr;
default = "${submoduleInputs.config._module.args.name}.chn.moe";
};
matrixHostname = mkOption { type = types.nonEmptyStr; default = "chn.moe"; }; matrixHostname = mkOption { type = types.nonEmptyStr; default = "chn.moe"; };
};}); slidingSyncHostname = mkOption
{
type = types.nonEmptyStr;
default = "syncv3.${submoduleInputs.config.hostname}";
};
# , synapse_homeserver --config-path homeserver.yaml --generate-config --report-stats=yes --server-name xxx
};}));
default = {}; default = {};
}; };
config = config =
let let
inherit (inputs.config.nixos.services) synapse; inherit (inputs.config.nixos.services) synapse;
inherit (inputs.lib) mkIf mkMerge; inherit (inputs.lib) mkIf mkMerge;
inherit (builtins) map listToAttrs replaceStrings; inherit (builtins) map listToAttrs replaceStrings concatLists;
inherit (inputs.localLib) attrsToList; inherit (inputs.localLib) attrsToList;
in in
{ {
@@ -39,161 +50,208 @@ inputs:
systemd = mkMerge (map systemd = mkMerge (map
(instance: let workdir = "/var/lib/synapse/${instance.name}"; in (instance: let workdir = "/var/lib/synapse/${instance.name}"; in
{ {
services."synapse-${instance.name}" = services =
let {
package = inputs.pkgs.matrix-synapse.override "synapse-${instance.name}" =
{ extras = [ "url-preview" "postgres" "redis" ]; plugins = []; }; let
config = inputs.config.sops.templates."synapse/${instance.name}.yaml".path; package = inputs.pkgs.matrix-synapse.override
homeserver = "${package}/bin/synapse_homeserver"; { extras = [ "url-preview" "postgres" "redis" ]; plugins = []; };
in config = inputs.config.sops.templates."synapse/${instance.name}/config.yaml".path;
homeserver = "${package}/bin/synapse_homeserver";
in
{
description = "synapse-${instance.name}";
enable = instance.value.autoStart;
after = [ "network-online.target" "postgresql.service" ];
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig =
{
ExecStart = "${homeserver} --config-path ${config} --keys-directory ${workdir}";
Type = "notify";
User = "synapse-${instance.name}";
Group = "synapse-${instance.name}";
WorkingDirectory = workdir;
ExecReload = "${inputs.pkgs.util-linux}/bin/kill -HUP $MAINPID";
Restart = "on-failure";
UMask = "0077";
CapabilityBoundingSet = [ "" ];
# hardening
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
ReadWritePaths = [ workdir ];
RemoveIPC = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [ "@system-service" "~@resources" "~@privileged" ];
};
};
"synapse-sliding-sync-${instance.name}" =
{ {
description = "synapse-${instance.name}"; after = [ "synapse-${instance.name}.service" ];
enable = instance.value.autoStart; wants = [ "synapse-${instance.name}.service" ];
after = [ "network-online.target" "postgresql.service" ];
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
serviceConfig = serviceConfig =
{ {
ExecStart = "${homeserver} --config-path ${config} --keys-directory ${workdir}";
Type = "notify";
User = "synapse-${instance.name}"; User = "synapse-${instance.name}";
Group = "synapse-${instance.name}"; Group = "synapse-${instance.name}";
WorkingDirectory = workdir; EnvironmentFile = inputs.config.sops.templates."synapse/${instance.name}-sliding-sync/env".path;
ExecReload = "${inputs.pkgs.util-linux}/bin/kill -HUP $MAINPID"; ExecStart = inputs.lib.getExe inputs.pkgs.matrix-sliding-sync;
WorkingDirectory = workdir + "-sliding-sync";
Restart = "on-failure"; Restart = "on-failure";
UMask = "0077"; RestartSec = "1s";
CapabilityBoundingSet = [ "" ];
# hardening
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
ReadWritePaths = [ workdir ];
RemoveIPC = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [ "@system-service" "~@resources" "~@privileged" ];
}; };
}; };
};
tmpfiles.rules = tmpfiles.rules =
[ [
"d /var/lib/synapse 0755 root root" "d /var/lib/synapse 0755 root root"
"d ${workdir} 0700 synapse-${instance.name} synapse-${instance.name}" "d ${workdir} 0700 synapse-${instance.name} synapse-${instance.name}"
"Z ${workdir} - synapse-${instance.name} synapse-${instance.name}" "Z ${workdir} - synapse-${instance.name} synapse-${instance.name}"
"d ${workdir}-sliding-sync 0700 synapse-${instance.name} synapse-${instance.name}"
"Z ${workdir}-sliding-sync - synapse-${instance.name} synapse-${instance.name}"
]; ];
}) })
(attrsToList synapse.instances)); (attrsToList synapse.instances));
sops = mkMerge (map sops = mkMerge (map
(instance: (instance:
{ {
templates."synapse/${instance.name}.yaml" = templates =
{ {
owner = "synapse-${instance.name}"; "synapse/${instance.name}/config.yaml" =
group = "synapse-${instance.name}"; {
content = owner = "synapse-${instance.name}";
let group = "synapse-${instance.name}";
inherit (inputs.config.sops) placeholder; content =
in builtins.readFile ((inputs.pkgs.formats.yaml {}).generate "${instance.name}.yaml" let
{ inherit (inputs.config.sops) placeholder;
server_name = instance.value.matrixHostname; in builtins.readFile ((inputs.pkgs.formats.yaml {}).generate "${instance.name}.yaml"
listeners =
[{
bind_addresses = [ "127.0.0.1" ];
inherit (instance.value) port;
resources = [{ names = [ "client" "federation" ]; compress = false; }];
tls = false;
type = "http";
x_forwarded = true;
}];
database =
{ {
name = "psycopg2"; server_name = instance.value.matrixHostname;
args = public_baseurl = "https://${instance.value.hostname}/";
listeners =
[{
bind_addresses = [ "127.0.0.1" ];
inherit (instance.value) port;
resources = [{ names = [ "client" "federation" ]; compress = false; }];
tls = false;
type = "http";
x_forwarded = true;
}];
database =
{ {
user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"; name = "psycopg2";
password = placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"; args =
database = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"; {
host = "127.0.0.1"; user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
port = "5432"; password = placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
database = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
host = "127.0.0.1";
port = "5432";
};
allow_unsafe_locale = true;
}; };
allow_unsafe_locale = true; redis =
}; {
redis = enabled = true;
{ port = instance.value.redisPort;
enabled = true; password = placeholder."redis/synapse-${instance.name}";
port = instance.value.redisPort; };
password = placeholder."redis/synapse-${instance.name}"; turn_shared_secret = placeholder."synapse/${instance.name}/coturn";
}; registration_shared_secret = placeholder."synapse/${instance.name}/registration";
turn_shared_secret = placeholder."synapse/${instance.name}/coturn"; macaroon_secret_key = placeholder."synapse/${instance.name}/macaroon";
registration_shared_secret = placeholder."synapse/${instance.name}/registration"; form_secret = placeholder."synapse/${instance.name}/form";
macaroon_secret_key = placeholder."synapse/${instance.name}/macaroon"; signing_key_path = inputs.config.sops.secrets."synapse/${instance.name}/signing-key".path;
form_secret = placeholder."synapse/${instance.name}/form"; email =
signing_key_path = inputs.config.sops.secrets."synapse/${instance.name}/signing-key".path; {
email = smtp_host = "mail.chn.moe";
{ smtp_port = 25;
smtp_host = "mail.chn.moe"; smtp_user = "bot@chn.moe";
smtp_port = 25; smtp_pass = placeholder."mail/bot";
smtp_user = "bot@chn.moe"; require_transport_security = true;
smtp_pass = placeholder."mail/bot"; notif_from = "Your Friendly %(app)s homeserver <bot@chn.moe>";
require_transport_security = true; app_name = "Haonan Chen's synapse";
notif_from = "Your Friendly %(app)s homeserver <bot@chn.moe>"; };
app_name = "Haonan Chen's synapse"; admin_contact = "mailto:chn@chn.moe";
}; enable_registration = true;
admin_contact = "mailto:chn@chn.moe"; registrations_require_3pid = [ "email" ];
enable_registration = true; turn_uris = [ "turns:coturn.chn.moe" "turn:coturn.chn.moe" ];
registrations_require_3pid = [ "email" ]; max_upload_size = "1024M";
turn_uris = [ "turns:coturn.chn.moe" "turn:coturn.chn.moe" ]; web_client_location = "https://element.chn.moe/";
max_upload_size = "1024M"; extra_well_known_client_content."org.matrix.msc3575.proxy".url =
web_client_location = "https://element.chn.moe/"; "https://${instance.value.slidingSyncHostname}";
serve_server_wellknown = true; report_stats = true;
report_stats = true; trusted_key_servers =
trusted_key_servers = [{
[{ server_name = "matrix.org";
server_name = "matrix.org"; verify_keys."ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw";
verify_keys."ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw"; }];
}]; suppress_key_server_warning = true;
suppress_key_server_warning = true; log_config = (inputs.pkgs.formats.yaml {}).generate "log.yaml"
log_config = (inputs.pkgs.formats.yaml {}).generate "log.yaml" {
{ version = 1;
version = 1; formatters.precise.format =
formatters.precise.format = "%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s";
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s"; handlers.console = { class = "logging.StreamHandler"; formatter = "precise"; };
handlers.console = { class = "logging.StreamHandler"; formatter = "precise"; }; root = { level = "INFO"; handlers = [ "console" ]; };
root = { level = "INFO"; handlers = [ "console" ]; }; disable_existing_loggers = true;
disable_existing_loggers = true; };
}; pid_file = "/run/synapse-${instance.name}.pid";
pid_file = "/run/synapse-${instance.name}.pid"; media_store_path = "/var/lib/synapse/${instance.name}/media_store";
media_store_path = "/var/lib/synapse/${instance.name}/media_store"; presence.enabled = true;
presence.enabled = true; url_preview_enabled = true;
url_preview_enabled = true; url_preview_ip_range_blacklist =
url_preview_ip_range_blacklist = [
[ "10.0.0.0/8" "100.64.0.0/10" "127.0.0.0/8" "169.254.0.0/16" "172.16.0.0/12" "192.0.0.0/24"
"10.0.0.0/8" "100.64.0.0/10" "127.0.0.0/8" "169.254.0.0/16" "172.16.0.0/12" "192.0.0.0/24" "192.0.2.0/24" "192.168.0.0/16" "192.88.99.0/24" "198.18.0.0/15" "198.51.100.0/24" "2001:db8::/32"
"192.0.2.0/24" "192.168.0.0/16" "192.88.99.0/24" "198.18.0.0/15" "198.51.100.0/24" "2001:db8::/32" "203.0.113.0/24" "224.0.0.0/4" "::1/128" "fc00::/7" "fe80::/10" "fec0::/10" "ff00::/8"
"203.0.113.0/24" "224.0.0.0/4" "::1/128" "fc00::/7" "fe80::/10" "fec0::/10" "ff00::/8" ];
]; max_image_pixels = "32M";
max_image_pixels = "32M"; dynamic_thumbnails = false;
dynamic_thumbnails = false; });
}); };
"synapse/${instance.name}-sliding-sync/env" =
{
owner = "synapse-${instance.name}";
group = "synapse-${instance.name}";
content =
let
inherit (inputs.config.sops) placeholder;
pgString = "postgresql://"
+ "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"
+ ":${placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"}"
+ "@127.0.0.1:5432"
+ "/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}_sliding_sync"
+ "?sslmode=disable";
in
''
SYNCV3_SERVER=https://${instance.value.hostname}
SYNCV3_DB=${pgString}
SYNCV3_SECRET=${placeholder."synapse/${instance.name}/sliding-sync"}
SYNCV3_BINDADDR=127.0.0.1:${toString instance.value.slidingSyncPort}
'';
};
}; };
secrets = (listToAttrs (map secrets = (listToAttrs (map
(secret: { name = "synapse/${instance.name}/${secret}"; value = {}; }) (secret: { name = "synapse/${instance.name}/${secret}"; value = {}; })
[ "coturn" "registration" "macaroon" "form" ])) [ "coturn" "registration" "macaroon" "form" "sliding-sync" ]))
// { "synapse/${instance.name}/signing-key".owner = "synapse-${instance.name}"; } // { "synapse/${instance.name}/signing-key".owner = "synapse-${instance.name}"; }
// { "mail/bot" = {}; }; // { "mail/bot" = {}; };
}) })
@@ -203,9 +261,19 @@ inputs:
postgresql = postgresql =
{ {
enable = mkIf (synapse.instances != {}) true; enable = mkIf (synapse.instances != {}) true;
instances = listToAttrs (map instances = listToAttrs (concatLists (map
(instance: { name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"; value = {}; }) (instance:
(attrsToList synapse.instances)); [
{
name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
value.initializeFlags = { TEMPLATE = "template0"; LC_CTYPE = "C"; LC_COLLATE = "C"; };
}
{
name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}_sliding_sync";
value.user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
}
])
(attrsToList synapse.instances)));
}; };
redis.instances = listToAttrs (map redis.instances = listToAttrs (map
(instance: { name = "synapse-${instance.name}"; value.port = instance.value.redisPort; }) (instance: { name = "synapse-${instance.name}"; value.port = instance.value.redisPort; })
@@ -213,13 +281,35 @@ inputs:
nginx = nginx =
{ {
enable = mkIf (synapse.instances != {}) true; enable = mkIf (synapse.instances != {}) true;
https = listToAttrs (map https = listToAttrs (concatLists (map
(instance: with instance.value; (instance: with instance.value;
{ [
name = hostname; {
value.location."/".proxy = { upstream = "http://127.0.0.1:${toString port}"; websocket = true; }; name = hostname;
}) value.location =
(attrsToList synapse.instances)); {
"/".proxy = { upstream = "http://127.0.0.1:${toString port}"; websocket = true; };
"/.well-known/matrix/server".static =
{
root = builtins.toString (inputs.pkgs.writeTextFile
{
name = "server";
text = builtins.toJSON
{
"m.server" = "${hostname}:443";
};
destination = "/.well-known/matrix/server";
});
};
};
}
{
name = slidingSyncHostname;
value.location."/".proxy =
{ upstream = "http://127.0.0.1:${toString slidingSyncPort}"; websocket = true; };
}
])
(attrsToList synapse.instances)));
}; };
}; };
}; };

View File

@@ -15,20 +15,14 @@ inputs:
./security.nix ./security.nix
./sops.nix ./sops.nix
./user.nix ./user.nix
./sysctl.nix
]; ];
config = config =
{ {
services = { dbus.implementation = "broker"; fstrim = { enable = true; interval = "daily"; }; }; services = { dbus.implementation = "broker"; fstrim.enable = true; };
time.timeZone = "Asia/Shanghai"; time.timeZone = "Asia/Shanghai";
boot = boot =
{ {
kernel.sysctl =
{
"vm.oom_kill_allocating_task" = true;
"vm.oom_dump_tasks" = false;
"vm.overcommit_memory" = 1;
"kernel.sysrq" = 438;
};
supportedFilesystems = [ "ntfs" ]; supportedFilesystems = [ "ntfs" ];
consoleLogLevel = 7; consoleLogLevel = 7;
}; };
@@ -57,5 +51,11 @@ inputs:
# environment.variables.LIBRARY_PATH = "/run/current-system/sw/lib"; # environment.variables.LIBRARY_PATH = "/run/current-system/sw/lib";
virtualisation.oci-containers.backend = "docker"; virtualisation.oci-containers.backend = "docker";
home-manager.sharedModules = [{ home.stateVersion = "22.11"; }]; home-manager.sharedModules = [{ home.stateVersion = "22.11"; }];
system =
{
stateVersion = "22.11";
configurationRevision = inputs.topInputs.self.rev or "dirty";
nixos.versionSuffix = inputs.lib.mkForce "";
};
}; };
} }

View File

@@ -2,8 +2,7 @@ inputs:
{ {
options.nixos.system.kernel = let inherit (inputs.lib) mkOption types; in options.nixos.system.kernel = let inherit (inputs.lib) mkOption types; in
{ {
useLts = mkOption { type = types.bool; default = false; }; patches = mkOption { type = types.listOf types.nonEmptyStr; default = []; };
patches = mkOption { type = types.listOf (types.enum [ "cjktty" ]); default = []; };
modules = modules =
{ {
install = mkOption { type = types.listOf types.str; default = []; }; install = mkOption { type = types.listOf types.str; default = []; };
@@ -30,11 +29,11 @@ inputs:
"igb" "igb"
# yoga # yoga
"lenovo_yogabook" "lenovo_yogabook"
] ++ kernel.modules.initrd ++ (if (!kernel.useLts) then [ "lenovo-yogabook" ] else []); ];
extraModulePackages = (with inputs.config.boot.kernelPackages; [ v4l2loopback ]) ++ kernel.modules.install; extraModulePackages = (with inputs.config.boot.kernelPackages; [ v4l2loopback ]) ++ kernel.modules.install;
extraModprobeConfig = builtins.concatStringsSep "\n" kernel.modules.modprobeConfig; extraModprobeConfig = builtins.concatStringsSep "\n" kernel.modules.modprobeConfig;
kernelParams = [ "delayacct" ]; kernelParams = [ "delayacct" "acpi_osi=Linux" ];
kernelPackages = inputs.pkgs."linuxPackages_xanmod${if kernel.useLts then "" else "_latest"}"; kernelPackages = inputs.pkgs.linuxPackages_xanmod_latest;
kernelPatches = kernelPatches =
let let
patches = patches =
@@ -55,13 +54,32 @@ inputs:
hashes = hashes =
{ {
"6.1" = "11ddiammvjxx2m9v32p25l1ai759a1d6xhdpszgnihv7g2fzigf5"; "6.1" = "11ddiammvjxx2m9v32p25l1ai759a1d6xhdpszgnihv7g2fzigf5";
"6.5" = "0ckmbx53js04lrcvcsf8qk935v2pl9w0af2v1mqghfs0krakfgfh"; "6.6" = "19ib0syj3207ifr315gdrnpv6nhh435fmgl05c7k715nng40i827";
}; };
in hashes."${major}.${minor}"; in hashes."${major}.${minor}";
}; };
extraStructuredConfig = extraStructuredConfig =
{ FONT_CJK_16x16 = inputs.lib.kernel.yes; FONT_CJK_32x32 = inputs.lib.kernel.yes; }; { FONT_CJK_16x16 = inputs.lib.kernel.yes; FONT_CJK_32x32 = inputs.lib.kernel.yes; };
}; };
lantian =
{
patch = null;
# pick from xddxdd/nur-packages dce93a
extraStructuredConfig = with inputs.lib.kernel;
{
ACPI_PCI_SLOT = yes;
ENERGY_MODEL = yes;
PARAVIRT_TIME_ACCOUNTING = yes;
PM_AUTOSLEEP = yes;
WQ_POWER_EFFICIENT_DEFAULT = yes;
PREEMPT_VOLUNTARY = inputs.lib.mkForce no;
PREEMPT = inputs.lib.mkForce yes;
NO_HZ_FULL = yes;
HZ_1000 = inputs.lib.mkForce yes;
HZ_250 = inputs.lib.mkForce no;
HZ = inputs.lib.mkForce (freeform "1000");
};
};
}; };
in in
builtins.map (name: { inherit name; } // patches.${name}) kernel.patches; builtins.map (name: { inherit name; } // patches.${name}) kernel.patches;

View File

@@ -45,7 +45,6 @@ inputs:
}; };
nixPath = [ "nixpkgs=${inputs.topInputs.nixpkgs}" ]; nixPath = [ "nixpkgs=${inputs.topInputs.nixpkgs}" ];
}; };
system = { stateVersion = "22.11"; configurationRevision = inputs.topInputs.self.rev or "dirty"; };
systemd.services.nix-daemon = systemd.services.nix-daemon =
{ {
serviceConfig = { CacheDirectory = "nix"; Slice = "-.slice"; Nice = "19"; }; serviceConfig = { CacheDirectory = "nix"; Slice = "-.slice"; Nice = "19"; };

24
modules/system/sysctl.nix Normal file
View File

@@ -0,0 +1,24 @@
inputs:
{
options.nixos.system.sysctl = let inherit (inputs.lib) mkOption types; in
{
laptop-mode = mkOption { type = types.nullOr types.int; default = null; };
};
config =
let
inherit (inputs.lib) mkIf mkMerge;
inherit (inputs.config.nixos.system) sysctl;
in mkMerge
[
{
boot.kernel.sysctl =
{
"vm.oom_kill_allocating_task" = true;
"vm.oom_dump_tasks" = false;
"vm.overcommit_memory" = 1;
"kernel.sysrq" = 438;
};
}
(mkIf (sysctl.laptop-mode != null) { boot.kernel.sysctl."vm.laptop_mode" = sysctl.laptop-mode; })
];
}

View File

@@ -23,6 +23,7 @@ inputs:
v2ray = 2007; v2ray = 2007;
fz-new-order = 2008; fz-new-order = 2008;
synapse-synapse = 2009; synapse-synapse = 2009;
synapse-matrix = 2010;
}; };
}; };
group = mkOption group = mkOption

View File

@@ -5,6 +5,7 @@ inputs:
let let
inherit (inputs.lib) mkIf; inherit (inputs.lib) mkIf;
inherit (inputs.config.nixos) users; inherit (inputs.config.nixos) users;
inherit (builtins) listToAttrs;
in mkIf (builtins.elem "chn" users.users) in mkIf (builtins.elem "chn" users.users)
{ {
users.users.chn = users.users.chn =
@@ -42,7 +43,10 @@ inputs:
# identityFile = "~/.ssh/xmuhk_id_rsa"; # identityFile = "~/.ssh/xmuhk_id_rsa";
xmuhk = { host = "xmuhk"; hostname = "10.26.14.56"; user = "xmuhk"; }; xmuhk = { host = "xmuhk"; hostname = "10.26.14.56"; user = "xmuhk"; };
xmuhk2 = { host = "xmuhk2"; hostname = "183.233.219.132"; user = "xmuhk"; port = 62022; }; xmuhk2 = { host = "xmuhk2"; hostname = "183.233.219.132"; user = "xmuhk"; port = 62022; };
}; }
// (listToAttrs (map
(system: { name = system; value.forwardAgent = true; })
[ "vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "nas" "wireguard.nas" ]));
}; };
home.packages = home.packages =
[ [

View File

@@ -14,6 +14,7 @@ redis:
send: ENC[AES256_GCM,data:IGxj3cgp+fQBdupfK+IgPEQSPuXdM9LRSLGSATNIkzUWC6sQw1aaKTDuRc8cU2BG6quthRwuWnK/F7k3KrUi8Q==,iv:LI9MkaF4e47FPUyL7AXZpO+CdgF91ScdiqjrE8PZjJ4=,tag:eNugln5M0AhU1xmVWFN7Aw==,type:str] send: ENC[AES256_GCM,data:IGxj3cgp+fQBdupfK+IgPEQSPuXdM9LRSLGSATNIkzUWC6sQw1aaKTDuRc8cU2BG6quthRwuWnK/F7k3KrUi8Q==,iv:LI9MkaF4e47FPUyL7AXZpO+CdgF91ScdiqjrE8PZjJ4=,tag:eNugln5M0AhU1xmVWFN7Aw==,type:str]
mastodon: ENC[AES256_GCM,data:E5aMRzqd1dqcw66uZwWoT+LDH30mg1vZjk3lhKIXKPd36MANE6z04aBPcAHyHT71jEYsect9JXagC4MUJBuSSQ==,iv:4IjTTNSTraL33fInlTkB2ZylcEaaKi5pgvugZIk24e0=,tag:32JSTNpF2cxYh/NEAS6jZQ==,type:str] mastodon: ENC[AES256_GCM,data:E5aMRzqd1dqcw66uZwWoT+LDH30mg1vZjk3lhKIXKPd36MANE6z04aBPcAHyHT71jEYsect9JXagC4MUJBuSSQ==,iv:4IjTTNSTraL33fInlTkB2ZylcEaaKi5pgvugZIk24e0=,tag:32JSTNpF2cxYh/NEAS6jZQ==,type:str]
synapse-synapse: ENC[AES256_GCM,data:8CVbcN2FG4mRT4PnlOGsS7tDfS+6ojIJFvq2EwItxn1gg2Ghd/Bmx+5tS/Do2FrYp/Xiv1EqucomM50r5bXnmg==,iv:TT7zBKQ4M10XYVCn5aeSu9IqjrIEHHazPUCOTmgRAU0=,tag:0+Q9hZMBVDj1TnHj3xoTBA==,type:str] synapse-synapse: ENC[AES256_GCM,data:8CVbcN2FG4mRT4PnlOGsS7tDfS+6ojIJFvq2EwItxn1gg2Ghd/Bmx+5tS/Do2FrYp/Xiv1EqucomM50r5bXnmg==,iv:TT7zBKQ4M10XYVCn5aeSu9IqjrIEHHazPUCOTmgRAU0=,tag:0+Q9hZMBVDj1TnHj3xoTBA==,type:str]
synapse-matrix: ENC[AES256_GCM,data:eJ9GXDVLPg1C+Zjpj3NnWUyZxDbOZ61f+gs/bkZgdWjeu61MEMtU/Hh+p/ceAn3y0aPi0ZTcd+zSgIPIkcj+qg==,iv:uTdS4uguNJErc+DDW4H6dsRFkqlkHtaCfR8LR/d9nvY=,tag:UhY9xbe1r7FUpyid2nSt5Q==,type:str]
postgresql: postgresql:
wallabag: ENC[AES256_GCM,data:ANwvEE3K/W/hU34Y7RvlbUuJNo2bOaRfeusYM9pRxXQOdG4XpwYfd/DprsrVjlkrMFuTurUR5j6UNHWh+ILDbQ==,iv:K8doqhVosz+OosMrLJXrSxairr84EeGs3EWgVQjpkS8=,tag:WjDzy7ubm/GVlBkW0O3znQ==,type:str] wallabag: ENC[AES256_GCM,data:ANwvEE3K/W/hU34Y7RvlbUuJNo2bOaRfeusYM9pRxXQOdG4XpwYfd/DprsrVjlkrMFuTurUR5j6UNHWh+ILDbQ==,iv:K8doqhVosz+OosMrLJXrSxairr84EeGs3EWgVQjpkS8=,tag:WjDzy7ubm/GVlBkW0O3znQ==,type:str]
misskey_misskey: ENC[AES256_GCM,data:lRbSz7bbiWEdK/cRD41fLvFJF4WYsclKHVykFcU3LIz9vnKlR3VdczzznVqpT7JvG6OUi+TmipJii+0KzXHtdA==,iv:8sBKgVwuDJdThup0KQ6cnAV5O2liwVra1yIpDHVfpMI=,tag:DyUpaHai8ZUyllvZBUm8sg==,type:str] misskey_misskey: ENC[AES256_GCM,data:lRbSz7bbiWEdK/cRD41fLvFJF4WYsclKHVykFcU3LIz9vnKlR3VdczzznVqpT7JvG6OUi+TmipJii+0KzXHtdA==,iv:8sBKgVwuDJdThup0KQ6cnAV5O2liwVra1yIpDHVfpMI=,tag:DyUpaHai8ZUyllvZBUm8sg==,type:str]
@@ -25,6 +26,7 @@ postgresql:
gitea: ENC[AES256_GCM,data:EAuFPlUFvtARh4wbevoIUwZ886nS+3O9Jy7q/SkaTDx7PkQKGhZcPPxY45AG0QQrjSaI3cGLzDBMutFMXP0BMA==,iv:0cLOsopAfyMLHJDowyZirVR5nqLrjSLHYtnPC8GXReE=,tag:BwG5UibGLS16rwJbH/0ZyQ==,type:str] gitea: ENC[AES256_GCM,data:EAuFPlUFvtARh4wbevoIUwZ886nS+3O9Jy7q/SkaTDx7PkQKGhZcPPxY45AG0QQrjSaI3cGLzDBMutFMXP0BMA==,iv:0cLOsopAfyMLHJDowyZirVR5nqLrjSLHYtnPC8GXReE=,tag:BwG5UibGLS16rwJbH/0ZyQ==,type:str]
grafana: ENC[AES256_GCM,data:ZLtDIZ3oKasE4r1WNllNe/rkXxqRS+QAJI7EGPKhiFF1BtAxD46UpGQnUag3yg0gP/8+3COQs6camVSxcKFL1A==,iv:wMj3keVjNpVwNMwlt4E3ds1EYjLNIZ/S3RydhOlmYWU=,tag:ZRn7NWaUPbf2rHYLoLYw+w==,type:str] grafana: ENC[AES256_GCM,data:ZLtDIZ3oKasE4r1WNllNe/rkXxqRS+QAJI7EGPKhiFF1BtAxD46UpGQnUag3yg0gP/8+3COQs6camVSxcKFL1A==,iv:wMj3keVjNpVwNMwlt4E3ds1EYjLNIZ/S3RydhOlmYWU=,tag:ZRn7NWaUPbf2rHYLoLYw+w==,type:str]
akkoma: ENC[AES256_GCM,data:6piRt7BbMBLVGdot+VyoJN3/S8DoPNTYHFh/1coHSLNmiA6kU/6sca4Bts1Up/Vu164oTsFAr1JsKx6tzNzAPg==,iv:qplA1GXHwzVrmjm7eagCk3PFa7DRdwaf+p7N1HLb6mw=,tag:W6WedSK3R1IgZVo/0Hr9vA==,type:str] akkoma: ENC[AES256_GCM,data:6piRt7BbMBLVGdot+VyoJN3/S8DoPNTYHFh/1coHSLNmiA6kU/6sca4Bts1Up/Vu164oTsFAr1JsKx6tzNzAPg==,iv:qplA1GXHwzVrmjm7eagCk3PFa7DRdwaf+p7N1HLb6mw=,tag:W6WedSK3R1IgZVo/0Hr9vA==,type:str]
synapse_matrix: ENC[AES256_GCM,data:5j+TYJ3vYUqu6CdRDYAT558DsTWbX4Rh+HuukPog5HGXlhneL3RnxVeGBR9CV1rlCP1NY99Nm8roBG+BcyPYHQ==,iv:CboB6lzqxAE/8ZlzaTU3bxw94N6OAhrq8pZ0AfxQiUc=,tag:z6cM3ufgbMn5n5PzgqdRjw==,type:str]
meilisearch: meilisearch:
misskey-misskey: ENC[AES256_GCM,data:4s+qqd6mmstioC0XmG/vA6ED9mzu1vRJVPFFalRiqnnsFy0dYEU87H+y12eOp/KDSLdTNvpp6Z6jCNvxnpDXzQ==,iv:x6L9OPu/dwVsD9pYb4dqavw9NesMbo7LB+rwz6veAR4=,tag:/BBqV2sHIgPas7XsZydh2g==,type:str] misskey-misskey: ENC[AES256_GCM,data:4s+qqd6mmstioC0XmG/vA6ED9mzu1vRJVPFFalRiqnnsFy0dYEU87H+y12eOp/KDSLdTNvpp6Z6jCNvxnpDXzQ==,iv:x6L9OPu/dwVsD9pYb4dqavw9NesMbo7LB+rwz6veAR4=,tag:/BBqV2sHIgPas7XsZydh2g==,type:str]
rsshub: rsshub:
@@ -43,6 +45,14 @@ synapse:
macaroon: ENC[AES256_GCM,data:2/8GuF/a+ocVtLN0PU17JDvXw/RoXX/CXFHPlI9THl5bY8lBm6tEawijnOKVoFLovfU=,iv:GPAr3ZjqLf9ixevsZoQgs4cPkv0VL4WJoFfQZOdThlw=,tag:HRt/igDEfUJ3K39mG7b9Fg==,type:str] macaroon: ENC[AES256_GCM,data:2/8GuF/a+ocVtLN0PU17JDvXw/RoXX/CXFHPlI9THl5bY8lBm6tEawijnOKVoFLovfU=,iv:GPAr3ZjqLf9ixevsZoQgs4cPkv0VL4WJoFfQZOdThlw=,tag:HRt/igDEfUJ3K39mG7b9Fg==,type:str]
form: ENC[AES256_GCM,data:Z9cYL9ibRWmOhAYtB269n0cWZSvL4zGgc03ZRag0m8cz2j0god/Fn/w6kx3cyGK1C70=,iv:Yst6WSV63IvbMF5nnicIoBj77eSwVMnAHtHrKo2UcDk=,tag:4qf6F2rdctcCf4J9vECvYg==,type:str] form: ENC[AES256_GCM,data:Z9cYL9ibRWmOhAYtB269n0cWZSvL4zGgc03ZRag0m8cz2j0god/Fn/w6kx3cyGK1C70=,iv:Yst6WSV63IvbMF5nnicIoBj77eSwVMnAHtHrKo2UcDk=,tag:4qf6F2rdctcCf4J9vECvYg==,type:str]
signing-key: ENC[AES256_GCM,data:BbPJiNcVTqMAL2XG3K3CIbsb8EM4r8ct/WxPK10FHRwAnqChKy3CAviYU9gewO/tNZXHvUYUAUbPww==,iv:IZB/40EE3DIxAqagdH/a4kcSmiec5l24XLCQKCQNaRo=,tag:/1t0WAPBYmYrPTx4V4wgkw==,type:str] signing-key: ENC[AES256_GCM,data:BbPJiNcVTqMAL2XG3K3CIbsb8EM4r8ct/WxPK10FHRwAnqChKy3CAviYU9gewO/tNZXHvUYUAUbPww==,iv:IZB/40EE3DIxAqagdH/a4kcSmiec5l24XLCQKCQNaRo=,tag:/1t0WAPBYmYrPTx4V4wgkw==,type:str]
sliding-sync: ENC[AES256_GCM,data:POXExkTRRhXin4lD4MA61xsuzYXCT6U7QtQWtNnEb6kUWRrAvS9mqk+JTBn3onCzf2Azhi3WQOY/t+OiQFXI1w==,iv:GJfJSGb6t/q9KdVCr0dVVcD+e0yZUQzrJrtuhOlYJIE=,tag:ovd1ZXRkk7VoNo8KoYDViA==,type:str]
matrix:
coturn: ENC[AES256_GCM,data:MwZKkYMefshuk46Cne4wn9ooFH8RCDbrxp+MbLJWli9iPHuzJJzUuQNU9EDL0aNbzyYEMt/7DErw42z6KrpGww==,iv:u/SVVTgfJO2FakiYU+uLHXjA4tHU/W6ASsR3S31+pWs=,tag:VTeKNOKwm2bsiZAOVXeBOQ==,type:str]
registration: ENC[AES256_GCM,data:+pA61vTg12lYUyXjLrHSY7y/ExfTQffLlGUI4HBOSFFPTck7bu68FrCaHOIBTtEMfjU=,iv:Ex/phkBZxglG8HiRz+m7h2HNanpq2Pxwbm08vdM3xFc=,tag:mM3YEa70FnCeYIUthK4TeA==,type:str]
macaroon: ENC[AES256_GCM,data:/+RaayKiPPpVV7OWWdaSkSSRHMjb8d58lZcpvltN9cYkN1btvMViEgdLSlfqzRRlPUE=,iv:pg9GXgNsrVWKlUAiCKZ2pYXugRH6MsBIMpHKoYWYLik=,tag:/mj5Ak7XAX/FH7sNPEVALw==,type:str]
form: ENC[AES256_GCM,data:7HF7HMUH1BTJgXXP6cpUiVj0jCwGW57bx9wKTJu7PnRsNuAam/+nKX7Zfg7WD+gSBlA=,iv:SYeUsuFVgAA6U6STCtKT5c5E8Kglh3x7hy6+Op4n0W8=,tag:eICmHTwwn0KcgNhdDGnusA==,type:str]
signing-key: ENC[AES256_GCM,data:hzxxDbGp1L09O7+ueUSa5lJOY/QvF2zvHdpueEHjaPQEToQt9mr2loeTQHC7ObTegfLb9UHrI1jn4A==,iv:KngfahwYZZmDQ5LeOUPWptTMGAC8TZm1G0FWcrwCwsw=,tag:U9pW6/boBIpiswn67Ezrfw==,type:str]
sliding-sync: ENC[AES256_GCM,data:BeA6g98IWDP6hnLFI77QqG6esDwB6j3OPzAv3eJxWoTajAsByHSgSYP1vHN5Iok6IgvSSmkf0/HiOJy1Ca8IIA==,iv:ca+t/rYwc/fAVUcz0JTmrRQCOcbDNscbnE8BpHkx/OE=,tag:eEfhUChUt4kRnO82XqRY4g==,type:str]
nebula: nebula:
key: ENC[AES256_GCM,data:9o6EkfTWOU0KwnJsgHML4E7VOfzo3LHnlOkV8ubhi6aayXImC3lAaoPrqUI=,iv:KHprijN7z+4FIIW+D5klDM9a9VzMJ5xawPc7jJtbHmk=,tag:0DAmxoz8D5f38ndPbkNW+g==,type:str] key: ENC[AES256_GCM,data:9o6EkfTWOU0KwnJsgHML4E7VOfzo3LHnlOkV8ubhi6aayXImC3lAaoPrqUI=,iv:KHprijN7z+4FIIW+D5klDM9a9VzMJ5xawPc7jJtbHmk=,tag:0DAmxoz8D5f38ndPbkNW+g==,type:str]
vaultwarden: vaultwarden:
@@ -119,8 +129,8 @@ sops:
SnFHS1Z0SXUzTFdEd29KTy9DU3Y3R0UKfhh+rUmWDrf+UGjclP57dHipPLFoXSqy SnFHS1Z0SXUzTFdEd29KTy9DU3Y3R0UKfhh+rUmWDrf+UGjclP57dHipPLFoXSqy
HdelmfV6q4/c7ppx2E+oZw3VNgoZCsrxxzYZfwxHJiZb+5vkE0D8iA== HdelmfV6q4/c7ppx2E+oZw3VNgoZCsrxxzYZfwxHJiZb+5vkE0D8iA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2023-12-17T14:39:51Z" lastmodified: "2023-12-20T06:27:19Z"
mac: ENC[AES256_GCM,data:W07NZGIKm0sx1g/DBB5IRZItomTKjj5m+AnWYT1lck11hwH20kjH21zm++VtNpS4j+ay/5Y3e9zkWSFpk3C8AFxvB/2r8gVhcNF5stCGCj4Exc2OTE+g2m6yp4ZMkgXZDidlc1by6pNah6nf7lk1W/sZ5ViMdlMonERCoOiOmf0=,iv:sFEs5FSKp29bXZQPBWoQ71ippu2XxLPl8b5hSzG0Gbk=,tag:/Jio9+sysSrpFKMYBVWGpw==,type:str] mac: ENC[AES256_GCM,data:i7AN+Sd4C61GSzT409mYd6D2tQzDyONIUsto52b1mV8hIJ4Q/U9VT5wumRjm4dGUWqrq9oFdD0/iUL1CmEdasBN7VFwNEpSYl6yhzU7zX3Re3N/0mffeW0Fx/38LdvywusJAHC9yWvsNMblKDnYxGm/UI2W/7QRMDyr8jnU6La0=,iv:Ua+K1m27GkkrUn+wcylkwrdWnq1yzFG1NMVzYAiW/6k=,tag:Gqqk5zOU3Ax2Al5CvXEV7g==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.8.1 version: 3.8.1