Compare commits

..

2 Commits

Author SHA1 Message Date
imxyy1soope1 8a31f71d80 chore(zen): xdg migration 2026-02-20 17:14:57 +08:00
imxyy1soope1 04116ebfcb chore(hmcl): remove hack 2026-02-20 17:14:37 +08:00
73 changed files with 1391 additions and 3963 deletions
Generated
+462 -385
View File
File diff suppressed because it is too large Load Diff
+7 -48
View File
@@ -20,7 +20,6 @@
nixos-wsl = { nixos-wsl = {
url = "github:nix-community/NixOS-WSL"; url = "github:nix-community/NixOS-WSL";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
}; };
# Flake organization tools # Flake organization tools
@@ -41,11 +40,11 @@
# Useful modules # Useful modules
# keep-sorted start block=yes # keep-sorted start block=yes
impermanence = { catppuccin = {
url = "github:nix-community/impermanence"; url = "github:catppuccin/nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
}; };
impermanence.url = "github:nix-community/impermanence";
# TODO: sops-nix: remove pr patch once merged # TODO: sops-nix: remove pr patch once merged
# https://github.com/Mic92/sops-nix/pull/779 # https://github.com/Mic92/sops-nix/pull/779
sops-nix = { sops-nix = {
@@ -55,8 +54,6 @@
stylix = { stylix = {
url = "github:danth/stylix"; url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.systems.follows = "systems";
}; };
system76-scheduler-niri = { system76-scheduler-niri = {
url = "github:Kirottu/system76-scheduler-niri"; url = "github:Kirottu/system76-scheduler-niri";
@@ -69,9 +66,6 @@
angrr = { angrr = {
url = "github:linyinfeng/angrr"; url = "github:linyinfeng/angrr";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-parts.follows = "flake-parts";
inputs.treefmt-nix.follows = "treefmt";
}; };
darkly = { darkly = {
url = "github:Bali10050/Darkly"; url = "github:Bali10050/Darkly";
@@ -84,35 +78,14 @@
go-musicfox = { go-musicfox = {
url = "github:imxyy1soope1/go-musicfox"; url = "github:imxyy1soope1/go-musicfox";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.devenv.follows = "devenv";
inputs.nix2container.inputs.flake-utils.follows = "flake-utils";
};
llm-agents = {
url = "github:numtide/llm-agents.nix";
# Not followed intentionally (binary cache)
# inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.systems.follows = "systems";
inputs.treefmt-nix.follows = "treefmt";
};
niri = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs-stable.follows = "nixpkgs-stable";
}; };
niri.url = "github:sodiboo/niri-flake";
noctalia = { noctalia = {
url = "github:noctalia-dev/noctalia-shell/v4.7.5"; url = "github:noctalia-dev/noctalia-shell/v4.5.0";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.noctalia-qs.inputs.nixpkgs.follows = "nixpkgs";
inputs.noctalia-qs.inputs.systems.follows = "systems";
inputs.noctalia-qs.inputs.treefmt-nix.follows = "treefmt";
};
zen = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
}; };
zen.inputs.nixpkgs.follows = "nixpkgs";
zen.url = "github:0xc000022070/zen-browser-flake";
# keep-sorted end # keep-sorted end
# Misc # Misc
@@ -125,20 +98,6 @@
flake = false; flake = false;
}; };
my-templates.url = "git+https://git.imxyy.top/imxyy1soope1/flake-templates"; my-templates.url = "git+https://git.imxyy.top/imxyy1soope1/flake-templates";
# Flattened indirect dependencies
flake-compat.url = "github:edolstra/flake-compat";
flake-utils = {
url = "github:numtide/flake-utils";
inputs.systems.follows = "systems";
};
systems.url = "github:nix-systems/default";
devenv = {
url = "github:cachix/devenv";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.flake-compat.follows = "flake-compat";
};
}; };
outputs = outputs =
+1
View File
@@ -126,6 +126,7 @@ in
# Upstream modules # Upstream modules
# keep-sorted start # keep-sorted start
inputs.angrr.nixosModules.angrr inputs.angrr.nixosModules.angrr
inputs.catppuccin.nixosModules.catppuccin
inputs.home-manager.nixosModules.default inputs.home-manager.nixosModules.default
inputs.impermanence.nixosModules.impermanence inputs.impermanence.nixosModules.impermanence
inputs.niri.nixosModules.niri inputs.niri.nixosModules.niri
+1 -1
View File
@@ -14,11 +14,11 @@
inputs.fenix.overlays.default inputs.fenix.overlays.default
inputs.angrr.overlays.default inputs.angrr.overlays.default
(final: prev: { (final: prev: {
darkly-qt5 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt5;
darkly-qt6 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt6; darkly-qt6 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt6;
noctalia-shell = inputs.noctalia.packages.${final.stdenv.hostPlatform.system}.default; noctalia-shell = inputs.noctalia.packages.${final.stdenv.hostPlatform.system}.default;
}) })
inputs.llm-agents.overlays.shared-nixpkgs
]; ];
config.allowUnfree = true; config.allowUnfree = true;
flake.setNixPath = false; flake.setNixPath = false;
+43
View File
@@ -0,0 +1,43 @@
{
services.grafana = {
enable = true;
settings = {
server = {
http_addr = "0.0.0.0";
http_port = 8090;
domain = "grafana.imxyy.top";
};
};
};
services.prometheus = {
enable = true;
port = 8091;
exporters = {
node = {
enable = true;
port = 8092;
enabledCollectors = [
"systemd"
"zfs"
];
};
};
scrapeConfigs = [
{
job_name = "node";
static_configs = [
{
targets = [ "127.0.0.1:8092" ];
}
];
}
];
};
services.caddy.virtualHosts."grafana.imxyy.top" = {
extraConfig = ''
reverse_proxy :8090 {
header_up X-Real-IP {remote_host}
}
'';
};
}
+42 -5
View File
@@ -31,12 +31,13 @@ in
services.btrfs.autoScrub.enable = true; services.btrfs.autoScrub.enable = true;
networking.hostId = "10ca95b4"; networking.hostId = "10ca95b4";
my.persist.btrfs = { fileSystems."/" = {
device = btrfs; device = btrfs;
mountPoint = "/nix/persist"; fsType = "btrfs";
persistSubvol = "persist"; options = [
rootSubvol = "root"; "compress=zstd"
zstdCompress = true; "subvol=root"
];
}; };
fileSystems."/nix" = { fileSystems."/nix" = {
@@ -48,6 +49,42 @@ in
]; ];
}; };
my.persist.location = "/nix/persist";
fileSystems."/nix/persist" = {
device = btrfs;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=persist"
];
neededForBoot = true;
};
boot.initrd.postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${btrfs} /btrfs_tmp
mkdir -p /btrfs_tmp/old_roots
if [[ -e /btrfs_tmp/root ]]; then
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/32AA-2998"; device = "/dev/disk/by-uuid/32AA-2998";
fsType = "vfat"; fsType = "vfat";
-1
View File
@@ -8,7 +8,6 @@
coding.langs.lua.enable = true; coding.langs.lua.enable = true;
coding.langs.rust.enable = true; coding.langs.rust.enable = true;
coding.langs.js.enable = true; coding.langs.js.enable = true;
coding.agents.enable = true;
fonts.enable = lib.mkForce false; fonts.enable = lib.mkForce false;
persist = { persist = {
enable = true; enable = true;
-36
View File
@@ -95,12 +95,7 @@
displayname_template = "{displayname} (Telegram)"; displayname_template = "{displayname} (Telegram)";
permissions = { permissions = {
"@imxyy_soope_:imxyy.top" = "admin"; "@imxyy_soope_:imxyy.top" = "admin";
"*" = "relaybot";
}; };
relaybot = {
whitelist = [ ];
};
relay_user_distinguishers = [ ];
}; };
telegram = { telegram = {
# borrowed from https://github.com/telegramdesktop/tdesktop/blob/9bdc19e2fd4d497c8f403891848383a88faadc25/snap/snapcraft.yaml#L134-L135 # borrowed from https://github.com/telegramdesktop/tdesktop/blob/9bdc19e2fd4d497c8f403891848383a88faadc25/snap/snapcraft.yaml#L134-L135
@@ -109,35 +104,4 @@
}; };
}; };
}; };
sops.secrets.mautrix-signal = {
sopsFile = secrets.mautrix-signal;
restartUnits = [ "mautrix-signal.service" ];
format = "dotenv";
owner = "mautrix-signal";
group = "mautrix-signal";
};
services.mautrix-signal = {
enable = true;
environmentFile = config.sops.secrets.mautrix-signal.path;
settings = {
homeserver = {
address = "http://127.0.0.1:8094";
domain = "imxyy.top";
};
appservice = {
address = "http://127.0.0.1:8102";
hostname = "127.0.0.1";
port = 8102;
bot_username = "signalbot";
};
bridge = {
username_template = "signal_{userid}";
alias_template = "signal_{groupname}";
displayname_template = "{displayname} (Signal)";
permissions = {
"@imxyy_soope_:imxyy.top" = "admin";
};
};
};
};
} }
+20
View File
@@ -0,0 +1,20 @@
{ config, secrets, ... }:
{
sops.secrets.minio-env = {
sopsFile = secrets.minio;
restartUnits = [ "minio.service" ];
format = "dotenv";
};
services.minio = {
enable = true;
listenAddress = ":9000";
consoleAddress = ":9001";
region = "cn-south-gz";
configDir = "/mnt/nas/minio/config";
dataDir = [
"/mnt/nas/minio/data"
];
rootCredentialsFile = config.sops.secrets.minio-env.path;
};
}
+16
View File
@@ -290,6 +290,21 @@
customDomains = [ "coder.imxyy.top" ]; customDomains = [ "coder.imxyy.top" ];
} }
{
name = "grafana-http";
type = "http";
localIP = "127.0.0.1";
localPort = 80;
customDomains = [ "grafana.imxyy.top" ];
}
{
name = "grafana-https";
type = "https";
localIP = "127.0.0.1";
localPort = 443;
customDomains = [ "grafana.imxyy.top" ];
}
{ {
name = "siyuan-http"; name = "siyuan-http";
type = "http"; type = "http";
@@ -484,6 +499,7 @@
"git" "git"
"vault" "vault"
"coder" "coder"
"grafana"
"matrix" "matrix"
"note" "note"
"oidc" "oidc"
+2 -8
View File
@@ -17,9 +17,9 @@ in
services.nextcloud = { services.nextcloud = {
enable = true; enable = true;
package = pkgs.nextcloud33; package = pkgs.nextcloud32;
extraApps = { extraApps = {
inherit (pkgs.nextcloud33.packages.apps) inherit (pkgs.nextcloud32.packages.apps)
bookmarks bookmarks
previewgenerator previewgenerator
spreed spreed
@@ -73,12 +73,6 @@ in
"pm.max_spare_servers" = "12"; "pm.max_spare_servers" = "12";
}; };
}; };
# Fixes `The following x-forwarded-for header was received by Nextcloud: "10.88.0.1"`
systemd.services.nextcloud-notify_push = {
environment = {
NEXTCLOUD_URL = lib.mkForce "http://127.0.0.1:8084";
};
};
services.nginx.virtualHosts."nextcloud.imxyy.top" = { services.nginx.virtualHosts."nextcloud.imxyy.top" = {
listen = [ listen = [
{ {
+42 -5
View File
@@ -30,12 +30,13 @@ in
}; };
}; };
my.persist.btrfs = { fileSystems."/" = {
device = btrfs; device = btrfs;
mountPoint = "/nix/persist"; fsType = "btrfs";
persistSubvol = "persist"; options = [
rootSubvol = "root"; "compress=zstd"
zstdCompress = true; "subvol=root"
];
}; };
fileSystems."/nix" = { fileSystems."/nix" = {
@@ -47,6 +48,42 @@ in
]; ];
}; };
my.persist.location = "/nix/persist";
fileSystems."/nix/persist" = {
device = btrfs;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=persist"
];
neededForBoot = true;
};
boot.initrd.postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${btrfs} /btrfs_tmp
mkdir -p /btrfs_tmp/old_roots
if [[ -e /btrfs_tmp/root ]]; then
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/96D3-93B0"; device = "/dev/disk/by-uuid/96D3-93B0";
fsType = "vfat"; fsType = "vfat";
+7
View File
@@ -131,6 +131,13 @@
".config/dconf" ".config/dconf"
".config/pip" ".config/pip"
".config/sunshine" ".config/sunshine"
".gemini"
".claude"
".claude-code-router"
];
homeFiles = [
".claude.json"
]; ];
}; };
}; };
+42 -5
View File
@@ -37,12 +37,13 @@ in
]; ];
}; };
my.persist.btrfs = { fileSystems."/" = {
device = btrfs; device = btrfs;
mountPoint = "/nix/persist"; fsType = "btrfs";
persistSubvol = "persistent"; options = [
rootSubvol = "root"; "compress=zstd"
zstdCompress = true; "subvol=root"
];
}; };
fileSystems."/nix" = { fileSystems."/nix" = {
@@ -51,6 +52,17 @@ in
options = [ "compress=zstd" ]; options = [ "compress=zstd" ];
}; };
my.persist.location = "/nix/persist";
fileSystems."/nix/persist" = {
device = btrfs;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=persistent"
];
neededForBoot = true;
};
fileSystems."/swap" = { fileSystems."/swap" = {
device = btrfs; device = btrfs;
fsType = "btrfs"; fsType = "btrfs";
@@ -61,6 +73,31 @@ in
neededForBoot = true; neededForBoot = true;
}; };
boot.initrd.postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${btrfs} /btrfs_tmp
mkdir -p /btrfs_tmp/old_roots
if [[ -e /btrfs_tmp/root ]]; then
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/B7DC-E9AC"; device = "/dev/disk/by-uuid/B7DC-E9AC";
fsType = "vfat"; fsType = "vfat";
+13
View File
@@ -78,6 +78,12 @@
}; };
my = { my = {
autologin = {
enable = true;
user = username;
ttys = [ 6 ];
};
gpg.enable = true; gpg.enable = true;
cli.all.enable = true; cli.all.enable = true;
coding.all.enable = true; coding.all.enable = true;
@@ -155,6 +161,13 @@
".config/dconf" ".config/dconf"
".config/pip" ".config/pip"
".config/sunshine" ".config/sunshine"
".gemini"
".claude"
".claude-code-router"
];
homeFiles = [
".claude.json"
]; ];
}; };
}; };
+2 -1
View File
@@ -67,12 +67,13 @@ in
aria2 aria2
bat bat
comma comma
fastfetch.minimal fastfetch
fd fd
fzf fzf
jq jq
keep-sorted keep-sorted
lsd lsd
neofetch
ripgrep ripgrep
socat socat
typos typos
-1
View File
@@ -12,7 +12,6 @@ in
zsh.enable = true; zsh.enable = true;
fish.enable = true; fish.enable = true;
starship.enable = true; starship.enable = true;
carapace.enable = true;
}; };
}; };
} }
-17
View File
@@ -1,17 +0,0 @@
{ config, lib, ... }:
let
cfg = config.my.cli.shell.carapace;
in
{
options.my.cli.shell.carapace = {
enable = lib.mkEnableOption "carapace completer";
};
config = lib.mkIf cfg.enable {
my.hm = {
programs.carapace = {
enable = true;
};
};
};
}
+1 -1
View File
@@ -32,7 +32,7 @@ in
shellAliases = { shellAliases = {
la = "lsd -lah"; la = "lsd -lah";
ls = "lsd"; ls = "lsd";
svim = "sudoedit"; svim = "doasedit";
nf = "fastfetch"; nf = "fastfetch";
}; };
interactiveShellInit = lib.mkBefore '' interactiveShellInit = lib.mkBefore ''
+1 -1
View File
@@ -51,7 +51,7 @@ in
}; };
shellAliases = { shellAliases = {
ls = "lsd"; ls = "lsd";
svim = "sudoedit"; svim = "doasedit";
nf = "fastfetch"; nf = "fastfetch";
}; };
}; };
-37
View File
@@ -1,37 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.coding.agents;
in
{
options.my.coding.agents = {
enable = lib.mkEnableOption "LLM coding agents";
};
config = lib.mkIf cfg.enable {
my.hm = {
home.packages = with pkgs.llm-agents; [
codex
claude-code
opencode
];
};
my.persist = {
homeDirs = [
".claude"
".config/opencode"
".local/share/opencode"
".codex"
];
homeFiles = [
".claude.json"
];
};
};
}
-1
View File
@@ -11,7 +11,6 @@ in
my.coding = { my.coding = {
editor.all.enable = true; editor.all.enable = true;
langs.all.enable = true; langs.all.enable = true;
agents.enable = true;
misc.enable = true; misc.enable = true;
}; };
}; };
+2 -14
View File
@@ -14,8 +14,6 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
# workaround
environment.sessionVariables.EDITOR = "nvim";
my.hm = { my.hm = {
xdg.configFile."nvim".source = impure.mkImpureLink ./nvim; xdg.configFile."nvim".source = impure.mkImpureLink ./nvim;
programs.neovim = { programs.neovim = {
@@ -24,25 +22,15 @@ in
viAlias = true; viAlias = true;
vimAlias = true; vimAlias = true;
vimdiffAlias = true; vimdiffAlias = true;
withPython3 = false;
withRuby = false;
sideloadInitLua = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
# treesitter gcc # treesitter
tree-sitter
gnutar
curl
gcc
ripgrep # telescope ripgrep # telescope
# language servers
vscode-json-languageserver vscode-json-languageserver
vscode-langservers-extracted vscode-langservers-extracted
taplo
typos-lsp typos-lsp
# render-markdown.nvim
python3Packages.pylatexenc
]; ];
}; };
}; };
@@ -1,43 +1,44 @@
{ {
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" }, "LuaSnip": { "branch": "master", "commit": "de10d8414235b0a8cabfeba60d07c24304e71f5c" },
"blink.cmp": { "branch": "main", "commit": "3db7326f54b73df4789e0fd6274bedda33975fea" }, "blink.cmp": { "branch": "main", "commit": "f9e855c4d96e1264f7c818844f5a0166ad48c212" },
"blink.lib": { "branch": "main", "commit": "b127d48bf8e9ac9cf41f6e0fbead317503f76558" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" }, "gitsigns.nvim": { "branch": "main", "commit": "c7d37ca22b461f64e26f8f6701b2586128ed0bef" },
"glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" }, "glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" },
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" }, "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" }, "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"inlay-hints.nvim": { "branch": "master", "commit": "297a65ab9543eb0850c1a55df4bb89e22cfec504" }, "inlay-hints.nvim": { "branch": "master", "commit": "990e1f96699b8293b6665b9e73b16128c66684e6" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" }, "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
"leap.nvim": { "branch": "main", "commit": "d3641f9aa86e7460b14d9f4479e7454f88cc6b2d" }, "leap.nvim": { "branch": "main", "commit": "02bf52e49c72cc5dabb53ec9494d10d304f0b2c9" },
"lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" }, "lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" }, "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" },
"mini.nvim": { "branch": "main", "commit": "b2ac6522f7a54b475d9fad711b938eefc6d3d0a6" }, "mini.nvim": { "branch": "main", "commit": "8c40d95931cbe6138391af9180e59439ed2e69df" },
"neo-tree.nvim": { "branch": "main", "commit": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61" }, "neo-tree.nvim": { "branch": "main", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" }, "nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-lspconfig": { "branch": "master", "commit": "229b79051b380377664edc4cbd534930154921a1" }, "nvim-lspconfig": { "branch": "master", "commit": "276ce3bc878243dc63c32b75790c4296d11848f6" },
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" }, "nvim-notify": { "branch": "master", "commit": "397c7c1184745fca649e5104de659e6392ef5a4d" },
"nvim-osc52": { "branch": "main", "commit": "04cfaba1865ae5c53b6f887c3ca7304973824fb2" },
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" }, "nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" }, "nvim-web-devicons": { "branch": "master", "commit": "3362099de3368aa620a8105b19ed04c2053e38c0" },
"outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" }, "outline.nvim": { "branch": "main", "commit": "0eb9289ab39c91caf8b3ed0e3a17764809d69558" },
"pest.vim": { "branch": "master", "commit": "60cae7ea1beb644ed40081a3ec213ea9061aba09" }, "pest.vim": { "branch": "master", "commit": "7cfcb43f824e74d13dfe631359fff2ec23836a77" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "a798325b7f36acc62741d1029930a7b96d4dd4bf" }, "rainbow-delimiters.nvim": { "branch": "master", "commit": "97bf4b8ef9298644a29fcd9dd41a0210cf08cac7" },
"registers": { "branch": "main", "commit": "c217f8f369e0886776cda6c94eab839b30a8940d" }, "render-markdown.nvim": { "branch": "main", "commit": "3da7bb459f6cff03980dd1e106c46f3e62ff4d9f" },
"render-markdown.nvim": { "branch": "main", "commit": "5adf0895310c1904e5abfaad40a2baad7fe44a07" }, "ripgrep": { "branch": "master", "commit": "119a58a400ea948c2d2b0cd4ec58361e74478641" },
"ripgrep": { "branch": "master", "commit": "82313cf95849bfe425109ad9506a52154879b1b1" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"telescope.nvim": { "branch": "master", "commit": "7d324792b7943e4aa16ad007212e6acc6f9fe335" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, "tree-sitter-nu": { "branch": "main", "commit": "6544c4383643cf8608d50def2247a7af8314e148" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
"vim-floaterm": { "branch": "master", "commit": "bb4ba7952e906408e1f83b215f55ffe57efcade6" }, "vim-floaterm": { "branch": "master", "commit": "fd4bdd66eca56c6cc59f2119e4447496d8cde2ea" },
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" } "vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
"workspace-diagnostics.nvim": { "branch": "main", "commit": "60f9175b2501ae3f8b1aba9719c0df8827610c8e" }
} }
@@ -24,6 +24,7 @@ keymap.set("i", "<pageup>", string.rep("<up>", 9), opt)
keymap.set("i", "<pagedown>", string.rep("<down>", 9), opt) keymap.set("i", "<pagedown>", string.rep("<down>", 9), opt)
keymap.set("n", "<leader>ww", ":w<CR>", opt) keymap.set("n", "<leader>ww", ":w<CR>", opt)
keymap.set("n", "<leader>so", ":so<CR>", opt)
keymap.set("n", "<leader>qq", ":q<CR>", opt) keymap.set("n", "<leader>qq", ":q<CR>", opt)
keymap.set("n", "<leader>qa", ":qa<CR>", opt) keymap.set("n", "<leader>qa", ":qa<CR>", opt)
keymap.set("n", "<leader>c", function() keymap.set("n", "<leader>c", function()
@@ -6,7 +6,6 @@ opt.shiftwidth = 4
opt.softtabstop = 4 opt.softtabstop = 4
opt.expandtab = true opt.expandtab = true
opt.autoindent = true opt.autoindent = true
opt.smartindent = true
-- Linenumber setting -- Linenumber setting
opt.number = true opt.number = true
@@ -23,7 +22,6 @@ opt.smartcase = true
opt.termguicolors = true opt.termguicolors = true
opt.signcolumn = "yes" opt.signcolumn = "yes"
opt.colorcolumn = "110" opt.colorcolumn = "110"
opt.textwidth = 110
opt.scrolloff = 8 opt.scrolloff = 8
opt.sidescrolloff = 8 opt.sidescrolloff = 8
@@ -80,9 +80,8 @@ local servers = {
html = {}, html = {},
java_language_server = {}, java_language_server = {},
jsonls = {}, jsonls = {},
pyrefly = {}, pyright = {},
-- taplo = {}, taplo = {},
tombi = {},
ts_ls = {}, ts_ls = {},
typos_lsp = {}, typos_lsp = {},
-- keep-sorted end -- keep-sorted end
@@ -81,26 +81,25 @@ local plugins = {
}, },
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
branch = "main",
dependencies = { dependencies = {
{
branch = "main",
"nvim-treesitter/nvim-treesitter-textobjects", "nvim-treesitter/nvim-treesitter-textobjects",
}, "nushell/tree-sitter-nu",
}, },
config = function() config = function()
require("nvim-treesitter").setup(require("plugins.treesitter")) require("nvim-treesitter.configs").setup(require("plugins.treesitter"))
end, end,
build = ":TSUpdate", build = ":TSUpdate",
}, },
{ {
url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim", url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
event = "VeryLazy",
config = function() config = function()
require("plugins.rainbow-delimiters") require("plugins.rainbow-delimiters")
end, end,
}, },
{ {
"lukas-reineke/indent-blankline.nvim", "lukas-reineke/indent-blankline.nvim",
event = "VeryLazy",
dependencies = { "https://gitlab.com/HiPhish/rainbow-delimiters.nvim" }, dependencies = { "https://gitlab.com/HiPhish/rainbow-delimiters.nvim" },
config = function() config = function()
require("ibl").setup(require("plugins.indent-blankline")) require("ibl").setup(require("plugins.indent-blankline"))
@@ -108,11 +107,13 @@ local plugins = {
}, },
{ {
"norcalli/nvim-colorizer.lua", "norcalli/nvim-colorizer.lua",
event = "VeryLazy",
opt = {}, opt = {},
}, },
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
dependencies = { "saghen/blink.cmp" }, dependencies = { "saghen/blink.cmp" },
event = "VeryLazy",
config = function() config = function()
require("plugins.lsp.lspconfig") require("plugins.lsp.lspconfig")
require("plugins.lsp.others") require("plugins.lsp.others")
@@ -174,6 +175,7 @@ local plugins = {
}, },
{ {
"saghen/blink.cmp", "saghen/blink.cmp",
event = "VeryLazy",
dependencies = { dependencies = {
{ {
"L3MON4D3/LuaSnip", "L3MON4D3/LuaSnip",
@@ -193,7 +195,6 @@ local plugins = {
}, },
}, },
}, },
"saghen/blink.lib",
}, },
config = function() config = function()
require("blink.cmp").setup(require("plugins.cmp.cmp")) require("blink.cmp").setup(require("plugins.cmp.cmp"))
@@ -201,6 +202,7 @@ local plugins = {
}, },
{ {
"numToStr/Comment.nvim", "numToStr/Comment.nvim",
event = "VeryLazy",
opts = {}, opts = {},
}, },
{ {
@@ -216,6 +218,7 @@ local plugins = {
}, },
{ {
"lewis6991/gitsigns.nvim", "lewis6991/gitsigns.nvim",
event = "VeryLazy",
config = function() config = function()
require("gitsigns").setup(require("plugins.gitsigns")) require("gitsigns").setup(require("plugins.gitsigns"))
end, end,
@@ -254,7 +257,6 @@ local plugins = {
dependencies = { "tpope/vim-repeat" }, dependencies = { "tpope/vim-repeat" },
config = function() config = function()
vim.keymap.set({ "n", "x", "o" }, "s", "<Plug>(leap)") vim.keymap.set({ "n", "x", "o" }, "s", "<Plug>(leap)")
vim.keymap.set({ "n", "x", "o" }, "<leader>s", "<Plug>(leap)")
vim.keymap.set("n", "S", "<Plug>(leap-from-window)") vim.keymap.set("n", "S", "<Plug>(leap-from-window)")
-- Exclude whitespace and the middle of alphabetic words from preview: -- Exclude whitespace and the middle of alphabetic words from preview:
-- foobar[baaz] = quux -- foobar[baaz] = quux
@@ -267,31 +269,20 @@ local plugins = {
}, },
{ {
"alexghergh/nvim-tmux-navigation", "alexghergh/nvim-tmux-navigation",
event = "VeryLazy",
config = function() config = function()
require("nvim-tmux-navigation").setup(require("plugins.tmuxnav")) require("nvim-tmux-navigation").setup(require("plugins.tmuxnav"))
end, end,
}, },
{ {
"MeanderingProgrammer/render-markdown.nvim", "MeanderingProgrammer/render-markdown.nvim",
dependencies = { dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons",
},
event = "BufEnter *.md", event = "BufEnter *.md",
--- @type render.md.UserConfig opts = {},
opts = {
completions = {
blink = {
enabled = true,
},
lsp = {
enabled = true,
},
},
},
}, },
{ {
"folke/noice.nvim", "folke/noice.nvim",
event = "VeryLazy",
dependencies = { dependencies = {
"MunifTanjim/nui.nvim", "MunifTanjim/nui.nvim",
"rcarriga/nvim-notify", "rcarriga/nvim-notify",
@@ -306,14 +297,31 @@ local plugins = {
}, },
{ {
"voldikss/vim-floaterm", "voldikss/vim-floaterm",
event = "VeryLazy",
config = function() config = function()
require("plugins.floaterm") require("plugins.floaterm")
end, end,
}, },
{ {
"folke/todo-comments.nvim", "folke/todo-comments.nvim",
event = "VeryLazy",
opts = {}, opts = {},
}, },
{
"ojroques/nvim-osc52",
event = "VeryLazy",
config = function()
require("osc52").setup({
tmux_passthrough = true,
})
local function copy()
if vim.v.event.operator == "y" and vim.v.event.regname == "+" then
require("osc52").copy_register("+")
end
end
vim.api.nvim_create_autocmd("TextYankPost", { callback = copy })
end,
},
{ {
"pest-parser/pest.vim", "pest-parser/pest.vim",
ft = "pest", ft = "pest",
@@ -322,19 +330,9 @@ local plugins = {
{ {
"nmac427/guess-indent.nvim", "nmac427/guess-indent.nvim",
event = "VeryLazy",
opts = {}, opts = {},
}, },
{
"https://codeberg.org/fosk/registers.nvim",
cmd = "Registers",
config = true,
keys = {
{ '"', mode = { "n", "v" } },
{ "<C-R>", mode = "i" },
},
name = "registers",
},
} }
require("lazy").setup(plugins, {}) require("lazy").setup(plugins, {})
@@ -1,15 +1,21 @@
--- @type TSConfig --- @type TSConfig
M = { M = {
install_dir = vim.fn.stdpath("data") .. "/site", auto_install = true,
parser_install_dir = "$HOME/.local/share/nvim/lazy/nvim-treesitter",
sync_install = true,
modules = {},
ignore_install = {},
ensure_installed = {},
highlight = { enable = true },
indent = { enable = true },
} }
vim.api.nvim_create_autocmd("FileType", { vim.filetype.add({
callback = function() pattern = {
-- Enable treesitter highlighting and disable regex syntax [".*/hypr/.*%.conf"] = "hyprlang",
pcall(vim.treesitter.start) [".*%.hl"] = "hyprlang",
-- Enable treesitter-based indentation },
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end,
}) })
return M return M
+4 -1
View File
@@ -14,7 +14,10 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
my.hm = { my.hm = {
programs.vscodium.enable = true; programs.vscode = {
enable = true;
package = pkgs.vscodium-wayland;
};
}; };
my.persist.homeDirs = [ my.persist.homeDirs = [
".config/VSCodium" ".config/VSCodium"
-1
View File
@@ -18,7 +18,6 @@ in
java.enable = true; java.enable = true;
qml.enable = true; qml.enable = true;
typst.enable = true; typst.enable = true;
toml.enable = true;
}; };
}; };
} }
+1 -1
View File
@@ -16,7 +16,7 @@ in
my.hm.home.packages = with pkgs; [ my.hm.home.packages = with pkgs; [
go go
gotools gotools
(lib.hiPrio gopls) gopls
]; ];
my.persist.homeDirs = [ my.persist.homeDirs = [
"go" "go"
+1 -1
View File
@@ -19,7 +19,7 @@ in
pnpm pnpm
typescript typescript
typescript-language-server nodePackages.typescript-language-server
vue-language-server vue-language-server
biome biome
+1 -1
View File
@@ -16,7 +16,7 @@ in
my.hm.home.packages = with pkgs; [ my.hm.home.packages = with pkgs; [
python3 python3
uv uv
pyrefly pyright
]; ];
}; };
} }
-20
View File
@@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.coding.langs.toml;
in
{
options.my.coding.langs.toml = {
enable = lib.mkEnableOption "TOML";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = with pkgs; [
tombi
];
};
}
-1
View File
@@ -21,7 +21,6 @@ in
]; ];
programs.direnv = { programs.direnv = {
enable = true; enable = true;
nix-direnv.enable = true;
config = { config = {
global = { global = {
warn_timeout = 0; warn_timeout = 0;
-1
View File
@@ -1 +0,0 @@
/target
-2105
View File
File diff suppressed because it is too large Load Diff
-13
View File
@@ -1,13 +0,0 @@
[package]
name = "nix-racer"
version = "0.1.0"
edition = "2024"
[dependencies]
axum = "0.8"
reqwest = { version = "0.13", features = ["rustls"] }
serde = { version = "1.0.228", features = ["derive"] }
tokio = { version = "1.52", features = ["full"] }
toml = "1.1"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
-29
View File
@@ -1,29 +0,0 @@
{
lib,
rustPlatform,
}:
rustPlatform.buildRustPackage {
pname = "nix-racer";
version = "0.1.0";
src = lib.fileset.toSource {
root = ./.;
fileset = lib.fileset.unions [
./Cargo.toml
./Cargo.lock
./src
];
};
cargoLock = {
lockFile = ./Cargo.lock;
};
meta = {
description = "Nix substituter proxy with parallel cache queries and latency-aware selection";
mainProgram = "nix-racer";
license = lib.licenses.mit;
platforms = lib.platforms.unix;
};
}
-64
View File
@@ -1,64 +0,0 @@
use reqwest::Url;
use serde::{Deserialize, Deserializer, de::Error};
use std::net::{SocketAddr, SocketAddrV4};
#[derive(Debug, Clone, Deserialize)]
pub struct AppConfig {
#[serde(default = "default_listen")]
pub listen: SocketAddr,
pub substituters: Vec<Substituter>,
}
impl Default for AppConfig {
fn default() -> Self {
Self {
listen: default_listen(),
substituters: vec![
Substituter {
url: "https://mirror.sjtu.edu.cn/nix-channels/store",
penalty: 0,
},
Substituter {
url: "https://mirrors.ustc.edu.cn/nix-channels/store",
penalty: 0,
},
Substituter {
url: "https://cache.nixos.org",
penalty: 100,
},
],
}
}
}
fn default_listen() -> SocketAddr {
SocketAddr::V4(SocketAddrV4::new([127, 0, 0, 1].into(), 2048))
}
#[derive(Debug, Clone)]
pub struct Substituter {
pub url: &'static str,
pub penalty: u32,
}
impl<'de> Deserialize<'de> for Substituter {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
#[derive(Debug, Clone, Deserialize)]
struct ShadowSubstituter {
url: String,
#[serde(default)]
penalty: u32,
}
let sub = <ShadowSubstituter as Deserialize>::deserialize(deserializer);
sub.and_then(|ShadowSubstituter { url, penalty }| {
let url = match Url::parse(&url) {
Ok(url) => Ok(Box::leak(url.to_string().into_boxed_str())),
Err(err) => Err(<D::Error as Error>::custom(err.to_string())),
}?;
Ok(Substituter { url, penalty })
})
}
}
-212
View File
@@ -1,212 +0,0 @@
use std::{
collections::HashMap,
sync::Arc,
time::{Duration, Instant},
};
use axum::{
Router,
extract::{Path, State},
http::{StatusCode, header},
response::{IntoResponse, Redirect},
routing::get,
};
use reqwest::Client;
use tokio::task::JoinSet;
use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _, util::SubscriberInitExt as _};
mod config;
use config::*;
#[derive(Clone)]
struct AppState {
client: Client,
config: Arc<AppConfig>,
}
#[tokio::main]
async fn main() {
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.with(
EnvFilter::builder()
.with_env_var("NIX_RACER_LOG")
.with_default_directive("nix_racer=debug".parse().unwrap())
.from_env()
.unwrap(),
)
.init();
let config: Arc<AppConfig> = match std::fs::read_to_string("/etc/nix/nix-racer.toml") {
Ok(file) => toml::from_str::<AppConfig>(&file).unwrap_or_else(|x| {
tracing::warn!("Failed to parse config file ({x}), fallback to default configuration");
AppConfig::default()
}),
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {
tracing::info!("Config file not found, fallback to default configuration");
AppConfig::default()
}
Err(err) => {
tracing::warn!("Failed to read config file ({err}), fallback to default configuration");
AppConfig::default()
}
}
.into();
if config.substituters.is_empty() {
tracing::error!("No substituters found");
std::process::exit(1);
}
let listen = config.listen;
let client = Client::builder()
.timeout(Duration::from_secs(5))
.pool_idle_timeout(Duration::from_secs(90))
.build()
.unwrap();
let state = AppState { client, config };
let listener = tokio::net::TcpListener::bind(listen).await.unwrap();
let app = Router::new()
.route("/nix-cache-info", get(nix_cache_info_handler))
.route("/{*path}", get(proxy_handler))
.with_state(state);
tracing::info!("Smart Nix Proxy listening on http://{listen}");
axum::serve(listener, app).await.unwrap();
}
async fn nix_cache_info_handler() -> impl IntoResponse {
let info = "StoreDir: /nix/store\nWantMassQuery: 1\nPriority: 30\n";
([(header::CONTENT_TYPE, "text/x-nix-cache-info")], info)
}
async fn proxy_handler(
Path(path): Path<String>,
State(state): State<AppState>,
) -> impl IntoResponse {
if !path.ends_with(".narinfo") {
let redirect_url = format!("{}/{}", state.config.substituters[0].url, path);
return Redirect::temporary(&redirect_url).into_response();
}
let start_time = Instant::now();
let mut set = JoinSet::new();
let mut penalties = HashMap::new();
for upstream in state.config.substituters.iter() {
let url = format!("{}/{}", upstream.url, path);
let client = state.client.clone();
let base_url = upstream.url;
let handle = set.spawn(async move {
let max_retries = 2;
let mut delay = Duration::from_millis(50);
for attempt in 0..=max_retries {
match client.get(&url).send().await {
Ok(resp) if resp.status().is_success() => {
let bytes = resp.bytes().await.map_err(|_| "Body error")?;
let text = String::from_utf8_lossy(&bytes);
let mut new_text = String::with_capacity(text.len() + 64);
for line in text.lines() {
if let Some(rel_url) = line.strip_prefix("URL: ") {
if rel_url.starts_with("http://") || rel_url.starts_with("https://")
{
new_text.push_str(line);
} else {
new_text.push_str(&format!("URL: {}/{}", base_url, rel_url));
}
} else {
new_text.push_str(line);
}
new_text.push('\n');
}
return Ok((new_text.into_bytes(), base_url));
}
Ok(resp) if resp.status() == StatusCode::NOT_FOUND => return Err("404"),
Err(_) => {
if attempt == max_retries {
return Err("Max retries");
}
tokio::time::sleep(delay).await;
delay *= 2;
}
_ => return Err("Other HTTP Error"),
}
}
Err("Unreachable")
});
penalties.insert(handle.id(), upstream.penalty);
}
struct ProxyResult {
score: Duration,
body: Vec<u8>,
url: &'static str,
}
let mut best_result: Option<ProxyResult> = None;
loop {
let min_active_penalty = penalties.values().min().copied();
if let Some(ProxyResult { score, .. }) = best_result {
if let Some(min_p) = min_active_penalty {
if start_time.elapsed() + Duration::from_millis(u64::from(min_p)) >= score {
break;
}
} else {
break;
}
} else if min_active_penalty.is_none() {
break;
}
let timeout_dur = if let Some(ProxyResult { score, .. }) = best_result {
score.saturating_sub(start_time.elapsed())
} else {
Duration::from_secs(86400)
};
if timeout_dur.is_zero() && best_result.is_some() {
break;
}
let res = tokio::time::timeout(timeout_dur, set.join_next_with_id()).await;
match res {
Ok(Some(Ok((task_id, task_res)))) => {
let penalty = penalties.remove(&task_id).unwrap();
if let Ok((body, url)) = task_res {
let score = start_time.elapsed() + Duration::from_millis(u64::from(penalty));
if best_result.as_ref().is_none_or(|best| score < best.score) {
best_result = Some(ProxyResult { score, body, url })
}
}
}
Ok(Some(Err(join_err))) => {
penalties.remove(&join_err.id());
}
Ok(None) => break,
Err(_) => break,
}
}
if let Some(ProxyResult { score, body, url }) = best_result {
tracing::debug!("Winner for {}: {} (Score: {:?})", path, url, score,);
(
StatusCode::OK,
[(header::CONTENT_TYPE, "text/x-nix-narinfo")],
body,
)
.into_response()
} else {
(StatusCode::NOT_FOUND, "Not Found").into_response()
}
}
+9 -115
View File
@@ -32,103 +32,23 @@ in
nh nh
]; ];
environment.etc = environment.etc = lib.mapAttrs' (name: value: {
(lib.mapAttrs' (name: value: {
name = "nix/path/${name}"; name = "nix/path/${name}";
value.source = value.flake; value.source = value.flake;
}) config.nix.registry) }) config.nix.registry;
// {
"nix/nix-racer.toml".source = (pkgs.formats.toml { }).generate "nix-racer.toml" {
listen = "127.0.0.1:2048";
substituters = [
# {
# penalty = 0;
# url = "https://mirror.sjtu.edu.cn/nix-channels/store";
# }
{
penalty = 0;
url = "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store";
}
{
penalty = 50;
url = "https://mirrors.ustc.edu.cn/nix-channels/store";
}
{
penalty = 0;
url = "https://nix-community.cachix.org";
}
{
penalty = 0;
url = "https://cache.numtide.com";
}
{
penalty = 100;
url = "https://cache.nixos.org";
}
];
};
};
systemd.services.nix-racer = {
description = "Nix substituter proxy with parallel cache queries and latency-aware selection";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${lib.getExe (pkgs.callPackage ./nix-racer/_package.nix { })}";
Restart = "on-failure";
RestartSec = 5;
DynamicUser = true;
CapabilityBoundingSet = [ "" ];
DeviceAllow = "";
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectSystem = "strict";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@resources"
"~@privileged"
];
UMask = "0077";
};
};
nix.settings = { nix.settings = {
experimental-features = "nix-command flakes pipe-operators"; experimental-features = "nix-command flakes pipe-operators";
substituters = lib.mkForce [ substituters = [
"http://127.0.0.1:2048"
"https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store" "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
"https://cache.numtide.com" "https://mirror.sjtu.edu.cn/nix-channels/store"
"https://cache.nixos.org" "https://mirrors.ustc.edu.cn/nix-channels/store"
"https://nix-community.cachix.org"
# "https://mirrors.ustc.edu.cn/nix-channels/store" "https://cache.garnix.io"
# "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
# "https://nix-community.cachix.org"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g=" "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
]; ];
download-buffer-size = 536870912; # 512 MiB download-buffer-size = 536870912; # 512 MiB
warn-dirty = false; warn-dirty = false;
@@ -172,33 +92,7 @@ in
services.angrr = { services.angrr = {
enable = true; enable = true;
settings = { settings = {
temporary-root-policies = { period = "1month";
direnv = {
path-regex = "/\\.direnv/";
period = "14d";
};
result = {
path-regex = "/result[^/]*$";
period = "3d";
};
};
profile-policies = {
system = {
profile-paths = [ "/nix/var/nix/profiles/system" ];
keep-since = "14d";
keep-latest-n = 5;
keep-booted-system = true;
keep-current-system = true;
};
user = {
profile-paths = [
"~/.local/state/nix/profiles/profile"
"/nix/var/nix/profiles/per-user/root/profile"
];
keep-since = "14d";
keep-latest-n = 5;
};
};
}; };
}; };
}; };
+5 -82
View File
@@ -10,35 +10,15 @@ in
{ {
options.my.persist = { options.my.persist = {
enable = lib.mkEnableOption "persist"; enable = lib.mkEnableOption "persist";
btrfs = lib.mkOption { location = lib.mkOption {
type = lib.types.submodule (
{ ... }:
{
options = {
device = lib.mkOption {
type = lib.types.str;
};
zstdCompress = lib.mkOption {
type = lib.types.bool;
default = true;
};
persistSubvol = lib.mkOption {
type = lib.types.str;
};
rootSubvol = lib.mkOption {
type = lib.types.str;
default = "root";
};
mountPoint = lib.mkOption {
type = lib.types.str; type = lib.types.str;
default = "/nix/persist"; default = "/nix/persist";
example = lib.literalExpression '' example = lib.literalExpression ''
"/persistent" "/persistent"
''; '';
}; description = lib.mdDoc ''
}; Persistent location
} '';
);
}; };
homeDirs = lib.mkOption { homeDirs = lib.mkOption {
default = [ ]; default = [ ];
@@ -89,65 +69,8 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
fileSystems.${cfg.btrfs.mountPoint} = {
device = cfg.btrfs.device;
fsType = "btrfs";
options = [
"subvol=${cfg.btrfs.persistSubvol}"
]
++ lib.optionals cfg.btrfs.zstdCompress [
"compress=zstd"
];
neededForBoot = true;
};
fileSystems."/" = {
device = cfg.btrfs.device;
fsType = "btrfs";
options = [
"subvol=${cfg.btrfs.rootSubvol}"
]
++ lib.optionals cfg.btrfs.zstdCompress [
"compress=zstd"
];
};
boot.initrd.systemd.services.wipe-root = {
description = "Rollback BTRFS rootfs";
wantedBy = [ "initrd.target" ];
before = [ "sysroot.mount" ];
after = [ "initrd-root-device.target" ];
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
script = ''
mkdir -p /btrfs_tmp
mount ${cfg.btrfs.device} /btrfs_tmp
mkdir -p /btrfs_tmp/old_roots
if [ -e /btrfs_tmp/root ]; then
timestamp=$(date -d "@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%d_%H:%M:%S" 2>/dev/null || date "+%Y-%m-%d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$(printf '\n')
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/${cfg.btrfs.rootSubvol}
umount /btrfs_tmp
'';
};
programs.fuse.userAllowOther = true; programs.fuse.userAllowOther = true;
environment.persistence.${cfg.btrfs.mountPoint} = { environment.persistence.${cfg.location} = {
hideMounts = true; hideMounts = true;
directories = cfg.nixosDirs; directories = cfg.nixosDirs;
files = cfg.nixosFiles; files = cfg.nixosFiles;
+55 -7
View File
@@ -2,7 +2,6 @@
config, config,
lib, lib,
pkgs, pkgs,
hostname,
username, username,
userdesc, userdesc,
secrets, secrets,
@@ -39,18 +38,67 @@ in
}; };
users.users.root.hashedPasswordFile = lib.mkDefault config.sops.secrets.imxyy-nix-hashed-password.path; users.users.root.hashedPasswordFile = lib.mkDefault config.sops.secrets.imxyy-nix-hashed-password.path;
security.sudo = { security.sudo.enable = false;
security.doas = {
enable = true; enable = true;
extraRules = [ extraRules = [
{ {
users = [ "imxyy" ]; users = [ username ];
commands = lib.singleton { noPass = true;
command = "ALL"; keepEnv = true;
options = lib.optionals (hostname == "imxyy-nix") [ "NOPASSWD" ];
};
} }
]; ];
}; };
environment.shellAliases = {
sudoedit = "doasedit";
};
environment.systemPackages = [
(pkgs.writeShellScriptBin "sudo" ''exec doas "$@"'')
(pkgs.writeShellScriptBin "doasedit" ''
if [ -n "''${2}" ]; then
printf 'Expected only one argument\n'
exit 1
elif [ -z "''${1}" ]; then
printf 'No file path provided\n'
exit 1
elif [ "$(id -u)" -eq 0 ]; then
printf 'Cannot be run as root\n'
exit 1
fi
set -eu
tempdir="$(mktemp -d)"
trap 'rm -rf $tempdir' EXIT
srcfile="$(doas realpath "$1")"
if doas [ -f "$srcfile" ]; then
doas cp -a "$srcfile" "$tempdir"/file
doas cp -a "$tempdir"/file "$tempdir"/edit
# make sure that the file is editable by user
doas chown "$USER":"$USER" "$tempdir"/edit
chmod 600 "$tempdir"/edit
else
# create file with "regular" system permissions (root:root 644)
touch "$tempdir"/file
doas chown root:root "$tempdir"/file
fi
$EDITOR "$tempdir"/edit
doas tee "$tempdir"/file 1>/dev/null < "$tempdir"/edit
if doas cmp -s "$tempdir/file" "$srcfile"; then
printf 'Skipping write; no changes.\n'
exit 0
else
doas mv -f "$tempdir"/file "$srcfile"
exit 0
fi
'')
];
nix.settings.trusted-users = [ nix.settings.trusted-users = [
"root" "root"
+1 -4
View File
@@ -38,10 +38,7 @@ in
dataHome = "${homedir}/.local/share"; dataHome = "${homedir}/.local/share";
stateHome = "${homedir}/.local/state"; stateHome = "${homedir}/.local/state";
userDirs = { userDirs.enable = true;
enable = true;
setSessionVariables = true;
};
configFile."mimeapps.list".force = true; configFile."mimeapps.list".force = true;
+2 -5
View File
@@ -8,12 +8,9 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
my.hm.programs.firefox = { my.hm.programs.firefox.enable = true;
enable = true;
configPath = "${config.my.hm.xdg.configHome}/mozilla/firefox";
};
my.persist.homeDirs = [ my.persist.homeDirs = [
".config/mozilla" ".mozilla"
]; ];
}; };
} }
+3 -1
View File
@@ -2,6 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
hostname,
... ...
}: }:
let let
@@ -15,7 +16,8 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
my.hm.programs.zen-browser = { my.hm.programs.zen-browser = {
enable = true; enable = true;
nativeMessagingHosts = [ pkgs.master.firefoxpwa ]; nativeMessagingHosts = [ pkgs.firefoxpwa ];
suppressXdgMigrationWarning = hostname == "imxyy-nix";
policies = { policies = {
# find more options here: https://mozilla.github.io/policy-templates/ # find more options here: https://mozilla.github.io/policy-templates/
DisableAppUpdate = true; DisableAppUpdate = true;
-1
View File
@@ -20,7 +20,6 @@ in
my.persist.homeDirs = [ my.persist.homeDirs = [
".minecraft" ".minecraft"
".local/share/hmcl" ".local/share/hmcl"
".hmcl"
]; ];
}; };
} }
-1
View File
@@ -9,7 +9,6 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
my.desktop.media = { my.desktop.media = {
cine.enable = true;
mpv.enable = true; mpv.enable = true;
loupe.enable = true; loupe.enable = true;
thunderbird.enable = true; thunderbird.enable = true;
-18
View File
@@ -1,18 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.desktop.media.cine;
in
{
options.my.desktop.media.cine = {
enable = lib.mkEnableOption "cine";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [ pkgs.cine ];
};
}
+1 -17
View File
@@ -13,23 +13,7 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
nixpkgs.config.permittedInsecurePackages = ( my.hm.home.packages = [ pkgs.splayer ];
lib.warn
''
SPlayer still using pnpm 10.29.2. Check
https://github.com/NixOS/nixpkgs/issues/535580#issuecomment-4809489104
''
[
"pnpm-10.29.2"
]
);
my.hm.home.packages = [
# (pkgs.master.splayer.override {
# pnpm_10_29_2 = pkgs.pnpm_10;
# })
pkgs.splayer
];
my.persist.homeDirs = [ my.persist.homeDirs = [
".config/SPlayer" ".config/SPlayer"
]; ];
+22 -12
View File
@@ -2,7 +2,6 @@
config, config,
lib, lib,
pkgs, pkgs,
impure,
... ...
}: }:
let let
@@ -14,6 +13,19 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
catppuccin.sddm = {
enable = true;
font = "Jetbrains Mono";
fontSize = "18";
};
services.displayManager.sddm = {
package = pkgs.kdePackages.sddm;
settings.Theme = {
CursorTheme = "breeze-dark";
CursorSize = 24;
};
};
my.hm = { my.hm = {
stylix = { stylix = {
enable = true; enable = true;
@@ -58,7 +70,6 @@ in
}; };
}; };
gtk4 = { gtk4 = {
theme = null;
extraConfig = { extraConfig = {
gtk-decoration-layout = ":none"; gtk-decoration-layout = ":none";
gtk-application-prefer-dark-theme = 1; gtk-application-prefer-dark-theme = 1;
@@ -69,21 +80,20 @@ in
#QT #QT
qt = { qt = {
enable = true; enable = true;
platformTheme.name = "kde"; style.package = with pkgs; [
style = { darkly-qt5
package = with pkgs; [
darkly-qt6 darkly-qt6
]; ];
name = "Darkly"; platformTheme.name = "qtct";
};
}; };
xdg.configFile = { xdg.configFile = {
kdeglobals.source = impure.mkImpureLink ./kdeglobals; "qt5ct/qt5ct.conf".source = pkgs.replaceVars ./qtct/qt5ct.conf {
plasmarc.text = '' darker = pkgs.libsForQt5.qt5ct + /share/qt5ct/colors/darker.conf;
[Theme] };
name=darkly "qt6ct/qt6ct.conf".source = pkgs.replaceVars ./qtct/qt6ct.conf {
''; darker = pkgs.qt6Packages.qt6ct + /share/qt6ct/colors/darker.conf;
};
}; };
}; };
}; };
-140
View File
@@ -1,140 +0,0 @@
[ColorEffects:Disabled]
ChangeSelectionColor=
Color=36,36,36
ColorAmount=0.5
ColorEffect=3
ContrastAmount=0.5
ContrastEffect=0
Enable=
IntensityAmount=0
IntensityEffect=0
[ColorEffects:Inactive]
ChangeSelectionColor=true
Color=51,51,51
ColorAmount=0.4
ColorEffect=3
ContrastAmount=0.4
ContrastEffect=0
Enable=true
IntensityAmount=-0.2
IntensityEffect=0
[Colors:Button]
BackgroundAlternate=77,77,77
BackgroundNormal=50,50,50
DecorationFocus=52,120,218
DecorationHover=0,161,236
ForegroundActive=61,174,233
ForegroundInactive=199,199,199
ForegroundLink=0,100,255
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=241,241,241
ForegroundPositive=36,173,89
ForegroundVisited=115,115,158
[Colors:Complementary]
BackgroundAlternate=59,64,69
BackgroundNormal=49,54,59
DecorationFocus=30,146,255
DecorationHover=61,174,230
ForegroundActive=246,116,0
ForegroundInactive=175,176,179
ForegroundLink=61,174,230
ForegroundNegative=237,21,21
ForegroundNeutral=201,206,59
ForegroundNormal=239,240,241
ForegroundPositive=17,209,22
ForegroundVisited=61,174,230
[Colors:Selection]
BackgroundAlternate=29,153,243
BackgroundNormal=27,145,213
DecorationFocus=52,120,218
DecorationHover=0,161,236
ForegroundActive=252,252,252
ForegroundInactive=241,241,241
ForegroundLink=0,100,255
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=241,241,241
ForegroundPositive=36,173,89
ForegroundVisited=115,115,158
[Colors:Tooltip]
BackgroundAlternate=77,77,77
BackgroundNormal=59,59,59
DecorationFocus=52,120,218
DecorationHover=0,161,236
ForegroundActive=61,174,233
ForegroundInactive=199,199,199
ForegroundLink=0,100,255
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=239,240,241
ForegroundPositive=36,173,89
ForegroundVisited=115,115,158
[Colors:View]
BackgroundAlternate=54,54,54
BackgroundNormal=44,44,44
DecorationFocus=52,120,218
DecorationHover=0,161,236
ForegroundActive=61,174,233
ForegroundInactive=199,199,199
ForegroundLink=0,100,255
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=241,241,241
ForegroundPositive=36,173,89
ForegroundVisited=115,115,158
[Colors:Window]
BackgroundAlternate=77,77,77
BackgroundNormal=34,34,34
DecorationFocus=52,120,218
DecorationHover=0,161,236
ForegroundActive=61,174,233
ForegroundInactive=199,199,199
ForegroundLink=0,100,255
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=239,240,241
ForegroundPositive=36,173,89
ForegroundVisited=115,115,158
[General]
ColorScheme=Darkly
[Icons]
Theme=Papirus-Dark
[KDE]
contrast=0
frameContrast=0.2
[KFileDialog Settings]
Allow Expansion=false
Automatically select filename extension=true
Breadcrumb Navigation=true
Decoration position=2
Show Full Path=false
Show Inline Previews=true
Show Preview=false
Show Speedbar=true
Show hidden files=false
Sort by=Name
Sort directories first=true
Sort hidden files last=false
Sort reversed=false
Speedbar Width=154
View Style=DetailTree
[WM]
activeBackground=34,34,34
activeBlend=255,255,255
activeForeground=204,204,204
inactiveBackground=44,44,44
inactiveBlend=44,44,44
inactiveForeground=144,144,144
-41
View File
@@ -1,41 +0,0 @@
include "generated-config.kdl"
layout {
border {
on
}
}
blur {
passes 3
offset 4
noise 0.02
saturation 1.5
}
window-rule {
draw-border-with-background false
geometry-corner-radius 14.000000 14.000000 14.000000 14.000000
clip-to-geometry true
background-effect {
xray true
blur true
}
}
window-rule {
match is-floating=true
background-effect {
xray false
}
}
window-rule {
match app-id="kitty|foot|Alacritty|ghostty"
opacity 0.8
}
window-rule {
match app-id="org.gnome.Nautilus"
opacity 0.6
}
+33 -16
View File
@@ -3,7 +3,6 @@
lib, lib,
pkgs, pkgs,
assets, assets,
impure,
... ...
}: }:
let let
@@ -11,11 +10,7 @@ let
in in
{ {
config = lib.mkIf config.my.desktop.wm.niri.enable { config = lib.mkIf config.my.desktop.wm.niri.enable {
my.hm = { my.hm.programs.niri.settings = {
xdg.configFile.niri-config.target = lib.mkForce "niri/generated-config.kdl";
xdg.configFile."niri/config.kdl".source = impure.mkImpureLink ./config.kdl;
programs.niri.settings = {
input = { input = {
focus-follows-mouse = { focus-follows-mouse = {
enable = true; enable = true;
@@ -81,9 +76,34 @@ in
matches = [ { namespace = "^wallpaper$"; } ]; matches = [ { namespace = "^wallpaper$"; } ];
place-within-backdrop = true; place-within-backdrop = true;
} }
{
matches = [ { namespace = "^waybar$"; } ];
opacity = 0.99;
}
]; ];
overview.workspace-shadow.enable = false; overview.workspace-shadow.enable = false;
window-rules = [
{
geometry-corner-radius = {
bottom-left = 14.;
bottom-right = 14.;
top-left = 14.;
top-right = 14.;
};
clip-to-geometry = true;
draw-border-with-background = false;
}
{
matches = [ { app-id = "kitty|foot|Alacritty|ghostty|chromium-browser|zen-beta|wofi"; } ];
opacity = 0.8;
}
{
matches = [ { app-id = "org.gnome.Nautilus"; } ];
opacity = 0.6;
}
];
environment.NIXOS_OZONE_WL = "1"; environment.NIXOS_OZONE_WL = "1";
spawn-at-startup = lib.mkBefore ( spawn-at-startup = lib.mkBefore (
@@ -119,8 +139,12 @@ in
"cliphist" "cliphist"
"store" "store"
] ]
# TODO: Is there a better way?
[ [
"noctalia-shell" "systemctl"
"restart"
"--user"
"noctalia-shell.service"
] ]
] ]
); );
@@ -147,7 +171,6 @@ in
"Mod+R".action.spawn = noctalia "launcher toggle"; "Mod+R".action.spawn = noctalia "launcher toggle";
"Mod+V".action.spawn = noctalia "launcher clipboard"; "Mod+V".action.spawn = noctalia "launcher clipboard";
"Mod+W".action.spawn = noctalia "launcher windows"; "Mod+W".action.spawn = noctalia "launcher windows";
"Ctrl+Alt+Escape".action.spawn = [ "missioncenter" ];
"XF86AudioRaiseVolume" = { "XF86AudioRaiseVolume" = {
allow-when-locked = true; allow-when-locked = true;
@@ -261,13 +284,9 @@ in
"Mod+Shift+Minus".action.set-window-height = "-10%"; "Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%"; "Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action.screenshot = { "Ctrl+Alt+A".action.screenshot = [ ];
show-pointer = false;
};
# "Ctrl+Alt+A".action = screenshot; # "Ctrl+Alt+A".action = screenshot;
"Print".action.screenshot-screen = { "Print".action.screenshot-screen = [ ];
show-pointer = false;
};
"Alt+Print".action.screenshot-window = [ ]; "Alt+Print".action.screenshot-window = [ ];
# "Alt+Print".action = screenshot-window; # "Alt+Print".action = screenshot-window;
@@ -334,7 +353,5 @@ in
}) (lib.range 0 9) }) (lib.range 0 9)
); );
}; };
};
}; };
} }
+7 -12
View File
@@ -15,19 +15,14 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
niri-flake.cache.enable = false;
programs.niri = { programs.niri = {
enable = true; enable = true;
package = pkg; package = pkg;
}; };
services.displayManager = { services.displayManager = {
ly = { sddm = {
enable = true; enable = true;
settings = { wayland.enable = true;
animation = "matrix";
session_log = ".local/state/ly-session.log";
shell = false;
};
}; };
}; };
@@ -72,7 +67,6 @@ in
brightnessctl brightnessctl
nautilus nautilus
mission-center
noctalia-shell noctalia-shell
xdg-terminal-exec xdg-terminal-exec
@@ -82,24 +76,25 @@ in
programs.noctalia-shell = { programs.noctalia-shell = {
enable = true; enable = true;
systemd.enable = true;
# modified from official Tokyo-Night theme # modified from official Tokyo-Night theme
colors = { colors = {
mError = "#f7768e"; mError = "#f7768e";
mHover = "#bb9af7";
mOnError = "#16161e"; mOnError = "#16161e";
mOnHover = "#16161e";
mOnPrimary = "#16161e"; mOnPrimary = "#16161e";
mOnSecondary = "#16161e"; mOnSecondary = "#16161e";
mOnSurface = "#c0caf5"; mOnSurface = "#c0caf5";
mOnSurfaceVariant = "#9aa5ce"; mOnSurfaceVariant = "#9aa5ce";
mOnTertiary = "#16161e"; mOnTertiary = "#16161e";
mOutline = "#353D57"; mOutline = "#565f89";
mPrimary = "#7aa2f7"; mPrimary = "#7aa2f7";
mSecondary = "#9a9ef7"; mSecondary = "#9a9ef7";
mTertiary = "#bb9af7";
# mSecondary = "#bb9af7";
# mTertiary = "#9ece6a";
mShadow = "#15161e"; mShadow = "#15161e";
mSurface = "#1a1b26"; mSurface = "#1a1b26";
mSurfaceVariant = "#24283b"; mSurfaceVariant = "#24283b";
mTertiary = "#bb9af7";
}; };
settings = { settings = {
appLauncher = { appLauncher = {
+77
View File
@@ -0,0 +1,77 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.my.autologin;
gettycfg = config.services.getty;
baseArgs = [
"--login-program"
"${gettycfg.loginProgram}"
]
++ optionals (gettycfg.loginOptions != null) [
"--login-options"
gettycfg.loginOptions
]
++ gettycfg.extraArgs;
gettyCmd = args: "@${pkgs.util-linux}/sbin/agetty agetty ${escapeShellArgs baseArgs} ${args}";
forAllAutologinTTYs =
config:
attrsets.mergeAttrsList (map (ttynum: { "getty@tty${toString ttynum}" = config; }) cfg.ttys);
autologinModule = types.submodule {
options = {
enable = mkEnableOption "autologin";
user = mkOption {
type = types.str;
default = "";
example = "foo";
description = mdDoc ''
Username of the account that will be automatically logged in at the console.
'';
};
ttys = mkOption {
type = types.listOf types.int;
default = [ 6 ];
description = mdDoc ''
TTY numbers for autologin.user to login to.
'';
};
};
};
in
{
###### interface
options = {
my.autologin = mkOption {
type = autologinModule;
default = { };
};
};
###### implementation
config = mkIf cfg.enable {
systemd.services = forAllAutologinTTYs {
overrideStrategy = "asDropin"; # needed for templates to work
serviceConfig.ExecStart = [
""
(gettyCmd "--noclear --keep-baud %I 115200,38400,9600 -a ${cfg.user} $TERM")
];
};
};
}
+1 -1
View File
@@ -17,7 +17,7 @@ in
sshKeyFile = lib.mkOption { sshKeyFile = lib.mkOption {
type = lib.types.str; type = lib.types.str;
default = "${ default = "${
if config.my.persist.enable then config.my.persist.btrfs.mountPoint else "" if config.my.persist.enable then config.my.persist.location else ""
}/home/${username}/.ssh/id_ed25519"; }/home/${username}/.ssh/id_ed25519";
}; };
}; };
+1 -3
View File
@@ -10,9 +10,6 @@
grub.enable = false; grub.enable = false;
timeout = 0; timeout = 0;
}; };
boot.kernel.sysctl = {
"kernel.printk" = "3 4 1 3";
};
security.pam.loginLimits = [ security.pam.loginLimits = [
{ {
@@ -45,5 +42,6 @@
# Desktop persistence # Desktop persistence
my.persist = { my.persist = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
location = lib.mkDefault "/nix/persist";
}; };
} }
+1
View File
@@ -21,5 +21,6 @@
# Server persistence # Server persistence
my.persist = { my.persist = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
location = lib.mkDefault "/nix/persist";
}; };
} }
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data:RZyNbgY+zGJWxLDUaEIYYLOMkNiFvkVTBTqjzyP6M/iiQFEQKYarUFxgBXU71aVl00/J8ykP5F6d9am9BqcmH/m/mlrLSlXk9Uh9KcnAJl/qzV0q64hyrA3rPO0HS8ipsaWPQqeUMc5U7cfwViviW0HASRbT07ihC3JzgwVa9ReDHcbxzY8m7PN8D5KpIkxItppGnCfe54kqdEg4Fn8vlMSnWbvpdV2XZ9r9klqu09ZRQ3QSaUTLNIAK+IG/AtgmeerZpUbFu9oKPB9ztqUYMZWlNV7g4h0uaz9UkM7T6HSn83m7JawKSabdTiTNL1ePu9/nuAx7+2vRgtnXBO4YTXu8ZRtcB5OmNCVOyM75gM/+gzYJwLfwPTx8GUi6TdoHV90myoE+TNr6jYao8N0yR/YgKEkT3YH7AmV1NKPkJjMOFG2AbpDgsX19WBo1ySVLKMurLUbTjLSIXkjCuVcw3pRVI3iXNlidogEoBSsyRN0qFnQ1V1LAAL55pM7a/Jelmm2ZNGomX/LXR24X1eM6t12rO8FgpUGTP7bdFAL02CEcydw0HsDRQd30ZKfPS/vTIYvxgx4TlM/L2E5E5s53xJZJ79LnPUgyKGdvKJcUIZm91OblRD44RmtQcZBlMRoZcc8UR81rV3/v+BsOw6xv8b7C+zDGHB5pTzEy7cc24jZwoF8JBeaJC0KK0tb3kQ==,iv:BPbyZwghZ4t7VTkXkPP80fg/7SFIbBTXLmH23yeWr9Q=,tag:XE8w5BN5coSaOGvN0J0m1A==,type:str]", "data": "ENC[AES256_GCM,data:woTNsrZnU3IclRXuh41H82YHeFa6U8aT+ILtjUQ9P80Rz7sUwGinh7z+5bNJkhdTub4BZ+ySl8Ov0XfDKWClT4AmbcRCuwwN8BfOJ59v+fyzsBSu8Y7wXSPciY+T/4rn60HlnVCyjX23dMNWwuN08bS/4iDw+/Ur80/3li2Azl5+37y/S2ZbFU0FP3OCy/G5+rGI0IFTCzRMfB/wpDhesxGzi1epKWvFx0q1Qnv0SiaZlo8mpG+G997mltBMlVkmAiNq57VAVs1ZBDAOf56q1UUHMtExAQt0zad5YWZeBgXQYWG8AFgOhSBiqjpFkUkfysv1mYqWnA7Ej/fD/H8e1uckC6KT9m4w1l71JmIkuUMW8PN/66cGYwZ/gMrZTAwlaVqiYPE1ppmnvrQxukQMgj40y27sWauMK+biPRNTrkU7egjH0IHCHHE49vq3VDFa48SAYXiBCHV+e/Gy9Em1ImRn2lCzAoKUtI5ilccg6MyUbug+1aDWx5NBkhpVw751HyLiSjNyphzVZewo9hGun2F+Fl9NdhM5xpq4tM9bbnsm0y44Vt8FJU0dmY6lfq1qqI3MjLg14iET/WLTorxH0i1iJUYy8Z6FJ7ArGUv6qw7ECNH0ZeUiNk0vICniyRlr+9JGFiHesX5oajXVxOp6vA6FnA4j1jeUvOLViiRc8DxLZziyA7ZdKDXwPJ4JKA==,iv:Df76Q6DoA6lI6xv7nnN6bjsaMPK7dnM/WvVd/O4h6qs=,tag:Yi/inQbd1wCY+PPbq0By9w==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@@ -15,9 +15,9 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBSSEdH\nOGZDWDFhMzB2aVErTDU0Vk1WbnBSa0hmTGNMaXI3aTBuQWMvQkRJCnFpYkRFblZV\nRzF1eGdmTzFQcGhTWFZKdmhyNzRHdEFFSjh2Tnl1NXlpSkUKLS0tIHFLSVJiRkpw\nV2taUVdlS1h1V1Y4aE5JUWVmK1d5UjRleVY1Y0VvcmQrMnMKpD5nffC057mv+1wz\nXL8bOS3vBFoupi7IbKw56e0nGkRuMq+Hf2eCKZDRRlLbIi353xXFki7PKDk7ltu9\n2olKQQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBSSEdH\nOGZDWDFhMzB2aVErTDU0Vk1WbnBSa0hmTGNMaXI3aTBuQWMvQkRJCnFpYkRFblZV\nRzF1eGdmTzFQcGhTWFZKdmhyNzRHdEFFSjh2Tnl1NXlpSkUKLS0tIHFLSVJiRkpw\nV2taUVdlS1h1V1Y4aE5JUWVmK1d5UjRleVY1Y0VvcmQrMnMKpD5nffC057mv+1wz\nXL8bOS3vBFoupi7IbKw56e0nGkRuMq+Hf2eCKZDRRlLbIi353xXFki7PKDk7ltu9\n2olKQQ==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-04-11T11:27:59Z", "lastmodified": "2026-01-30T13:42:20Z",
"mac": "ENC[AES256_GCM,data:aDtrtC+ZD/XCaq9B0aW7btIdrHVthcJ68+MXIIAzejIbGXbqOkk/o7xOyYGsKsCHkiJP+ppjHKKt8ase5CSieCCsosdOUoPForLEaBhu0y7QTRKMBxKhD+xMlsCgR6djKx42Z4gs3/qjox836JJV8x72HllbtTu/WzwaCR9qt50=,iv:qy2JSu/dSZE2xWmxOtzvGBjcu0BjYNVDdOMm+UDV+CI=,tag:4CfF54eYLtQkeA8X5COyxA==,type:str]", "mac": "ENC[AES256_GCM,data:xZmGhEqVh5SIcIfaqOSs1YV23QHXachtBx40C+oyasFvUBhqcniuDHcuFQSmzteywC6jH3r91ilppPjWERz6ml5cfHzBdkbirpbWJg5Hqj+yLz3f98tGkAMmZyc/zc6XkM9BbWQI+R3R9bEaFZ95bnzNeno0EwneEM4aGW1ZsKI=,iv:oz197xm93q7aG3utudgMr3nVdS1IcmTxfnhy7Jc1N9o=,tag:Ar4s0Yjb/xApc0YgpikKtg==,type:str]",
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.12.2" "version": "3.11.0"
} }
} }
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data:EJjv/wFOznFk/cAv0CoOgHP0rT1ODGzDTF2X4m3rkoRuLMTnHioc6ne4FL2sbO0pVy796Yvi7CdILYo7yHFzw7Ea+1+Gqh4abbgMBDtgKturDEMotG+prYVq5pvx8POO8KDZ4E6EaZarGGTSLgzQnF3rxN4rSSxE/AbTdln6uITa8Q61UMOY9E8RCsWyO4wY+BwGI1FBPaEOKCqQmdq69h4db/m8pkAWdDczZwKht5GSLIQuEPmpONTPPRI6ny9y2I4lVIPaSoNYWSUKiOMRkSItSjk+Vo47iACFW40mSdeayXmilHQk1uBcUKaPqtbm9eSkZa9OAaTTaSzPiwbfiVmS4KN6oDO/3Vx14DBsaokfW8wl0uyq4hTgfyVUL8ArC5SPlAW4flHxgTt0HzK8+GBA4cGak9qf5vH9wloccV2UkX1e7YUkRj1p+rZl/HnvmVatfGlkgwcniORmSzYNcDmr8OneWVkTpUTwrT31ZLlkHftBpTuhP0NE5AIXGBDy1TIHrOkE9Q4BxDcKuTj2mM8AHKrkejl5nofHNw4NpKGRpvZjdN7A2H4tF7+e9x9VxX7kkPNrQ1MqaQjspOKztN5BL261nKPG/4jnxnyL5gB1xWMn/ifuUB4FM9meUDscN/xQQCnHU4uy5NEE5qO74vIywGmQiXDnAjLSi8nSGNHFhbg5B3vAqxpJH5m/Xa+phgP9aqkdYDP5,iv:4qLwVMpsCynVNJa4FeiIfwsGoBvCg0JgJl8oqoVA3U8=,tag:lIBZCdeR7LX/S0OyJ7KkYw==,type:str]", "data": "ENC[AES256_GCM,data:TroErAaIJCpWgVkxmoCgxCekphwh5x9oiFXnENXoiXiAaWnUWSB9y2sNbuGTxq8ngWt9pnZ4ZWWCiLaMvk1b/rjJCZzF3mJh/SuzqUkrayspTPcSTbQVHOHlrH7TKVSBJDQCZmAw0k4E0unSxoujEOorymzTY8ZxJTuSu3ugOez7Z48bDTgv4xMG9CvJku/HKakg/DgrAGaTXgfwal4hSB/9inNd9e1uq4clrkDhsN+zg6uJ+EHre/MUkf2MaIG5EI3y904+jm5Zvm5gTynPCjbVvVyjjXenGOwzS3fkxSVJjDvZItn3QZpKC/OqyrrX+c0zEiQMK880E1Ru4f13QphgWoMkthtdNSRoJqKHuK8UJ5onlfOmLkfQjKQ5cIYWgyI7dq5Rfx2yGbNMNEwAQodN3AC5NaLHdcFbs9Yi2VSAKbv5aEifizHYy3HgjxYcSW0EM53/Sn/CL8G2HK7ei7qeYbTT9bFbpgbPYiUeBuaN2Jfx13Mh5yWs98NhhIltjWtrtvvtBrBf7tPo2nAGVW781MaGF5uS44WVjxMMrFPq6WHRB9pwop5AS475h6ihmUIx4Pg/3JFV1uLXtvEeNuiBOULrwdkt1MXRxz6uiYux3WdWpljq1AIvRCLN3Ehi8VYEWyvEbP3gMp9EeOeJYXZ07hFV5dJCJTF7V1sP8GOCWmj0Ro61CEH13OA8V97M8Vi6ZdQg/o+Q,iv:1/HTU2AHTRSPun59Xa28yjlg312bTdDkiicQzO8515E=,tag:T/wEKWpWbhri1ZttG1JRwg==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@@ -15,9 +15,9 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBFZ1J2\nNk9yWUNaemVBOFRiVmdmWGdRWVN0UG5Hc1lZRTBiaHdnS0E2UlN3CitPUmdjdVdu\nS1FXbjVCRkxZUk5KdW0xRzNheWJ1TWVYcUJMK3k0TlRFSWsKLS0tIFJSTlN4a29x\nWG8zUlcvYmlZQkQwT3hlWFlOVUIwSkt3SE5RTzhQWVIxUkUKVSMJtNCEZ1KpcUgQ\nkuTFjaBHvizq980kkbNbD4FgeCAPZ3CwXA8/nKhN03iPeFqwX5AsO0n3+ge/qMnO\nkoRc/Q==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBFZ1J2\nNk9yWUNaemVBOFRiVmdmWGdRWVN0UG5Hc1lZRTBiaHdnS0E2UlN3CitPUmdjdVdu\nS1FXbjVCRkxZUk5KdW0xRzNheWJ1TWVYcUJMK3k0TlRFSWsKLS0tIFJSTlN4a29x\nWG8zUlcvYmlZQkQwT3hlWFlOVUIwSkt3SE5RTzhQWVIxUkUKVSMJtNCEZ1KpcUgQ\nkuTFjaBHvizq980kkbNbD4FgeCAPZ3CwXA8/nKhN03iPeFqwX5AsO0n3+ge/qMnO\nkoRc/Q==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-04-11T11:27:20Z", "lastmodified": "2026-01-30T13:42:30Z",
"mac": "ENC[AES256_GCM,data:ShLwbQvfJVDXyhu6Yf1m93BVQ8s39ATOAugtP3iO0dwqJSd1mR7njh+2emoFIIy3Bn7RkgJVcLuuj4oWWZ6v4nPemSrCwwj1hPSMU1EjqRFGjPaHGj8S7KmKldanHpUCXMuEKoCDT5B2ye9kmANAitn6X8GhoWb7NcCvkW4C7pw=,iv:tMv/P24PNioV9Ot8U1avbifGq1EJHkqIpyUX01Q+1uw=,tag:heOlnL+Abjbg8CGQmEmmsA==,type:str]", "mac": "ENC[AES256_GCM,data:KuB/Zdzy5gKDayUY0YhSNrKMnG1tdzRnxZvsTjj79lYoZzQ/9Tw1mAmn3vBjJx/aZtpXusxN12uxP1vzqFoAOpvbXGTDRv7fhCaq1CSayWSrhddwRlAIaQ6tUAOOu/fcoofTB6KWJNFhhDwn+o5lF48cgp1m7SL+op1NDkXBoK0=,iv:J0jUA9LfBoT1hBgoItqYdM6MmRhamTZCo9/TJKF18ck=,tag:SynvQk7+D83JAikLH4HNSg==,type:str]",
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.12.2" "version": "3.11.0"
} }
} }
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data:SyqN/4fc7lm3Ef3b2jQ/na5g8bkHq8hwJGMBrJwD4LsZpF3NHWhOpgnsd2BmxVrMEtVidyDEkEGH/xkb5eOgCmqzlkocVwwCwNRutFJxnPePtOGIvnBoIiLgMRl4XLhBMyNeGfLSZCpq8F2U2KuAnsSNV7ZaF/uGyrcykXw21w30HigDQsAbrRKpaz4TMtEdBPjsGhif7/r/HXDD+c6KOikcvVbAtsUJzplHUtSzP0KkjN7BeEfrLkLiMJwWOSn2hc8ITtY/uyUkUDR/7+l/GGCMmucHrnJHrTWkjI3okToC/fSOd0oPV5tOkI1GoAdz2eZ6bR1dq7xcQceKepqf7cC2oXowAG3xQcSGWUvyrbdhZ8NtLhpzFVcFlazdG80e59CjkvfUWv5YyAnwbSRjBanAnm/TjaP+UnhXqd03mzcqrrglvwcIFRnshu2GQCWXg0If+q2pbyafdqjAi1yPleJZa+QZ8OQkjfG/HUeLyZe6QPIpzJ4wDyA98piI8VAJsPfBsQiFdsT1dtNeroDesy6fypbHtZgkm8kWlJEdutcUzSm+sFVTeLjyifrehiTrGQJfRzFrDjStd43hkVCRuDjmCd6JVxKk1Eqg5isF9GPrpyAgLwQt01RaRnLB/m70pytW6prUmw==,iv:c5sJKTvsBEvV4x+o6LUjJzDGb2JiM4cHkz+IoDSygc0=,tag:3tdJnCQawrawd5jVrls8Qw==,type:str]", "data": "ENC[AES256_GCM,data:pOo8Rmhpw99QVkUKR/MHo1MoRfKzWgiqXxxX22g2ZzjvinCO9X/N6m63I1XlpiOMVmpEvzFtvQXfaZy7a4D4qLmpa48jsEgGLPm8QXbPFpXNCAVLKU10msKxw/m04dZbB6fJADvG5TM6wMFmsETLl0wMPXPffW2SI4CysSZsmSXUZKGAKjr4sPkUCDW9iiCKTo75r5eLVE3HH8j1OeIknzTDX4zJkoci70pVm7CnKi7bjt515cbq3V9aug7U34I79UlGOB0NWNEU10KodbjnZlY56+K0UBsz5ao+BwRIbxf40a5QUXd0bluqzHENpXlsUja0eSKG1kWFsB+ek5S48GA1SjRkXpStvZoHpUZ7YjeENdqvS1rjteUkrexSB0h3PntJmreERcZoO+MJYVsa5MpF8VkEz6oI9v+ECUA70YEZw7IszsHhq3NnR21aUTok/S23XpbEbxFuKdseQ+8VrBI6z+udIS8o579xcLBXSDhe9vvrdqjMw4enQI03/eKWMjUD8e5r6VbzSaNIQAeh+D9A0CR8EceyFcccY9/XfB2iPzVK1F/PaiAh6oMxWRnyj2wg3GWVoxNHsOKloWfPN68X30V5izvIWlmStRfjvC7yakEde8B6V3PabO8rQlezuasNCvqKIw==,iv:eKRT3L7YXMpJa+QGy7MuB73RsjVIZlaXbc2A2UKrZzw=,tag:7YZ2pqP0xUo9N2ByTEwW/g==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@@ -15,9 +15,9 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB5RjZU\nR0RVcTg3L3RQSmZnQnJhNm5vaW5URkNySUNORVJTRzVyWVVHdHdvCkd6Y2tvV1Av\nSjF6NkVNNjdKWnZyNi96bU9sY2VkalJNdWpxQUcyT2R3MFkKLS0tIEpkeFpWUE9t\nY0ROMS84QmM2U3M5aUN3ZkdQZi9JYnZCRzl4eDg4NzlrUW8KcuCDvvHFl/oyjVAo\nDlH1OOwPELWVWqckshUkX1MCMW+Qcv5R52jICVlyBVsyb+eiX4Bxgo4KM352KhWB\n5hPnIg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB5RjZU\nR0RVcTg3L3RQSmZnQnJhNm5vaW5URkNySUNORVJTRzVyWVVHdHdvCkd6Y2tvV1Av\nSjF6NkVNNjdKWnZyNi96bU9sY2VkalJNdWpxQUcyT2R3MFkKLS0tIEpkeFpWUE9t\nY0ROMS84QmM2U3M5aUN3ZkdQZi9JYnZCRzl4eDg4NzlrUW8KcuCDvvHFl/oyjVAo\nDlH1OOwPELWVWqckshUkX1MCMW+Qcv5R52jICVlyBVsyb+eiX4Bxgo4KM352KhWB\n5hPnIg==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-04-11T11:27:37Z", "lastmodified": "2026-01-30T13:42:54Z",
"mac": "ENC[AES256_GCM,data:b0n/SPZj06qfPOiHvNPw6bmkpka5oqYUL+Hs2X0tLZUsE5QkXvRFq7VxJDakc76EAMBkwjOyHXAAjKx/memZXBwXhUvCpGUNt4lwNxPect5kl3+HHSVAHrmqIH5hccImXNLayBcr4VlRGiXAZwWiS26td1PHq6EzkR1nNCz9nfE=,iv:YO0TqCST3ZkP/2NaBbkAPkHbFCD2kXPMu6ms0ySzAIE=,tag:0BO+AnbEzCUGP2lNW7/31w==,type:str]", "mac": "ENC[AES256_GCM,data:dRhW2TK8VoeAAgxieq13N9DOpDebn23pzSGVOUR1CREv7xBlQNbbG5oZ8wtOMmVPtYYITsbrP+83Bvc3hAgF+TJ5Q+bUIc79YrpKE4JQpIkF54XWuQS+xr6CQViRu9IkNSAINSDBGC/h7TQJbU+VynUbwTTJWdDwFOZRDCWxlXY=,iv:33D22OwdZ/0p5PTy6iPjoiOOHqMA12NTCYSWSUMTQ6U=,tag:Kal99S7ufV+JsTspWaX7OQ==,type:str]",
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.12.2" "version": "3.11.0"
} }
} }
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data:xZFoibSkPakh2VMwyrj0+7Epgo3kcJ92TV5/xg8BE3k+cefghPQzXfkIJWsqwgWoDSaHBpb0L6R5TyzAtSrmPEmyM409jiI0I7TtzZDMi+tp4YgF7cC0kW8rU7GwfKwreRm5+B3B093EO0jVfL+Qd7uab8/DZY/Qw3Ys8Q5AFQI4vav8dHP4pLWqINEA9gpzzGWfuVBVX2v8GKr7o/2sYNhw76jDcpOrY0O91hPe85ybzG7Acn9Of5hGgSAz7J4NI0SZecTTDWec7GfdOYPlQnBJTSPRe0fT0aMpP8KfTmWmr1GttgK6HeqL/kPy1MiyfuMNfbse9oJZBIq8puM6UFj+cerG+86UbEFS09zO87p3/uCxmPaPYGEl53Y/LMtLNMy/m96hsQtvwiu7yJXLLco9K1i5sCRvQZ6gZ+YYEimCdJQBYu7E8sh2hNwyeV5O6O0fsVGmP0L1v1S5Ea+QrX+1OXG/hhP8pLgco5IVKo9nQ2SKVmHil6/ONz97KmYKbP247w9qWGCBRj1LQ6DTw5LlUcakHfG+M1BUCW7sl1kqIAvvUwDzQiQhxXTJQcBQoXI3aG41Plrn8RW0zjBdyFhpDuABtg1kmWiliNA3YXyu6sy42ARieYJ8I3L2FKgA91HMiWDK9g==,iv:gg3DqBfY/h6oGJy3BdG2AgwSx781daXRk8NADPUH1P4=,tag:6M49wP/dVh8fWoD+Ij9+5A==,type:str]", "data": "ENC[AES256_GCM,data:bNSkFEL7BCq7LJYzK1X0Fn8To+So2+QTSFUN1DZDFlvekywoebj7txSM7jSQKYC3+Henond0MRRsriVOHu61i/k/i7fjOHPi93of4ny5wcS+t3NrFvN3RufNjQqe8CD+y4mDaUge8GGrFBWhtQV+1uw5hbXFOIq8l9JqkfJ8y6bhBi/fznCdO847zvZ0hAesjmrE/tflWn/T7pkNnfrVFOJR0FnXsVavlAVbSxtsrppaZPOgJFNwJ4ch6rP5PxHSyCpsbkak9H2nJOWJdXKGobKG3g01YCjgYMOX9rIfOnFcCBNyZWPGLx9ZT0h4XsHWM++L9lCNHjy4Z40wyl7YMq797HlKEcGEv2RM2KsfO/66836v3JzT6ZAO32otCbSa8e5vaYSKBZVZM/wrzNcE/XTNDRAQij3a3+bZtZDnxhZSQ3FJQVGm4agCbbO8Dqx7buWHGhgMmxnR6ClC3Ilgm9GHAWKXPBCDT3IEgc6S2g5MVKurKcR2Abffl/mN6KQjNocbIXKMu+dvInuW+30Mit5dp/dYBmWIrRqKO/hQtwDFp6jLHo4O+7h7/2YJDlh07W+ejT7vJy1+C0K4eAXSoGTahSgo61Y2F8LKHGBwAxl8N4ri0jKKOH7wB4pkyU+ryjQaeFhB6g==,iv:8f9JchFynDlOnYjrJiK/9ltkykaw5J8rWDwt+QFwzOc=,tag:owaHraC+WUQKn7hMXHcCaQ==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@@ -15,9 +15,9 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyA4RjNs\nWlYvc0tEN2hOUTA5SEV6MUhTeFViRTBqVWJLcGVDZ0JROCtONlQ0CnU0Z2FWQUlw\nakt0dk1nbVFHaVlyMjBqS3hCSDdHZEYwT0pXaXhOclFvSjgKLS0tIG9ZZUQ2dTI5\nWFVJanhac0QxVHM2b04wNE1jcHdHa3JJYzBlTE1iS1ZPTHcKZPvA9MwYT4JfG3/F\nqSI09TWeEv7TAWGeZr6OS++egtpdVoM3hF8s1B1TZb3bf/BMqo49NEkvD56pOKvo\no0jjHw==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyA4RjNs\nWlYvc0tEN2hOUTA5SEV6MUhTeFViRTBqVWJLcGVDZ0JROCtONlQ0CnU0Z2FWQUlw\nakt0dk1nbVFHaVlyMjBqS3hCSDdHZEYwT0pXaXhOclFvSjgKLS0tIG9ZZUQ2dTI5\nWFVJanhac0QxVHM2b04wNE1jcHdHa3JJYzBlTE1iS1ZPTHcKZPvA9MwYT4JfG3/F\nqSI09TWeEv7TAWGeZr6OS++egtpdVoM3hF8s1B1TZb3bf/BMqo49NEkvD56pOKvo\no0jjHw==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-04-11T11:27:08Z", "lastmodified": "2026-01-30T13:42:41Z",
"mac": "ENC[AES256_GCM,data:2wToD3ihDP4FMMcqZk/DPRaZMdscsUKHxcObDKyr+ZV7Dz4/EuLU3gAZEjlqNXqBOjqh7sMf5U3QWSimQ5ZdVE4XAl7GCCbi2UITcTiyot2ZraU264wcQAxhNck2J32zJcAUSOK/3w8s6gCkb/u9HqORMPn/N89eAsO1ZvZ2ikY=,iv:1yw3lTrKRat5J0p1kSjBE64atrUz9XvKzcpZD/ffW2I=,tag:1TWz+U2IhNm9q0IHhUeWQg==,type:str]", "mac": "ENC[AES256_GCM,data:SRxuYiRBCgdYid5GlYDoPbhPWuNPq2A+ItvIuEg8H2RZPpovbdDaj1wO7Jkioy+s5bbf4d8eha3v7hXOmU8cMJ7VdTfQXbJlYMGvGoW14G3d13lT8pyb1goswatF4U9CkSBDVLyyCARloLQQD4jfrts7kvdif/Z8kikStpvsHw0=,iv:h7pf0aAVAEkw1b0W9aYIEYVdq43tByngFI0z1xw3lqE=,tag:/URMCOLxBWxLdXNDr5e0Ig==,type:str]",
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.12.2" "version": "3.11.0"
} }
} }
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data:CtcwM7SbH8DqXR7j4m/AebSeet2L0xg50Clycil4p+xS3b1ALroOyYHvY6+audpQmH01yvlYLQNCwtTGQ4rpnsnQPKxb8mmQg8yMpeBEIeqPFxkmsG202lvBBoICMTetm2QwQGhzmwDypYGNbLibOuaem/aUrr5B+OaEisusmUw9vuSXU0miriMm7jBnodCGGAYh38QnwCsJpUuNnzZchFofwGWXMuVfWZMWsH1hoCkCuA6nRVCb43TNpl5Nz15++g60KKgTZsjLhizrMe4pnZ8MzIU6tYTtYUYlzz2QRWmbqvGsXw6WXYnSj78AqUY5qKRXSTuO7ncw9N+qtUBqxZ/aC6ysn/FmdJ20NcJpgGFfM52MfY2lw+OQwNTPyFu8axfJQ0xhcaWFJL8rIJj3mqX6mVwuBDwdblRq/4dEO97gaU9UsfeRtIt+i1bc7Lng2m0vzp+mVeVchQ+X3E4aO5AJBeUsea1dN2+DbDutc83LXl6zzCoEfaDQBYvY3L4cl796hM3Bg/bUdOkwggntMN62DB41C3u6KTUhOahuLiFQc84paKv5gQlRAfQlAuh/bweDYSre4B7crop6xoTcFCaQ/A1qp0nhjDPZwxtFVHM20Ggt0bpawPnvXjkO9HYdm9OuOFuwkwKfkETSlTmHFBEoUJZECu60Rpsz4vla/UQJB83zDvTDxYY5JUYmcv3IzqhGn+fWwbK1DBlKaFMF1IWKhYS4FWKLNdYaJ7Xhlg8fG9C4OHdcyccrxwV0lxo7OhQf+rxpdJccw0Go9paCSaTZUGpxtvhV49mhGQf/ZefyE4SCPtYEa5a86Jt46BGSUSt94uCsUHLVows1hZr8Ck5tKXaMgtDdlIXcpsPWnbgXK5ZOhL4gpLcnoYI/LwVNrF3z8rxeB1DqqDXTpqPhp3V8iYSZE8JDYIfkwvWaiNVT8nPhlMj/vE9ZPsHPXvdSoRW/Jq4GHv/o3I7iAEEu0ZWbCxpYZ1MR8aC5ph52Q38qNKVbwGQOtuTU10dF0PJdak7RcJIdxDpyCgOT/SUw72P59OwnQFPsiWSmgrNvRR7OTF8owSLk4Z4sBK8+Cr1ME7wggac7+DoYf+vGvC+6HYGrRRsArebNb39iPUJgzz5wA1EJIzoKaV59NOSOQdNV/VC0iZWPpZ4zgRGUJJmLFPmO0IZpoRoajW2LQiMh+Ha2kuqEzit5QkrdpMt+heg44e8OdlIijimp7IfqKuedY7xAQhB9a0FP3+fkjv8pZifgDUh8SByTH4o6G0y9HGhivqoYN5K6qvTeXBJzSSi5ra7FbVkLDIMmG79XIqM+YYd1V/hgErsjPTpjP+rXECa8LZSXuT2Ay3T7r1lBkcuj3o3JAHvYNdank2KKCWCnKjZToxHUOv9lNWPIwGp4cfIcDnyPJrEXGzgw0gvKtsHPsJVBl6gBAuYMU4IfqUWAjmPsL1PYpDFlURzn6oBSn4KGPHfRMneWjNGB/8lwgb1x18WvjylPZUPnGUoxz+Es7VvRHtVCWW/LSTMau1LLeXbNeVudnz8DicQj1kiGxxrUblZmSqEciBuzoKU1ZsqONXoK29PXAj+KDSHOBa4EhsZmJGaFX7DBD667RmvtHUTRC8hR4E3n2UmvYTUDEw9aI+9pHPk/ksT7Haxdr4av6Gv0rn7AJaPX4bER8lv5Upqof/067ySI34sSTVs33hzkrp5r/P3e6i28zV4Y6Fm6XGsDwKuNQqm6sv1OlFfoz5xBACtgsRGT+hVpF/OAKcp9etHCnXG0STPD3AN5p/0tIrPqiqZz+isk43gL04mCRaamRBOxSmW41/t6CwDvhcDZjDz2Ygb00H+cHpCWR466KYcbDnDzn43Vtv22Cw5pAdXD5IKlX4RQAOoCpt7D+tV78FIvdOBtuhjayABnxcfJRHVTpzfitLpQ77fpXhJWyryCSOxb2k2lqIAjsYPQtZ57K/69meaRF/8k/9xlBn2/mExn/4uwFa1PWtmjUVI6tE1S6kn3zmXwn/tDjW4MZmDtO7j/QljJEy40+gsh6NXZD+uyojcXZsjRrdHm7vZUgzqRtw7w7Ua0jowSMVKVipwHjBlVKQcpi5IrnuYnp1oGcx2aJYd1IHmQFNYEKRND9XftTttMWP6LoiAMD0FBLjd6iM/3OCirZfjz1qTH4bRjGirtmE5m+9xIadD9AKS0DLWie6+pxSlUxJa+dXU6VjvIrMx53x2TrasGvV5bEiQBHKwNqQes8GfASZukyylNSkHQ6Exrv31GJKmzWohl5rGvyX2d4RZPEQzMEQ+4c/cZ1GIl1P/otO0dEL2lP5XCKLTxmZzC1LRPipt3rJBZe6P8ffxdNpOXR6XIMTIzXKIR/yro25Neh3zyytj7I8u+UQBaZWkxXKNoppYN5WytYXQ7MRpah4ZFTctLB6fxKJnC756oincSAGiDoFTVcdK0urfS9pWCzS2Jj2zalPWItdw39vEmVWIOveLxLzQ5P0EYptJMPA9WtlfWelcLDwVyosFWvgsTMSFsYLd5HRTqM3QDOsNMpfBdH1BcZwJ1J1S4p9qS8+UO4VV7weVDKYpgWgTUtbnTHv/tY9YZClNTNRh1b7IbdX48B8F1PGaeyWuj/lbo438/AjyTisxvph4gxTULk0+iX224fYf5eVY6zizTTryXDW1DwspEa7nQH3KFYI8n1niXHI5nOELzO2htWg8NSpOdRCxyD2FdnsmiD8HstwYJA0tdaDxLM2D18PP3kRQVXB1xFJFhTaYeTfWGn/eWBG4yy+5oLI1fZ1wzKU5VUkuYp+7BBql1K+39WaNPf0IppTHmAIHTJSjub7rCLKJlyf1zKzo7JCeVdCp5QA2Krbue7/ZKWzfGkrIAKT1EDIl0rC/8ALPL2yscmLx176NMKpihxm+8t21QZ4+aLHMXk0jiLbzftNl0pO9USdDudLA9CUynPwpmnC/pOp8EmeihtjIOYykRGqC+uo+pbas9sCOsKIz6I/iSzxEHQIaN/qg9GzEtyPuYVoMsRcZHpkQ0kG/EaehpQHdD8hFJad8Eb0fHZdpANXDT9wnrK2RZkPvcVlanskGO5jM43GIgWE3xKd+jvxkp8FFzfxAYKeWnjB5+YOrb+N89Q6Wxzu2P889tD0sDhXJeWsbByoUnDHtdjnVERDlxMHO4zp3nrq1XSPTv/nvKLRDYEowKulHrBnDy50+512ctLEmDhki9lw6XAbGK5XaiN6OkJmQhTChThxXAfL54w8PxWM7EOb7AFfxeMV9DDySs7vVP4elfeYhj3/SsOzLpT/iqjv2zrdeBF8nRGJVPwZIg4xsjxg/m/vMB2bsooWH3fPu9x5kW4ymXskoS0u17cUUc406oZsttbGAsoRZlLgiRHoQsj6unxahtDnO9cBG8fxKbj8DuPV8Qku2OOA8oFZie6BCfiWzJ7jDVQBwXLbpdqbQ3jC7Z0Shy5eh+Mygj2f8NkCOj4zSwQQsGkXBlVLN4RhlV3fgfx9h0rvkHXHZjaHmNDRuA/fBEfMA+qHr9L6FszG9tiO3HQ3L474nEJInfbI3BwaEog3RTZ/Z+Ptb/XoQPl3tG77qQIafDLByplU5ZQMer3I3So6xNNlRHaCy3wbSlCgHuXfys61TdoiUUhVaDe5fsfM5SIgf8uDRi+tCKQ4ULtylL2v2jKSlQWtGwxbNKm1b62GEw8t97kUC5yuCiC73+6YwDUyfEBmAmqt9bH60W8KXf3LIeRyFia3O+gJuVhbYLEqYXSGZ53ktWQ12Adz49pPTxe1TUgUJim4GcAA3nnRlJ0C+HcY0+60aFn513z1zn3qrKF8QbdEj5ajRGe2Vnnj0OpvDYe/P2Y8Hg+0iT4A6QhEy6CDqOpaTkipetjvEBYZkRh3bwNrmWjDYpWRH6JpT+o6QBT0Of2oGntgMQIkLmcBKQipTVVvCisnw098E074bZiaSrJpPc1Q==,iv:ave43tGCaJ+YZZ5oep3fMncNGGPI+DySnsIJwSNGgDI=,tag:LMyLH3+gWzlsupvOoMmGeA==,type:str]", "data": "ENC[AES256_GCM,data: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,iv:9OV/jdLMu4tsJTRj6Zc/6ZBOzrHM5mi8hf/waddDqTs=,tag:Zl+ZuT7QAXrktWby6kuWUQ==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@@ -15,9 +15,9 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB4Tmcz\ncE5NNVJPMW5od1VRR1lMSXp5TDZKV2FnejRscFIrSG9UcVVJbFZRCnBWeGxoMExj\nYW9vQk9IS2I1enFkbFBGYStHN3FxV1o5dXNWODgyUnhQc28KLS0tIHlwdFp3Y2da\nV2N5T0IweS9zTyt6eVZiMXpLRzJDTGI0THQrK3RLWGZEeFEK6LFnlO0/opMCSn+n\ntBfc2IFgtk3lje0BVcfLxpU/DedhDqF0HpXYu1CKZhyP6NQ++AKoz//BGCDDiQ+Q\n9x5hFw==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB4Tmcz\ncE5NNVJPMW5od1VRR1lMSXp5TDZKV2FnejRscFIrSG9UcVVJbFZRCnBWeGxoMExj\nYW9vQk9IS2I1enFkbFBGYStHN3FxV1o5dXNWODgyUnhQc28KLS0tIHlwdFp3Y2da\nV2N5T0IweS9zTyt6eVZiMXpLRzJDTGI0THQrK3RLWGZEeFEK6LFnlO0/opMCSn+n\ntBfc2IFgtk3lje0BVcfLxpU/DedhDqF0HpXYu1CKZhyP6NQ++AKoz//BGCDDiQ+Q\n9x5hFw==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-03-28T07:34:37Z", "lastmodified": "2025-11-16T02:29:44Z",
"mac": "ENC[AES256_GCM,data:1nPYVk49OM0568l2/8/FiR9B2wy3y1HidpGeXulJwxFrT7DBMv34LP1je1ntsSKWvKdP9+JOPCKjXbSQnBq+RaX0RuU3WtNlQ2rMw/Uehf6hWEZCxzsRX1rA7nKKKzxe/QTf9ovUxe61j4flEjDQ2yT4PxHTehVIbhhiyfocDGg=,iv:FuSmFLs/ZhjhI/zfxjVUK6Nc7x8GHQcDRk8B9/7TQR0=,tag:VgTS38vfMcJjjJXRM0j0dA==,type:str]", "mac": "ENC[AES256_GCM,data:gWqTwS7NrwChAL1MfZ/AIQyMqfvZ08jiu0irb4L8bvs2ya0imWrK5ZoNfEPFgcnByKphNP8+njZWcIQ48uwQirPX+Nepofdba+GuNLR9S9sd5aW2JM4IyLbDivViKujEdWk1+m+IB4w03QiFQQMDBPSaMDfmJQO+8k+PoopFzWI=,iv:mHt6F5qyqZTRdmoHRgkL8WIWG4gsQWv8wBWtjz6fHmM=,tag:hLr8pIhOK2yIIAMZIHkT7Q==,type:str]",
"unencrypted_suffix": "_unencrypted", "unencrypted_suffix": "_unencrypted",
"version": "3.12.2" "version": "3.11.0"
} }
} }
-11
View File
@@ -1,11 +0,0 @@
MAUTRIX_SIGNAL_BRIDGE_LOGIN_SHARED_SECRET=ENC[AES256_GCM,data:1ruOcaLzDndGuCed9yhlBJb6kxpkBvSDl8uPZNsIa7EHVN7xLrquo5hCW7pMneTmJbulvVM5wm321WAaeTOj0jx/gkkCnh0duja2,iv:IVtdYE67ArlQN94q/TlY3oFzoYHBQxuPLu8ClDu0798=,tag:zjnFtvBdryZSiL6Y3J4g1A==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyUGVr\neFhRVERqUy9pRkFNRUVvQ3NMNFlnZEtQVnNhaWZJbzJUUWN4cG1ZCkduU2NJYnIz\nWm9vWHpGS2hPL1ZNdlhHRWJDaGJYOVFucXA3QktLV1VOdDAKLS0tIDROd2dtMm4v\nN1ZETmxkemk5RFNsU3AzTEphYlVKMTVzajFQNytRRGNBUmMKEwwN7MnPNP0ze0XJ\nm7QTQJhnd9QihXpGVYWKneL2Ef2YU1FZGUPOez9syDRepY/tl8jSFo77+aCLJ2/H\nPzM/4Q==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA0S0VJ\nTlVpOStxVU1rZ0E2MVVNWmI0d0VxMStSeFJ3dnpONTR3N044dWg0CnZBOFpDbkw3\nWjJ6ZHRQaDNaV2JDNHRYWkdSOVFBSDF5M0kvOExaSnBCeGcKLS0tIGJOSCtHRlNt\ncmpYTmN4dklYWEp1WjR0Uk16VkJjRFNqb2hQNEZHSkdSa1EKpO1hMZr1NTzrEbCr\nycIvP4J3U9X1iTAL2/R98lOhUVPWlu7QN1GWvQIyB3TInTIpKNVV1Q8nkrq8GSFG\n6QHTCA==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWbk1h\ndVhCL2kyczUvR09YY3lvYXlmeExjdHYvd1dNQktHcUFVeWdYeFQ4CmJQSTVjY1Bq\nLzh1ZnpEWVJvaUZCeU0rMk5UWXBmMmNDMi9xTERlSlIyd1kKLS0tIHJaYlpaQmtE\nd21nQThCTXBVU0RJRnV0OHFTcWZYeSt4eWlmQVVyUWNSdGsKaPXqoSWS87MOHETx\nl7dbIo4maAV+eXbAbEYF2dZzw+Fea5vTrfsg1QQ4YVNGib7o8nvG2vouMyqq6vI3\n37HGfg==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_lastmodified=2026-04-15T09:41:45Z
sops_mac=ENC[AES256_GCM,data:yh+dEf2fPHMBLppZ7/oMk7iBZnKJ3Jsiq7H6Kla5/r3/ERHZl1d1TPWwIOAwcc4yOiVKCAgXxN+mY/w9Nn0AbfpXUDYgQPoWMZPuAC97eXsCutzOM6GXdmxuIL3Glah4dAYP6Bj34nuKpp4+G6m08Eni65wQJUYRyY6JQHnc5Kc=,iv:Xmnm2VjIVxtIH5TSnWnHQUq22DbubdrZshWZzX+NeF0=,tag:LD8HBRa/vWERhrA3DzMzIg==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.12.2
+3 -4
View File
@@ -1,14 +1,13 @@
MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN=ENC[AES256_GCM,data:B+gL1Ai045XiEcBkFcaEwByEdHgCrbc00Efd/WEb/s1l3rhIqdEmdyhnpqYJQojDQ8cQfYb1gMOW38sZ0GL4zA==,iv:F3Y92S3rM1qUrRN0cR5SFep+ExeP90l/oiWmrDk4yfc=,tag:CZrujwoVdGFiDKMxgM1tCg==,type:str] MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN=ENC[AES256_GCM,data:B+gL1Ai045XiEcBkFcaEwByEdHgCrbc00Efd/WEb/s1l3rhIqdEmdyhnpqYJQojDQ8cQfYb1gMOW38sZ0GL4zA==,iv:F3Y92S3rM1qUrRN0cR5SFep+ExeP90l/oiWmrDk4yfc=,tag:CZrujwoVdGFiDKMxgM1tCg==,type:str]
MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN=ENC[AES256_GCM,data:LDNVwG4cOqgb7stZFCAbzBpqTvt+kcuItaVGrM6Zd1wpxTZJ+sHQTf7acCh1obxdw1S13j8Kw2FsmBk4ojkWtQ==,iv:WJrt9G6BhZTuCxxC9A2AlRvon/MlCa9Y5dGNZ2DO7Mw=,tag:H0SLY4E/G1eJ0Tua+/zxww==,type:str] MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN=ENC[AES256_GCM,data:LDNVwG4cOqgb7stZFCAbzBpqTvt+kcuItaVGrM6Zd1wpxTZJ+sHQTf7acCh1obxdw1S13j8Kw2FsmBk4ojkWtQ==,iv:WJrt9G6BhZTuCxxC9A2AlRvon/MlCa9Y5dGNZ2DO7Mw=,tag:H0SLY4E/G1eJ0Tua+/zxww==,type:str]
MAUTRIX_TELEGRAM_BRIDGE_LOGIN_SHARED_SECRET_MAP=ENC[AES256_GCM,data:UcpnOqYwa3fFvU6/A+qUMfB784FuX/wBoilS3lZs3HHLazr9a12m9xivVs+9Kd7l+5xi5VqtQf9ZyF6EjGIeAFc4BFpADx2uvL7HP5kZ2WLGky/un1w=,iv:9ZtTU/iPhOX30uSbx7h3IMUcnCh127lE18Z3gkiydzo=,tag:DzHPBeKl9C28shR6c6t6mA==,type:str] MAUTRIX_TELEGRAM_BRIDGE_LOGIN_SHARED_SECRET_MAP=ENC[AES256_GCM,data:UcpnOqYwa3fFvU6/A+qUMfB784FuX/wBoilS3lZs3HHLazr9a12m9xivVs+9Kd7l+5xi5VqtQf9ZyF6EjGIeAFc4BFpADx2uvL7HP5kZ2WLGky/un1w=,iv:9ZtTU/iPhOX30uSbx7h3IMUcnCh127lE18Z3gkiydzo=,tag:DzHPBeKl9C28shR6c6t6mA==,type:str]
MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN=ENC[AES256_GCM,data:Gurr78m30j5bhutgJxGCZL4EC5Il0dOCiKnqTG+JskULiwn+82ejo4W+iygvkA==,iv:0DmEq8HmS3S1pKHb47gsZ6/m2Gr2jP6dlw3ytDPfRhE=,tag:8QmMUgv6KigJT4jA4caLFQ==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyUGVr\neFhRVERqUy9pRkFNRUVvQ3NMNFlnZEtQVnNhaWZJbzJUUWN4cG1ZCkduU2NJYnIz\nWm9vWHpGS2hPL1ZNdlhHRWJDaGJYOVFucXA3QktLV1VOdDAKLS0tIDROd2dtMm4v\nN1ZETmxkemk5RFNsU3AzTEphYlVKMTVzajFQNytRRGNBUmMKEwwN7MnPNP0ze0XJ\nm7QTQJhnd9QihXpGVYWKneL2Ef2YU1FZGUPOez9syDRepY/tl8jSFo77+aCLJ2/H\nPzM/4Q==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyUGVr\neFhRVERqUy9pRkFNRUVvQ3NMNFlnZEtQVnNhaWZJbzJUUWN4cG1ZCkduU2NJYnIz\nWm9vWHpGS2hPL1ZNdlhHRWJDaGJYOVFucXA3QktLV1VOdDAKLS0tIDROd2dtMm4v\nN1ZETmxkemk5RFNsU3AzTEphYlVKMTVzajFQNytRRGNBUmMKEwwN7MnPNP0ze0XJ\nm7QTQJhnd9QihXpGVYWKneL2Ef2YU1FZGUPOez9syDRepY/tl8jSFo77+aCLJ2/H\nPzM/4Q==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA0S0VJ\nTlVpOStxVU1rZ0E2MVVNWmI0d0VxMStSeFJ3dnpONTR3N044dWg0CnZBOFpDbkw3\nWjJ6ZHRQaDNaV2JDNHRYWkdSOVFBSDF5M0kvOExaSnBCeGcKLS0tIGJOSCtHRlNt\ncmpYTmN4dklYWEp1WjR0Uk16VkJjRFNqb2hQNEZHSkdSa1EKpO1hMZr1NTzrEbCr\nycIvP4J3U9X1iTAL2/R98lOhUVPWlu7QN1GWvQIyB3TInTIpKNVV1Q8nkrq8GSFG\n6QHTCA==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA0S0VJ\nTlVpOStxVU1rZ0E2MVVNWmI0d0VxMStSeFJ3dnpONTR3N044dWg0CnZBOFpDbkw3\nWjJ6ZHRQaDNaV2JDNHRYWkdSOVFBSDF5M0kvOExaSnBCeGcKLS0tIGJOSCtHRlNt\ncmpYTmN4dklYWEp1WjR0Uk16VkJjRFNqb2hQNEZHSkdSa1EKpO1hMZr1NTzrEbCr\nycIvP4J3U9X1iTAL2/R98lOhUVPWlu7QN1GWvQIyB3TInTIpKNVV1Q8nkrq8GSFG\n6QHTCA==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWbk1h\ndVhCL2kyczUvR09YY3lvYXlmeExjdHYvd1dNQktHcUFVeWdYeFQ4CmJQSTVjY1Bq\nLzh1ZnpEWVJvaUZCeU0rMk5UWXBmMmNDMi9xTERlSlIyd1kKLS0tIHJaYlpaQmtE\nd21nQThCTXBVU0RJRnV0OHFTcWZYeSt4eWlmQVVyUWNSdGsKaPXqoSWS87MOHETx\nl7dbIo4maAV+eXbAbEYF2dZzw+Fea5vTrfsg1QQ4YVNGib7o8nvG2vouMyqq6vI3\n37HGfg==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWbk1h\ndVhCL2kyczUvR09YY3lvYXlmeExjdHYvd1dNQktHcUFVeWdYeFQ4CmJQSTVjY1Bq\nLzh1ZnpEWVJvaUZCeU0rMk5UWXBmMmNDMi9xTERlSlIyd1kKLS0tIHJaYlpaQmtE\nd21nQThCTXBVU0RJRnV0OHFTcWZYeSt4eWlmQVVyUWNSdGsKaPXqoSWS87MOHETx\nl7dbIo4maAV+eXbAbEYF2dZzw+Fea5vTrfsg1QQ4YVNGib7o8nvG2vouMyqq6vI3\n37HGfg==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_lastmodified=2026-04-13T07:43:39Z sops_lastmodified=2025-08-22T02:52:07Z
sops_mac=ENC[AES256_GCM,data:xZVKnXOP27j7fiFaiTQbKDCYKg2ywPfzqY0TSJK6C28MAANXYqTBSvDKBmrw64bNQrf1hcUNV3nqqVGMjCPDg2NkY4bWYPYpGKMKZEQ0WmMeR5Dudlryi2+ga9f9fG9vs0u8YJGJvMnob2EvfpPKI5tPBiCLc8AC5vCVlxrRvTM=,iv:PqI752mqSn7oZV4vwS/t/whRTUG1GTnYwmLP2GOqHdg=,tag:C4cso3fEjmX9jqEFDWrDIQ==,type:str] sops_mac=ENC[AES256_GCM,data:ahjIUwIKPUfqTSl704AekBIVTTe8n0YUbMyVKxFSZb5ZoaQ3KRVgWPWCAn9n/Qwpa1oHWvVcqqbTd+wrxqmkpOgFCfg72ZWdPsSbzg6RGcUVHlg5r2b9DE7Pq+qDtgNBVkmdmlCAY2+mQTepXv8fGbWltu6tzdqOvsOBwfSw694=,iv:OJ2M6X23k5LokCrx4Ekz2a5+hUGV66YNjlFBQZdrkSA=,tag:2xjX3CX45kkpYt+skEgKOw==,type:str]
sops_unencrypted_suffix=_unencrypted sops_unencrypted_suffix=_unencrypted
sops_version=3.12.2 sops_version=3.10.2
+9 -18
View File
@@ -9,14 +9,6 @@ external-controller-cors:
allow-origins: allow-origins:
- ENC[AES256_GCM,data:Ow==,iv:C2R4gooPGj4lranMXP6Uu+nCbGhVk1S37dBKbYgdsRU=,tag:onXhjT4c/qMoayForPKwEQ==,type:str] - ENC[AES256_GCM,data:Ow==,iv:C2R4gooPGj4lranMXP6Uu+nCbGhVk1S37dBKbYgdsRU=,tag:onXhjT4c/qMoayForPKwEQ==,type:str]
allow-private-network: ENC[AES256_GCM,data:mxDrog==,iv:L4hT2zLieK7nQnp5GvdHTsnSkeTz61v77nr281lAcag=,tag:jCQgs+0aDrl7BSZYxI7qUw==,type:bool] allow-private-network: ENC[AES256_GCM,data:mxDrog==,iv:L4hT2zLieK7nQnp5GvdHTsnSkeTz61v77nr281lAcag=,tag:jCQgs+0aDrl7BSZYxI7qUw==,type:bool]
dns:
enable: ENC[AES256_GCM,data:Rp3LZg==,iv:NHk64bGDFmimNmXDk9n9ZqLFVbO8cyWVqivRSDxUowk=,tag:Y5IhMI7n2JtcXfFnEY77PQ==,type:bool]
default-nameserver:
- ENC[AES256_GCM,data:eEwdzhx+ysGj,iv:FZ6vsFPP5dnfcImydU46J8vA9GYbejP3zEXHA6D+6J0=,tag:lmG+OzJwFtBKHraF4PsCjQ==,type:str]
proxy-server-nameserver:
- ENC[AES256_GCM,data:n3PMmscYUm2eXFe3/uNsKPF0rwyQBtGTsA==,iv:FMOP4qohNNqfLIo7U6mk5qxBm0eXVFCbI0KD7kfw1/Y=,tag:N6H/gESlK1Cr5J2T3Mxldg==,type:str]
- ENC[AES256_GCM,data:G5eodgYoIwtWDMnuEg2srdwCJqQi+OAsyPtp4OvT,iv:5maumIhsmc/QE1ey4rufm6Y8G4OqG3qyY0Ybv/24LoI=,tag:heYvV2IVsIMRBEwQwlJlWg==,type:str]
- ENC[AES256_GCM,data:3CbO5pelMlvJxgoawFkEmARs8Xwgw87eKg==,iv:A21aiwBT98NT0VQ2vaepx/F8AG8rWawNWdch+yVDYCM=,tag:OkTMbH5QnXbxf8NQyer8pA==,type:str]
proxies: proxies:
- type: ENC[AES256_GCM,data:82CKWRU=,iv:MmoXN4hqcC2BE93Tfex3swEj50XK6jmjLIWAyRs8WRI=,tag:faiVNIHjq0fRMLiiJoWamg==,type:str] - type: ENC[AES256_GCM,data:82CKWRU=,iv:MmoXN4hqcC2BE93Tfex3swEj50XK6jmjLIWAyRs8WRI=,tag:faiVNIHjq0fRMLiiJoWamg==,type:str]
name: ENC[AES256_GCM,data:mLelhl+5dSLY5TIjoTw=,iv:cJtCH/fMib1KapWVQGsRgy5yRCUC5EZq4RdahEb7NyQ=,tag:ree+OgPt6ixLigZVo06dwQ==,type:str] name: ENC[AES256_GCM,data:mLelhl+5dSLY5TIjoTw=,iv:cJtCH/fMib1KapWVQGsRgy5yRCUC5EZq4RdahEb7NyQ=,tag:ree+OgPt6ixLigZVo06dwQ==,type:str]
@@ -40,7 +32,6 @@ proxy-providers:
url: ENC[AES256_GCM,data:aTVsXCfaCkdZes1CW8SJVQFiTZ/KbYky6ei0FKSmeCF8/TbaLIKKR46FX2yQ8682fdcLGcAB8ekblQ==,iv:7OQ69sjVWNyOrPVlA8DWTAbw/LIVzFFm5dK4FBcwvyk=,tag:gLVzTM5PypNLpaIOiPYc/Q==,type:str] url: ENC[AES256_GCM,data:aTVsXCfaCkdZes1CW8SJVQFiTZ/KbYky6ei0FKSmeCF8/TbaLIKKR46FX2yQ8682fdcLGcAB8ekblQ==,iv:7OQ69sjVWNyOrPVlA8DWTAbw/LIVzFFm5dK4FBcwvyk=,tag:gLVzTM5PypNLpaIOiPYc/Q==,type:str]
proxy: ENC[AES256_GCM,data:BIEXrZQ=,iv:ZzEEJmLgbOhBTcZEgPfsL0AC72GpydlFTKhJ4+fgTec=,tag:v8URxwAU5wSHD5GPr/sTfw==,type:str] proxy: ENC[AES256_GCM,data:BIEXrZQ=,iv:ZzEEJmLgbOhBTcZEgPfsL0AC72GpydlFTKhJ4+fgTec=,tag:v8URxwAU5wSHD5GPr/sTfw==,type:str]
exclude-filter: ENC[AES256_GCM,data:Uc9L0zm7TWGAgIQq6thwK4evIuYoEJyRJ2M=,iv:CbJp7BcobOfkxyY7/fvaECif57yhPZ1/IuPjLwYUwUQ=,tag:xtGissYFtBX3OVinstWRug==,type:str] exclude-filter: ENC[AES256_GCM,data:Uc9L0zm7TWGAgIQq6thwK4evIuYoEJyRJ2M=,iv:CbJp7BcobOfkxyY7/fvaECif57yhPZ1/IuPjLwYUwUQ=,tag:xtGissYFtBX3OVinstWRug==,type:str]
interval: ENC[AES256_GCM,data:fNfSoA==,iv:wYzKqRsdez6gUGQJOgRnqjOzKtNidMKHYNBBrYtPWfk=,tag:woWqs7uC2nSEkvnROTVFRA==,type:int]
proxy-groups: proxy-groups:
- name: ENC[AES256_GCM,data:O6LAzFQ=,iv:a+dfdy14adLlYbJQ5wAQLsD5hxuEXKW8Y/erhBVAREE=,tag:79++dpg2E2Mtc8y63nRcHw==,type:str] - name: ENC[AES256_GCM,data:O6LAzFQ=,iv:a+dfdy14adLlYbJQ5wAQLsD5hxuEXKW8Y/erhBVAREE=,tag:79++dpg2E2Mtc8y63nRcHw==,type:str]
type: ENC[AES256_GCM,data:JR3d3D1p,iv:n0u8vayA0PVDM7yvh2pk36S8EeqMnZRN8TZlwNnEC3U=,tag:ZmxXOralviL2xyd8+hN3ZA==,type:str] type: ENC[AES256_GCM,data:JR3d3D1p,iv:n0u8vayA0PVDM7yvh2pk36S8EeqMnZRN8TZlwNnEC3U=,tag:ZmxXOralviL2xyd8+hN3ZA==,type:str]
@@ -52,7 +43,8 @@ rules:
- ENC[AES256_GCM,data:S6yGMmG4UUUWE04=,iv:FWz0kNu0hhQ+PyIMSxl6NPX/INluS7jAO9loX+E+jlE=,tag:tXK35hMiYDU8X0yl+0PRuQ==,type:str] - ENC[AES256_GCM,data:S6yGMmG4UUUWE04=,iv:FWz0kNu0hhQ+PyIMSxl6NPX/INluS7jAO9loX+E+jlE=,tag:tXK35hMiYDU8X0yl+0PRuQ==,type:str]
sops: sops:
age: age:
- enc: | - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA2Zkxs YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA2Zkxs
SGh4Ulp1UklKeDU4M2xtcWZPRGxNUGt4eGVQQ29LcjB2YXJGRVVnClZLSmRra0Qx SGh4Ulp1UklKeDU4M2xtcWZPRGxNUGt4eGVQQ29LcjB2YXJGRVVnClZLSmRra0Qx
@@ -61,8 +53,8 @@ sops:
sF/MYEjihktzyngzTLyuwHYYb1xqTbpmjFNzJfbW7+LJJSPQ9cu6W7DcZGIsSe0e sF/MYEjihktzyngzTLyuwHYYb1xqTbpmjFNzJfbW7+LJJSPQ9cu6W7DcZGIsSe0e
VNycmg== VNycmg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
- enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBXVDk0 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBXVDk0
bjZhMnRabGVLSHorWmRhd0NjTVF2VTZQVzZSeEkzK3c5WDBoM0FVCjB3cTB6NTYy bjZhMnRabGVLSHorWmRhd0NjTVF2VTZQVzZSeEkzK3c5WDBoM0FVCjB3cTB6NTYy
@@ -71,8 +63,8 @@ sops:
dQxXWnexmkLryDtddH1sdCdQh8e9D1IJFjuOD8JzsyWToWFuo01Cw27VLWGAGnFD dQxXWnexmkLryDtddH1sdCdQh8e9D1IJFjuOD8JzsyWToWFuo01Cw27VLWGAGnFD
GZpp+A== GZpp+A==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
- enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBzVFdr YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBzVFdr
TTNiK1VIRUk4N2l6TDcyMmw5U3ZRMzR2QlMrcy9XL1RLOCtzNUdnCnkvRmdmZ2gz TTNiK1VIRUk4N2l6TDcyMmw5U3ZRMzR2QlMrcy9XL1RLOCtzNUdnCnkvRmdmZ2gz
@@ -81,8 +73,7 @@ sops:
FY9SvbPWXVTcJiLwjpcD8tSMdqcTHTJXcLAWSCjyFF91ihBUanQ7TcdXvZTGfdY0 FY9SvbPWXVTcJiLwjpcD8tSMdqcTHTJXcLAWSCjyFF91ihBUanQ7TcdXvZTGfdY0
pOoJmg== pOoJmg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ lastmodified: "2026-02-11T03:50:06Z"
lastmodified: "2026-06-13T04:02:11Z" mac: ENC[AES256_GCM,data:SqQbTjyvC7ev2egnq9swpQcLjVW1yZ0Yiv6DzNTupUVkl8yP4L6pGJ9P0EiuX/JFPFhAv+x61uudGNUUEu2pPdgHO80glBriATM54o7KILVkrm5TYQVZbD9YsAQsmPw3etVeaMk1a6dgIExW8+DG+KLq/qI/fJk1K0mWv9RR940=,iv:fwqW6E9vVFcLVm4mdI/zZlNeq55yz2AyKKvvx9D1nFA=,tag:qoyhpooNb/taN64s926nRw==,type:str]
mac: ENC[AES256_GCM,data:VWXa9HdGyPBkLQH5lgqioYbd3VxvL7PjuwiHrX353W+G4Lu/VaMHAz9AFN495cLyCm1dB4VwC773JmLNYKbCzHswQr4tpkp7AlIhvCbt+S0L5ZXLxOlVMd0vONGxQOQHhxQnRONXg9K2i7rTfTjGBdY1o/alswfsNrhaL7g/+OY=,iv:Z3MNOcTU9AQ8yEQgYxXKmv+09cXbF1RalrNXqJYTGUs=,tag:K1kps0EPAKYbQradY02yOQ==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.13.1 version: 3.11.0
+12
View File
@@ -0,0 +1,12 @@
MINIO_ROOT_USER=ENC[AES256_GCM,data:sBnNpnA=,iv:Z2K8Cg/4DW+MxcKIFVMRWlFj2/qqFLCDnzJF6Uq8eLE=,tag:Y+A/FZm/3k35+bNgl89xPQ==,type:str]
MINIO_ROOT_PASSWORD=ENC[AES256_GCM,data:sgYwUxp2Ao6nlUJ8RE7V9Bz1ZG4=,iv:LJJg62vCiguOp8aHCSYOTMtW3vjvXy+RnwghKJmaTR4=,tag:TnyxLzshfe53e2vav1QblQ==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA3SWtI\nTHVINjFPbkRMa0ZhNkxYRjBHQm5xcERGUjRJT0NsRk1kSWViNEhjClk0UlhvL2N4\nTERoQXBMSENUTEF2U2ZBRzI0QnM2dnFuVlVaVWJZRVNGL0UKLS0tIGkwVW1xc2lF\nUHFCekRuMDEwNW1jWmFLT3BUeS8rQ2FLSnBoamRjc045UzQKfaFKjKVUX15FN6MO\nti9ZpA7+uJpt04cblGutAEdttXdLRbiJe67nJCOkCC8U7czP1X1G2Yi1IeVxqrx+\ngdBDaQ==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyB5RGM1\nWndtcTVNaHdqakw1NThLTFZFRjdkaERiNXVIVkdxRDdiWTZZcFVjCkd5QWFBUFVt\nOWJucThyWVlhZjNvZnVHTTYzYlRjMFRiMFBrTXp3ZjJXSkUKLS0tIE41RUFOZ0Vx\nMWpkcWc0Rk11bTlaKzlmdVBteTRaVHlkTkpiS2d1YzF6Z28KT/QaHJyhhd9g77vo\n7XwkaHN8CJq8IxwMId7rJuAKi56zTXOoDfBlIYwssVN4FRdCSF4HzIR8ztBJ/MgH\nJIafKA==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBic292\naStPcmRoeko3ei81THdDay9iUUUycVpxbmUwNmJhNW55SG0rbkVrCngxS0YrSzNF\nMlhpcHU1OGJBOThiZHdYZWZ4YjhicGViL1pzZElUdnhWNXMKLS0tIHlVRnhsUEhy\nV3JoRjM0SGl2dGdaWkIxNGJLS29CVXhTcGd3bm45NDBpRlUKmp9EuXD/iU7yxkFs\nLDk/NN1VvLKSU3RqtuAxbXPIzizNCxaBs/1MQtLIxRkEQvOno+MNyN7JHLFmb+lQ\nmwqPBA==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_lastmodified=2025-03-09T02:24:31Z
sops_mac=ENC[AES256_GCM,data:ium37/C2+zybZDnSlhr6RmB3RiGmjVx4BbHXsfdZ6T+5/DFtkvduhuu0QxLReVBIZ/yYJgttTJq4wIqbUWMvsy2OafCB2piqISe0FAk2KfcM8kqfKFbLFghjkn6Nu1l331MKt/PMLy47ilS5i0Sh3QyD28/pe/tw4vpF3Vz8VjQ=,iv:vLoax3u4RCsisoSUIxy0EA+d2P/WfcPxfXM27QqmVpU=,tag:oCiXH1E9a9NBNbUikNvuBg==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.9.4
-2
View File
@@ -1,5 +1,3 @@
#:schema https://raw.githubusercontent.com/crate-ci/typos/refs/heads/master/config.schema.json
[files] [files]
extend-exclude = [ extend-exclude = [
"secrets" "secrets"