Compare commits
1 Commits
master
..
832733f931
| Author | SHA1 | Date | |
|---|---|---|---|
|
832733f931
|
Generated
+462
-385
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,6 @@
|
|||||||
nixos-wsl = {
|
nixos-wsl = {
|
||||||
url = "github:nix-community/NixOS-WSL";
|
url = "github:nix-community/NixOS-WSL";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.flake-compat.follows = "flake-compat";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Flake organization tools
|
# Flake organization tools
|
||||||
@@ -41,11 +40,11 @@
|
|||||||
|
|
||||||
# Useful modules
|
# Useful modules
|
||||||
# keep-sorted start block=yes
|
# keep-sorted start block=yes
|
||||||
impermanence = {
|
catppuccin = {
|
||||||
url = "github:nix-community/impermanence";
|
url = "github:catppuccin/nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.home-manager.follows = "home-manager";
|
|
||||||
};
|
};
|
||||||
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
# TODO: sops-nix: remove pr patch once merged
|
# TODO: sops-nix: remove pr patch once merged
|
||||||
# https://github.com/Mic92/sops-nix/pull/779
|
# https://github.com/Mic92/sops-nix/pull/779
|
||||||
sops-nix = {
|
sops-nix = {
|
||||||
@@ -55,8 +54,6 @@
|
|||||||
stylix = {
|
stylix = {
|
||||||
url = "github:danth/stylix";
|
url = "github:danth/stylix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.systems.follows = "systems";
|
|
||||||
};
|
};
|
||||||
system76-scheduler-niri = {
|
system76-scheduler-niri = {
|
||||||
url = "github:Kirottu/system76-scheduler-niri";
|
url = "github:Kirottu/system76-scheduler-niri";
|
||||||
@@ -69,9 +66,6 @@
|
|||||||
angrr = {
|
angrr = {
|
||||||
url = "github:linyinfeng/angrr";
|
url = "github:linyinfeng/angrr";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.flake-compat.follows = "flake-compat";
|
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.treefmt-nix.follows = "treefmt";
|
|
||||||
};
|
};
|
||||||
darkly = {
|
darkly = {
|
||||||
url = "github:Bali10050/Darkly";
|
url = "github:Bali10050/Darkly";
|
||||||
@@ -84,35 +78,14 @@
|
|||||||
go-musicfox = {
|
go-musicfox = {
|
||||||
url = "github:imxyy1soope1/go-musicfox";
|
url = "github:imxyy1soope1/go-musicfox";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.devenv.follows = "devenv";
|
|
||||||
inputs.nix2container.inputs.flake-utils.follows = "flake-utils";
|
|
||||||
};
|
|
||||||
llm-agents = {
|
|
||||||
url = "github:numtide/llm-agents.nix";
|
|
||||||
# Not followed intentionally (binary cache)
|
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.systems.follows = "systems";
|
|
||||||
inputs.treefmt-nix.follows = "treefmt";
|
|
||||||
};
|
|
||||||
niri = {
|
|
||||||
url = "github:sodiboo/niri-flake";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.nixpkgs-stable.follows = "nixpkgs-stable";
|
|
||||||
};
|
};
|
||||||
|
niri.url = "github:sodiboo/niri-flake";
|
||||||
noctalia = {
|
noctalia = {
|
||||||
url = "github:noctalia-dev/noctalia-shell/v4.7.5";
|
url = "github:noctalia-dev/noctalia-shell/v4.3.3";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.noctalia-qs.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.noctalia-qs.inputs.systems.follows = "systems";
|
|
||||||
inputs.noctalia-qs.inputs.treefmt-nix.follows = "treefmt";
|
|
||||||
};
|
|
||||||
zen = {
|
|
||||||
url = "github:0xc000022070/zen-browser-flake";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.home-manager.follows = "home-manager";
|
|
||||||
};
|
};
|
||||||
|
zen.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
zen.url = "github:0xc000022070/zen-browser-flake";
|
||||||
# keep-sorted end
|
# keep-sorted end
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
@@ -125,20 +98,6 @@
|
|||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
my-templates.url = "git+https://git.imxyy.top/imxyy1soope1/flake-templates";
|
my-templates.url = "git+https://git.imxyy.top/imxyy1soope1/flake-templates";
|
||||||
|
|
||||||
# Flattened indirect dependencies
|
|
||||||
flake-compat.url = "github:edolstra/flake-compat";
|
|
||||||
flake-utils = {
|
|
||||||
url = "github:numtide/flake-utils";
|
|
||||||
inputs.systems.follows = "systems";
|
|
||||||
};
|
|
||||||
systems.url = "github:nix-systems/default";
|
|
||||||
devenv = {
|
|
||||||
url = "github:cachix/devenv";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.flake-compat.follows = "flake-compat";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ in
|
|||||||
# Upstream modules
|
# Upstream modules
|
||||||
# keep-sorted start
|
# keep-sorted start
|
||||||
inputs.angrr.nixosModules.angrr
|
inputs.angrr.nixosModules.angrr
|
||||||
|
inputs.catppuccin.nixosModules.catppuccin
|
||||||
inputs.home-manager.nixosModules.default
|
inputs.home-manager.nixosModules.default
|
||||||
inputs.impermanence.nixosModules.impermanence
|
inputs.impermanence.nixosModules.impermanence
|
||||||
inputs.niri.nixosModules.niri
|
inputs.niri.nixosModules.niri
|
||||||
|
|||||||
+1
-1
@@ -14,11 +14,11 @@
|
|||||||
inputs.fenix.overlays.default
|
inputs.fenix.overlays.default
|
||||||
inputs.angrr.overlays.default
|
inputs.angrr.overlays.default
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
|
darkly-qt5 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt5;
|
||||||
darkly-qt6 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt6;
|
darkly-qt6 = inputs.darkly.packages.${final.stdenv.hostPlatform.system}.darkly-qt6;
|
||||||
|
|
||||||
noctalia-shell = inputs.noctalia.packages.${final.stdenv.hostPlatform.system}.default;
|
noctalia-shell = inputs.noctalia.packages.${final.stdenv.hostPlatform.system}.default;
|
||||||
})
|
})
|
||||||
inputs.llm-agents.overlays.shared-nixpkgs
|
|
||||||
];
|
];
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
flake.setNixPath = false;
|
flake.setNixPath = false;
|
||||||
|
|||||||
@@ -7,13 +7,12 @@
|
|||||||
};
|
};
|
||||||
virtualisation.oci-containers.containers = {
|
virtualisation.oci-containers.containers = {
|
||||||
tuwunel = {
|
tuwunel = {
|
||||||
image = "ghcr.io/matrix-construct/tuwunel:latest";
|
image = "jevolk/tuwunel:latest";
|
||||||
volumes = [
|
volumes = [
|
||||||
"tuwunel_db:/var/lib/tuwunel"
|
"tuwunel_db:/var/lib/tuwunel"
|
||||||
];
|
];
|
||||||
ports = [ "6167:6167" ];
|
ports = [ "6167:6167" ];
|
||||||
networks = [ "podman" ];
|
networks = [ "podman" ];
|
||||||
extraOptions = [ "--pids-limit=-1" ];
|
|
||||||
environment = {
|
environment = {
|
||||||
TUWUNEL_SERVER_NAME = "mtx.eflx.top";
|
TUWUNEL_SERVER_NAME = "mtx.eflx.top";
|
||||||
TUWUNEL_PORT = "6167";
|
TUWUNEL_PORT = "6167";
|
||||||
|
|||||||
@@ -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}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -31,12 +31,13 @@ in
|
|||||||
services.btrfs.autoScrub.enable = true;
|
services.btrfs.autoScrub.enable = true;
|
||||||
networking.hostId = "10ca95b4";
|
networking.hostId = "10ca95b4";
|
||||||
|
|
||||||
my.persist.btrfs = {
|
fileSystems."/" = {
|
||||||
device = btrfs;
|
device = btrfs;
|
||||||
mountPoint = "/nix/persist";
|
fsType = "btrfs";
|
||||||
persistSubvol = "persist";
|
options = [
|
||||||
rootSubvol = "root";
|
"compress=zstd"
|
||||||
zstdCompress = true;
|
"subvol=root"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/nix" = {
|
fileSystems."/nix" = {
|
||||||
@@ -48,6 +49,42 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my.persist.location = "/nix/persist";
|
||||||
|
fileSystems."/nix/persist" = {
|
||||||
|
device = btrfs;
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"compress=zstd"
|
||||||
|
"subvol=persist"
|
||||||
|
];
|
||||||
|
neededForBoot = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.postDeviceCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount ${btrfs} /btrfs_tmp
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
device = "/dev/disk/by-uuid/32AA-2998";
|
device = "/dev/disk/by-uuid/32AA-2998";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
coding.langs.lua.enable = true;
|
coding.langs.lua.enable = true;
|
||||||
coding.langs.rust.enable = true;
|
coding.langs.rust.enable = true;
|
||||||
coding.langs.js.enable = true;
|
coding.langs.js.enable = true;
|
||||||
coding.agents.enable = true;
|
|
||||||
fonts.enable = lib.mkForce false;
|
fonts.enable = lib.mkForce false;
|
||||||
persist = {
|
persist = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -95,12 +95,7 @@
|
|||||||
displayname_template = "{displayname} (Telegram)";
|
displayname_template = "{displayname} (Telegram)";
|
||||||
permissions = {
|
permissions = {
|
||||||
"@imxyy_soope_:imxyy.top" = "admin";
|
"@imxyy_soope_:imxyy.top" = "admin";
|
||||||
"*" = "relaybot";
|
|
||||||
};
|
};
|
||||||
relaybot = {
|
|
||||||
whitelist = [ ];
|
|
||||||
};
|
|
||||||
relay_user_distinguishers = [ ];
|
|
||||||
};
|
};
|
||||||
telegram = {
|
telegram = {
|
||||||
# borrowed from https://github.com/telegramdesktop/tdesktop/blob/9bdc19e2fd4d497c8f403891848383a88faadc25/snap/snapcraft.yaml#L134-L135
|
# borrowed from https://github.com/telegramdesktop/tdesktop/blob/9bdc19e2fd4d497c8f403891848383a88faadc25/snap/snapcraft.yaml#L134-L135
|
||||||
@@ -109,35 +104,4 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sops.secrets.mautrix-signal = {
|
|
||||||
sopsFile = secrets.mautrix-signal;
|
|
||||||
restartUnits = [ "mautrix-signal.service" ];
|
|
||||||
format = "dotenv";
|
|
||||||
owner = "mautrix-signal";
|
|
||||||
group = "mautrix-signal";
|
|
||||||
};
|
|
||||||
services.mautrix-signal = {
|
|
||||||
enable = true;
|
|
||||||
environmentFile = config.sops.secrets.mautrix-signal.path;
|
|
||||||
settings = {
|
|
||||||
homeserver = {
|
|
||||||
address = "http://127.0.0.1:8094";
|
|
||||||
domain = "imxyy.top";
|
|
||||||
};
|
|
||||||
appservice = {
|
|
||||||
address = "http://127.0.0.1:8102";
|
|
||||||
hostname = "127.0.0.1";
|
|
||||||
port = 8102;
|
|
||||||
bot_username = "signalbot";
|
|
||||||
};
|
|
||||||
bridge = {
|
|
||||||
username_template = "signal_{userid}";
|
|
||||||
alias_template = "signal_{groupname}";
|
|
||||||
displayname_template = "{displayname} (Signal)";
|
|
||||||
permissions = {
|
|
||||||
"@imxyy_soope_:imxyy.top" = "admin";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -290,6 +290,21 @@
|
|||||||
customDomains = [ "coder.imxyy.top" ];
|
customDomains = [ "coder.imxyy.top" ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "grafana-http";
|
||||||
|
type = "http";
|
||||||
|
localIP = "127.0.0.1";
|
||||||
|
localPort = 80;
|
||||||
|
customDomains = [ "grafana.imxyy.top" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "grafana-https";
|
||||||
|
type = "https";
|
||||||
|
localIP = "127.0.0.1";
|
||||||
|
localPort = 443;
|
||||||
|
customDomains = [ "grafana.imxyy.top" ];
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name = "siyuan-http";
|
name = "siyuan-http";
|
||||||
type = "http";
|
type = "http";
|
||||||
@@ -484,6 +499,7 @@
|
|||||||
"git"
|
"git"
|
||||||
"vault"
|
"vault"
|
||||||
"coder"
|
"coder"
|
||||||
|
"grafana"
|
||||||
"matrix"
|
"matrix"
|
||||||
"note"
|
"note"
|
||||||
"oidc"
|
"oidc"
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ in
|
|||||||
|
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.nextcloud33;
|
package = pkgs.nextcloud32;
|
||||||
extraApps = {
|
extraApps = {
|
||||||
inherit (pkgs.nextcloud33.packages.apps)
|
inherit (pkgs.nextcloud32.packages.apps)
|
||||||
bookmarks
|
bookmarks
|
||||||
previewgenerator
|
previewgenerator
|
||||||
spreed
|
spreed
|
||||||
@@ -73,12 +73,6 @@ in
|
|||||||
"pm.max_spare_servers" = "12";
|
"pm.max_spare_servers" = "12";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Fixes `The following x-forwarded-for header was received by Nextcloud: "10.88.0.1"`
|
|
||||||
systemd.services.nextcloud-notify_push = {
|
|
||||||
environment = {
|
|
||||||
NEXTCLOUD_URL = lib.mkForce "http://127.0.0.1:8084";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services.nginx.virtualHosts."nextcloud.imxyy.top" = {
|
services.nginx.virtualHosts."nextcloud.imxyy.top" = {
|
||||||
listen = [
|
listen = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,12 +30,13 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
my.persist.btrfs = {
|
fileSystems."/" = {
|
||||||
device = btrfs;
|
device = btrfs;
|
||||||
mountPoint = "/nix/persist";
|
fsType = "btrfs";
|
||||||
persistSubvol = "persist";
|
options = [
|
||||||
rootSubvol = "root";
|
"compress=zstd"
|
||||||
zstdCompress = true;
|
"subvol=root"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/nix" = {
|
fileSystems."/nix" = {
|
||||||
@@ -47,6 +48,42 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my.persist.location = "/nix/persist";
|
||||||
|
fileSystems."/nix/persist" = {
|
||||||
|
device = btrfs;
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"compress=zstd"
|
||||||
|
"subvol=persist"
|
||||||
|
];
|
||||||
|
neededForBoot = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.postDeviceCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount ${btrfs} /btrfs_tmp
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
device = "/dev/disk/by-uuid/96D3-93B0";
|
device = "/dev/disk/by-uuid/96D3-93B0";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
anki
|
anki
|
||||||
|
|
||||||
ayugram-desktop
|
ayugram-desktop
|
||||||
signal-desktop-wayland
|
signal-desktop
|
||||||
element-desktop
|
element-desktop
|
||||||
fractal
|
fractal
|
||||||
qq-wayland
|
qq
|
||||||
wechat
|
wechat
|
||||||
|
|
||||||
gnome-clocks
|
gnome-clocks
|
||||||
@@ -131,6 +131,13 @@
|
|||||||
".config/dconf"
|
".config/dconf"
|
||||||
".config/pip"
|
".config/pip"
|
||||||
".config/sunshine"
|
".config/sunshine"
|
||||||
|
|
||||||
|
".gemini"
|
||||||
|
".claude"
|
||||||
|
".claude-code-router"
|
||||||
|
];
|
||||||
|
homeFiles = [
|
||||||
|
".claude.json"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,12 +37,13 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
my.persist.btrfs = {
|
fileSystems."/" = {
|
||||||
device = btrfs;
|
device = btrfs;
|
||||||
mountPoint = "/nix/persist";
|
fsType = "btrfs";
|
||||||
persistSubvol = "persistent";
|
options = [
|
||||||
rootSubvol = "root";
|
"compress=zstd"
|
||||||
zstdCompress = true;
|
"subvol=root"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/nix" = {
|
fileSystems."/nix" = {
|
||||||
@@ -51,6 +52,17 @@ in
|
|||||||
options = [ "compress=zstd" ];
|
options = [ "compress=zstd" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my.persist.location = "/nix/persist";
|
||||||
|
fileSystems."/nix/persist" = {
|
||||||
|
device = btrfs;
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"compress=zstd"
|
||||||
|
"subvol=persistent"
|
||||||
|
];
|
||||||
|
neededForBoot = true;
|
||||||
|
};
|
||||||
|
|
||||||
fileSystems."/swap" = {
|
fileSystems."/swap" = {
|
||||||
device = btrfs;
|
device = btrfs;
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
@@ -61,6 +73,31 @@ in
|
|||||||
neededForBoot = true;
|
neededForBoot = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
boot.initrd.postDeviceCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount ${btrfs} /btrfs_tmp
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
device = "/dev/disk/by-uuid/B7DC-E9AC";
|
device = "/dev/disk/by-uuid/B7DC-E9AC";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
anki
|
anki
|
||||||
|
|
||||||
ayugram-desktop
|
ayugram-desktop
|
||||||
signal-desktop-wayland
|
signal-desktop
|
||||||
element-desktop
|
element-desktop
|
||||||
fractal
|
fractal
|
||||||
qq-wayland
|
qq
|
||||||
wechat
|
wechat
|
||||||
|
|
||||||
gnome-clocks
|
gnome-clocks
|
||||||
@@ -78,6 +78,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
my = {
|
my = {
|
||||||
|
autologin = {
|
||||||
|
enable = true;
|
||||||
|
user = username;
|
||||||
|
ttys = [ 6 ];
|
||||||
|
};
|
||||||
|
|
||||||
gpg.enable = true;
|
gpg.enable = true;
|
||||||
cli.all.enable = true;
|
cli.all.enable = true;
|
||||||
coding.all.enable = true;
|
coding.all.enable = true;
|
||||||
@@ -155,6 +161,13 @@
|
|||||||
".config/dconf"
|
".config/dconf"
|
||||||
".config/pip"
|
".config/pip"
|
||||||
".config/sunshine"
|
".config/sunshine"
|
||||||
|
|
||||||
|
".gemini"
|
||||||
|
".claude"
|
||||||
|
".claude-code-router"
|
||||||
|
];
|
||||||
|
homeFiles = [
|
||||||
|
".claude.json"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,9 +35,6 @@ in
|
|||||||
pciutils
|
pciutils
|
||||||
usbutils
|
usbutils
|
||||||
|
|
||||||
dust
|
|
||||||
dysk
|
|
||||||
|
|
||||||
lsof
|
lsof
|
||||||
|
|
||||||
nmap
|
nmap
|
||||||
@@ -67,12 +64,12 @@ in
|
|||||||
aria2
|
aria2
|
||||||
bat
|
bat
|
||||||
comma
|
comma
|
||||||
fastfetch.minimal
|
fastfetch
|
||||||
fd
|
fd
|
||||||
fzf
|
fzf
|
||||||
jq
|
|
||||||
keep-sorted
|
keep-sorted
|
||||||
lsd
|
lsd
|
||||||
|
neofetch
|
||||||
ripgrep
|
ripgrep
|
||||||
socat
|
socat
|
||||||
typos
|
typos
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ in
|
|||||||
zsh.enable = true;
|
zsh.enable = true;
|
||||||
fish.enable = true;
|
fish.enable = true;
|
||||||
starship.enable = true;
|
starship.enable = true;
|
||||||
carapace.enable = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -32,7 +32,7 @@ in
|
|||||||
shellAliases = {
|
shellAliases = {
|
||||||
la = "lsd -lah";
|
la = "lsd -lah";
|
||||||
ls = "lsd";
|
ls = "lsd";
|
||||||
svim = "sudoedit";
|
svim = "doasedit";
|
||||||
nf = "fastfetch";
|
nf = "fastfetch";
|
||||||
};
|
};
|
||||||
interactiveShellInit = lib.mkBefore ''
|
interactiveShellInit = lib.mkBefore ''
|
||||||
|
|||||||
@@ -11,44 +11,17 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
|
{
|
||||||
|
my.cli.shell.starship.format = lib.mkOrder 0 [ "$all" ];
|
||||||
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
my.hm = {
|
my.hm = {
|
||||||
programs.starship = {
|
programs.starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = lib.recursiveUpdate (with builtins; fromTOML (readFile ./starship-preset.toml)) {
|
settings = lib.recursiveUpdate (with builtins; fromTOML (readFile ./starship-preset.toml)) {
|
||||||
add_newline = false;
|
add_newline = false;
|
||||||
command_timeout = 2000;
|
|
||||||
nix_shell.disabled = true;
|
nix_shell.disabled = true;
|
||||||
format =
|
format = lib.concatStringsSep "" cfg.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);
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ in
|
|||||||
};
|
};
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
ls = "lsd";
|
ls = "lsd";
|
||||||
svim = "sudoedit";
|
svim = "doasedit";
|
||||||
nf = "fastfetch";
|
nf = "fastfetch";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
+14
-16
@@ -22,22 +22,20 @@ in
|
|||||||
forward_env = [ "PATH" ];
|
forward_env = [ "PATH" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
programs.starship = {
|
# https://github.com/starship/starship/discussions/7260
|
||||||
settings = {
|
# programs.starship = {
|
||||||
custom.shpool = {
|
# settings = {
|
||||||
description = "Display current shpool session name";
|
# custom.shpool = {
|
||||||
when = ''test -n "$SHPOOL_SESSION_NAME"'';
|
# description = "Display current shpool session name";
|
||||||
command = "echo $SHPOOL_SESSION_NAME";
|
# when = ''test -n "$SHPOOL_SESSION_NAME"'';
|
||||||
symbol = " ";
|
# command = "echo $SHPOOL_SESSION_NAME";
|
||||||
style = "fg:#dea584";
|
# symbol = " ";
|
||||||
format = "[$symbol \\[$output\\] ]($style)";
|
# style = "fg:#dea584";
|
||||||
};
|
# format = "[$symbol $output]($style)";
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
|
# };
|
||||||
};
|
};
|
||||||
my.cli.shell.starship.format = [
|
# my.cli.shell.starship.format = [ "$starship$character" ];
|
||||||
"\${custom.shpool}"
|
|
||||||
"$character"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-16
@@ -34,22 +34,20 @@ in
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
programs.starship = {
|
# https://github.com/starship/starship/discussions/7260
|
||||||
settings = {
|
# programs.starship = {
|
||||||
custom.tmux = {
|
# settings = {
|
||||||
description = "Display current tmux session name";
|
# custom.tmux = {
|
||||||
when = ''test -n "$TMUX"'';
|
# description = "Display current tmux session name";
|
||||||
command = "tmux display-message -p '#S'";
|
# when = ''test -n "$TMUX"'';
|
||||||
symbol = " ";
|
# command = "tmux display-message -p '#S'";
|
||||||
style = "bold green";
|
# symbol = " ";
|
||||||
format = "[$symbol \\[$output\\] ]($style)";
|
# style = "bold green";
|
||||||
};
|
# format = "[$symbol $output]($style)";
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
|
# };
|
||||||
};
|
};
|
||||||
my.cli.shell.starship.format = [
|
# my.cli.shell.starship.format = [ "$tmux$character" ];
|
||||||
"\${custom.tmux}"
|
|
||||||
"$character"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,6 @@ in
|
|||||||
my.coding = {
|
my.coding = {
|
||||||
editor.all.enable = true;
|
editor.all.enable = true;
|
||||||
langs.all.enable = true;
|
langs.all.enable = true;
|
||||||
agents.enable = true;
|
|
||||||
misc.enable = true;
|
misc.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
# workaround
|
|
||||||
environment.sessionVariables.EDITOR = "nvim";
|
|
||||||
my.hm = {
|
my.hm = {
|
||||||
xdg.configFile."nvim".source = impure.mkImpureLink ./nvim;
|
xdg.configFile."nvim".source = impure.mkImpureLink ./nvim;
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
@@ -24,25 +22,12 @@ in
|
|||||||
viAlias = true;
|
viAlias = true;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
vimdiffAlias = true;
|
vimdiffAlias = true;
|
||||||
withPython3 = false;
|
|
||||||
withRuby = false;
|
|
||||||
sideloadInitLua = true;
|
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
# treesitter
|
gcc # treesitter
|
||||||
tree-sitter
|
|
||||||
gnutar
|
|
||||||
curl
|
|
||||||
gcc
|
|
||||||
|
|
||||||
ripgrep # telescope
|
ripgrep # telescope
|
||||||
|
|
||||||
# language servers
|
|
||||||
vscode-json-languageserver
|
|
||||||
vscode-langservers-extracted
|
|
||||||
typos-lsp
|
typos-lsp
|
||||||
|
|
||||||
# render-markdown.nvim
|
|
||||||
python3Packages.pylatexenc
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,43 +1,43 @@
|
|||||||
{
|
{
|
||||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||||
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
|
"LuaSnip": { "branch": "master", "commit": "dae4f5aaa3574bd0c2b9dd20fb9542a02c10471c" },
|
||||||
"blink.cmp": { "branch": "main", "commit": "3db7326f54b73df4789e0fd6274bedda33975fea" },
|
"blink.cmp": { "branch": "main", "commit": "f9e855c4d96e1264f7c818844f5a0166ad48c212" },
|
||||||
"blink.lib": { "branch": "main", "commit": "b127d48bf8e9ac9cf41f6e0fbead317503f76558" },
|
|
||||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||||
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" },
|
"gitsigns.nvim": { "branch": "main", "commit": "1ce96a464fdbc24208e24c117e2021794259005d" },
|
||||||
"glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" },
|
"glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" },
|
||||||
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
|
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
|
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||||
"inlay-hints.nvim": { "branch": "master", "commit": "297a65ab9543eb0850c1a55df4bb89e22cfec504" },
|
"inlay-hints.nvim": { "branch": "master", "commit": "11be32be3761c6263df2311afb6baa0de0863967" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
|
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
||||||
"leap.nvim": { "branch": "main", "commit": "d3641f9aa86e7460b14d9f4479e7454f88cc6b2d" },
|
"leap.nvim": { "branch": "main", "commit": "d7316deae68dc93d6957020cdda6d7bb399218fb" },
|
||||||
"lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" },
|
"lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
|
"mini.nvim": { "branch": "main", "commit": "8c40d95931cbe6138391af9180e59439ed2e69df" },
|
||||||
"mini.nvim": { "branch": "main", "commit": "b2ac6522f7a54b475d9fad711b938eefc6d3d0a6" },
|
"neo-tree.nvim": { "branch": "main", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
|
||||||
"neo-tree.nvim": { "branch": "main", "commit": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61" },
|
|
||||||
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
||||||
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
"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-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-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
|
||||||
|
"nvim-osc52": { "branch": "main", "commit": "04cfaba1865ae5c53b6f887c3ca7304973824fb2" },
|
||||||
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
|
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
|
||||||
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
|
"nvim-tree.lua": { "branch": "master", "commit": "037d89e60fb01a6c11a48a19540253b8c72a3c32" },
|
||||||
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
|
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
|
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||||
"outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" },
|
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
|
||||||
"pest.vim": { "branch": "master", "commit": "60cae7ea1beb644ed40081a3ec213ea9061aba09" },
|
"outline.nvim": { "branch": "main", "commit": "ead1820d49c8e79ce89cab1c2c318981b695c9d2" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
"pest.vim": { "branch": "master", "commit": "7cfcb43f824e74d13dfe631359fff2ec23836a77" },
|
||||||
"rainbow-delimiters.nvim": { "branch": "master", "commit": "a798325b7f36acc62741d1029930a7b96d4dd4bf" },
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||||
"registers": { "branch": "main", "commit": "c217f8f369e0886776cda6c94eab839b30a8940d" },
|
"rainbow-delimiters.nvim": { "branch": "master", "commit": "d6b802552cbe7d643a3b6b31f419c248d1f1e220" },
|
||||||
"render-markdown.nvim": { "branch": "main", "commit": "5adf0895310c1904e5abfaad40a2baad7fe44a07" },
|
"render-markdown.nvim": { "branch": "main", "commit": "48b4175dbca8439d30c1f52231cbe5a712c8f9d9" },
|
||||||
"ripgrep": { "branch": "master", "commit": "82313cf95849bfe425109ad9506a52154879b1b1" },
|
"ripgrep": { "branch": "master", "commit": "0a88cccd5188074de96f54a4b6b44a63971ac157" },
|
||||||
"telescope.nvim": { "branch": "master", "commit": "7d324792b7943e4aa16ad007212e6acc6f9fe335" },
|
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
|
||||||
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
|
"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" },
|
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
|
||||||
"vim-floaterm": { "branch": "master", "commit": "bb4ba7952e906408e1f83b215f55ffe57efcade6" },
|
"vim-floaterm": { "branch": "master", "commit": "a11b930f55324e9b05e2ef16511fe713f1b456a7" },
|
||||||
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" }
|
"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("i", "<pagedown>", string.rep("<down>", 9), opt)
|
||||||
|
|
||||||
keymap.set("n", "<leader>ww", ":w<CR>", opt)
|
keymap.set("n", "<leader>ww", ":w<CR>", opt)
|
||||||
|
keymap.set("n", "<leader>so", ":so<CR>", opt)
|
||||||
keymap.set("n", "<leader>qq", ":q<CR>", opt)
|
keymap.set("n", "<leader>qq", ":q<CR>", opt)
|
||||||
keymap.set("n", "<leader>qa", ":qa<CR>", opt)
|
keymap.set("n", "<leader>qa", ":qa<CR>", opt)
|
||||||
keymap.set("n", "<leader>c", function()
|
keymap.set("n", "<leader>c", function()
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ opt.shiftwidth = 4
|
|||||||
opt.softtabstop = 4
|
opt.softtabstop = 4
|
||||||
opt.expandtab = true
|
opt.expandtab = true
|
||||||
opt.autoindent = true
|
opt.autoindent = true
|
||||||
opt.smartindent = true
|
|
||||||
|
|
||||||
-- Linenumber setting
|
-- Linenumber setting
|
||||||
opt.number = true
|
opt.number = true
|
||||||
@@ -23,7 +22,6 @@ opt.smartcase = true
|
|||||||
opt.termguicolors = true
|
opt.termguicolors = true
|
||||||
opt.signcolumn = "yes"
|
opt.signcolumn = "yes"
|
||||||
opt.colorcolumn = "110"
|
opt.colorcolumn = "110"
|
||||||
opt.textwidth = 110
|
|
||||||
opt.scrolloff = 8
|
opt.scrolloff = 8
|
||||||
opt.sidescrolloff = 8
|
opt.sidescrolloff = 8
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
--- @type ibl.config
|
||||||
M = {
|
M = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
@@ -11,7 +7,6 @@ M = {
|
|||||||
scope = {
|
scope = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
show_start = false,
|
show_start = false,
|
||||||
highlight = vim.g.rainbow_delimiters.highlight,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,14 +75,11 @@ local servers = {
|
|||||||
biome = {},
|
biome = {},
|
||||||
clangd = {},
|
clangd = {},
|
||||||
cssls = {},
|
cssls = {},
|
||||||
eslint = {},
|
|
||||||
gopls = {},
|
gopls = {},
|
||||||
html = {},
|
html = {},
|
||||||
java_language_server = {},
|
java_language_server = {},
|
||||||
jsonls = {},
|
jsonls = {},
|
||||||
pyrefly = {},
|
pyright = {},
|
||||||
-- taplo = {},
|
|
||||||
tombi = {},
|
|
||||||
ts_ls = {},
|
ts_ls = {},
|
||||||
typos_lsp = {},
|
typos_lsp = {},
|
||||||
-- keep-sorted end
|
-- 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 = {
|
local plugins = {
|
||||||
{
|
{
|
||||||
"folke/tokyonight.nvim",
|
"folke/tokyonight.nvim",
|
||||||
|
lazy = false,
|
||||||
priority = 1000,
|
priority = 1000,
|
||||||
config = function()
|
config = function()
|
||||||
vim.cmd.colorscheme("tokyonight-storm")
|
vim.cmd.colorscheme("tokyonight-storm")
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"nvim-lualine/lualine.nvim",
|
'echasnovski/mini.nvim',
|
||||||
dependencies = { { "nvim-tree/nvim-web-devicons", lazy = true } },
|
|
||||||
config = function()
|
|
||||||
require("lualine").setup(require("plugins.lualine"))
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"echasnovski/mini.nvim",
|
|
||||||
config = function()
|
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
|
-- Better Around/Inside textobjects
|
||||||
--
|
--
|
||||||
-- Examples:
|
-- Examples:
|
||||||
-- - va) - [V]isually select [A]round [)]paren
|
-- - va) - [V]isually select [A]round [)]paren
|
||||||
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
|
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
|
||||||
-- - ci' - [C]hange [I]nside [']quote
|
-- - 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.)
|
-- Add/delete/replace surroundings (brackets, quotes, etc.)
|
||||||
--
|
--
|
||||||
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
|
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
|
||||||
-- - sd' - [S]urround [D]elete [']quotes
|
-- - sd' - [S]urround [D]elete [']quotes
|
||||||
-- - sr)' - [S]urround [R]eplace [)] [']
|
-- - sr)' - [S]urround [R]eplace [)] [']
|
||||||
require("mini.surround").setup()
|
require('mini.surround').setup()
|
||||||
|
|
||||||
-- ... and there is more!
|
-- ... and there is more!
|
||||||
-- Check out: https://github.com/echasnovski/mini.nvim
|
-- Check out: https://github.com/echasnovski/mini.nvim
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"nvim-neo-tree/neo-tree.nvim",
|
'nvim-neo-tree/neo-tree.nvim',
|
||||||
version = "*",
|
version = '*',
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"nvim-lua/plenary.nvim",
|
'nvim-lua/plenary.nvim',
|
||||||
"nvim-tree/nvim-web-devicons",
|
'nvim-tree/nvim-web-devicons',
|
||||||
"MunifTanjim/nui.nvim",
|
'MunifTanjim/nui.nvim',
|
||||||
},
|
},
|
||||||
cmd = "Neotree",
|
cmd = 'Neotree',
|
||||||
keys = {
|
keys = {
|
||||||
{ "\\", ":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 },
|
{ '<leader>e', ':Neotree reveal toggle<CR>', desc = 'Toggle NeoTree', silent = true },
|
||||||
},
|
},
|
||||||
--- @type neotree.Config
|
--- @type neotree.Config
|
||||||
opts = {
|
opts = {
|
||||||
@@ -71,7 +80,7 @@ local plugins = {
|
|||||||
window = {
|
window = {
|
||||||
width = 30,
|
width = 30,
|
||||||
mappings = {
|
mappings = {
|
||||||
["\\"] = "close_window",
|
['\\'] = 'close_window',
|
||||||
["<leader>e"] = "close_window",
|
["<leader>e"] = "close_window",
|
||||||
["<c-]>"] = "set_root",
|
["<c-]>"] = "set_root",
|
||||||
},
|
},
|
||||||
@@ -81,38 +90,39 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"nvim-treesitter/nvim-treesitter",
|
"nvim-treesitter/nvim-treesitter",
|
||||||
branch = "main",
|
lazy = false,
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
branch = "main",
|
"nushell/tree-sitter-nu",
|
||||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require("nvim-treesitter").setup(require("plugins.treesitter"))
|
require("nvim-treesitter.configs").setup(require("plugins.treesitter"))
|
||||||
end,
|
end,
|
||||||
build = ":TSUpdate",
|
build = ":TSUpdate",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
|
url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("plugins.rainbow-delimiters")
|
require("plugins.rainbow-delimiters")
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lukas-reineke/indent-blankline.nvim",
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
dependencies = { "https://gitlab.com/HiPhish/rainbow-delimiters.nvim" },
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("ibl").setup(require("plugins.indent-blankline"))
|
require("ibl").setup(require("plugins.indent-blankline"))
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"norcalli/nvim-colorizer.lua",
|
"norcalli/nvim-colorizer.lua",
|
||||||
|
event = "VeryLazy",
|
||||||
opt = {},
|
opt = {},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"neovim/nvim-lspconfig",
|
"neovim/nvim-lspconfig",
|
||||||
dependencies = { "saghen/blink.cmp" },
|
dependencies = { "saghen/blink.cmp" },
|
||||||
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("plugins.lsp.lspconfig")
|
require("plugins.lsp.lspconfig")
|
||||||
require("plugins.lsp.others")
|
require("plugins.lsp.others")
|
||||||
@@ -174,6 +184,8 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"saghen/blink.cmp",
|
"saghen/blink.cmp",
|
||||||
|
event = "VeryLazy",
|
||||||
|
build = "cargo build --release",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{
|
{
|
||||||
"L3MON4D3/LuaSnip",
|
"L3MON4D3/LuaSnip",
|
||||||
@@ -193,7 +205,6 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"saghen/blink.lib",
|
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require("blink.cmp").setup(require("plugins.cmp.cmp"))
|
require("blink.cmp").setup(require("plugins.cmp.cmp"))
|
||||||
@@ -201,6 +212,7 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"numToStr/Comment.nvim",
|
"numToStr/Comment.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -216,6 +228,7 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lewis6991/gitsigns.nvim",
|
"lewis6991/gitsigns.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("gitsigns").setup(require("plugins.gitsigns"))
|
require("gitsigns").setup(require("plugins.gitsigns"))
|
||||||
end,
|
end,
|
||||||
@@ -254,7 +267,6 @@ local plugins = {
|
|||||||
dependencies = { "tpope/vim-repeat" },
|
dependencies = { "tpope/vim-repeat" },
|
||||||
config = function()
|
config = function()
|
||||||
vim.keymap.set({ "n", "x", "o" }, "s", "<Plug>(leap)")
|
vim.keymap.set({ "n", "x", "o" }, "s", "<Plug>(leap)")
|
||||||
vim.keymap.set({ "n", "x", "o" }, "<leader>s", "<Plug>(leap)")
|
|
||||||
vim.keymap.set("n", "S", "<Plug>(leap-from-window)")
|
vim.keymap.set("n", "S", "<Plug>(leap-from-window)")
|
||||||
-- Exclude whitespace and the middle of alphabetic words from preview:
|
-- Exclude whitespace and the middle of alphabetic words from preview:
|
||||||
-- foobar[baaz] = quux
|
-- foobar[baaz] = quux
|
||||||
@@ -267,31 +279,20 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alexghergh/nvim-tmux-navigation",
|
"alexghergh/nvim-tmux-navigation",
|
||||||
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("nvim-tmux-navigation").setup(require("plugins.tmuxnav"))
|
require("nvim-tmux-navigation").setup(require("plugins.tmuxnav"))
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"MeanderingProgrammer/render-markdown.nvim",
|
"MeanderingProgrammer/render-markdown.nvim",
|
||||||
dependencies = {
|
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
},
|
|
||||||
event = "BufEnter *.md",
|
event = "BufEnter *.md",
|
||||||
--- @type render.md.UserConfig
|
opts = {},
|
||||||
opts = {
|
|
||||||
completions = {
|
|
||||||
blink = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
lsp = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"folke/noice.nvim",
|
"folke/noice.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"MunifTanjim/nui.nvim",
|
"MunifTanjim/nui.nvim",
|
||||||
"rcarriga/nvim-notify",
|
"rcarriga/nvim-notify",
|
||||||
@@ -306,14 +307,31 @@ local plugins = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"voldikss/vim-floaterm",
|
"voldikss/vim-floaterm",
|
||||||
|
event = "VeryLazy",
|
||||||
config = function()
|
config = function()
|
||||||
require("plugins.floaterm")
|
require("plugins.floaterm")
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"folke/todo-comments.nvim",
|
"folke/todo-comments.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ojroques/nvim-osc52",
|
||||||
|
event = "VeryLazy",
|
||||||
|
config = function()
|
||||||
|
require("osc52").setup({
|
||||||
|
tmux_passthrough = true,
|
||||||
|
})
|
||||||
|
local function copy()
|
||||||
|
if vim.v.event.operator == "y" and vim.v.event.regname == "+" then
|
||||||
|
require("osc52").copy_register("+")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.api.nvim_create_autocmd("TextYankPost", { callback = copy })
|
||||||
|
end,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pest-parser/pest.vim",
|
"pest-parser/pest.vim",
|
||||||
ft = "pest",
|
ft = "pest",
|
||||||
@@ -322,19 +340,9 @@ local plugins = {
|
|||||||
|
|
||||||
{
|
{
|
||||||
"nmac427/guess-indent.nvim",
|
"nmac427/guess-indent.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"https://codeberg.org/fosk/registers.nvim",
|
|
||||||
cmd = "Registers",
|
|
||||||
config = true,
|
|
||||||
keys = {
|
|
||||||
{ '"', mode = { "n", "v" } },
|
|
||||||
{ "<C-R>", mode = "i" },
|
|
||||||
},
|
|
||||||
name = "registers",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
require("lazy").setup(plugins, {})
|
require("lazy").setup(plugins, {})
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
--- @type TSConfig
|
--- @type TSConfig
|
||||||
M = {
|
M = {
|
||||||
install_dir = vim.fn.stdpath("data") .. "/site",
|
auto_install = true,
|
||||||
|
parser_install_dir = "$HOME/.local/share/nvim/lazy/nvim-treesitter",
|
||||||
|
sync_install = true,
|
||||||
|
modules = {},
|
||||||
|
ignore_install = {},
|
||||||
|
ensure_installed = {},
|
||||||
|
|
||||||
|
highlight = { enable = true },
|
||||||
|
indent = { enable = true },
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.filetype.add({
|
||||||
callback = function()
|
pattern = {
|
||||||
-- Enable treesitter highlighting and disable regex syntax
|
[".*/hypr/.*%.conf"] = "hyprlang",
|
||||||
pcall(vim.treesitter.start)
|
[".*%.hl"] = "hyprlang",
|
||||||
-- Enable treesitter-based indentation
|
},
|
||||||
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
|
||||||
end,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
@@ -13,8 +13,11 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
|
my.hm.programs.vscode.enable = true;
|
||||||
my.hm = {
|
my.hm = {
|
||||||
programs.vscodium.enable = true;
|
programs.vscode = {
|
||||||
|
package = pkgs.vscodium;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
my.persist.homeDirs = [
|
my.persist.homeDirs = [
|
||||||
".config/VSCodium"
|
".config/VSCodium"
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ in
|
|||||||
java.enable = true;
|
java.enable = true;
|
||||||
qml.enable = true;
|
qml.enable = true;
|
||||||
typst.enable = true;
|
typst.enable = true;
|
||||||
toml.enable = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ in
|
|||||||
my.hm.home.packages = with pkgs; [
|
my.hm.home.packages = with pkgs; [
|
||||||
go
|
go
|
||||||
gotools
|
gotools
|
||||||
(lib.hiPrio gopls)
|
gopls
|
||||||
];
|
];
|
||||||
my.persist.homeDirs = [
|
my.persist.homeDirs = [
|
||||||
"go"
|
"go"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ in
|
|||||||
pnpm
|
pnpm
|
||||||
typescript
|
typescript
|
||||||
|
|
||||||
typescript-language-server
|
nodePackages.typescript-language-server
|
||||||
vue-language-server
|
vue-language-server
|
||||||
|
|
||||||
biome
|
biome
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ in
|
|||||||
my.hm.home.packages = with pkgs; [
|
my.hm.home.packages = with pkgs; [
|
||||||
python3
|
python3
|
||||||
uv
|
uv
|
||||||
pyrefly
|
pyright
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -21,7 +21,6 @@ in
|
|||||||
];
|
];
|
||||||
programs.direnv = {
|
programs.direnv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
nix-direnv.enable = true;
|
|
||||||
config = {
|
config = {
|
||||||
global = {
|
global = {
|
||||||
warn_timeout = 0;
|
warn_timeout = 0;
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
/target
|
|
||||||
Generated
-2105
File diff suppressed because it is too large
Load Diff
@@ -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"] }
|
|
||||||
@@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -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 })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
@@ -32,103 +32,23 @@ in
|
|||||||
nh
|
nh
|
||||||
];
|
];
|
||||||
|
|
||||||
environment.etc =
|
environment.etc = lib.mapAttrs' (name: value: {
|
||||||
(lib.mapAttrs' (name: value: {
|
name = "nix/path/${name}";
|
||||||
name = "nix/path/${name}";
|
value.source = value.flake;
|
||||||
value.source = value.flake;
|
}) config.nix.registry;
|
||||||
}) config.nix.registry)
|
|
||||||
// {
|
|
||||||
"nix/nix-racer.toml".source = (pkgs.formats.toml { }).generate "nix-racer.toml" {
|
|
||||||
listen = "127.0.0.1:2048";
|
|
||||||
substituters = [
|
|
||||||
# {
|
|
||||||
# penalty = 0;
|
|
||||||
# url = "https://mirror.sjtu.edu.cn/nix-channels/store";
|
|
||||||
# }
|
|
||||||
{
|
|
||||||
penalty = 0;
|
|
||||||
url = "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
penalty = 50;
|
|
||||||
url = "https://mirrors.ustc.edu.cn/nix-channels/store";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
penalty = 0;
|
|
||||||
url = "https://nix-community.cachix.org";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
penalty = 0;
|
|
||||||
url = "https://cache.numtide.com";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
penalty = 100;
|
|
||||||
url = "https://cache.nixos.org";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.nix-racer = {
|
|
||||||
description = "Nix substituter proxy with parallel cache queries and latency-aware selection";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${lib.getExe (pkgs.callPackage ./nix-racer/_package.nix { })}";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 5;
|
|
||||||
|
|
||||||
DynamicUser = true;
|
|
||||||
CapabilityBoundingSet = [ "" ];
|
|
||||||
DeviceAllow = "";
|
|
||||||
LockPersonality = true;
|
|
||||||
MemoryDenyWriteExecute = true;
|
|
||||||
NoNewPrivileges = true;
|
|
||||||
PrivateDevices = true;
|
|
||||||
PrivateTmp = true;
|
|
||||||
ProtectClock = true;
|
|
||||||
ProtectControlGroups = true;
|
|
||||||
ProtectHome = true;
|
|
||||||
ProtectHostname = true;
|
|
||||||
ProtectKernelLogs = true;
|
|
||||||
ProtectKernelModules = true;
|
|
||||||
ProtectKernelTunables = true;
|
|
||||||
ProtectSystem = "strict";
|
|
||||||
RestrictAddressFamilies = [
|
|
||||||
"AF_INET"
|
|
||||||
"AF_INET6"
|
|
||||||
];
|
|
||||||
RestrictNamespaces = true;
|
|
||||||
RestrictRealtime = true;
|
|
||||||
RestrictSUIDSGID = true;
|
|
||||||
SystemCallArchitectures = "native";
|
|
||||||
SystemCallFilter = [
|
|
||||||
"@system-service"
|
|
||||||
"~@resources"
|
|
||||||
"~@privileged"
|
|
||||||
];
|
|
||||||
UMask = "0077";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
experimental-features = "nix-command flakes pipe-operators";
|
experimental-features = "nix-command flakes pipe-operators";
|
||||||
substituters = lib.mkForce [
|
substituters = [
|
||||||
"http://127.0.0.1:2048"
|
|
||||||
"https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
|
"https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
|
||||||
"https://cache.numtide.com"
|
"https://mirror.sjtu.edu.cn/nix-channels/store"
|
||||||
"https://cache.nixos.org"
|
"https://mirrors.ustc.edu.cn/nix-channels/store"
|
||||||
|
"https://nix-community.cachix.org"
|
||||||
# "https://mirrors.ustc.edu.cn/nix-channels/store"
|
"https://cache.garnix.io"
|
||||||
# "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
|
|
||||||
# "https://nix-community.cachix.org"
|
|
||||||
];
|
];
|
||||||
trusted-public-keys = [
|
trusted-public-keys = [
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
"niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g="
|
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
|
||||||
];
|
];
|
||||||
download-buffer-size = 536870912; # 512 MiB
|
download-buffer-size = 536870912; # 512 MiB
|
||||||
warn-dirty = false;
|
warn-dirty = false;
|
||||||
@@ -172,33 +92,7 @@ in
|
|||||||
services.angrr = {
|
services.angrr = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
temporary-root-policies = {
|
period = "1month";
|
||||||
direnv = {
|
|
||||||
path-regex = "/\\.direnv/";
|
|
||||||
period = "14d";
|
|
||||||
};
|
|
||||||
result = {
|
|
||||||
path-regex = "/result[^/]*$";
|
|
||||||
period = "3d";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
profile-policies = {
|
|
||||||
system = {
|
|
||||||
profile-paths = [ "/nix/var/nix/profiles/system" ];
|
|
||||||
keep-since = "14d";
|
|
||||||
keep-latest-n = 5;
|
|
||||||
keep-booted-system = true;
|
|
||||||
keep-current-system = true;
|
|
||||||
};
|
|
||||||
user = {
|
|
||||||
profile-paths = [
|
|
||||||
"~/.local/state/nix/profiles/profile"
|
|
||||||
"/nix/var/nix/profiles/per-user/root/profile"
|
|
||||||
];
|
|
||||||
keep-since = "14d";
|
|
||||||
keep-latest-n = 5;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
+10
-87
@@ -10,35 +10,15 @@ in
|
|||||||
{
|
{
|
||||||
options.my.persist = {
|
options.my.persist = {
|
||||||
enable = lib.mkEnableOption "persist";
|
enable = lib.mkEnableOption "persist";
|
||||||
btrfs = lib.mkOption {
|
location = lib.mkOption {
|
||||||
type = lib.types.submodule (
|
type = lib.types.str;
|
||||||
{ ... }:
|
default = "/nix/persist";
|
||||||
{
|
example = lib.literalExpression ''
|
||||||
options = {
|
"/persistent"
|
||||||
device = lib.mkOption {
|
'';
|
||||||
type = lib.types.str;
|
description = lib.mdDoc ''
|
||||||
};
|
Persistent location
|
||||||
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"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
homeDirs = lib.mkOption {
|
homeDirs = lib.mkOption {
|
||||||
default = [ ];
|
default = [ ];
|
||||||
@@ -89,65 +69,8 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
fileSystems.${cfg.btrfs.mountPoint} = {
|
|
||||||
device = cfg.btrfs.device;
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [
|
|
||||||
"subvol=${cfg.btrfs.persistSubvol}"
|
|
||||||
]
|
|
||||||
++ lib.optionals cfg.btrfs.zstdCompress [
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
neededForBoot = true;
|
|
||||||
};
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = cfg.btrfs.device;
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [
|
|
||||||
"subvol=${cfg.btrfs.rootSubvol}"
|
|
||||||
]
|
|
||||||
++ lib.optionals cfg.btrfs.zstdCompress [
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
boot.initrd.systemd.services.wipe-root = {
|
|
||||||
description = "Rollback BTRFS rootfs";
|
|
||||||
wantedBy = [ "initrd.target" ];
|
|
||||||
before = [ "sysroot.mount" ];
|
|
||||||
after = [ "initrd-root-device.target" ];
|
|
||||||
unitConfig.DefaultDependencies = "no";
|
|
||||||
serviceConfig.Type = "oneshot";
|
|
||||||
|
|
||||||
script = ''
|
|
||||||
mkdir -p /btrfs_tmp
|
|
||||||
mount ${cfg.btrfs.device} /btrfs_tmp
|
|
||||||
mkdir -p /btrfs_tmp/old_roots
|
|
||||||
|
|
||||||
if [ -e /btrfs_tmp/root ]; then
|
|
||||||
timestamp=$(date -d "@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%d_%H:%M:%S" 2>/dev/null || date "+%Y-%m-%d_%H:%M:%S")
|
|
||||||
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
|
||||||
fi
|
|
||||||
|
|
||||||
delete_subvolume_recursively() {
|
|
||||||
IFS=$(printf '\n')
|
|
||||||
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
|
||||||
delete_subvolume_recursively "/btrfs_tmp/$i"
|
|
||||||
done
|
|
||||||
btrfs subvolume delete "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +14); do
|
|
||||||
delete_subvolume_recursively "$i"
|
|
||||||
done
|
|
||||||
|
|
||||||
btrfs subvolume create /btrfs_tmp/${cfg.btrfs.rootSubvol}
|
|
||||||
umount /btrfs_tmp
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.fuse.userAllowOther = true;
|
programs.fuse.userAllowOther = true;
|
||||||
environment.persistence.${cfg.btrfs.mountPoint} = {
|
environment.persistence.${cfg.location} = {
|
||||||
hideMounts = true;
|
hideMounts = true;
|
||||||
directories = cfg.nixosDirs;
|
directories = cfg.nixosDirs;
|
||||||
files = cfg.nixosFiles;
|
files = cfg.nixosFiles;
|
||||||
|
|||||||
+55
-7
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
hostname,
|
|
||||||
username,
|
username,
|
||||||
userdesc,
|
userdesc,
|
||||||
secrets,
|
secrets,
|
||||||
@@ -39,18 +38,67 @@ in
|
|||||||
};
|
};
|
||||||
users.users.root.hashedPasswordFile = lib.mkDefault config.sops.secrets.imxyy-nix-hashed-password.path;
|
users.users.root.hashedPasswordFile = lib.mkDefault config.sops.secrets.imxyy-nix-hashed-password.path;
|
||||||
|
|
||||||
security.sudo = {
|
security.sudo.enable = false;
|
||||||
|
security.doas = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraRules = [
|
extraRules = [
|
||||||
{
|
{
|
||||||
users = [ "imxyy" ];
|
users = [ username ];
|
||||||
commands = lib.singleton {
|
noPass = true;
|
||||||
command = "ALL";
|
keepEnv = true;
|
||||||
options = lib.optionals (hostname == "imxyy-nix") [ "NOPASSWD" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
environment.shellAliases = {
|
||||||
|
sudoedit = "doasedit";
|
||||||
|
};
|
||||||
|
environment.systemPackages = [
|
||||||
|
(pkgs.writeShellScriptBin "sudo" ''exec doas "$@"'')
|
||||||
|
(pkgs.writeShellScriptBin "doasedit" ''
|
||||||
|
if [ -n "''${2}" ]; then
|
||||||
|
printf 'Expected only one argument\n'
|
||||||
|
exit 1
|
||||||
|
elif [ -z "''${1}" ]; then
|
||||||
|
printf 'No file path provided\n'
|
||||||
|
exit 1
|
||||||
|
elif [ "$(id -u)" -eq 0 ]; then
|
||||||
|
printf 'Cannot be run as root\n'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
tempdir="$(mktemp -d)"
|
||||||
|
|
||||||
|
trap 'rm -rf $tempdir' EXIT
|
||||||
|
srcfile="$(doas realpath "$1")"
|
||||||
|
|
||||||
|
if doas [ -f "$srcfile" ]; then
|
||||||
|
doas cp -a "$srcfile" "$tempdir"/file
|
||||||
|
doas cp -a "$tempdir"/file "$tempdir"/edit
|
||||||
|
|
||||||
|
# make sure that the file is editable by user
|
||||||
|
doas chown "$USER":"$USER" "$tempdir"/edit
|
||||||
|
chmod 600 "$tempdir"/edit
|
||||||
|
else
|
||||||
|
# create file with "regular" system permissions (root:root 644)
|
||||||
|
touch "$tempdir"/file
|
||||||
|
doas chown root:root "$tempdir"/file
|
||||||
|
fi
|
||||||
|
|
||||||
|
$EDITOR "$tempdir"/edit
|
||||||
|
|
||||||
|
doas tee "$tempdir"/file 1>/dev/null < "$tempdir"/edit
|
||||||
|
|
||||||
|
if doas cmp -s "$tempdir/file" "$srcfile"; then
|
||||||
|
printf 'Skipping write; no changes.\n'
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
doas mv -f "$tempdir"/file "$srcfile"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
nix.settings.trusted-users = [
|
nix.settings.trusted-users = [
|
||||||
"root"
|
"root"
|
||||||
|
|||||||
@@ -38,10 +38,7 @@ in
|
|||||||
dataHome = "${homedir}/.local/share";
|
dataHome = "${homedir}/.local/share";
|
||||||
stateHome = "${homedir}/.local/state";
|
stateHome = "${homedir}/.local/state";
|
||||||
|
|
||||||
userDirs = {
|
userDirs.enable = true;
|
||||||
enable = true;
|
|
||||||
setSessionVariables = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
configFile."mimeapps.list".force = true;
|
configFile."mimeapps.list".force = true;
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
options.my.desktop.browser.default = {
|
options.my.desktop.browser.default = {
|
||||||
command = lib.mkOption {
|
command = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "zen-beta";
|
default = "chromium";
|
||||||
};
|
};
|
||||||
desktop = lib.mkOption {
|
desktop = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "zen-beta.desktop";
|
default = "chromium-browser.desktop";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,9 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
my.hm.programs.firefox = {
|
my.hm.programs.firefox.enable = true;
|
||||||
enable = true;
|
|
||||||
configPath = "${config.my.hm.xdg.configHome}/mozilla/firefox";
|
|
||||||
};
|
|
||||||
my.persist.homeDirs = [
|
my.persist.homeDirs = [
|
||||||
".config/mozilla"
|
".mozilla"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ in
|
|||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
my.hm.programs.zen-browser = {
|
my.hm.programs.zen-browser = {
|
||||||
enable = true;
|
enable = true;
|
||||||
nativeMessagingHosts = [ pkgs.master.firefoxpwa ];
|
nativeMessagingHosts = [ pkgs.firefoxpwa ];
|
||||||
policies = {
|
policies = {
|
||||||
# find more options here: https://mozilla.github.io/policy-templates/
|
# find more options here: https://mozilla.github.io/policy-templates/
|
||||||
DisableAppUpdate = true;
|
DisableAppUpdate = true;
|
||||||
@@ -23,7 +23,7 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
my.persist.homeDirs = [
|
my.persist.homeDirs = [
|
||||||
".config/zen"
|
".zen"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,16 @@ in
|
|||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
my.hm.home.packages = [
|
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 = [
|
my.persist.homeDirs = [
|
||||||
".minecraft"
|
".minecraft"
|
||||||
".local/share/hmcl"
|
".local/share/hmcl"
|
||||||
".hmcl"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ in
|
|||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
my.desktop.media = {
|
my.desktop.media = {
|
||||||
cine.enable = true;
|
|
||||||
mpv.enable = true;
|
mpv.enable = true;
|
||||||
loupe.enable = true;
|
loupe.enable = true;
|
||||||
thunderbird.enable = true;
|
thunderbird.enable = true;
|
||||||
|
|||||||
@@ -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 ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -13,23 +13,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
nixpkgs.config.permittedInsecurePackages = (
|
my.hm.home.packages = [ pkgs.splayer ];
|
||||||
lib.warn
|
|
||||||
''
|
|
||||||
SPlayer still using pnpm 10.29.2. Check
|
|
||||||
https://github.com/NixOS/nixpkgs/issues/535580#issuecomment-4809489104
|
|
||||||
''
|
|
||||||
[
|
|
||||||
"pnpm-10.29.2"
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
my.hm.home.packages = [
|
|
||||||
# (pkgs.master.splayer.override {
|
|
||||||
# pnpm_10_29_2 = pkgs.pnpm_10;
|
|
||||||
# })
|
|
||||||
pkgs.splayer
|
|
||||||
];
|
|
||||||
my.persist.homeDirs = [
|
my.persist.homeDirs = [
|
||||||
".config/SPlayer"
|
".config/SPlayer"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
impure,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
@@ -14,6 +13,19 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
|
catppuccin.sddm = {
|
||||||
|
enable = true;
|
||||||
|
font = "Jetbrains Mono";
|
||||||
|
fontSize = "18";
|
||||||
|
};
|
||||||
|
services.displayManager.sddm = {
|
||||||
|
package = pkgs.kdePackages.sddm;
|
||||||
|
settings.Theme = {
|
||||||
|
CursorTheme = "breeze-dark";
|
||||||
|
CursorSize = 24;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
my.hm = {
|
my.hm = {
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -58,7 +70,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
gtk4 = {
|
gtk4 = {
|
||||||
theme = null;
|
|
||||||
extraConfig = {
|
extraConfig = {
|
||||||
gtk-decoration-layout = ":none";
|
gtk-decoration-layout = ":none";
|
||||||
gtk-application-prefer-dark-theme = 1;
|
gtk-application-prefer-dark-theme = 1;
|
||||||
@@ -69,21 +80,20 @@ in
|
|||||||
#QT
|
#QT
|
||||||
qt = {
|
qt = {
|
||||||
enable = true;
|
enable = true;
|
||||||
platformTheme.name = "kde";
|
style.package = with pkgs; [
|
||||||
style = {
|
darkly-qt5
|
||||||
package = with pkgs; [
|
darkly-qt6
|
||||||
darkly-qt6
|
];
|
||||||
];
|
platformTheme.name = "qtct";
|
||||||
name = "Darkly";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.configFile = {
|
xdg.configFile = {
|
||||||
kdeglobals.source = impure.mkImpureLink ./kdeglobals;
|
"qt5ct/qt5ct.conf".source = pkgs.replaceVars ./qtct/qt5ct.conf {
|
||||||
plasmarc.text = ''
|
darker = pkgs.libsForQt5.qt5ct + /share/qt5ct/colors/darker.conf;
|
||||||
[Theme]
|
};
|
||||||
name=darkly
|
"qt6ct/qt6ct.conf".source = pkgs.replaceVars ./qtct/qt6ct.conf {
|
||||||
'';
|
darker = pkgs.qt6Packages.qt6ct + /share/qt6ct/colors/darker.conf;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
@@ -3,7 +3,6 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
assets,
|
assets,
|
||||||
impure,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
@@ -11,330 +10,347 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = lib.mkIf config.my.desktop.wm.niri.enable {
|
config = lib.mkIf config.my.desktop.wm.niri.enable {
|
||||||
my.hm = {
|
my.hm.programs.niri.settings = {
|
||||||
xdg.configFile.niri-config.target = lib.mkForce "niri/generated-config.kdl";
|
input = {
|
||||||
xdg.configFile."niri/config.kdl".source = impure.mkImpureLink ./config.kdl;
|
focus-follows-mouse = {
|
||||||
|
|
||||||
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 = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
slowdown = 1.5;
|
max-scroll-amount = "0%";
|
||||||
workspace-switch.kind.spring = {
|
|
||||||
damping-ratio = 1.0;
|
|
||||||
stiffness = 1000;
|
|
||||||
epsilon = 0.0001;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
workspace-auto-back-and-forth = true;
|
||||||
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)
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,19 +15,14 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
niri-flake.cache.enable = false;
|
|
||||||
programs.niri = {
|
programs.niri = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkg;
|
package = pkg;
|
||||||
};
|
};
|
||||||
services.displayManager = {
|
services.displayManager = {
|
||||||
ly = {
|
sddm = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
wayland.enable = true;
|
||||||
animation = "matrix";
|
|
||||||
session_log = ".local/state/ly-session.log";
|
|
||||||
shell = false;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -72,7 +67,6 @@ in
|
|||||||
brightnessctl
|
brightnessctl
|
||||||
|
|
||||||
nautilus
|
nautilus
|
||||||
mission-center
|
|
||||||
|
|
||||||
noctalia-shell
|
noctalia-shell
|
||||||
xdg-terminal-exec
|
xdg-terminal-exec
|
||||||
@@ -82,24 +76,25 @@ in
|
|||||||
|
|
||||||
programs.noctalia-shell = {
|
programs.noctalia-shell = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
# modified from official Tokyo-Night theme
|
# modified from official Tokyo-Night theme
|
||||||
colors = {
|
colors = {
|
||||||
mError = "#f7768e";
|
mError = "#f7768e";
|
||||||
mHover = "#bb9af7";
|
|
||||||
mOnError = "#16161e";
|
mOnError = "#16161e";
|
||||||
mOnHover = "#16161e";
|
|
||||||
mOnPrimary = "#16161e";
|
mOnPrimary = "#16161e";
|
||||||
mOnSecondary = "#16161e";
|
mOnSecondary = "#16161e";
|
||||||
mOnSurface = "#c0caf5";
|
mOnSurface = "#c0caf5";
|
||||||
mOnSurfaceVariant = "#9aa5ce";
|
mOnSurfaceVariant = "#9aa5ce";
|
||||||
mOnTertiary = "#16161e";
|
mOnTertiary = "#16161e";
|
||||||
mOutline = "#353D57";
|
mOutline = "#565f89";
|
||||||
mPrimary = "#7aa2f7";
|
mPrimary = "#7aa2f7";
|
||||||
mSecondary = "#9a9ef7";
|
mSecondary = "#9a9ef7";
|
||||||
|
mTertiary = "#bb9af7";
|
||||||
|
# mSecondary = "#bb9af7";
|
||||||
|
# mTertiary = "#9ece6a";
|
||||||
mShadow = "#15161e";
|
mShadow = "#15161e";
|
||||||
mSurface = "#1a1b26";
|
mSurface = "#1a1b26";
|
||||||
mSurfaceVariant = "#24283b";
|
mSurfaceVariant = "#24283b";
|
||||||
mTertiary = "#bb9af7";
|
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
appLauncher = {
|
appLauncher = {
|
||||||
@@ -174,10 +169,6 @@ in
|
|||||||
id = "Microphone";
|
id = "Microphone";
|
||||||
displayMode = "onhover";
|
displayMode = "onhover";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
id = "Battery";
|
|
||||||
hideIfNotDetected = true;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -206,10 +197,7 @@ in
|
|||||||
];
|
];
|
||||||
position = "top_left";
|
position = "top_left";
|
||||||
shortcuts = {
|
shortcuts = {
|
||||||
left = [
|
left = [ { id = "Bluetooth"; } ];
|
||||||
{ id = "Bluetooth"; }
|
|
||||||
{ id = "Network"; }
|
|
||||||
];
|
|
||||||
right = [ { id = "Notifications"; } ];
|
right = [ { id = "Notifications"; } ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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")
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
@@ -115,7 +115,7 @@ in
|
|||||||
desktop,
|
desktop,
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
"${pkg}-wayland" = final.symlinkJoin {
|
${pkg} = final.symlinkJoin {
|
||||||
pname = prev.${pkg}.pname;
|
pname = prev.${pkg}.pname;
|
||||||
version = prev.${pkg}.version;
|
version = prev.${pkg}.version;
|
||||||
paths = [ prev.${pkg} ];
|
paths = [ prev.${pkg} ];
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ in
|
|||||||
sshKeyFile = lib.mkOption {
|
sshKeyFile = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "${
|
default = "${
|
||||||
if config.my.persist.enable then config.my.persist.btrfs.mountPoint else ""
|
if config.my.persist.enable then config.my.persist.location else ""
|
||||||
}/home/${username}/.ssh/id_ed25519";
|
}/home/${username}/.ssh/id_ed25519";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,9 +10,6 @@
|
|||||||
grub.enable = false;
|
grub.enable = false;
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
};
|
};
|
||||||
boot.kernel.sysctl = {
|
|
||||||
"kernel.printk" = "3 4 1 3";
|
|
||||||
};
|
|
||||||
|
|
||||||
security.pam.loginLimits = [
|
security.pam.loginLimits = [
|
||||||
{
|
{
|
||||||
@@ -45,5 +42,6 @@
|
|||||||
# Desktop persistence
|
# Desktop persistence
|
||||||
my.persist = {
|
my.persist = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
|
location = lib.mkDefault "/nix/persist";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,5 +21,6 @@
|
|||||||
# Server persistence
|
# Server persistence
|
||||||
my.persist = {
|
my.persist = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
|
location = lib.mkDefault "/nix/persist";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+10
-10
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"data": "ENC[AES256_GCM,data:RZyNbgY+zGJWxLDUaEIYYLOMkNiFvkVTBTqjzyP6M/iiQFEQKYarUFxgBXU71aVl00/J8ykP5F6d9am9BqcmH/m/mlrLSlXk9Uh9KcnAJl/qzV0q64hyrA3rPO0HS8ipsaWPQqeUMc5U7cfwViviW0HASRbT07ihC3JzgwVa9ReDHcbxzY8m7PN8D5KpIkxItppGnCfe54kqdEg4Fn8vlMSnWbvpdV2XZ9r9klqu09ZRQ3QSaUTLNIAK+IG/AtgmeerZpUbFu9oKPB9ztqUYMZWlNV7g4h0uaz9UkM7T6HSn83m7JawKSabdTiTNL1ePu9/nuAx7+2vRgtnXBO4YTXu8ZRtcB5OmNCVOyM75gM/+gzYJwLfwPTx8GUi6TdoHV90myoE+TNr6jYao8N0yR/YgKEkT3YH7AmV1NKPkJjMOFG2AbpDgsX19WBo1ySVLKMurLUbTjLSIXkjCuVcw3pRVI3iXNlidogEoBSsyRN0qFnQ1V1LAAL55pM7a/Jelmm2ZNGomX/LXR24X1eM6t12rO8FgpUGTP7bdFAL02CEcydw0HsDRQd30ZKfPS/vTIYvxgx4TlM/L2E5E5s53xJZJ79LnPUgyKGdvKJcUIZm91OblRD44RmtQcZBlMRoZcc8UR81rV3/v+BsOw6xv8b7C+zDGHB5pTzEy7cc24jZwoF8JBeaJC0KK0tb3kQ==,iv:BPbyZwghZ4t7VTkXkPP80fg/7SFIbBTXLmH23yeWr9Q=,tag:XE8w5BN5coSaOGvN0J0m1A==,type:str]",
|
"data": "ENC[AES256_GCM,data:woTNsrZnU3IclRXuh41H82YHeFa6U8aT+ILtjUQ9P80Rz7sUwGinh7z+5bNJkhdTub4BZ+ySl8Ov0XfDKWClT4AmbcRCuwwN8BfOJ59v+fyzsBSu8Y7wXSPciY+T/4rn60HlnVCyjX23dMNWwuN08bS/4iDw+/Ur80/3li2Azl5+37y/S2ZbFU0FP3OCy/G5+rGI0IFTCzRMfB/wpDhesxGzi1epKWvFx0q1Qnv0SiaZlo8mpG+G997mltBMlVkmAiNq57VAVs1ZBDAOf56q1UUHMtExAQt0zad5YWZeBgXQYWG8AFgOhSBiqjpFkUkfysv1mYqWnA7Ej/fD/H8e1uckC6KT9m4w1l71JmIkuUMW8PN/66cGYwZ/gMrZTAwlaVqiYPE1ppmnvrQxukQMgj40y27sWauMK+biPRNTrkU7egjH0IHCHHE49vq3VDFa48SAYXiBCHV+e/Gy9Em1ImRn2lCzAoKUtI5ilccg6MyUbug+1aDWx5NBkhpVw751HyLiSjNyphzVZewo9hGun2F+Fl9NdhM5xpq4tM9bbnsm0y44Vt8FJU0dmY6lfq1qqI3MjLg14iET/WLTorxH0i1iJUYy8Z6FJ7ArGUv6qw7ECNH0ZeUiNk0vICniyRlr+9JGFiHesX5oajXVxOp6vA6FnA4j1jeUvOLViiRc8DxLZziyA7ZdKDXwPJ4JKA==,iv:Df76Q6DoA6lI6xv7nnN6bjsaMPK7dnM/WvVd/O4h6qs=,tag:Yi/inQbd1wCY+PPbq0By9w==,type:str]",
|
||||||
"sops": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBSSEdH\nOGZDWDFhMzB2aVErTDU0Vk1WbnBSa0hmTGNMaXI3aTBuQWMvQkRJCnFpYkRFblZV\nRzF1eGdmTzFQcGhTWFZKdmhyNzRHdEFFSjh2Tnl1NXlpSkUKLS0tIHFLSVJiRkpw\nV2taUVdlS1h1V1Y4aE5JUWVmK1d5UjRleVY1Y0VvcmQrMnMKpD5nffC057mv+1wz\nXL8bOS3vBFoupi7IbKw56e0nGkRuMq+Hf2eCKZDRRlLbIi353xXFki7PKDk7ltu9\n2olKQQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBSSEdH\nOGZDWDFhMzB2aVErTDU0Vk1WbnBSa0hmTGNMaXI3aTBuQWMvQkRJCnFpYkRFblZV\nRzF1eGdmTzFQcGhTWFZKdmhyNzRHdEFFSjh2Tnl1NXlpSkUKLS0tIHFLSVJiRkpw\nV2taUVdlS1h1V1Y4aE5JUWVmK1d5UjRleVY1Y0VvcmQrMnMKpD5nffC057mv+1wz\nXL8bOS3vBFoupi7IbKw56e0nGkRuMq+Hf2eCKZDRRlLbIi353xXFki7PKDk7ltu9\n2olKQQ==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2026-04-11T11:27:59Z",
|
"lastmodified": "2026-01-30T13:42:20Z",
|
||||||
"mac": "ENC[AES256_GCM,data:aDtrtC+ZD/XCaq9B0aW7btIdrHVthcJ68+MXIIAzejIbGXbqOkk/o7xOyYGsKsCHkiJP+ppjHKKt8ase5CSieCCsosdOUoPForLEaBhu0y7QTRKMBxKhD+xMlsCgR6djKx42Z4gs3/qjox836JJV8x72HllbtTu/WzwaCR9qt50=,iv:qy2JSu/dSZE2xWmxOtzvGBjcu0BjYNVDdOMm+UDV+CI=,tag:4CfF54eYLtQkeA8X5COyxA==,type:str]",
|
"mac": "ENC[AES256_GCM,data:xZmGhEqVh5SIcIfaqOSs1YV23QHXachtBx40C+oyasFvUBhqcniuDHcuFQSmzteywC6jH3r91ilppPjWERz6ml5cfHzBdkbirpbWJg5Hqj+yLz3f98tGkAMmZyc/zc6XkM9BbWQI+R3R9bEaFZ95bnzNeno0EwneEM4aGW1ZsKI=,iv:oz197xm93q7aG3utudgMr3nVdS1IcmTxfnhy7Jc1N9o=,tag:Ar4s0Yjb/xApc0YgpikKtg==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
"unencrypted_suffix": "_unencrypted",
|
||||||
"version": "3.12.2"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"data": "ENC[AES256_GCM,data:EJjv/wFOznFk/cAv0CoOgHP0rT1ODGzDTF2X4m3rkoRuLMTnHioc6ne4FL2sbO0pVy796Yvi7CdILYo7yHFzw7Ea+1+Gqh4abbgMBDtgKturDEMotG+prYVq5pvx8POO8KDZ4E6EaZarGGTSLgzQnF3rxN4rSSxE/AbTdln6uITa8Q61UMOY9E8RCsWyO4wY+BwGI1FBPaEOKCqQmdq69h4db/m8pkAWdDczZwKht5GSLIQuEPmpONTPPRI6ny9y2I4lVIPaSoNYWSUKiOMRkSItSjk+Vo47iACFW40mSdeayXmilHQk1uBcUKaPqtbm9eSkZa9OAaTTaSzPiwbfiVmS4KN6oDO/3Vx14DBsaokfW8wl0uyq4hTgfyVUL8ArC5SPlAW4flHxgTt0HzK8+GBA4cGak9qf5vH9wloccV2UkX1e7YUkRj1p+rZl/HnvmVatfGlkgwcniORmSzYNcDmr8OneWVkTpUTwrT31ZLlkHftBpTuhP0NE5AIXGBDy1TIHrOkE9Q4BxDcKuTj2mM8AHKrkejl5nofHNw4NpKGRpvZjdN7A2H4tF7+e9x9VxX7kkPNrQ1MqaQjspOKztN5BL261nKPG/4jnxnyL5gB1xWMn/ifuUB4FM9meUDscN/xQQCnHU4uy5NEE5qO74vIywGmQiXDnAjLSi8nSGNHFhbg5B3vAqxpJH5m/Xa+phgP9aqkdYDP5,iv:4qLwVMpsCynVNJa4FeiIfwsGoBvCg0JgJl8oqoVA3U8=,tag:lIBZCdeR7LX/S0OyJ7KkYw==,type:str]",
|
"data": "ENC[AES256_GCM,data:TroErAaIJCpWgVkxmoCgxCekphwh5x9oiFXnENXoiXiAaWnUWSB9y2sNbuGTxq8ngWt9pnZ4ZWWCiLaMvk1b/rjJCZzF3mJh/SuzqUkrayspTPcSTbQVHOHlrH7TKVSBJDQCZmAw0k4E0unSxoujEOorymzTY8ZxJTuSu3ugOez7Z48bDTgv4xMG9CvJku/HKakg/DgrAGaTXgfwal4hSB/9inNd9e1uq4clrkDhsN+zg6uJ+EHre/MUkf2MaIG5EI3y904+jm5Zvm5gTynPCjbVvVyjjXenGOwzS3fkxSVJjDvZItn3QZpKC/OqyrrX+c0zEiQMK880E1Ru4f13QphgWoMkthtdNSRoJqKHuK8UJ5onlfOmLkfQjKQ5cIYWgyI7dq5Rfx2yGbNMNEwAQodN3AC5NaLHdcFbs9Yi2VSAKbv5aEifizHYy3HgjxYcSW0EM53/Sn/CL8G2HK7ei7qeYbTT9bFbpgbPYiUeBuaN2Jfx13Mh5yWs98NhhIltjWtrtvvtBrBf7tPo2nAGVW781MaGF5uS44WVjxMMrFPq6WHRB9pwop5AS475h6ihmUIx4Pg/3JFV1uLXtvEeNuiBOULrwdkt1MXRxz6uiYux3WdWpljq1AIvRCLN3Ehi8VYEWyvEbP3gMp9EeOeJYXZ07hFV5dJCJTF7V1sP8GOCWmj0Ro61CEH13OA8V97M8Vi6ZdQg/o+Q,iv:1/HTU2AHTRSPun59Xa28yjlg312bTdDkiicQzO8515E=,tag:T/wEKWpWbhri1ZttG1JRwg==,type:str]",
|
||||||
"sops": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBFZ1J2\nNk9yWUNaemVBOFRiVmdmWGdRWVN0UG5Hc1lZRTBiaHdnS0E2UlN3CitPUmdjdVdu\nS1FXbjVCRkxZUk5KdW0xRzNheWJ1TWVYcUJMK3k0TlRFSWsKLS0tIFJSTlN4a29x\nWG8zUlcvYmlZQkQwT3hlWFlOVUIwSkt3SE5RTzhQWVIxUkUKVSMJtNCEZ1KpcUgQ\nkuTFjaBHvizq980kkbNbD4FgeCAPZ3CwXA8/nKhN03iPeFqwX5AsO0n3+ge/qMnO\nkoRc/Q==\n-----END AGE ENCRYPTED FILE-----\n"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBFZ1J2\nNk9yWUNaemVBOFRiVmdmWGdRWVN0UG5Hc1lZRTBiaHdnS0E2UlN3CitPUmdjdVdu\nS1FXbjVCRkxZUk5KdW0xRzNheWJ1TWVYcUJMK3k0TlRFSWsKLS0tIFJSTlN4a29x\nWG8zUlcvYmlZQkQwT3hlWFlOVUIwSkt3SE5RTzhQWVIxUkUKVSMJtNCEZ1KpcUgQ\nkuTFjaBHvizq980kkbNbD4FgeCAPZ3CwXA8/nKhN03iPeFqwX5AsO0n3+ge/qMnO\nkoRc/Q==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2026-04-11T11:27:20Z",
|
"lastmodified": "2026-01-30T13:42:30Z",
|
||||||
"mac": "ENC[AES256_GCM,data:ShLwbQvfJVDXyhu6Yf1m93BVQ8s39ATOAugtP3iO0dwqJSd1mR7njh+2emoFIIy3Bn7RkgJVcLuuj4oWWZ6v4nPemSrCwwj1hPSMU1EjqRFGjPaHGj8S7KmKldanHpUCXMuEKoCDT5B2ye9kmANAitn6X8GhoWb7NcCvkW4C7pw=,iv:tMv/P24PNioV9Ot8U1avbifGq1EJHkqIpyUX01Q+1uw=,tag:heOlnL+Abjbg8CGQmEmmsA==,type:str]",
|
"mac": "ENC[AES256_GCM,data:KuB/Zdzy5gKDayUY0YhSNrKMnG1tdzRnxZvsTjj79lYoZzQ/9Tw1mAmn3vBjJx/aZtpXusxN12uxP1vzqFoAOpvbXGTDRv7fhCaq1CSayWSrhddwRlAIaQ6tUAOOu/fcoofTB6KWJNFhhDwn+o5lF48cgp1m7SL+op1NDkXBoK0=,iv:J0jUA9LfBoT1hBgoItqYdM6MmRhamTZCo9/TJKF18ck=,tag:SynvQk7+D83JAikLH4HNSg==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
"unencrypted_suffix": "_unencrypted",
|
||||||
"version": "3.12.2"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"data": "ENC[AES256_GCM,data:SyqN/4fc7lm3Ef3b2jQ/na5g8bkHq8hwJGMBrJwD4LsZpF3NHWhOpgnsd2BmxVrMEtVidyDEkEGH/xkb5eOgCmqzlkocVwwCwNRutFJxnPePtOGIvnBoIiLgMRl4XLhBMyNeGfLSZCpq8F2U2KuAnsSNV7ZaF/uGyrcykXw21w30HigDQsAbrRKpaz4TMtEdBPjsGhif7/r/HXDD+c6KOikcvVbAtsUJzplHUtSzP0KkjN7BeEfrLkLiMJwWOSn2hc8ITtY/uyUkUDR/7+l/GGCMmucHrnJHrTWkjI3okToC/fSOd0oPV5tOkI1GoAdz2eZ6bR1dq7xcQceKepqf7cC2oXowAG3xQcSGWUvyrbdhZ8NtLhpzFVcFlazdG80e59CjkvfUWv5YyAnwbSRjBanAnm/TjaP+UnhXqd03mzcqrrglvwcIFRnshu2GQCWXg0If+q2pbyafdqjAi1yPleJZa+QZ8OQkjfG/HUeLyZe6QPIpzJ4wDyA98piI8VAJsPfBsQiFdsT1dtNeroDesy6fypbHtZgkm8kWlJEdutcUzSm+sFVTeLjyifrehiTrGQJfRzFrDjStd43hkVCRuDjmCd6JVxKk1Eqg5isF9GPrpyAgLwQt01RaRnLB/m70pytW6prUmw==,iv:c5sJKTvsBEvV4x+o6LUjJzDGb2JiM4cHkz+IoDSygc0=,tag:3tdJnCQawrawd5jVrls8Qw==,type:str]",
|
"data": "ENC[AES256_GCM,data:pOo8Rmhpw99QVkUKR/MHo1MoRfKzWgiqXxxX22g2ZzjvinCO9X/N6m63I1XlpiOMVmpEvzFtvQXfaZy7a4D4qLmpa48jsEgGLPm8QXbPFpXNCAVLKU10msKxw/m04dZbB6fJADvG5TM6wMFmsETLl0wMPXPffW2SI4CysSZsmSXUZKGAKjr4sPkUCDW9iiCKTo75r5eLVE3HH8j1OeIknzTDX4zJkoci70pVm7CnKi7bjt515cbq3V9aug7U34I79UlGOB0NWNEU10KodbjnZlY56+K0UBsz5ao+BwRIbxf40a5QUXd0bluqzHENpXlsUja0eSKG1kWFsB+ek5S48GA1SjRkXpStvZoHpUZ7YjeENdqvS1rjteUkrexSB0h3PntJmreERcZoO+MJYVsa5MpF8VkEz6oI9v+ECUA70YEZw7IszsHhq3NnR21aUTok/S23XpbEbxFuKdseQ+8VrBI6z+udIS8o579xcLBXSDhe9vvrdqjMw4enQI03/eKWMjUD8e5r6VbzSaNIQAeh+D9A0CR8EceyFcccY9/XfB2iPzVK1F/PaiAh6oMxWRnyj2wg3GWVoxNHsOKloWfPN68X30V5izvIWlmStRfjvC7yakEde8B6V3PabO8rQlezuasNCvqKIw==,iv:eKRT3L7YXMpJa+QGy7MuB73RsjVIZlaXbc2A2UKrZzw=,tag:7YZ2pqP0xUo9N2ByTEwW/g==,type:str]",
|
||||||
"sops": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB5RjZU\nR0RVcTg3L3RQSmZnQnJhNm5vaW5URkNySUNORVJTRzVyWVVHdHdvCkd6Y2tvV1Av\nSjF6NkVNNjdKWnZyNi96bU9sY2VkalJNdWpxQUcyT2R3MFkKLS0tIEpkeFpWUE9t\nY0ROMS84QmM2U3M5aUN3ZkdQZi9JYnZCRzl4eDg4NzlrUW8KcuCDvvHFl/oyjVAo\nDlH1OOwPELWVWqckshUkX1MCMW+Qcv5R52jICVlyBVsyb+eiX4Bxgo4KM352KhWB\n5hPnIg==\n-----END AGE ENCRYPTED FILE-----\n"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB5RjZU\nR0RVcTg3L3RQSmZnQnJhNm5vaW5URkNySUNORVJTRzVyWVVHdHdvCkd6Y2tvV1Av\nSjF6NkVNNjdKWnZyNi96bU9sY2VkalJNdWpxQUcyT2R3MFkKLS0tIEpkeFpWUE9t\nY0ROMS84QmM2U3M5aUN3ZkdQZi9JYnZCRzl4eDg4NzlrUW8KcuCDvvHFl/oyjVAo\nDlH1OOwPELWVWqckshUkX1MCMW+Qcv5R52jICVlyBVsyb+eiX4Bxgo4KM352KhWB\n5hPnIg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2026-04-11T11:27:37Z",
|
"lastmodified": "2026-01-30T13:42:54Z",
|
||||||
"mac": "ENC[AES256_GCM,data:b0n/SPZj06qfPOiHvNPw6bmkpka5oqYUL+Hs2X0tLZUsE5QkXvRFq7VxJDakc76EAMBkwjOyHXAAjKx/memZXBwXhUvCpGUNt4lwNxPect5kl3+HHSVAHrmqIH5hccImXNLayBcr4VlRGiXAZwWiS26td1PHq6EzkR1nNCz9nfE=,iv:YO0TqCST3ZkP/2NaBbkAPkHbFCD2kXPMu6ms0ySzAIE=,tag:0BO+AnbEzCUGP2lNW7/31w==,type:str]",
|
"mac": "ENC[AES256_GCM,data:dRhW2TK8VoeAAgxieq13N9DOpDebn23pzSGVOUR1CREv7xBlQNbbG5oZ8wtOMmVPtYYITsbrP+83Bvc3hAgF+TJ5Q+bUIc79YrpKE4JQpIkF54XWuQS+xr6CQViRu9IkNSAINSDBGC/h7TQJbU+VynUbwTTJWdDwFOZRDCWxlXY=,iv:33D22OwdZ/0p5PTy6iPjoiOOHqMA12NTCYSWSUMTQ6U=,tag:Kal99S7ufV+JsTspWaX7OQ==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
"unencrypted_suffix": "_unencrypted",
|
||||||
"version": "3.12.2"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"data": "ENC[AES256_GCM,data:xZFoibSkPakh2VMwyrj0+7Epgo3kcJ92TV5/xg8BE3k+cefghPQzXfkIJWsqwgWoDSaHBpb0L6R5TyzAtSrmPEmyM409jiI0I7TtzZDMi+tp4YgF7cC0kW8rU7GwfKwreRm5+B3B093EO0jVfL+Qd7uab8/DZY/Qw3Ys8Q5AFQI4vav8dHP4pLWqINEA9gpzzGWfuVBVX2v8GKr7o/2sYNhw76jDcpOrY0O91hPe85ybzG7Acn9Of5hGgSAz7J4NI0SZecTTDWec7GfdOYPlQnBJTSPRe0fT0aMpP8KfTmWmr1GttgK6HeqL/kPy1MiyfuMNfbse9oJZBIq8puM6UFj+cerG+86UbEFS09zO87p3/uCxmPaPYGEl53Y/LMtLNMy/m96hsQtvwiu7yJXLLco9K1i5sCRvQZ6gZ+YYEimCdJQBYu7E8sh2hNwyeV5O6O0fsVGmP0L1v1S5Ea+QrX+1OXG/hhP8pLgco5IVKo9nQ2SKVmHil6/ONz97KmYKbP247w9qWGCBRj1LQ6DTw5LlUcakHfG+M1BUCW7sl1kqIAvvUwDzQiQhxXTJQcBQoXI3aG41Plrn8RW0zjBdyFhpDuABtg1kmWiliNA3YXyu6sy42ARieYJ8I3L2FKgA91HMiWDK9g==,iv:gg3DqBfY/h6oGJy3BdG2AgwSx781daXRk8NADPUH1P4=,tag:6M49wP/dVh8fWoD+Ij9+5A==,type:str]",
|
"data": "ENC[AES256_GCM,data:bNSkFEL7BCq7LJYzK1X0Fn8To+So2+QTSFUN1DZDFlvekywoebj7txSM7jSQKYC3+Henond0MRRsriVOHu61i/k/i7fjOHPi93of4ny5wcS+t3NrFvN3RufNjQqe8CD+y4mDaUge8GGrFBWhtQV+1uw5hbXFOIq8l9JqkfJ8y6bhBi/fznCdO847zvZ0hAesjmrE/tflWn/T7pkNnfrVFOJR0FnXsVavlAVbSxtsrppaZPOgJFNwJ4ch6rP5PxHSyCpsbkak9H2nJOWJdXKGobKG3g01YCjgYMOX9rIfOnFcCBNyZWPGLx9ZT0h4XsHWM++L9lCNHjy4Z40wyl7YMq797HlKEcGEv2RM2KsfO/66836v3JzT6ZAO32otCbSa8e5vaYSKBZVZM/wrzNcE/XTNDRAQij3a3+bZtZDnxhZSQ3FJQVGm4agCbbO8Dqx7buWHGhgMmxnR6ClC3Ilgm9GHAWKXPBCDT3IEgc6S2g5MVKurKcR2Abffl/mN6KQjNocbIXKMu+dvInuW+30Mit5dp/dYBmWIrRqKO/hQtwDFp6jLHo4O+7h7/2YJDlh07W+ejT7vJy1+C0K4eAXSoGTahSgo61Y2F8LKHGBwAxl8N4ri0jKKOH7wB4pkyU+ryjQaeFhB6g==,iv:8f9JchFynDlOnYjrJiK/9ltkykaw5J8rWDwt+QFwzOc=,tag:owaHraC+WUQKn7hMXHcCaQ==,type:str]",
|
||||||
"sops": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyA4RjNs\nWlYvc0tEN2hOUTA5SEV6MUhTeFViRTBqVWJLcGVDZ0JROCtONlQ0CnU0Z2FWQUlw\nakt0dk1nbVFHaVlyMjBqS3hCSDdHZEYwT0pXaXhOclFvSjgKLS0tIG9ZZUQ2dTI5\nWFVJanhac0QxVHM2b04wNE1jcHdHa3JJYzBlTE1iS1ZPTHcKZPvA9MwYT4JfG3/F\nqSI09TWeEv7TAWGeZr6OS++egtpdVoM3hF8s1B1TZb3bf/BMqo49NEkvD56pOKvo\no0jjHw==\n-----END AGE ENCRYPTED FILE-----\n"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyA4RjNs\nWlYvc0tEN2hOUTA5SEV6MUhTeFViRTBqVWJLcGVDZ0JROCtONlQ0CnU0Z2FWQUlw\nakt0dk1nbVFHaVlyMjBqS3hCSDdHZEYwT0pXaXhOclFvSjgKLS0tIG9ZZUQ2dTI5\nWFVJanhac0QxVHM2b04wNE1jcHdHa3JJYzBlTE1iS1ZPTHcKZPvA9MwYT4JfG3/F\nqSI09TWeEv7TAWGeZr6OS++egtpdVoM3hF8s1B1TZb3bf/BMqo49NEkvD56pOKvo\no0jjHw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2026-04-11T11:27:08Z",
|
"lastmodified": "2026-01-30T13:42:41Z",
|
||||||
"mac": "ENC[AES256_GCM,data:2wToD3ihDP4FMMcqZk/DPRaZMdscsUKHxcObDKyr+ZV7Dz4/EuLU3gAZEjlqNXqBOjqh7sMf5U3QWSimQ5ZdVE4XAl7GCCbi2UITcTiyot2ZraU264wcQAxhNck2J32zJcAUSOK/3w8s6gCkb/u9HqORMPn/N89eAsO1ZvZ2ikY=,iv:1yw3lTrKRat5J0p1kSjBE64atrUz9XvKzcpZD/ffW2I=,tag:1TWz+U2IhNm9q0IHhUeWQg==,type:str]",
|
"mac": "ENC[AES256_GCM,data:SRxuYiRBCgdYid5GlYDoPbhPWuNPq2A+ItvIuEg8H2RZPpovbdDaj1wO7Jkioy+s5bbf4d8eha3v7hXOmU8cMJ7VdTfQXbJlYMGvGoW14G3d13lT8pyb1goswatF4U9CkSBDVLyyCARloLQQD4jfrts7kvdif/Z8kikStpvsHw0=,iv:h7pf0aAVAEkw1b0W9aYIEYVdq43tByngFI0z1xw3lqE=,tag:/URMCOLxBWxLdXNDr5e0Ig==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
"unencrypted_suffix": "_unencrypted",
|
||||||
"version": "3.12.2"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -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]
|
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_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
|
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_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_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_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
|
||||||
sops_lastmodified=2026-02-09T12:55:51Z
|
sops_lastmodified=2026-01-12T13:27:33Z
|
||||||
sops_mac=ENC[AES256_GCM,data:QrjmzfIEQJ0jLF1+yTAqeY3xvgTVT9KDpK1ZoAaYwbUf3GHC2jjZOqWdLtteZuHQZ3Dy+hO550cbiAYVnUUCjdDTPz0apmT+dIH0JtEjOeA7SEwpt/bSwbAFLEDPeXdPAInWsWyOLB2MY5SjDCOP54+rhb2CDnwkgTH7iBPw5l8=,iv:5568pH2EZ7xwB3m8O4GrJ8j+/fNrOwhwCqN3qwj1DQ4=,tag:DAyqFr2PJnUP20+IZ54obQ==,type:str]
|
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_unencrypted_suffix=_unencrypted
|
||||||
sops_version=3.11.0
|
sops_version=3.11.0
|
||||||
|
|||||||
@@ -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": {
|
"sops": {
|
||||||
"age": [
|
"age": [
|
||||||
{
|
{
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB4Tmcz\ncE5NNVJPMW5od1VRR1lMSXp5TDZKV2FnejRscFIrSG9UcVVJbFZRCnBWeGxoMExj\nYW9vQk9IS2I1enFkbFBGYStHN3FxV1o5dXNWODgyUnhQc28KLS0tIHlwdFp3Y2da\nV2N5T0IweS9zTyt6eVZiMXpLRzJDTGI0THQrK3RLWGZEeFEK6LFnlO0/opMCSn+n\ntBfc2IFgtk3lje0BVcfLxpU/DedhDqF0HpXYu1CKZhyP6NQ++AKoz//BGCDDiQ+Q\n9x5hFw==\n-----END AGE ENCRYPTED FILE-----\n"
|
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyB4Tmcz\ncE5NNVJPMW5od1VRR1lMSXp5TDZKV2FnejRscFIrSG9UcVVJbFZRCnBWeGxoMExj\nYW9vQk9IS2I1enFkbFBGYStHN3FxV1o5dXNWODgyUnhQc28KLS0tIHlwdFp3Y2da\nV2N5T0IweS9zTyt6eVZiMXpLRzJDTGI0THQrK3RLWGZEeFEK6LFnlO0/opMCSn+n\ntBfc2IFgtk3lje0BVcfLxpU/DedhDqF0HpXYu1CKZhyP6NQ++AKoz//BGCDDiQ+Q\n9x5hFw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastmodified": "2026-03-28T07:34:37Z",
|
"lastmodified": "2025-11-16T02:29:44Z",
|
||||||
"mac": "ENC[AES256_GCM,data:1nPYVk49OM0568l2/8/FiR9B2wy3y1HidpGeXulJwxFrT7DBMv34LP1je1ntsSKWvKdP9+JOPCKjXbSQnBq+RaX0RuU3WtNlQ2rMw/Uehf6hWEZCxzsRX1rA7nKKKzxe/QTf9ovUxe61j4flEjDQ2yT4PxHTehVIbhhiyfocDGg=,iv:FuSmFLs/ZhjhI/zfxjVUK6Nc7x8GHQcDRk8B9/7TQR0=,tag:VgTS38vfMcJjjJXRM0j0dA==,type:str]",
|
"mac": "ENC[AES256_GCM,data:gWqTwS7NrwChAL1MfZ/AIQyMqfvZ08jiu0irb4L8bvs2ya0imWrK5ZoNfEPFgcnByKphNP8+njZWcIQ48uwQirPX+Nepofdba+GuNLR9S9sd5aW2JM4IyLbDivViKujEdWk1+m+IB4w03QiFQQMDBPSaMDfmJQO+8k+PoopFzWI=,iv:mHt6F5qyqZTRdmoHRgkL8WIWG4gsQWv8wBWtjz6fHmM=,tag:hLr8pIhOK2yIIAMZIHkT7Q==,type:str]",
|
||||||
"unencrypted_suffix": "_unencrypted",
|
"unencrypted_suffix": "_unencrypted",
|
||||||
"version": "3.12.2"
|
"version": "3.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN=ENC[AES256_GCM,data:B+gL1Ai045XiEcBkFcaEwByEdHgCrbc00Efd/WEb/s1l3rhIqdEmdyhnpqYJQojDQ8cQfYb1gMOW38sZ0GL4zA==,iv:F3Y92S3rM1qUrRN0cR5SFep+ExeP90l/oiWmrDk4yfc=,tag:CZrujwoVdGFiDKMxgM1tCg==,type:str]
|
MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN=ENC[AES256_GCM,data:B+gL1Ai045XiEcBkFcaEwByEdHgCrbc00Efd/WEb/s1l3rhIqdEmdyhnpqYJQojDQ8cQfYb1gMOW38sZ0GL4zA==,iv:F3Y92S3rM1qUrRN0cR5SFep+ExeP90l/oiWmrDk4yfc=,tag:CZrujwoVdGFiDKMxgM1tCg==,type:str]
|
||||||
MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN=ENC[AES256_GCM,data:LDNVwG4cOqgb7stZFCAbzBpqTvt+kcuItaVGrM6Zd1wpxTZJ+sHQTf7acCh1obxdw1S13j8Kw2FsmBk4ojkWtQ==,iv:WJrt9G6BhZTuCxxC9A2AlRvon/MlCa9Y5dGNZ2DO7Mw=,tag:H0SLY4E/G1eJ0Tua+/zxww==,type:str]
|
MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN=ENC[AES256_GCM,data:LDNVwG4cOqgb7stZFCAbzBpqTvt+kcuItaVGrM6Zd1wpxTZJ+sHQTf7acCh1obxdw1S13j8Kw2FsmBk4ojkWtQ==,iv:WJrt9G6BhZTuCxxC9A2AlRvon/MlCa9Y5dGNZ2DO7Mw=,tag:H0SLY4E/G1eJ0Tua+/zxww==,type:str]
|
||||||
MAUTRIX_TELEGRAM_BRIDGE_LOGIN_SHARED_SECRET_MAP=ENC[AES256_GCM,data:UcpnOqYwa3fFvU6/A+qUMfB784FuX/wBoilS3lZs3HHLazr9a12m9xivVs+9Kd7l+5xi5VqtQf9ZyF6EjGIeAFc4BFpADx2uvL7HP5kZ2WLGky/un1w=,iv:9ZtTU/iPhOX30uSbx7h3IMUcnCh127lE18Z3gkiydzo=,tag:DzHPBeKl9C28shR6c6t6mA==,type:str]
|
MAUTRIX_TELEGRAM_BRIDGE_LOGIN_SHARED_SECRET_MAP=ENC[AES256_GCM,data:UcpnOqYwa3fFvU6/A+qUMfB784FuX/wBoilS3lZs3HHLazr9a12m9xivVs+9Kd7l+5xi5VqtQf9ZyF6EjGIeAFc4BFpADx2uvL7HP5kZ2WLGky/un1w=,iv:9ZtTU/iPhOX30uSbx7h3IMUcnCh127lE18Z3gkiydzo=,tag:DzHPBeKl9C28shR6c6t6mA==,type:str]
|
||||||
MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN=ENC[AES256_GCM,data:Gurr78m30j5bhutgJxGCZL4EC5Il0dOCiKnqTG+JskULiwn+82ejo4W+iygvkA==,iv:0DmEq8HmS3S1pKHb47gsZ6/m2Gr2jP6dlw3ytDPfRhE=,tag:8QmMUgv6KigJT4jA4caLFQ==,type:str]
|
|
||||||
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyUGVr\neFhRVERqUy9pRkFNRUVvQ3NMNFlnZEtQVnNhaWZJbzJUUWN4cG1ZCkduU2NJYnIz\nWm9vWHpGS2hPL1ZNdlhHRWJDaGJYOVFucXA3QktLV1VOdDAKLS0tIDROd2dtMm4v\nN1ZETmxkemk5RFNsU3AzTEphYlVKMTVzajFQNytRRGNBUmMKEwwN7MnPNP0ze0XJ\nm7QTQJhnd9QihXpGVYWKneL2Ef2YU1FZGUPOez9syDRepY/tl8jSFo77+aCLJ2/H\nPzM/4Q==\n-----END AGE ENCRYPTED FILE-----\n
|
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyUGVr\neFhRVERqUy9pRkFNRUVvQ3NMNFlnZEtQVnNhaWZJbzJUUWN4cG1ZCkduU2NJYnIz\nWm9vWHpGS2hPL1ZNdlhHRWJDaGJYOVFucXA3QktLV1VOdDAKLS0tIDROd2dtMm4v\nN1ZETmxkemk5RFNsU3AzTEphYlVKMTVzajFQNytRRGNBUmMKEwwN7MnPNP0ze0XJ\nm7QTQJhnd9QihXpGVYWKneL2Ef2YU1FZGUPOez9syDRepY/tl8jSFo77+aCLJ2/H\nPzM/4Q==\n-----END AGE ENCRYPTED FILE-----\n
|
||||||
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
|
sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
|
||||||
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA0S0VJ\nTlVpOStxVU1rZ0E2MVVNWmI0d0VxMStSeFJ3dnpONTR3N044dWg0CnZBOFpDbkw3\nWjJ6ZHRQaDNaV2JDNHRYWkdSOVFBSDF5M0kvOExaSnBCeGcKLS0tIGJOSCtHRlNt\ncmpYTmN4dklYWEp1WjR0Uk16VkJjRFNqb2hQNEZHSkdSa1EKpO1hMZr1NTzrEbCr\nycIvP4J3U9X1iTAL2/R98lOhUVPWlu7QN1GWvQIyB3TInTIpKNVV1Q8nkrq8GSFG\n6QHTCA==\n-----END AGE ENCRYPTED FILE-----\n
|
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA0S0VJ\nTlVpOStxVU1rZ0E2MVVNWmI0d0VxMStSeFJ3dnpONTR3N044dWg0CnZBOFpDbkw3\nWjJ6ZHRQaDNaV2JDNHRYWkdSOVFBSDF5M0kvOExaSnBCeGcKLS0tIGJOSCtHRlNt\ncmpYTmN4dklYWEp1WjR0Uk16VkJjRFNqb2hQNEZHSkdSa1EKpO1hMZr1NTzrEbCr\nycIvP4J3U9X1iTAL2/R98lOhUVPWlu7QN1GWvQIyB3TInTIpKNVV1Q8nkrq8GSFG\n6QHTCA==\n-----END AGE ENCRYPTED FILE-----\n
|
||||||
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
|
sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
|
||||||
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWbk1h\ndVhCL2kyczUvR09YY3lvYXlmeExjdHYvd1dNQktHcUFVeWdYeFQ4CmJQSTVjY1Bq\nLzh1ZnpEWVJvaUZCeU0rMk5UWXBmMmNDMi9xTERlSlIyd1kKLS0tIHJaYlpaQmtE\nd21nQThCTXBVU0RJRnV0OHFTcWZYeSt4eWlmQVVyUWNSdGsKaPXqoSWS87MOHETx\nl7dbIo4maAV+eXbAbEYF2dZzw+Fea5vTrfsg1QQ4YVNGib7o8nvG2vouMyqq6vI3\n37HGfg==\n-----END AGE ENCRYPTED FILE-----\n
|
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWbk1h\ndVhCL2kyczUvR09YY3lvYXlmeExjdHYvd1dNQktHcUFVeWdYeFQ4CmJQSTVjY1Bq\nLzh1ZnpEWVJvaUZCeU0rMk5UWXBmMmNDMi9xTERlSlIyd1kKLS0tIHJaYlpaQmtE\nd21nQThCTXBVU0RJRnV0OHFTcWZYeSt4eWlmQVVyUWNSdGsKaPXqoSWS87MOHETx\nl7dbIo4maAV+eXbAbEYF2dZzw+Fea5vTrfsg1QQ4YVNGib7o8nvG2vouMyqq6vI3\n37HGfg==\n-----END AGE ENCRYPTED FILE-----\n
|
||||||
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
|
sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
|
||||||
sops_lastmodified=2026-04-13T07:43:39Z
|
sops_lastmodified=2025-08-22T02:52:07Z
|
||||||
sops_mac=ENC[AES256_GCM,data:xZVKnXOP27j7fiFaiTQbKDCYKg2ywPfzqY0TSJK6C28MAANXYqTBSvDKBmrw64bNQrf1hcUNV3nqqVGMjCPDg2NkY4bWYPYpGKMKZEQ0WmMeR5Dudlryi2+ga9f9fG9vs0u8YJGJvMnob2EvfpPKI5tPBiCLc8AC5vCVlxrRvTM=,iv:PqI752mqSn7oZV4vwS/t/whRTUG1GTnYwmLP2GOqHdg=,tag:C4cso3fEjmX9jqEFDWrDIQ==,type:str]
|
sops_mac=ENC[AES256_GCM,data:ahjIUwIKPUfqTSl704AekBIVTTe8n0YUbMyVKxFSZb5ZoaQ3KRVgWPWCAn9n/Qwpa1oHWvVcqqbTd+wrxqmkpOgFCfg72ZWdPsSbzg6RGcUVHlg5r2b9DE7Pq+qDtgNBVkmdmlCAY2+mQTepXv8fGbWltu6tzdqOvsOBwfSw694=,iv:OJ2M6X23k5LokCrx4Ekz2a5+hUGV66YNjlFBQZdrkSA=,tag:2xjX3CX45kkpYt+skEgKOw==,type:str]
|
||||||
sops_unencrypted_suffix=_unencrypted
|
sops_unencrypted_suffix=_unencrypted
|
||||||
sops_version=3.12.2
|
sops_version=3.10.2
|
||||||
|
|||||||
+43
-33
@@ -9,50 +9,61 @@ external-controller-cors:
|
|||||||
allow-origins:
|
allow-origins:
|
||||||
- ENC[AES256_GCM,data:Ow==,iv:C2R4gooPGj4lranMXP6Uu+nCbGhVk1S37dBKbYgdsRU=,tag:onXhjT4c/qMoayForPKwEQ==,type:str]
|
- ENC[AES256_GCM,data:Ow==,iv:C2R4gooPGj4lranMXP6Uu+nCbGhVk1S37dBKbYgdsRU=,tag:onXhjT4c/qMoayForPKwEQ==,type:str]
|
||||||
allow-private-network: ENC[AES256_GCM,data:mxDrog==,iv:L4hT2zLieK7nQnp5GvdHTsnSkeTz61v77nr281lAcag=,tag:jCQgs+0aDrl7BSZYxI7qUw==,type:bool]
|
allow-private-network: ENC[AES256_GCM,data:mxDrog==,iv:L4hT2zLieK7nQnp5GvdHTsnSkeTz61v77nr281lAcag=,tag:jCQgs+0aDrl7BSZYxI7qUw==,type:bool]
|
||||||
dns:
|
|
||||||
enable: ENC[AES256_GCM,data:Rp3LZg==,iv:NHk64bGDFmimNmXDk9n9ZqLFVbO8cyWVqivRSDxUowk=,tag:Y5IhMI7n2JtcXfFnEY77PQ==,type:bool]
|
|
||||||
default-nameserver:
|
|
||||||
- ENC[AES256_GCM,data:eEwdzhx+ysGj,iv:FZ6vsFPP5dnfcImydU46J8vA9GYbejP3zEXHA6D+6J0=,tag:lmG+OzJwFtBKHraF4PsCjQ==,type:str]
|
|
||||||
proxy-server-nameserver:
|
|
||||||
- ENC[AES256_GCM,data:n3PMmscYUm2eXFe3/uNsKPF0rwyQBtGTsA==,iv:FMOP4qohNNqfLIo7U6mk5qxBm0eXVFCbI0KD7kfw1/Y=,tag:N6H/gESlK1Cr5J2T3Mxldg==,type:str]
|
|
||||||
- ENC[AES256_GCM,data:G5eodgYoIwtWDMnuEg2srdwCJqQi+OAsyPtp4OvT,iv:5maumIhsmc/QE1ey4rufm6Y8G4OqG3qyY0Ybv/24LoI=,tag:heYvV2IVsIMRBEwQwlJlWg==,type:str]
|
|
||||||
- ENC[AES256_GCM,data:3CbO5pelMlvJxgoawFkEmARs8Xwgw87eKg==,iv:A21aiwBT98NT0VQ2vaepx/F8AG8rWawNWdch+yVDYCM=,tag:OkTMbH5QnXbxf8NQyer8pA==,type:str]
|
|
||||||
proxies:
|
proxies:
|
||||||
- type: ENC[AES256_GCM,data:82CKWRU=,iv:MmoXN4hqcC2BE93Tfex3swEj50XK6jmjLIWAyRs8WRI=,tag:faiVNIHjq0fRMLiiJoWamg==,type:str]
|
- name: ENC[AES256_GCM,data:524kL2VUV/Zr,iv:up5Map4oTAPmalvdpiZAob4wrxMAPu9w3Nk8VclDPOI=,tag:9FKxdoiHzUI9LBpt9QOy4g==,type:str]
|
||||||
name: ENC[AES256_GCM,data:mLelhl+5dSLY5TIjoTw=,iv:cJtCH/fMib1KapWVQGsRgy5yRCUC5EZq4RdahEb7NyQ=,tag:ree+OgPt6ixLigZVo06dwQ==,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:Y5fvB0IJTMLASoZTxGKK47Vy,iv:O7OXDcbN7MlZvXYMgUiaPAUEi+L71kkjNmjuA3yeVp4=,tag:3V0w5k2K247W0VLHP3NG0Q==,type:str]
|
server: ENC[AES256_GCM,data:UlqxHe1H1J1OH4Ld,iv:um1xP8HAqMTv8sqZewFBFaIoKq5MaVqultx7q9A9v4A=,tag:gGR1Uxwcap2gZYBmPuG76A==,type:str]
|
||||||
port: ENC[AES256_GCM,data:wX7PiQ0=,iv:TjP+EpALTY1JvJ3A3D+Y3+2e4WfXCEU1TW0c5Jm5iLs=,tag:MK6Of14YD8286wZMaiU/uw==,type:int]
|
port: ENC[AES256_GCM,data:x46frQ==,iv:y3ZtVJQP3q08duFGUXSH5xLo9Q6GZmGvhmCKzNiztfE=,tag:2k6WGrK1wGa4QwOYJHnwkw==,type:int]
|
||||||
uuid: ENC[AES256_GCM,data:ctolvO2CZR0rBmygCZ5xJT9z+CXr4tBhPXK/XeZLUQG+B0l4,iv:2kpDYwMRDgOgZZDlT/ubbNGgwziIx66qgQr7AKb1X7M=,tag:lPr7yX309LKCXPXhr9XgCA==,type:str]
|
password: ENC[AES256_GCM,data:SoxJyZJLwxRQoErQ1ZHObnM=,iv:YVDRtTb0P15vA67ZUQgCBX1s16iqjrtG0oodE9RPDMI=,tag:zsKj2mwEWwDtJ9QGtbix2g==,type:str]
|
||||||
tls: ENC[AES256_GCM,data:bzKiJg==,iv:gQCofh2q5oB1gjNPgRfCALO04ELEvzRCwQYjzMzSQEM=,tag:QEqyUd5uYS4QzbG0tL89vw==,type:bool]
|
sni: ENC[AES256_GCM,data:rkDSKvEwqgNZE4Yh,iv:Nfi9j5/IKygbSDgBAvAzHrqEYFMQPXjdI3aKHNiFdFs=,tag:N7MZw4nUOGlo4RIo08DAmA==,type:str]
|
||||||
servername: ENC[AES256_GCM,data:+qhHvM8+7o8dS5l0hdA=,iv:NE+Il3P11fhhLQ8OT5ExCwWBQROrN/h2iEkVoHGBwh8=,tag:j/M3aX61J0KMWmf7CGt52g==,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]
|
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]
|
tls: ENC[AES256_GCM,data:bzKiJg==,iv:gQCofh2q5oB1gjNPgRfCALO04ELEvzRCwQYjzMzSQEM=,tag:QEqyUd5uYS4QzbG0tL89vw==,type:bool]
|
||||||
skip-cert-verify: ENC[AES256_GCM,data:SKLBC3I=,iv:3YVYwUL1TkF1Q2jP8POxTXj9P32snbnQKU9QNdQRNOE=,tag:vtelcGHAUrMqNttYVk8JZA==,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:
|
reality-opts:
|
||||||
public-key: ENC[AES256_GCM,data:njlpWUGKonBXtEo7KiNKsjiwmq9ia3MulDG2HCCtcBrGtHO1w1OzRoI07A==,iv:kXR0X8BEYSU3O8vSJ2d12Ckl+kD6c1tI7UHCAIyfTto=,tag:4Pwk3MEKu7yJf1LKl1C9oA==,type:str]
|
public-key: ENC[AES256_GCM,data:msJSCf4irU8nGMZqSNU9sbZXD8bvJKvGXgPNGbGWZr1Ss3p1FWT7EuDwNg==,iv:EZzHRBuAni9/CYD1pBhq7xmjCG3bsH+MvaYtv63UYnA=,tag:+3AM644/OO3sIDMXQMypyg==,type:str]
|
||||||
ws-opts: {}
|
short-id: ENC[AES256_GCM,data:ERSoFfp8UlRBJr/6CRUgWQ==,iv:sWuK6zVbT2gNGDuhl981aXmg/IUenLH9Xk+EUsGbL6o=,tag:qTNB3XYJudknkQUgJA/mow==,type:str]
|
||||||
http-opts: {}
|
- name: ENC[AES256_GCM,data:zKRNc9xfDgCx8Yxpp0I=,iv:plmHDReDGfVCz1i7QlN/Oo+5hhME2mw0il+LdgE+pN4=,tag:BtXj8qG5UeAYMAbcWSRnaQ==,type:str]
|
||||||
grpc-opts: {}
|
type: ENC[AES256_GCM,data:C7hjfARP,iv:r+5/qimlashka+qMjrtlsOEMBFuN8/4SDrzzW/WM+KE=,tag:VVpvomQxVFxh/GTRW59p6g==,type:str]
|
||||||
network: ENC[AES256_GCM,data:8I3g,iv:mspjQ+Py5SRWATFhMFJ/f4gfWi1eN4564vdExupMUPo=,tag:9kUBTuI7A14GgJvDJHXK9Q==,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:
|
proxy-providers:
|
||||||
ykk:
|
ykk:
|
||||||
type: ENC[AES256_GCM,data:QFH7Kw==,iv:uBwdbVdfQuoJ4wIxT9lAS/b0C167IwJbD2KhrB1VzkM=,tag:8ogC9VITAOfeMtceq20Wtw==,type:str]
|
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]
|
url: ENC[AES256_GCM,data:aTVsXCfaCkdZes1CW8SJVQFiTZ/KbYky6ei0FKSmeCF8/TbaLIKKR46FX2yQ8682fdcLGcAB8ekblQ==,iv:7OQ69sjVWNyOrPVlA8DWTAbw/LIVzFFm5dK4FBcwvyk=,tag:gLVzTM5PypNLpaIOiPYc/Q==,type:str]
|
||||||
proxy: ENC[AES256_GCM,data:BIEXrZQ=,iv:ZzEEJmLgbOhBTcZEgPfsL0AC72GpydlFTKhJ4+fgTec=,tag:v8URxwAU5wSHD5GPr/sTfw==,type:str]
|
proxy: ENC[AES256_GCM,data:BIEXrZQ=,iv:ZzEEJmLgbOhBTcZEgPfsL0AC72GpydlFTKhJ4+fgTec=,tag:v8URxwAU5wSHD5GPr/sTfw==,type:str]
|
||||||
exclude-filter: ENC[AES256_GCM,data:Uc9L0zm7TWGAgIQq6thwK4evIuYoEJyRJ2M=,iv:CbJp7BcobOfkxyY7/fvaECif57yhPZ1/IuPjLwYUwUQ=,tag:xtGissYFtBX3OVinstWRug==,type:str]
|
exclude-filter: ENC[AES256_GCM,data:Uc9L0zm7TWGAgIQq6thwK4evIuYoEJyRJ2M=,iv:CbJp7BcobOfkxyY7/fvaECif57yhPZ1/IuPjLwYUwUQ=,tag:xtGissYFtBX3OVinstWRug==,type:str]
|
||||||
interval: ENC[AES256_GCM,data:fNfSoA==,iv:wYzKqRsdez6gUGQJOgRnqjOzKtNidMKHYNBBrYtPWfk=,tag:woWqs7uC2nSEkvnROTVFRA==,type:int]
|
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- name: ENC[AES256_GCM,data:O6LAzFQ=,iv:a+dfdy14adLlYbJQ5wAQLsD5hxuEXKW8Y/erhBVAREE=,tag:79++dpg2E2Mtc8y63nRcHw==,type:str]
|
- name: ENC[AES256_GCM,data:O6LAzFQ=,iv:a+dfdy14adLlYbJQ5wAQLsD5hxuEXKW8Y/erhBVAREE=,tag:79++dpg2E2Mtc8y63nRcHw==,type:str]
|
||||||
type: ENC[AES256_GCM,data:JR3d3D1p,iv:n0u8vayA0PVDM7yvh2pk36S8EeqMnZRN8TZlwNnEC3U=,tag:ZmxXOralviL2xyd8+hN3ZA==,type:str]
|
type: ENC[AES256_GCM,data:JR3d3D1p,iv:n0u8vayA0PVDM7yvh2pk36S8EeqMnZRN8TZlwNnEC3U=,tag:ZmxXOralviL2xyd8+hN3ZA==,type:str]
|
||||||
proxies:
|
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:
|
use:
|
||||||
- ENC[AES256_GCM,data:hGy4,iv:LS9vHmdXUMuy0Na1z5YMpB+vEwKFLfezsftdWcWjTv0=,tag:lueXcksvaPC1yKpHT2zUag==,type:str]
|
- ENC[AES256_GCM,data:hGy4,iv:LS9vHmdXUMuy0Na1z5YMpB+vEwKFLfezsftdWcWjTv0=,tag:lueXcksvaPC1yKpHT2zUag==,type:str]
|
||||||
rules:
|
rules:
|
||||||
- ENC[AES256_GCM,data:S6yGMmG4UUUWE04=,iv:FWz0kNu0hhQ+PyIMSxl6NPX/INluS7jAO9loX+E+jlE=,tag:tXK35hMiYDU8X0yl+0PRuQ==,type:str]
|
- ENC[AES256_GCM,data:S6yGMmG4UUUWE04=,iv:FWz0kNu0hhQ+PyIMSxl6NPX/INluS7jAO9loX+E+jlE=,tag:tXK35hMiYDU8X0yl+0PRuQ==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA2Zkxs
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSA2Zkxs
|
||||||
SGh4Ulp1UklKeDU4M2xtcWZPRGxNUGt4eGVQQ29LcjB2YXJGRVVnClZLSmRra0Qx
|
SGh4Ulp1UklKeDU4M2xtcWZPRGxNUGt4eGVQQ29LcjB2YXJGRVVnClZLSmRra0Qx
|
||||||
@@ -61,8 +72,8 @@ sops:
|
|||||||
sF/MYEjihktzyngzTLyuwHYYb1xqTbpmjFNzJfbW7+LJJSPQ9cu6W7DcZGIsSe0e
|
sF/MYEjihktzyngzTLyuwHYYb1xqTbpmjFNzJfbW7+LJJSPQ9cu6W7DcZGIsSe0e
|
||||||
VNycmg==
|
VNycmg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
|
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBXVDk0
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBXVDk0
|
||||||
bjZhMnRabGVLSHorWmRhd0NjTVF2VTZQVzZSeEkzK3c5WDBoM0FVCjB3cTB6NTYy
|
bjZhMnRabGVLSHorWmRhd0NjTVF2VTZQVzZSeEkzK3c5WDBoM0FVCjB3cTB6NTYy
|
||||||
@@ -71,8 +82,8 @@ sops:
|
|||||||
dQxXWnexmkLryDtddH1sdCdQh8e9D1IJFjuOD8JzsyWToWFuo01Cw27VLWGAGnFD
|
dQxXWnexmkLryDtddH1sdCdQh8e9D1IJFjuOD8JzsyWToWFuo01Cw27VLWGAGnFD
|
||||||
GZpp+A==
|
GZpp+A==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
|
- recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBzVFdr
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBzVFdr
|
||||||
TTNiK1VIRUk4N2l6TDcyMmw5U3ZRMzR2QlMrcy9XL1RLOCtzNUdnCnkvRmdmZ2gz
|
TTNiK1VIRUk4N2l6TDcyMmw5U3ZRMzR2QlMrcy9XL1RLOCtzNUdnCnkvRmdmZ2gz
|
||||||
@@ -81,8 +92,7 @@ sops:
|
|||||||
FY9SvbPWXVTcJiLwjpcD8tSMdqcTHTJXcLAWSCjyFF91ihBUanQ7TcdXvZTGfdY0
|
FY9SvbPWXVTcJiLwjpcD8tSMdqcTHTJXcLAWSCjyFF91ihBUanQ7TcdXvZTGfdY0
|
||||||
pOoJmg==
|
pOoJmg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
|
lastmodified: "2025-11-22T14:17:52Z"
|
||||||
lastmodified: "2026-06-13T04:02:11Z"
|
mac: ENC[AES256_GCM,data:QM1+5nj2tr9jv7gzFtH5eccn0UC0kMPK+mPu57E3UbPdyQoewFyBIbtkDddmr31VQmZjU9RB0vwtvY/lOgZuxRGQckckgj0ZZhdPAT7lKaUxLatnzOs8U3JWGWsc3vUM22yB5L5kuJSc/dx8XoXnSvL2gTwcygpxts4dLoj4Te8=,iv:B96/ZkxnaiwhQrSqUUsVHyzZ7tW6mDTeF0/tCCRdSUs=,tag:RVMKX8pOfpgVt/7Qn2smhg==,type:str]
|
||||||
mac: ENC[AES256_GCM,data:VWXa9HdGyPBkLQH5lgqioYbd3VxvL7PjuwiHrX353W+G4Lu/VaMHAz9AFN495cLyCm1dB4VwC773JmLNYKbCzHswQr4tpkp7AlIhvCbt+S0L5ZXLxOlVMd0vONGxQOQHhxQnRONXg9K2i7rTfTjGBdY1o/alswfsNrhaL7g/+OY=,iv:Z3MNOcTU9AQ8yEQgYxXKmv+09cXbF1RalrNXqJYTGUs=,tag:K1kps0EPAKYbQradY02yOQ==,type:str]
|
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.1
|
version: 3.11.0
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#:schema https://raw.githubusercontent.com/crate-ci/typos/refs/heads/master/config.schema.json
|
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
extend-exclude = [
|
extend-exclude = [
|
||||||
"secrets"
|
"secrets"
|
||||||
|
|||||||
Reference in New Issue
Block a user