Compare commits

..

1 Commits

Author SHA1 Message Date
imxyy1soope1 832733f931 feat(nvim): use mini.nvim & neo-tree 2026-02-07 12:00:30 +08:00
84 changed files with 1514 additions and 4121 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 = {
url = "github:nix-community/NixOS-WSL";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
};
# Flake organization tools
@@ -41,11 +40,11 @@
# Useful modules
# keep-sorted start block=yes
impermanence = {
url = "github:nix-community/impermanence";
catppuccin = {
url = "github:catppuccin/nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
impermanence.url = "github:nix-community/impermanence";
# TODO: sops-nix: remove pr patch once merged
# https://github.com/Mic92/sops-nix/pull/779
sops-nix = {
@@ -55,8 +54,6 @@
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.systems.follows = "systems";
};
system76-scheduler-niri = {
url = "github:Kirottu/system76-scheduler-niri";
@@ -69,9 +66,6 @@
angrr = {
url = "github:linyinfeng/angrr";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-parts.follows = "flake-parts";
inputs.treefmt-nix.follows = "treefmt";
};
darkly = {
url = "github:Bali10050/Darkly";
@@ -84,35 +78,14 @@
go-musicfox = {
url = "github:imxyy1soope1/go-musicfox";
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 = {
url = "github:noctalia-dev/noctalia-shell/v4.7.5";
url = "github:noctalia-dev/noctalia-shell/v4.3.3";
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
# Misc
@@ -125,20 +98,6 @@
flake = false;
};
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 =
+1
View File
@@ -126,6 +126,7 @@ in
# Upstream modules
# keep-sorted start
inputs.angrr.nixosModules.angrr
inputs.catppuccin.nixosModules.catppuccin
inputs.home-manager.nixosModules.default
inputs.impermanence.nixosModules.impermanence
inputs.niri.nixosModules.niri
+1 -1
View File
@@ -14,11 +14,11 @@
inputs.fenix.overlays.default
inputs.angrr.overlays.default
(final: prev: {
darkly-qt5 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt5;
darkly-qt6 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt6;
noctalia-shell = inputs.noctalia.packages.${final.stdenv.hostPlatform.system}.default;
})
inputs.llm-agents.overlays.shared-nixpkgs
];
config.allowUnfree = true;
flake.setNixPath = false;
+1 -2
View File
@@ -7,13 +7,12 @@
};
virtualisation.oci-containers.containers = {
tuwunel = {
image = "ghcr.io/matrix-construct/tuwunel:latest";
image = "jevolk/tuwunel:latest";
volumes = [
"tuwunel_db:/var/lib/tuwunel"
];
ports = [ "6167:6167" ];
networks = [ "podman" ];
extraOptions = [ "--pids-limit=-1" ];
environment = {
TUWUNEL_SERVER_NAME = "mtx.eflx.top";
TUWUNEL_PORT = "6167";
+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;
networking.hostId = "10ca95b4";
my.persist.btrfs = {
fileSystems."/" = {
device = btrfs;
mountPoint = "/nix/persist";
persistSubvol = "persist";
rootSubvol = "root";
zstdCompress = true;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=root"
];
};
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" = {
device = "/dev/disk/by-uuid/32AA-2998";
fsType = "vfat";
-1
View File
@@ -8,7 +8,6 @@
coding.langs.lua.enable = true;
coding.langs.rust.enable = true;
coding.langs.js.enable = true;
coding.agents.enable = true;
fonts.enable = lib.mkForce false;
persist = {
enable = true;
-36
View File
@@ -95,12 +95,7 @@
displayname_template = "{displayname} (Telegram)";
permissions = {
"@imxyy_soope_:imxyy.top" = "admin";
"*" = "relaybot";
};
relaybot = {
whitelist = [ ];
};
relay_user_distinguishers = [ ];
};
telegram = {
# 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" ];
}
{
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";
type = "http";
@@ -484,6 +499,7 @@
"git"
"vault"
"coder"
"grafana"
"matrix"
"note"
"oidc"
+2 -8
View File
@@ -17,9 +17,9 @@ in
services.nextcloud = {
enable = true;
package = pkgs.nextcloud33;
package = pkgs.nextcloud32;
extraApps = {
inherit (pkgs.nextcloud33.packages.apps)
inherit (pkgs.nextcloud32.packages.apps)
bookmarks
previewgenerator
spreed
@@ -73,12 +73,6 @@ in
"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" = {
listen = [
{
+42 -5
View File
@@ -30,12 +30,13 @@ in
};
};
my.persist.btrfs = {
fileSystems."/" = {
device = btrfs;
mountPoint = "/nix/persist";
persistSubvol = "persist";
rootSubvol = "root";
zstdCompress = true;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=root"
];
};
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" = {
device = "/dev/disk/by-uuid/96D3-93B0";
fsType = "vfat";
+9 -2
View File
@@ -17,10 +17,10 @@
anki
ayugram-desktop
signal-desktop-wayland
signal-desktop
element-desktop
fractal
qq-wayland
qq
wechat
gnome-clocks
@@ -131,6 +131,13 @@
".config/dconf"
".config/pip"
".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;
mountPoint = "/nix/persist";
persistSubvol = "persistent";
rootSubvol = "root";
zstdCompress = true;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=root"
];
};
fileSystems."/nix" = {
@@ -51,6 +52,17 @@ in
options = [ "compress=zstd" ];
};
my.persist.location = "/nix/persist";
fileSystems."/nix/persist" = {
device = btrfs;
fsType = "btrfs";
options = [
"compress=zstd"
"subvol=persistent"
];
neededForBoot = true;
};
fileSystems."/swap" = {
device = btrfs;
fsType = "btrfs";
@@ -61,6 +73,31 @@ in
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" = {
device = "/dev/disk/by-uuid/B7DC-E9AC";
fsType = "vfat";
+15 -2
View File
@@ -17,10 +17,10 @@
anki
ayugram-desktop
signal-desktop-wayland
signal-desktop
element-desktop
fractal
qq-wayland
qq
wechat
gnome-clocks
@@ -78,6 +78,12 @@
};
my = {
autologin = {
enable = true;
user = username;
ttys = [ 6 ];
};
gpg.enable = true;
cli.all.enable = true;
coding.all.enable = true;
@@ -155,6 +161,13 @@
".config/dconf"
".config/pip"
".config/sunshine"
".gemini"
".claude"
".claude-code-router"
];
homeFiles = [
".claude.json"
];
};
};
+2 -5
View File
@@ -35,9 +35,6 @@ in
pciutils
usbutils
dust
dysk
lsof
nmap
@@ -67,12 +64,12 @@ in
aria2
bat
comma
fastfetch.minimal
fastfetch
fd
fzf
jq
keep-sorted
lsd
neofetch
ripgrep
socat
typos
-1
View File
@@ -12,7 +12,6 @@ in
zsh.enable = true;
fish.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 = {
la = "lsd -lah";
ls = "lsd";
svim = "sudoedit";
svim = "doasedit";
nf = "fastfetch";
};
interactiveShellInit = lib.mkBefore ''
+4 -31
View File
@@ -11,44 +11,17 @@ in
};
config = lib.mkMerge [
{
my.cli.shell.starship.format = lib.mkOrder 0 [ "$all" ];
}
(lib.mkIf cfg.enable {
my.hm = {
programs.starship = {
enable = true;
settings = lib.recursiveUpdate (with builtins; fromTOML (readFile ./starship-preset.toml)) {
add_newline = false;
command_timeout = 2000;
nix_shell.disabled = true;
format =
let
dedupDollar =
list:
let
result =
builtins.foldl'
(
acc: elem:
if lib.hasPrefix "$" elem then
if builtins.elem elem acc.seen then
acc
else
acc
// {
result = acc.result ++ [ elem ];
seen = acc.seen ++ [ elem ];
}
else
acc // { result = acc.result ++ [ elem ]; }
)
{
result = [ ];
seen = [ ];
}
(lib.reverseList list);
in
lib.reverseList result.result;
in
"$all" + lib.concatStrings (dedupDollar cfg.format);
format = lib.concatStringsSep "" cfg.format;
};
};
};
+1 -1
View File
@@ -51,7 +51,7 @@ in
};
shellAliases = {
ls = "lsd";
svim = "sudoedit";
svim = "doasedit";
nf = "fastfetch";
};
};
+14 -16
View File
@@ -22,22 +22,20 @@ in
forward_env = [ "PATH" ];
};
};
programs.starship = {
settings = {
custom.shpool = {
description = "Display current shpool session name";
when = ''test -n "$SHPOOL_SESSION_NAME"'';
command = "echo $SHPOOL_SESSION_NAME";
symbol = " ";
style = "fg:#dea584";
format = "[$symbol \\[$output\\] ]($style)";
};
};
};
# https://github.com/starship/starship/discussions/7260
# programs.starship = {
# settings = {
# custom.shpool = {
# description = "Display current shpool session name";
# when = ''test -n "$SHPOOL_SESSION_NAME"'';
# command = "echo $SHPOOL_SESSION_NAME";
# symbol = " ";
# style = "fg:#dea584";
# format = "[$symbol $output]($style)";
# };
# };
# };
};
my.cli.shell.starship.format = [
"\${custom.shpool}"
"$character"
];
# my.cli.shell.starship.format = [ "$starship$character" ];
};
}
+14 -16
View File
@@ -34,22 +34,20 @@ in
})
];
};
programs.starship = {
settings = {
custom.tmux = {
description = "Display current tmux session name";
when = ''test -n "$TMUX"'';
command = "tmux display-message -p '#S'";
symbol = " ";
style = "bold green";
format = "[$symbol \\[$output\\] ]($style)";
};
};
};
# https://github.com/starship/starship/discussions/7260
# programs.starship = {
# settings = {
# custom.tmux = {
# description = "Display current tmux session name";
# when = ''test -n "$TMUX"'';
# command = "tmux display-message -p '#S'";
# symbol = " ";
# style = "bold green";
# format = "[$symbol $output]($style)";
# };
# };
# };
};
my.cli.shell.starship.format = [
"\${custom.tmux}"
"$character"
];
# my.cli.shell.starship.format = [ "$tmux$character" ];
};
}
-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 = {
editor.all.enable = true;
langs.all.enable = true;
agents.enable = true;
misc.enable = true;
};
};
+1 -16
View File
@@ -14,8 +14,6 @@ in
};
config = lib.mkIf cfg.enable {
# workaround
environment.sessionVariables.EDITOR = "nvim";
my.hm = {
xdg.configFile."nvim".source = impure.mkImpureLink ./nvim;
programs.neovim = {
@@ -24,25 +22,12 @@ in
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
withPython3 = false;
withRuby = false;
sideloadInitLua = true;
extraPackages = with pkgs; [
# treesitter
tree-sitter
gnutar
curl
gcc
gcc # treesitter
ripgrep # telescope
# language servers
vscode-json-languageserver
vscode-langservers-extracted
typos-lsp
# render-markdown.nvim
python3Packages.pylatexenc
];
};
};
@@ -1,43 +1,43 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
"blink.cmp": { "branch": "main", "commit": "3db7326f54b73df4789e0fd6274bedda33975fea" },
"blink.lib": { "branch": "main", "commit": "b127d48bf8e9ac9cf41f6e0fbead317503f76558" },
"LuaSnip": { "branch": "master", "commit": "dae4f5aaa3574bd0c2b9dd20fb9542a02c10471c" },
"blink.cmp": { "branch": "main", "commit": "f9e855c4d96e1264f7c818844f5a0166ad48c212" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" },
"gitsigns.nvim": { "branch": "main", "commit": "1ce96a464fdbc24208e24c117e2021794259005d" },
"glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" },
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"inlay-hints.nvim": { "branch": "master", "commit": "297a65ab9543eb0850c1a55df4bb89e22cfec504" },
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"inlay-hints.nvim": { "branch": "master", "commit": "11be32be3761c6263df2311afb6baa0de0863967" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"leap.nvim": { "branch": "main", "commit": "d3641f9aa86e7460b14d9f4479e7454f88cc6b2d" },
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
"leap.nvim": { "branch": "main", "commit": "d7316deae68dc93d6957020cdda6d7bb399218fb" },
"lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mini.nvim": { "branch": "main", "commit": "b2ac6522f7a54b475d9fad711b938eefc6d3d0a6" },
"neo-tree.nvim": { "branch": "main", "commit": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61" },
"mini.nvim": { "branch": "main", "commit": "8c40d95931cbe6138391af9180e59439ed2e69df" },
"neo-tree.nvim": { "branch": "main", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-lspconfig": { "branch": "master", "commit": "229b79051b380377664edc4cbd534930154921a1" },
"nvim-lspconfig": { "branch": "master", "commit": "66fd02ad1c7ea31616d3ca678fa04e6d0b360824" },
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
"nvim-osc52": { "branch": "main", "commit": "04cfaba1865ae5c53b6f887c3ca7304973824fb2" },
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" },
"pest.vim": { "branch": "master", "commit": "60cae7ea1beb644ed40081a3ec213ea9061aba09" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "a798325b7f36acc62741d1029930a7b96d4dd4bf" },
"registers": { "branch": "main", "commit": "c217f8f369e0886776cda6c94eab839b30a8940d" },
"render-markdown.nvim": { "branch": "main", "commit": "5adf0895310c1904e5abfaad40a2baad7fe44a07" },
"ripgrep": { "branch": "master", "commit": "82313cf95849bfe425109ad9506a52154879b1b1" },
"telescope.nvim": { "branch": "master", "commit": "7d324792b7943e4aa16ad007212e6acc6f9fe335" },
"nvim-tree.lua": { "branch": "master", "commit": "037d89e60fb01a6c11a48a19540253b8c72a3c32" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
"outline.nvim": { "branch": "main", "commit": "ead1820d49c8e79ce89cab1c2c318981b695c9d2" },
"pest.vim": { "branch": "master", "commit": "7cfcb43f824e74d13dfe631359fff2ec23836a77" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "d6b802552cbe7d643a3b6b31f419c248d1f1e220" },
"render-markdown.nvim": { "branch": "main", "commit": "48b4175dbca8439d30c1f52231cbe5a712c8f9d9" },
"ripgrep": { "branch": "master", "commit": "0a88cccd5188074de96f54a4b6b44a63971ac157" },
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
"tree-sitter-nu": { "branch": "main", "commit": "bb3f533e5792260291945e1f329e1f0a779def6e" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"vim-floaterm": { "branch": "master", "commit": "bb4ba7952e906408e1f83b215f55ffe57efcade6" },
"vim-floaterm": { "branch": "master", "commit": "a11b930f55324e9b05e2ef16511fe713f1b456a7" },
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" }
}
@@ -24,6 +24,7 @@ keymap.set("i", "<pageup>", string.rep("<up>", 9), opt)
keymap.set("i", "<pagedown>", string.rep("<down>", 9), 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>qa", ":qa<CR>", opt)
keymap.set("n", "<leader>c", function()
@@ -6,7 +6,6 @@ opt.shiftwidth = 4
opt.softtabstop = 4
opt.expandtab = true
opt.autoindent = true
opt.smartindent = true
-- Linenumber setting
opt.number = true
@@ -23,7 +22,6 @@ opt.smartcase = true
opt.termguicolors = true
opt.signcolumn = "yes"
opt.colorcolumn = "110"
opt.textwidth = 110
opt.scrolloff = 8
opt.sidescrolloff = 8
@@ -1,7 +1,3 @@
-- rainbow-delimiters integration
local hooks = require("ibl.hooks")
hooks.register(hooks.type.SCOPE_HIGHLIGHT, hooks.builtin.scope_highlight_from_extmark)
--- @type ibl.config
M = {
enabled = true,
@@ -11,7 +7,6 @@ M = {
scope = {
enabled = true,
show_start = false,
highlight = vim.g.rainbow_delimiters.highlight,
},
}
@@ -75,14 +75,11 @@ local servers = {
biome = {},
clangd = {},
cssls = {},
eslint = {},
gopls = {},
html = {},
java_language_server = {},
jsonls = {},
pyrefly = {},
-- taplo = {},
tombi = {},
pyright = {},
ts_ls = {},
typos_lsp = {},
-- keep-sorted end
@@ -0,0 +1,19 @@
M = {
bind = true, -- This is mandatory, otherwise border config won't get registered.
handler_opts = {
border = "rounded",
},
hint_prefix = "^ ",
toggle_key = "<C-k>",
}
vim.keymap.set(
{ "n" },
"<leader>k",
require("lsp_signature").toggle_float_win,
{ silent = true, noremap = true, desc = "toggle signature" }
)
vim.keymap.set({ "n" }, "K", vim.lsp.buf.signature_help, { silent = true, noremap = true, desc = "toggle signature" })
return M
@@ -1,30 +0,0 @@
M = {
options = {
theme = "tokyonight",
},
sections = {
lualine_y = {
"encoding",
"fileformat",
"filetype",
},
lualine_x = {
{
require("noice").api.status.message.get_hl,
cond = require("noice").api.status.message.has,
},
{
require("noice").api.status.command.get,
cond = require("noice").api.status.command.has,
color = { fg = "#ff9e64" },
},
{
require("noice").api.status.search.get,
cond = require("noice").api.status.search.has,
color = { fg = "#ff9e64" },
},
},
},
}
return M
@@ -14,52 +14,61 @@ package.path = package.path .. ";" .. vim.fn.stdpath("config") .. "/lua/"
local plugins = {
{
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
vim.cmd.colorscheme("tokyonight-storm")
end,
},
{
"nvim-lualine/lualine.nvim",
dependencies = { { "nvim-tree/nvim-web-devicons", lazy = true } },
config = function()
require("lualine").setup(require("plugins.lualine"))
end,
},
{
"echasnovski/mini.nvim",
'echasnovski/mini.nvim',
config = function()
-- Simple and easy statusline.
-- You could remove this setup call if you don't like it,
-- and try some other statusline plugin
local statusline = require 'mini.statusline'
-- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g.have_nerd_font }
-- You can configure sections in the statusline by overriding their
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function()
return '%2l:%-2v'
end
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
-- - ci' - [C]hange [I]nside [']quote
require("mini.ai").setup({ n_lines = 500 })
require('mini.ai').setup { n_lines = 500 }
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require("mini.surround").setup()
require('mini.surround').setup()
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
end,
},
{
"nvim-neo-tree/neo-tree.nvim",
version = "*",
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
'MunifTanjim/nui.nvim',
},
cmd = "Neotree",
cmd = 'Neotree',
keys = {
{ "\\", ":Neotree reveal toggle<CR>", desc = "Toggle NeoTree", silent = true },
{ "<leader>e", ":Neotree reveal toggle<CR>", desc = "Toggle NeoTree", silent = true },
{ '\\', ':Neotree reveal toggle<CR>', desc = 'Toggle NeoTree', silent = true },
{ '<leader>e', ':Neotree reveal toggle<CR>', desc = 'Toggle NeoTree', silent = true },
},
--- @type neotree.Config
opts = {
@@ -71,7 +80,7 @@ local plugins = {
window = {
width = 30,
mappings = {
["\\"] = "close_window",
['\\'] = 'close_window',
["<leader>e"] = "close_window",
["<c-]>"] = "set_root",
},
@@ -81,38 +90,39 @@ local plugins = {
},
{
"nvim-treesitter/nvim-treesitter",
branch = "main",
lazy = false,
dependencies = {
{
branch = "main",
"nvim-treesitter/nvim-treesitter-textobjects",
},
"nvim-treesitter/nvim-treesitter-textobjects",
"nushell/tree-sitter-nu",
},
config = function()
require("nvim-treesitter").setup(require("plugins.treesitter"))
require("nvim-treesitter.configs").setup(require("plugins.treesitter"))
end,
build = ":TSUpdate",
},
{
url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
event = "VeryLazy",
config = function()
require("plugins.rainbow-delimiters")
end,
},
{
"lukas-reineke/indent-blankline.nvim",
dependencies = { "https://gitlab.com/HiPhish/rainbow-delimiters.nvim" },
event = "VeryLazy",
config = function()
require("ibl").setup(require("plugins.indent-blankline"))
end,
},
{
"norcalli/nvim-colorizer.lua",
event = "VeryLazy",
opt = {},
},
{
"neovim/nvim-lspconfig",
dependencies = { "saghen/blink.cmp" },
event = "VeryLazy",
config = function()
require("plugins.lsp.lspconfig")
require("plugins.lsp.others")
@@ -174,6 +184,8 @@ local plugins = {
},
{
"saghen/blink.cmp",
event = "VeryLazy",
build = "cargo build --release",
dependencies = {
{
"L3MON4D3/LuaSnip",
@@ -193,7 +205,6 @@ local plugins = {
},
},
},
"saghen/blink.lib",
},
config = function()
require("blink.cmp").setup(require("plugins.cmp.cmp"))
@@ -201,6 +212,7 @@ local plugins = {
},
{
"numToStr/Comment.nvim",
event = "VeryLazy",
opts = {},
},
{
@@ -216,6 +228,7 @@ local plugins = {
},
{
"lewis6991/gitsigns.nvim",
event = "VeryLazy",
config = function()
require("gitsigns").setup(require("plugins.gitsigns"))
end,
@@ -254,7 +267,6 @@ local plugins = {
dependencies = { "tpope/vim-repeat" },
config = function()
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)")
-- Exclude whitespace and the middle of alphabetic words from preview:
-- foobar[baaz] = quux
@@ -267,31 +279,20 @@ local plugins = {
},
{
"alexghergh/nvim-tmux-navigation",
event = "VeryLazy",
config = function()
require("nvim-tmux-navigation").setup(require("plugins.tmuxnav"))
end,
},
{
"MeanderingProgrammer/render-markdown.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons",
},
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
event = "BufEnter *.md",
--- @type render.md.UserConfig
opts = {
completions = {
blink = {
enabled = true,
},
lsp = {
enabled = true,
},
},
},
opts = {},
},
{
"folke/noice.nvim",
event = "VeryLazy",
dependencies = {
"MunifTanjim/nui.nvim",
"rcarriga/nvim-notify",
@@ -306,14 +307,31 @@ local plugins = {
},
{
"voldikss/vim-floaterm",
event = "VeryLazy",
config = function()
require("plugins.floaterm")
end,
},
{
"folke/todo-comments.nvim",
event = "VeryLazy",
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",
ft = "pest",
@@ -322,19 +340,9 @@ local plugins = {
{
"nmac427/guess-indent.nvim",
event = "VeryLazy",
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, {})
@@ -1,15 +1,21 @@
--- @type TSConfig
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", {
callback = function()
-- Enable treesitter highlighting and disable regex syntax
pcall(vim.treesitter.start)
-- Enable treesitter-based indentation
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end,
vim.filetype.add({
pattern = {
[".*/hypr/.*%.conf"] = "hyprlang",
[".*%.hl"] = "hyprlang",
},
})
return M
+4 -1
View File
@@ -13,8 +13,11 @@ in
};
config = lib.mkIf cfg.enable {
my.hm.programs.vscode.enable = true;
my.hm = {
programs.vscodium.enable = true;
programs.vscode = {
package = pkgs.vscodium;
};
};
my.persist.homeDirs = [
".config/VSCodium"
-1
View File
@@ -18,7 +18,6 @@ in
java.enable = true;
qml.enable = true;
typst.enable = true;
toml.enable = true;
};
};
}
+1 -1
View File
@@ -16,7 +16,7 @@ in
my.hm.home.packages = with pkgs; [
go
gotools
(lib.hiPrio gopls)
gopls
];
my.persist.homeDirs = [
"go"
+1 -1
View File
@@ -19,7 +19,7 @@ in
pnpm
typescript
typescript-language-server
nodePackages.typescript-language-server
vue-language-server
biome
+1 -1
View File
@@ -16,7 +16,7 @@ in
my.hm.home.packages = with pkgs; [
python3
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 = {
enable = true;
nix-direnv.enable = true;
config = {
global = {
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()
}
}
+11 -117
View File
@@ -32,103 +32,23 @@ in
nh
];
environment.etc =
(lib.mapAttrs' (name: value: {
name = "nix/path/${name}";
value.source = value.flake;
}) 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";
};
};
environment.etc = lib.mapAttrs' (name: value: {
name = "nix/path/${name}";
value.source = value.flake;
}) config.nix.registry;
nix.settings = {
experimental-features = "nix-command flakes pipe-operators";
substituters = lib.mkForce [
"http://127.0.0.1:2048"
substituters = [
"https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
"https://cache.numtide.com"
"https://cache.nixos.org"
# "https://mirrors.ustc.edu.cn/nix-channels/store"
# "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
# "https://nix-community.cachix.org"
"https://mirror.sjtu.edu.cn/nix-channels/store"
"https://mirrors.ustc.edu.cn/nix-channels/store"
"https://nix-community.cachix.org"
"https://cache.garnix.io"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g="
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
];
download-buffer-size = 536870912; # 512 MiB
warn-dirty = false;
@@ -172,33 +92,7 @@ in
services.angrr = {
enable = true;
settings = {
temporary-root-policies = {
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;
};
};
period = "1month";
};
};
};
+10 -87
View File
@@ -10,35 +10,15 @@ in
{
options.my.persist = {
enable = lib.mkEnableOption "persist";
btrfs = 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;
default = "/nix/persist";
example = lib.literalExpression ''
"/persistent"
'';
};
};
}
);
location = lib.mkOption {
type = lib.types.str;
default = "/nix/persist";
example = lib.literalExpression ''
"/persistent"
'';
description = lib.mdDoc ''
Persistent location
'';
};
homeDirs = lib.mkOption {
default = [ ];
@@ -89,65 +69,8 @@ in
};
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;
environment.persistence.${cfg.btrfs.mountPoint} = {
environment.persistence.${cfg.location} = {
hideMounts = true;
directories = cfg.nixosDirs;
files = cfg.nixosFiles;
+55 -7
View File
@@ -2,7 +2,6 @@
config,
lib,
pkgs,
hostname,
username,
userdesc,
secrets,
@@ -39,18 +38,67 @@ in
};
users.users.root.hashedPasswordFile = lib.mkDefault config.sops.secrets.imxyy-nix-hashed-password.path;
security.sudo = {
security.sudo.enable = false;
security.doas = {
enable = true;
extraRules = [
{
users = [ "imxyy" ];
commands = lib.singleton {
command = "ALL";
options = lib.optionals (hostname == "imxyy-nix") [ "NOPASSWD" ];
};
users = [ username ];
noPass = true;
keepEnv = true;
}
];
};
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 = [
"root"
+1 -4
View File
@@ -38,10 +38,7 @@ in
dataHome = "${homedir}/.local/share";
stateHome = "${homedir}/.local/state";
userDirs = {
enable = true;
setSessionVariables = true;
};
userDirs.enable = true;
configFile."mimeapps.list".force = true;
+2 -2
View File
@@ -3,11 +3,11 @@
options.my.desktop.browser.default = {
command = lib.mkOption {
type = lib.types.str;
default = "zen-beta";
default = "chromium";
};
desktop = lib.mkOption {
type = lib.types.str;
default = "zen-beta.desktop";
default = "chromium-browser.desktop";
};
};
}
+2 -5
View File
@@ -8,12 +8,9 @@ in
};
config = lib.mkIf cfg.enable {
my.hm.programs.firefox = {
enable = true;
configPath = "${config.my.hm.xdg.configHome}/mozilla/firefox";
};
my.hm.programs.firefox.enable = true;
my.persist.homeDirs = [
".config/mozilla"
".mozilla"
];
};
}
+2 -2
View File
@@ -15,7 +15,7 @@ in
config = lib.mkIf cfg.enable {
my.hm.programs.zen-browser = {
enable = true;
nativeMessagingHosts = [ pkgs.master.firefoxpwa ];
nativeMessagingHosts = [ pkgs.firefoxpwa ];
policies = {
# find more options here: https://mozilla.github.io/policy-templates/
DisableAppUpdate = true;
@@ -23,7 +23,7 @@ in
};
};
my.persist.homeDirs = [
".config/zen"
".zen"
];
};
}
+5 -2
View File
@@ -14,13 +14,16 @@ in
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.hmcl
(pkgs.hmcl.overrideAttrs {
postFixup = ''
substituteInPlace $out/share/applications/HMCL.desktop --replace-fail 'Exec=hmcl' 'Exec=sh -c "cd ~/.local/share/hmcl; hmcl"'
'';
})
];
my.persist.homeDirs = [
".minecraft"
".local/share/hmcl"
".hmcl"
];
};
}
-1
View File
@@ -9,7 +9,6 @@ in
config = lib.mkIf cfg.enable {
my.desktop.media = {
cine.enable = true;
mpv.enable = true;
loupe.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 {
nixpkgs.config.permittedInsecurePackages = (
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.hm.home.packages = [ pkgs.splayer ];
my.persist.homeDirs = [
".config/SPlayer"
];
+24 -14
View File
@@ -2,7 +2,6 @@
config,
lib,
pkgs,
impure,
...
}:
let
@@ -14,6 +13,19 @@ in
};
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 = {
stylix = {
enable = true;
@@ -58,7 +70,6 @@ in
};
};
gtk4 = {
theme = null;
extraConfig = {
gtk-decoration-layout = ":none";
gtk-application-prefer-dark-theme = 1;
@@ -69,21 +80,20 @@ in
#QT
qt = {
enable = true;
platformTheme.name = "kde";
style = {
package = with pkgs; [
darkly-qt6
];
name = "Darkly";
};
style.package = with pkgs; [
darkly-qt5
darkly-qt6
];
platformTheme.name = "qtct";
};
xdg.configFile = {
kdeglobals.source = impure.mkImpureLink ./kdeglobals;
plasmarc.text = ''
[Theme]
name=darkly
'';
"qt5ct/qt5ct.conf".source = pkgs.replaceVars ./qtct/qt5ct.conf {
darker = pkgs.libsForQt5.qt5ct + /share/qt5ct/colors/darker.conf;
};
"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
}
+337 -321
View File
@@ -3,7 +3,6 @@
lib,
pkgs,
assets,
impure,
...
}:
let
@@ -11,330 +10,347 @@ let
in
{
config = lib.mkIf config.my.desktop.wm.niri.enable {
my.hm = {
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 = {
focus-follows-mouse = {
enable = true;
max-scroll-amount = "0%";
};
workspace-auto-back-and-forth = true;
};
layout = {
gaps = 23;
center-focused-column = "on-overflow";
always-center-single-column = true;
focus-ring.enable = false;
border = {
enable = true;
width = 4;
inactive.color = "#2e2e3eee";
active.gradient = {
from = "#6186d6ee";
to = "#cba6f7ee";
angle = 180;
relative-to = "workspace-view";
};
};
insert-hint = {
enable = true;
display.color = "rgba(42, 44, 54, 0.5)";
};
preset-column-widths = [
{ proportion = 0.33333; }
{ proportion = 0.4; }
{ proportion = 0.5; }
{ proportion = 0.6; }
{ proportion = 0.66667; }
{ proportion = 0.8; }
];
default-column-width.proportion = 0.8;
background-color = "transparent";
tab-indicator = {
width = 10;
place-within-column = true;
};
};
animations = {
my.hm.programs.niri.settings = {
input = {
focus-follows-mouse = {
enable = true;
slowdown = 1.5;
workspace-switch.kind.spring = {
damping-ratio = 1.0;
stiffness = 1000;
epsilon = 0.0001;
};
max-scroll-amount = "0%";
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
clipboard.disable-primary = true;
layer-rules = [
{
matches = [ { namespace = "^wallpaper$"; } ];
place-within-backdrop = true;
}
];
overview.workspace-shadow.enable = false;
environment.NIXOS_OZONE_WL = "1";
spawn-at-startup = lib.mkBefore (
map (c: { command = c; }) [
(
[
"dbus-update-activation-environment"
"--systemd"
]
++ builtins.attrNames settings.environment
)
[
"${lib.getExe pkgs.swaybg}"
"-m"
"fill"
"-i"
(toString assets.wallpaper)
]
[
"wl-paste"
"--type"
"text"
"--watch"
"cliphist"
"store"
]
[
"wl-paste"
"--type"
"image"
"--watch"
"cliphist"
"store"
]
[
"noctalia-shell"
]
]
);
binds =
let
noctalia =
cmd:
[
"noctalia-shell"
"ipc"
"call"
]
++ (lib.splitString " " cmd);
in
with config.my.hm.lib.niri.actions;
{
"Mod+Return".action.spawn = [
"kitty"
"-1"
];
"Mod+G".action.spawn = [ config.my.desktop.browser.default.command ];
"Mod+E".action.spawn = [ "nautilus" ];
"Mod+R".action.spawn = noctalia "launcher toggle";
"Mod+V".action.spawn = noctalia "launcher clipboard";
"Mod+W".action.spawn = noctalia "launcher windows";
"Ctrl+Alt+Escape".action.spawn = [ "missioncenter" ];
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%+"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%-"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = noctalia "media playPause";
};
"Super+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media next";
};
"Super+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media previous";
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Alt+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"Alt+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Mod+Q".action = close-window;
"Mod+Left".action = focus-column-left;
"Mod+Right".action = focus-column-right;
"Mod+Up".action = focus-window-up;
"Mod+Down".action = focus-window-down;
"Mod+Ctrl+Left".action = move-column-left;
"Mod+Ctrl+Right".action = move-column-right;
"Mod+Ctrl+Up".action = move-window-up;
"Mod+Ctrl+Down".action = move-window-down;
"Mod+Alt+Left".action = consume-or-expel-window-left;
"Mod+Alt+Right".action = consume-or-expel-window-right;
"Mod+Shift+Left".action = focus-monitor-left;
"Mod+Shift+Right".action = focus-monitor-right;
"Mod+Shift+Up".action = focus-monitor-up;
"Mod+Shift+Down".action = focus-monitor-down;
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
"Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
"Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
"Mod+Page_Up".action = focus-workspace-up;
"Mod+Page_Down".action = focus-workspace-down;
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
"Mod+Shift+Page_Up".action = move-workspace-up;
"Mod+Shift+Page_Down".action = move-workspace-down;
"Mod+L".action = switch-preset-column-width;
"Mod+Shift+L".action = reset-window-height;
"Mod+M".action = maximize-column;
"Mod+Shift+M".action = fullscreen-window;
"Mod+C".action = center-column;
"Mod+F".action = toggle-window-floating;
"Mod+H".action = expand-column-to-available-width;
"Mod+T".action = toggle-column-tabbed-display;
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action.screenshot = {
show-pointer = false;
};
# "Ctrl+Alt+A".action = screenshot;
"Print".action.screenshot-screen = {
show-pointer = false;
};
"Alt+Print".action.screenshot-window = [ ];
# "Alt+Print".action = screenshot-window;
"Mod+Shift+E".action = quit;
"Mod+O".action = toggle-overview;
"Super+Tab".action = toggle-overview;
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action = move-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action = move-workspace-up;
};
"Mod+WheelScrollRight" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+WheelScrollLeft" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+WheelScrollRight" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+WheelScrollLeft" = {
cooldown-ms = 150;
action = move-column-left;
};
"Mod+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = move-column-left;
};
}
// lib.attrsets.mergeAttrsList (
map (n: {
"Mod+${toString n}".action.focus-workspace = n;
"Mod+Shift+${toString n}".action.move-column-to-workspace = n;
}) (lib.range 0 9)
);
workspace-auto-back-and-forth = true;
};
layout = {
gaps = 23;
center-focused-column = "always";
always-center-single-column = true;
focus-ring.enable = false;
border = {
enable = true;
width = 4;
inactive.color = "#2e2e3eee";
active.gradient = {
from = "#6186d6ee";
to = "#cba6f7ee";
angle = 180;
relative-to = "workspace-view";
};
};
insert-hint = {
enable = true;
display.color = "rgba(42, 44, 54, 0.5)";
};
preset-column-widths = [
{ proportion = 0.33333; }
{ proportion = 0.4; }
{ proportion = 0.5; }
{ proportion = 0.6; }
{ proportion = 0.66667; }
{ proportion = 0.8; }
];
default-column-width.proportion = 0.8;
background-color = "transparent";
};
animations = {
enable = true;
slowdown = 1.5;
workspace-switch.kind.spring = {
damping-ratio = 1.0;
stiffness = 1000;
epsilon = 0.0001;
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
clipboard.disable-primary = true;
layer-rules = [
{
matches = [ { namespace = "^wallpaper$"; } ];
place-within-backdrop = true;
}
{
matches = [ { namespace = "^waybar$"; } ];
opacity = 0.99;
}
];
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";
spawn-at-startup = lib.mkBefore (
map (c: { command = c; }) [
(
[
"dbus-update-activation-environment"
"--systemd"
]
++ builtins.attrNames settings.environment
)
[
"${lib.getExe pkgs.swaybg}"
"-m"
"fill"
"-i"
(toString assets.wallpaper)
]
[
"wl-paste"
"--type"
"text"
"--watch"
"cliphist"
"store"
]
[
"wl-paste"
"--type"
"image"
"--watch"
"cliphist"
"store"
]
# TODO: Is there a better way?
[
"systemctl"
"restart"
"--user"
"noctalia-shell.service"
]
]
);
binds =
let
noctalia =
cmd:
[
"noctalia-shell"
"ipc"
"call"
]
++ (lib.splitString " " cmd);
in
with config.my.hm.lib.niri.actions;
{
"Ctrl+Alt+T".action.spawn = [
"kitty"
];
"Mod+T".action.spawn = [
"kitty"
];
"Mod+Return".action.spawn = [
"kitty"
];
"Mod+G".action.spawn = [ config.my.desktop.browser.default.command ];
"Mod+E".action.spawn = [ "nautilus" ];
"Mod+R".action.spawn = noctalia "launcher toggle";
"Mod+V".action.spawn = noctalia "launcher clipboard";
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%+"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_SINK@"
"2%-"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = noctalia "media playPause";
};
"Super+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media next";
};
"Super+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = noctalia "media previous";
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Alt+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"+5%"
];
};
"Alt+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"brightnessctl"
"set"
"5%-"
];
};
"Mod+Q".action = close-window;
"Mod+Left".action = focus-column-left;
"Mod+Right".action = focus-column-right;
"Mod+Up".action = focus-window-up;
"Mod+Down".action = focus-window-down;
"Mod+Ctrl+Left".action = move-column-left;
"Mod+Ctrl+Right".action = move-column-right;
"Mod+Ctrl+Up".action = move-window-up;
"Mod+Ctrl+Down".action = move-window-down;
"Mod+Alt+Left".action = consume-or-expel-window-left;
"Mod+Alt+Right".action = consume-or-expel-window-right;
"Mod+Shift+Left".action = focus-monitor-left;
"Mod+Shift+Right".action = focus-monitor-right;
"Mod+Shift+Up".action = focus-monitor-up;
"Mod+Shift+Down".action = focus-monitor-down;
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
"Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
"Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
"Mod+Page_Up".action = focus-workspace-up;
"Mod+Page_Down".action = focus-workspace-down;
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
"Mod+Shift+Page_Up".action = move-workspace-up;
"Mod+Shift+Page_Down".action = move-workspace-down;
"Mod+L".action = switch-preset-column-width;
"Mod+Shift+L".action = reset-window-height;
"Mod+M".action = maximize-column;
"Mod+Shift+M".action = fullscreen-window;
"Mod+C".action = center-column;
"Mod+F".action = toggle-window-floating;
"Mod+H".action = expand-column-to-available-width;
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action.screenshot = [ ];
# "Ctrl+Alt+A".action = screenshot;
"Print".action.screenshot-screen = [ ];
"Alt+Print".action.screenshot-window = [ ];
# "Alt+Print".action = screenshot-window;
"Mod+Shift+E".action = quit;
"Mod+O".action = toggle-overview;
"Super+Tab".action = toggle-overview;
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action = move-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action = move-workspace-up;
};
"Mod+WheelScrollRight" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+WheelScrollLeft" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+WheelScrollRight" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+WheelScrollLeft" = {
cooldown-ms = 150;
action = move-column-left;
};
"Mod+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-column-right;
};
"Mod+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-column-left;
};
"Mod+Ctrl+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = move-column-right;
};
"Mod+Ctrl+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = move-column-left;
};
}
// lib.attrsets.mergeAttrsList (
map (n: {
"Mod+${toString n}".action.focus-workspace = n;
"Mod+Shift+${toString n}".action.move-column-to-workspace = n;
}) (lib.range 0 9)
);
};
};
}
+8 -20
View File
@@ -15,19 +15,14 @@ in
};
config = lib.mkIf cfg.enable {
niri-flake.cache.enable = false;
programs.niri = {
enable = true;
package = pkg;
};
services.displayManager = {
ly = {
sddm = {
enable = true;
settings = {
animation = "matrix";
session_log = ".local/state/ly-session.log";
shell = false;
};
wayland.enable = true;
};
};
@@ -72,7 +67,6 @@ in
brightnessctl
nautilus
mission-center
noctalia-shell
xdg-terminal-exec
@@ -82,24 +76,25 @@ in
programs.noctalia-shell = {
enable = true;
systemd.enable = true;
# modified from official Tokyo-Night theme
colors = {
mError = "#f7768e";
mHover = "#bb9af7";
mOnError = "#16161e";
mOnHover = "#16161e";
mOnPrimary = "#16161e";
mOnSecondary = "#16161e";
mOnSurface = "#c0caf5";
mOnSurfaceVariant = "#9aa5ce";
mOnTertiary = "#16161e";
mOutline = "#353D57";
mOutline = "#565f89";
mPrimary = "#7aa2f7";
mSecondary = "#9a9ef7";
mTertiary = "#bb9af7";
# mSecondary = "#bb9af7";
# mTertiary = "#9ece6a";
mShadow = "#15161e";
mSurface = "#1a1b26";
mSurfaceVariant = "#24283b";
mTertiary = "#bb9af7";
};
settings = {
appLauncher = {
@@ -174,10 +169,6 @@ in
id = "Microphone";
displayMode = "onhover";
}
{
id = "Battery";
hideIfNotDetected = true;
}
];
};
};
@@ -206,10 +197,7 @@ in
];
position = "top_left";
shortcuts = {
left = [
{ id = "Bluetooth"; }
{ id = "Network"; }
];
left = [ { id = "Bluetooth"; } ];
right = [ { id = "Notifications"; } ];
};
};
+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
@@ -115,7 +115,7 @@ in
desktop,
}:
{
"${pkg}-wayland" = final.symlinkJoin {
${pkg} = final.symlinkJoin {
pname = prev.${pkg}.pname;
version = prev.${pkg}.version;
paths = [ prev.${pkg} ];
+1 -1
View File
@@ -17,7 +17,7 @@ in
sshKeyFile = lib.mkOption {
type = lib.types.str;
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";
};
};
+1 -3
View File
@@ -10,9 +10,6 @@
grub.enable = false;
timeout = 0;
};
boot.kernel.sysctl = {
"kernel.printk" = "3 4 1 3";
};
security.pam.loginLimits = [
{
@@ -45,5 +42,6 @@
# Desktop persistence
my.persist = {
enable = lib.mkDefault true;
location = lib.mkDefault "/nix/persist";
};
}
+1
View File
@@ -21,5 +21,6 @@
# Server persistence
my.persist = {
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
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": {
"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"
}
],
"lastmodified": "2026-04-11T11:27:59Z",
"mac": "ENC[AES256_GCM,data:aDtrtC+ZD/XCaq9B0aW7btIdrHVthcJ68+MXIIAzejIbGXbqOkk/o7xOyYGsKsCHkiJP+ppjHKKt8ase5CSieCCsosdOUoPForLEaBhu0y7QTRKMBxKhD+xMlsCgR6djKx42Z4gs3/qjox836JJV8x72HllbtTu/WzwaCR9qt50=,iv:qy2JSu/dSZE2xWmxOtzvGBjcu0BjYNVDdOMm+UDV+CI=,tag:4CfF54eYLtQkeA8X5COyxA==,type:str]",
"lastmodified": "2026-01-30T13:42:20Z",
"mac": "ENC[AES256_GCM,data:xZmGhEqVh5SIcIfaqOSs1YV23QHXachtBx40C+oyasFvUBhqcniuDHcuFQSmzteywC6jH3r91ilppPjWERz6ml5cfHzBdkbirpbWJg5Hqj+yLz3f98tGkAMmZyc/zc6XkM9BbWQI+R3R9bEaFZ95bnzNeno0EwneEM4aGW1ZsKI=,iv:oz197xm93q7aG3utudgMr3nVdS1IcmTxfnhy7Jc1N9o=,tag:Ar4s0Yjb/xApc0YgpikKtg==,type:str]",
"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": {
"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"
}
],
"lastmodified": "2026-04-11T11:27:20Z",
"mac": "ENC[AES256_GCM,data:ShLwbQvfJVDXyhu6Yf1m93BVQ8s39ATOAugtP3iO0dwqJSd1mR7njh+2emoFIIy3Bn7RkgJVcLuuj4oWWZ6v4nPemSrCwwj1hPSMU1EjqRFGjPaHGj8S7KmKldanHpUCXMuEKoCDT5B2ye9kmANAitn6X8GhoWb7NcCvkW4C7pw=,iv:tMv/P24PNioV9Ot8U1avbifGq1EJHkqIpyUX01Q+1uw=,tag:heOlnL+Abjbg8CGQmEmmsA==,type:str]",
"lastmodified": "2026-01-30T13:42:30Z",
"mac": "ENC[AES256_GCM,data:KuB/Zdzy5gKDayUY0YhSNrKMnG1tdzRnxZvsTjj79lYoZzQ/9Tw1mAmn3vBjJx/aZtpXusxN12uxP1vzqFoAOpvbXGTDRv7fhCaq1CSayWSrhddwRlAIaQ6tUAOOu/fcoofTB6KWJNFhhDwn+o5lF48cgp1m7SL+op1NDkXBoK0=,iv:J0jUA9LfBoT1hBgoItqYdM6MmRhamTZCo9/TJKF18ck=,tag:SynvQk7+D83JAikLH4HNSg==,type:str]",
"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": {
"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"
}
],
"lastmodified": "2026-04-11T11:27:37Z",
"mac": "ENC[AES256_GCM,data:b0n/SPZj06qfPOiHvNPw6bmkpka5oqYUL+Hs2X0tLZUsE5QkXvRFq7VxJDakc76EAMBkwjOyHXAAjKx/memZXBwXhUvCpGUNt4lwNxPect5kl3+HHSVAHrmqIH5hccImXNLayBcr4VlRGiXAZwWiS26td1PHq6EzkR1nNCz9nfE=,iv:YO0TqCST3ZkP/2NaBbkAPkHbFCD2kXPMu6ms0ySzAIE=,tag:0BO+AnbEzCUGP2lNW7/31w==,type:str]",
"lastmodified": "2026-01-30T13:42:54Z",
"mac": "ENC[AES256_GCM,data:dRhW2TK8VoeAAgxieq13N9DOpDebn23pzSGVOUR1CREv7xBlQNbbG5oZ8wtOMmVPtYYITsbrP+83Bvc3hAgF+TJ5Q+bUIc79YrpKE4JQpIkF54XWuQS+xr6CQViRu9IkNSAINSDBGC/h7TQJbU+VynUbwTTJWdDwFOZRDCWxlXY=,iv:33D22OwdZ/0p5PTy6iPjoiOOHqMA12NTCYSWSUMTQ6U=,tag:Kal99S7ufV+JsTspWaX7OQ==,type:str]",
"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": {
"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"
}
],
"lastmodified": "2026-04-11T11:27:08Z",
"mac": "ENC[AES256_GCM,data:2wToD3ihDP4FMMcqZk/DPRaZMdscsUKHxcObDKyr+ZV7Dz4/EuLU3gAZEjlqNXqBOjqh7sMf5U3QWSimQ5ZdVE4XAl7GCCbi2UITcTiyot2ZraU264wcQAxhNck2J32zJcAUSOK/3w8s6gCkb/u9HqORMPn/N89eAsO1ZvZ2ikY=,iv:1yw3lTrKRat5J0p1kSjBE64atrUz9XvKzcpZD/ffW2I=,tag:1TWz+U2IhNm9q0IHhUeWQg==,type:str]",
"lastmodified": "2026-01-30T13:42:41Z",
"mac": "ENC[AES256_GCM,data:SRxuYiRBCgdYid5GlYDoPbhPWuNPq2A+ItvIuEg8H2RZPpovbdDaj1wO7Jkioy+s5bbf4d8eha3v7hXOmU8cMJ7VdTfQXbJlYMGvGoW14G3d13lT8pyb1goswatF4U9CkSBDVLyyCARloLQQD4jfrts7kvdif/Z8kikStpvsHw0=,iv:h7pf0aAVAEkw1b0W9aYIEYVdq43tByngFI0z1xw3lqE=,tag:/URMCOLxBWxLdXNDr5e0Ig==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.12.2"
"version": "3.11.0"
}
}
+3 -3
View File
@@ -1,4 +1,4 @@
FRP_SERVER_ADDR=ENC[AES256_GCM,data:sFBlvhOCWwSB/TpQMEJ6h75hLqI=,iv:D31p3jLjU33TRDxoolAxsTLxlPjm2tq0OesNqzNX3t0=,tag:TZGcOt8kGTFQqgHe6mO30g==,type:str]
FRP_SERVER_ADDR=ENC[AES256_GCM,data:i2TPcziuDQaPbNP5Uc8=,iv:t89z80QRyhursVFslsWkCHKrPKTGs1gDin/PuP+UCmI=,tag:DvZdweQp1wckzbpLreOeBw==,type:str]
FRP_AUTH_TOKEN=ENC[AES256_GCM,data:CXFJwOOHEbtn1PI0TQc=,iv:yItYliwZGxZs8YAWksV7BqJP3TUBadxXpf99J5nXR3A=,tag:9earTQfuoLO132UZnTjlWQ==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA3MGVN\nU2NSR2F1R3g0dldCbGtaZGRtRCt3NGg2YnZQTGVDN3RtaEhUMkVzCnJrdzlRSTB4\nVG14KzNXUHlib1RGTy9DVnJwdDRaaTZ5ZGVoWWUvNm9KSncKLS0tIGVpMlQzQ24v\nRVhVVTVSTWNlUVN3L0x0dFJMN3JxODZBTHdIUFJxZEViWjQKv+64wRf+a0Ci4XXp\nesM8zaQXeFPIstdsOJCj8yD5ARZi4kUnhRjRK1/xmjyLmh9h8rZ3QQyUF4uh+Jhi\nQJ0Qkw==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
@@ -6,7 +6,7 @@ sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb2
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyAwZFFW\ncERDSnRiL0dMbmVQMGhDMWNSbXpUVVhXeXJreEVzN2dmNlJpWG5nCmV2OGVUMmZ3\nQjRqdGlnc3FtWVpxbHhnMk9xeW9BVUdoTlFud3RKRHNKcVUKLS0tIHZpbTltYnNk\nZEVqUWlhdmloRGVQU05YMkF5aUdmNExPVysxZm55czdZVEEKWo3hFbF1007tSgYq\nzVK1ycmeQglKDNPS1yVedBoF/gj1L69EmjhiOLMMwAetMINufQQpcFRR88VQlqQp\nMPaXMQ==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_lastmodified=2026-02-09T12:55:51Z
sops_mac=ENC[AES256_GCM,data:QrjmzfIEQJ0jLF1+yTAqeY3xvgTVT9KDpK1ZoAaYwbUf3GHC2jjZOqWdLtteZuHQZ3Dy+hO550cbiAYVnUUCjdDTPz0apmT+dIH0JtEjOeA7SEwpt/bSwbAFLEDPeXdPAInWsWyOLB2MY5SjDCOP54+rhb2CDnwkgTH7iBPw5l8=,iv:5568pH2EZ7xwB3m8O4GrJ8j+/fNrOwhwCqN3qwj1DQ4=,tag:DAyqFr2PJnUP20+IZ54obQ==,type:str]
sops_lastmodified=2026-01-12T13:27:33Z
sops_mac=ENC[AES256_GCM,data:XaYuGlogD+XTZn/S9smZhiEQ1zwIyFjvIpTvbGq6mDNEAETlyqrpPO7mfHVLkWW2ad4p8KswvCpi5RIXv8a7LbZwZgAfR+nUmtVWUyWEYkH50/aRxV+MnZY0r5W9Z2lzqOeecOMCb2IQqYa19lCwewezjGFM7/xkQdRn5GA6FgA=,iv:GvKdzKejgZGJc9JTGM3pogvKvLmQdYe6RlBz7eulYcI=,tag:wPFDLKA2fZA4CYzN9w/mGA==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.11.0
+4 -4
View File
@@ -1,5 +1,5 @@
{
"data": "ENC[AES256_GCM,data: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,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": {
"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"
}
],
"lastmodified": "2026-03-28T07:34:37Z",
"mac": "ENC[AES256_GCM,data:1nPYVk49OM0568l2/8/FiR9B2wy3y1HidpGeXulJwxFrT7DBMv34LP1je1ntsSKWvKdP9+JOPCKjXbSQnBq+RaX0RuU3WtNlQ2rMw/Uehf6hWEZCxzsRX1rA7nKKKzxe/QTf9ovUxe61j4flEjDQ2yT4PxHTehVIbhhiyfocDGg=,iv:FuSmFLs/ZhjhI/zfxjVUK6Nc7x8GHQcDRk8B9/7TQR0=,tag:VgTS38vfMcJjjJXRM0j0dA==,type:str]",
"lastmodified": "2025-11-16T02:29:44Z",
"mac": "ENC[AES256_GCM,data:gWqTwS7NrwChAL1MfZ/AIQyMqfvZ08jiu0irb4L8bvs2ya0imWrK5ZoNfEPFgcnByKphNP8+njZWcIQ48uwQirPX+Nepofdba+GuNLR9S9sd5aW2JM4IyLbDivViKujEdWk1+m+IB4w03QiFQQMDBPSaMDfmJQO+8k+PoopFzWI=,iv:mHt6F5qyqZTRdmoHRgkL8WIWG4gsQWv8wBWtjz6fHmM=,tag:hLr8pIhOK2yIIAMZIHkT7Q==,type:str]",
"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_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_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_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-13T07:43:39Z
sops_mac=ENC[AES256_GCM,data:xZVKnXOP27j7fiFaiTQbKDCYKg2ywPfzqY0TSJK6C28MAANXYqTBSvDKBmrw64bNQrf1hcUNV3nqqVGMjCPDg2NkY4bWYPYpGKMKZEQ0WmMeR5Dudlryi2+ga9f9fG9vs0u8YJGJvMnob2EvfpPKI5tPBiCLc8AC5vCVlxrRvTM=,iv:PqI752mqSn7oZV4vwS/t/whRTUG1GTnYwmLP2GOqHdg=,tag:C4cso3fEjmX9jqEFDWrDIQ==,type:str]
sops_lastmodified=2025-08-22T02:52:07Z
sops_mac=ENC[AES256_GCM,data:ahjIUwIKPUfqTSl704AekBIVTTe8n0YUbMyVKxFSZb5ZoaQ3KRVgWPWCAn9n/Qwpa1oHWvVcqqbTd+wrxqmkpOgFCfg72ZWdPsSbzg6RGcUVHlg5r2b9DE7Pq+qDtgNBVkmdmlCAY2+mQTepXv8fGbWltu6tzdqOvsOBwfSw694=,iv:OJ2M6X23k5LokCrx4Ekz2a5+hUGV66YNjlFBQZdrkSA=,tag:2xjX3CX45kkpYt+skEgKOw==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.12.2
sops_version=3.10.2
+43 -33
View File
@@ -9,50 +9,61 @@ external-controller-cors:
allow-origins:
- 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]
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:
- 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]
server: ENC[AES256_GCM,data:Y5fvB0IJTMLASoZTxGKK47Vy,iv:O7OXDcbN7MlZvXYMgUiaPAUEi+L71kkjNmjuA3yeVp4=,tag:3V0w5k2K247W0VLHP3NG0Q==,type:str]
port: ENC[AES256_GCM,data:wX7PiQ0=,iv:TjP+EpALTY1JvJ3A3D+Y3+2e4WfXCEU1TW0c5Jm5iLs=,tag:MK6Of14YD8286wZMaiU/uw==,type:int]
uuid: ENC[AES256_GCM,data:ctolvO2CZR0rBmygCZ5xJT9z+CXr4tBhPXK/XeZLUQG+B0l4,iv:2kpDYwMRDgOgZZDlT/ubbNGgwziIx66qgQr7AKb1X7M=,tag:lPr7yX309LKCXPXhr9XgCA==,type:str]
tls: ENC[AES256_GCM,data:bzKiJg==,iv:gQCofh2q5oB1gjNPgRfCALO04ELEvzRCwQYjzMzSQEM=,tag:QEqyUd5uYS4QzbG0tL89vw==,type:bool]
servername: ENC[AES256_GCM,data:+qhHvM8+7o8dS5l0hdA=,iv:NE+Il3P11fhhLQ8OT5ExCwWBQROrN/h2iEkVoHGBwh8=,tag:j/M3aX61J0KMWmf7CGt52g==,type:str]
- name: ENC[AES256_GCM,data:524kL2VUV/Zr,iv:up5Map4oTAPmalvdpiZAob4wrxMAPu9w3Nk8VclDPOI=,tag:9FKxdoiHzUI9LBpt9QOy4g==,type:str]
type: ENC[AES256_GCM,data:C7hjfARP,iv:r+5/qimlashka+qMjrtlsOEMBFuN8/4SDrzzW/WM+KE=,tag:VVpvomQxVFxh/GTRW59p6g==,type:str]
server: ENC[AES256_GCM,data:UlqxHe1H1J1OH4Ld,iv:um1xP8HAqMTv8sqZewFBFaIoKq5MaVqultx7q9A9v4A=,tag:gGR1Uxwcap2gZYBmPuG76A==,type:str]
port: ENC[AES256_GCM,data:x46frQ==,iv:y3ZtVJQP3q08duFGUXSH5xLo9Q6GZmGvhmCKzNiztfE=,tag:2k6WGrK1wGa4QwOYJHnwkw==,type:int]
password: ENC[AES256_GCM,data:SoxJyZJLwxRQoErQ1ZHObnM=,iv:YVDRtTb0P15vA67ZUQgCBX1s16iqjrtG0oodE9RPDMI=,tag:zsKj2mwEWwDtJ9QGtbix2g==,type:str]
sni: ENC[AES256_GCM,data:rkDSKvEwqgNZE4Yh,iv:Nfi9j5/IKygbSDgBAvAzHrqEYFMQPXjdI3aKHNiFdFs=,tag:N7MZw4nUOGlo4RIo08DAmA==,type:str]
skip-cert-verify: ENC[AES256_GCM,data:uea1ExU=,iv:z7oRGpeLjzXA1RB5E3ucJu/bPo110v81AFR+4dDQYwA=,tag:AsorLzyJfwJNsJShlXQBtw==,type:bool]
alpn:
- ENC[AES256_GCM,data:bG8=,iv:7UIRMQ7KGnZUPvfFMGLcworWFQFdd9toCasEeg/IEco=,tag:QwkRWsGXBGxODKIasUqXuA==,type:str]
- name: ENC[AES256_GCM,data:xaDTRcazw8v4yIfIXg==,iv:oH0Rq1OBLYY32EipIUv0mjIKjq/ybJergz/BIHknJDk=,tag:Qk8LoifCjYvaYWEWytfZAg==,type:str]
type: ENC[AES256_GCM,data:82CKWRU=,iv:MmoXN4hqcC2BE93Tfex3swEj50XK6jmjLIWAyRs8WRI=,tag:faiVNIHjq0fRMLiiJoWamg==,type:str]
server: ENC[AES256_GCM,data:xPCnWkVYwD2Ty0IzUJPvY6U=,iv:Vz2QPfHSsVc3jVWj4hPNkMl2zCAvQgb9UdmMTEjdLHM=,tag:Ym1vSk7J5Zfi5UAVoCNq7Q==,type:str]
port: ENC[AES256_GCM,data:x46frQ==,iv:y3ZtVJQP3q08duFGUXSH5xLo9Q6GZmGvhmCKzNiztfE=,tag:2k6WGrK1wGa4QwOYJHnwkw==,type:int]
udp: ENC[AES256_GCM,data:8iM4vQ==,iv:5nefyZ4vsEhp1/XwUbmXKnIIcxEtd5SohSQ873OgOkQ=,tag:iz+362f4UOcJyphLB5tSww==,type:bool]
uuid: ENC[AES256_GCM,data:VetgP1G1uk96GkbkSfjxSEm95IInxRqntOBiwF0CmMXMpIzY,iv:Kzh8gb6Lu3yiy5wXIUBOy/U2m4apjeFbLu5sKBwGWUc=,tag:y4LGosvnP8ndmyUQ/MMHTg==,type:str]
flow: ENC[AES256_GCM,data:vHCtuVUj2yIKxyizOXTuyQ==,iv:+shc6Vge0B6xo4+2vW7QdO7k/Jh9w8Fu1zMSusgbiEs=,tag:2KSP/SBjp8ytO2pfBAKVVg==,type:str]
client-fingerprint: ENC[AES256_GCM,data:88kICBNA,iv:i3h8X0hpUeezcEiRd2nbrjVGZ6NLHH7Ka50bRFoIwEo=,tag:OFkRfXxPWYX+eXoVnCLGpQ==,type:str]
skip-cert-verify: ENC[AES256_GCM,data:SKLBC3I=,iv:3YVYwUL1TkF1Q2jP8POxTXj9P32snbnQKU9QNdQRNOE=,tag:vtelcGHAUrMqNttYVk8JZA==,type:bool]
tls: ENC[AES256_GCM,data:bzKiJg==,iv:gQCofh2q5oB1gjNPgRfCALO04ELEvzRCwQYjzMzSQEM=,tag:QEqyUd5uYS4QzbG0tL89vw==,type:bool]
servername: ENC[AES256_GCM,data:MnvMN8il4yFs0w==,iv:LXpx+PWbHboJebeW/9fWg1Pcbqbwli47AsKM6+3BYKE=,tag:jZxyCkjpospSIM/6nXfmMA==,type:str]
alpn:
- ENC[AES256_GCM,data:bG8=,iv:7UIRMQ7KGnZUPvfFMGLcworWFQFdd9toCasEeg/IEco=,tag:QwkRWsGXBGxODKIasUqXuA==,type:str]
- ENC[AES256_GCM,data:pOVgMomF7xs=,iv:KfTzpFOCBb6TLGs3ONHKbN7xSroiiqNYxgh+OLc2+OA=,tag:c54xKm85/lQC6MYUiYmz5A==,type:str]
reality-opts:
public-key: ENC[AES256_GCM,data:njlpWUGKonBXtEo7KiNKsjiwmq9ia3MulDG2HCCtcBrGtHO1w1OzRoI07A==,iv:kXR0X8BEYSU3O8vSJ2d12Ckl+kD6c1tI7UHCAIyfTto=,tag:4Pwk3MEKu7yJf1LKl1C9oA==,type:str]
ws-opts: {}
http-opts: {}
grpc-opts: {}
network: ENC[AES256_GCM,data:8I3g,iv:mspjQ+Py5SRWATFhMFJ/f4gfWi1eN4564vdExupMUPo=,tag:9kUBTuI7A14GgJvDJHXK9Q==,type:str]
public-key: ENC[AES256_GCM,data:msJSCf4irU8nGMZqSNU9sbZXD8bvJKvGXgPNGbGWZr1Ss3p1FWT7EuDwNg==,iv:EZzHRBuAni9/CYD1pBhq7xmjCG3bsH+MvaYtv63UYnA=,tag:+3AM644/OO3sIDMXQMypyg==,type:str]
short-id: ENC[AES256_GCM,data:ERSoFfp8UlRBJr/6CRUgWQ==,iv:sWuK6zVbT2gNGDuhl981aXmg/IUenLH9Xk+EUsGbL6o=,tag:qTNB3XYJudknkQUgJA/mow==,type:str]
- name: ENC[AES256_GCM,data:zKRNc9xfDgCx8Yxpp0I=,iv:plmHDReDGfVCz1i7QlN/Oo+5hhME2mw0il+LdgE+pN4=,tag:BtXj8qG5UeAYMAbcWSRnaQ==,type:str]
type: ENC[AES256_GCM,data:C7hjfARP,iv:r+5/qimlashka+qMjrtlsOEMBFuN8/4SDrzzW/WM+KE=,tag:VVpvomQxVFxh/GTRW59p6g==,type:str]
server: ENC[AES256_GCM,data:xPCnWkVYwD2Ty0IzUJPvY6U=,iv:Vz2QPfHSsVc3jVWj4hPNkMl2zCAvQgb9UdmMTEjdLHM=,tag:Ym1vSk7J5Zfi5UAVoCNq7Q==,type:str]
port: ENC[AES256_GCM,data:x46frQ==,iv:y3ZtVJQP3q08duFGUXSH5xLo9Q6GZmGvhmCKzNiztfE=,tag:2k6WGrK1wGa4QwOYJHnwkw==,type:int]
password: ENC[AES256_GCM,data:SoxJyZJLwxRQoErQ1ZHObnM=,iv:YVDRtTb0P15vA67ZUQgCBX1s16iqjrtG0oodE9RPDMI=,tag:zsKj2mwEWwDtJ9QGtbix2g==,type:str]
sni: ENC[AES256_GCM,data:+PlKKl8N73CiANmWYnMLQDI=,iv:NizAQl+xLuvJHVpGfzrJLNa1b+B7q2SbIHpLjdoUjfY=,tag:tdNPsIgMO1s3CRggRm+gpA==,type:str]
skip-cert-verify: ENC[AES256_GCM,data:uea1ExU=,iv:z7oRGpeLjzXA1RB5E3ucJu/bPo110v81AFR+4dDQYwA=,tag:AsorLzyJfwJNsJShlXQBtw==,type:bool]
alpn:
- ENC[AES256_GCM,data:bG8=,iv:7UIRMQ7KGnZUPvfFMGLcworWFQFdd9toCasEeg/IEco=,tag:QwkRWsGXBGxODKIasUqXuA==,type:str]
proxy-providers:
ykk:
type: ENC[AES256_GCM,data:QFH7Kw==,iv:uBwdbVdfQuoJ4wIxT9lAS/b0C167IwJbD2KhrB1VzkM=,tag:8ogC9VITAOfeMtceq20Wtw==,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]
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:
- 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]
proxies:
- ENC[AES256_GCM,data:iRhpnZDi+EB1zehjdNo=,iv:t0Q6014Ho/bFORPEFI4HT6gKb7h6U7jC1V9rMWh493s=,tag:ePnnKndYJ2UYZ9LtkdOjlg==,type:str]
- ENC[AES256_GCM,data:fDVLR0770KUF,iv:prsxi6lcvMg6I+2o4rlAYuepUdjAPHpFfzCf6LyXj3M=,tag:rXMVs9EBOq5oCWHYtesZXQ==,type:str]
- ENC[AES256_GCM,data:BRdw54Oq5sR2SaFXg/U=,iv:yS1MyVh0MjxctPFE1D3wrbVqztJJM8JP0gtkqgu6zdY=,tag:rJtHptplT8ZiPOXiQqvr8w==,type:str]
- ENC[AES256_GCM,data:TW/0H4P69iT9PGWLWw==,iv:5yDS6O1IAY9XGc/uKF25tcWxYZ1AWTd525W2bOCN0Ko=,tag:SMb3TVPjADtYCMtDzlfibA==,type:str]
use:
- ENC[AES256_GCM,data:hGy4,iv:LS9vHmdXUMuy0Na1z5YMpB+vEwKFLfezsftdWcWjTv0=,tag:lueXcksvaPC1yKpHT2zUag==,type:str]
rules:
- ENC[AES256_GCM,data:S6yGMmG4UUUWE04=,iv:FWz0kNu0hhQ+PyIMSxl6NPX/INluS7jAO9loX+E+jlE=,tag:tXK35hMiYDU8X0yl+0PRuQ==,type:str]
sops:
age:
- enc: |
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA2Zkxs
SGh4Ulp1UklKeDU4M2xtcWZPRGxNUGt4eGVQQ29LcjB2YXJGRVVnClZLSmRra0Qx
@@ -61,8 +72,8 @@ sops:
sF/MYEjihktzyngzTLyuwHYYb1xqTbpmjFNzJfbW7+LJJSPQ9cu6W7DcZGIsSe0e
VNycmg==
-----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
- enc: |
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBXVDk0
bjZhMnRabGVLSHorWmRhd0NjTVF2VTZQVzZSeEkzK3c5WDBoM0FVCjB3cTB6NTYy
@@ -71,8 +82,8 @@ sops:
dQxXWnexmkLryDtddH1sdCdQh8e9D1IJFjuOD8JzsyWToWFuo01Cw27VLWGAGnFD
GZpp+A==
-----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
- enc: |
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBzVFdr
TTNiK1VIRUk4N2l6TDcyMmw5U3ZRMzR2QlMrcy9XL1RLOCtzNUdnCnkvRmdmZ2gz
@@ -81,8 +92,7 @@ sops:
FY9SvbPWXVTcJiLwjpcD8tSMdqcTHTJXcLAWSCjyFF91ihBUanQ7TcdXvZTGfdY0
pOoJmg==
-----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
lastmodified: "2026-06-13T04:02:11Z"
mac: ENC[AES256_GCM,data:VWXa9HdGyPBkLQH5lgqioYbd3VxvL7PjuwiHrX353W+G4Lu/VaMHAz9AFN495cLyCm1dB4VwC773JmLNYKbCzHswQr4tpkp7AlIhvCbt+S0L5ZXLxOlVMd0vONGxQOQHhxQnRONXg9K2i7rTfTjGBdY1o/alswfsNrhaL7g/+OY=,iv:Z3MNOcTU9AQ8yEQgYxXKmv+09cXbF1RalrNXqJYTGUs=,tag:K1kps0EPAKYbQradY02yOQ==,type:str]
lastmodified: "2025-11-22T14:17:52Z"
mac: ENC[AES256_GCM,data:QM1+5nj2tr9jv7gzFtH5eccn0UC0kMPK+mPu57E3UbPdyQoewFyBIbtkDddmr31VQmZjU9RB0vwtvY/lOgZuxRGQckckgj0ZZhdPAT7lKaUxLatnzOs8U3JWGWsc3vUM22yB5L5kuJSc/dx8XoXnSvL2gTwcygpxts4dLoj4Te8=,iv:B96/ZkxnaiwhQrSqUUsVHyzZ7tW6mDTeF0/tCCRdSUs=,tag:RVMKX8pOfpgVt/7Qn2smhg==,type:str]
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]
extend-exclude = [
"secrets"