Compare commits

...

57 Commits

Author SHA1 Message Date
1da80c49db fix(fcitx5/overlay): qq 2025-08-15 20:12:42 +08:00
8080d174ae chore: update flake.lock 2025-08-15 16:52:24 +08:00
0d39e2869b feat(wine): disable by default 2025-08-15 16:51:48 +08:00
953952f345 feat: disable minecraft server 😭 2025-08-15 16:51:23 +08:00
1f60272f14 feat: matrix-tuwunel 😋 2025-08-15 16:50:49 +08:00
e5474ffd29 feat(niri): maximize by default 2025-08-14 22:18:04 +08:00
dec6db7e8e feat: element-desktop 2025-08-14 21:19:47 +08:00
a966a7e81f feat(x16): moonlight 2025-08-14 21:19:34 +08:00
67b27c4079 chore: update flake.lock 2025-08-13 09:19:53 +08:00
e958163479 feat(nvim): move language servers to each language's .nix file 2025-08-13 09:18:49 +08:00
90cd4bdd84 feat(sddm): use cattpuccin 2025-08-12 12:50:46 +08:00
e1e3e96626 feat(niri): brightnessctl 2025-08-12 09:03:19 +08:00
16f11262ff feat(imxyy-nix-x16): persist gemini and claude 2025-08-12 09:02:50 +08:00
a2b63259ed feat(imxyy-nix-x16): power management 2025-08-12 09:02:03 +08:00
ab539b82ca fix(fcitx5/overlay): drop unecessary phases 2025-08-09 20:18:27 +08:00
05c2bc3627 fix(waybar): icon 2025-08-07 11:14:57 +08:00
464a162703 feat: rework fcitx5 overlay, avoid rebuild 2025-08-04 20:46:41 +08:00
8385671c4f chore: drop unused packages 2025-08-04 20:45:39 +08:00
433e26edaa feat: unfollow nixpkgs for niri, use binary cache; update flake.lock 2025-08-04 20:44:10 +08:00
c28d386c29 feat: persist gemini 2025-08-04 10:24:02 +08:00
a149d2a3df feat(cli): comma 2025-08-02 21:02:00 +08:00
ea02f5b023 chore: drop unused custom packages 2025-08-02 20:29:46 +08:00
bf904ec38a feat(fcitx5): update overlay 2025-08-02 18:25:02 +08:00
c419ac3a30 fix(nix): github token 2025-08-02 18:06:22 +08:00
244844242f feat(langs): java 2025-08-02 18:05:56 +08:00
f730d8d118 fix(zsh): use xdg.configHome in zdotdir 2025-08-02 18:05:09 +08:00
590343e5eb feat: update flake.lock; update sops-nix to use ssh key 2025-08-02 18:04:22 +08:00
5da17890cb feat(langs/rust): add ~/.cargo/bin to PATH 2025-07-30 22:34:51 +08:00
52692a4a47 feat(fcitx5): update overlay 2025-07-30 22:28:40 +08:00
f2cb379100 feat: prefer sjtug mirror over sjtu mirror due to stability 2025-07-30 22:28:23 +08:00
e6a2690baa feat: tidy 2025-07-27 22:11:59 +08:00
f642f9c9cc fix(server): qemu & virtio 2025-07-27 21:46:55 +08:00
7d08e1f5ef feat(audio): move to pipewire 2025-07-27 21:45:50 +08:00
3cb73506f1 chore: drop cava 2025-07-27 21:36:15 +08:00
4be7cd0c0f feat(btreset): use usbutils/usbreset 2025-07-27 20:51:58 +08:00
2d038b2ae2 feat(niri): disable auto scroll 2025-07-27 20:47:51 +08:00
dd8afc8954 refactor: overlay 2025-07-26 12:34:11 +08:00
e69600cc77 chore: update flake.lock 2025-07-26 12:33:07 +08:00
17ef457181 chore: drop unused softwares 2025-07-26 12:22:06 +08:00
a39b966a91 refactor: fcitx5 overlay 2025-07-26 12:19:59 +08:00
a0b044dbc9 feat(starship): speedup jj prompt 2025-07-24 21:48:43 +08:00
94764e7a5a feat: television (fuzzy finder) 2025-07-22 21:28:47 +08:00
fef786d317 feat(nix): github token 2025-07-22 21:28:27 +08:00
8ca0a6cc0f refactor: sops-nix 2025-07-22 21:21:41 +08:00
3263d72b59 feat(server): memos 2025-07-22 17:07:47 +08:00
1c7e5b9f05 feat(jj): set conflict-marker-style 2025-07-22 16:43:25 +08:00
1da34bf704 fix(headscale): RestartSec conflict 2025-07-22 16:43:25 +08:00
88107f9fe7 feat(server): authorize imxyy-nix-x16 2025-07-22 16:43:25 +08:00
5d1f622782 fix: immich 2025-07-22 16:42:43 +08:00
0ed99176ad chore: update flake.lock 2025-07-22 15:51:48 +08:00
4dddb0e803 chore(nvim): drop outdated config 2025-07-22 15:17:31 +08:00
4353f9da34 feat: qtct 2025-07-22 12:36:00 +08:00
66e772ce62 fix: imxyy-nix-x16 2025-07-18 23:57:21 +08:00
422259838b fix(imxyy-nix-server): NAS 2025-07-13 13:35:01 +08:00
390e75ce8e feat(imxyy-nix-x16/niri): scale 2025-07-13 13:34:44 +08:00
a3b627359b fix: systemd service restart 2025-07-13 13:31:48 +08:00
be75d12e9c chore(niri): update flake.lock 2025-07-13 13:17:18 +08:00
107 changed files with 1029 additions and 2048 deletions

View File

@@ -1,8 +1,7 @@
keys: keys:
- &imxyy-nix age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns - &imxyy-nix ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
- &imxyy-nix-server age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6 - &imxyy-nix-server ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
- &imxyy-nix-x16 age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq - &imxyy-nix-x16 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
- &imxyy-cloudwin age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8
creation_rules: creation_rules:
- path_regex: secrets/.*\.(yaml|toml|json|env|dae|txt|conf)$ - path_regex: secrets/.*\.(yaml|toml|json|env|dae|txt|conf)$
key_groups: key_groups:
@@ -10,4 +9,3 @@ creation_rules:
- *imxyy-nix - *imxyy-nix
- *imxyy-nix-server - *imxyy-nix-server
- *imxyy-nix-x16 - *imxyy-nix-x16
- *imxyy-cloudwin

View File

@@ -1,4 +1,8 @@
{ config, hostname, ... }: {
config,
hostname,
...
}:
{ {
# I prefer this to the default issue text # I prefer this to the default issue text
# ported from ArchLinux IIRC # ported from ArchLinux IIRC

View File

@@ -4,7 +4,7 @@
enable = true; enable = true;
host = "127.0.0.1"; host = "127.0.0.1";
port = 8089; port = 8089;
package = pkgs.stable.open-webui; package = pkgs.open-webui;
}; };
services.caddy.virtualHosts."ai.imxyy.top" = { services.caddy.virtualHosts."ai.imxyy.top" = {
extraConfig = '' extraConfig = ''

View File

@@ -1,13 +1,12 @@
{ {
config, config,
lib,
pkgs, pkgs,
sopsRoot, secrets,
... ...
}: }:
{ {
sops.secrets.et-imxyy-nix-server-nixremote = { sops.secrets.et-imxyy-nix-server-nixremote = {
sopsFile = sopsRoot + /et-imxyy-nix-server-nixremote.toml; sopsFile = secrets.et-imxyy-nix-server-nixremote;
format = "binary"; format = "binary";
}; };
environment.systemPackages = [ pkgs.easytier ]; environment.systemPackages = [ pkgs.easytier ];
@@ -15,10 +14,8 @@
enable = true; enable = true;
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server-nixremote.path}"; script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server-nixremote.path}";
serviceConfig = { serviceConfig = {
Restart = lib.mkOverride 500 "always"; Restart = "always";
RestartMaxDelaySec = lib.mkOverride 500 "1m"; RestartSec = 30;
RestartSec = lib.mkOverride 500 "100ms";
RestartSteps = lib.mkOverride 500 9;
User = "root"; User = "root";
}; };
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@@ -37,6 +34,7 @@
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIENauvvhVMLsUwH9cPYsvnOg7VCL3a4yEiKm8I524TE efl@efl-nix" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIENauvvhVMLsUwH9cPYsvnOg7VCL3a4yEiKm8I524TE efl@efl-nix"
]; ];

View File

@@ -7,9 +7,7 @@
} }
]; ];
services.postgresql.ensureDatabases = [ "coder" ]; services.postgresql.ensureDatabases = [ "coder" ];
virtualisation.oci-containers = { virtualisation.oci-containers.containers.coder = {
containers = {
coder = {
image = "ghcr.io/coder/coder:latest"; image = "ghcr.io/coder/coder:latest";
environment = { environment = {
CODER_ACCESS_URL = "https://coder.imxyy.top"; CODER_ACCESS_URL = "https://coder.imxyy.top";
@@ -26,8 +24,6 @@
]; ];
ports = [ "8086:8086" ]; ports = [ "8086:8086" ];
}; };
};
};
services.caddy.virtualHosts."coder.imxyy.top" = { services.caddy.virtualHosts."coder.imxyy.top" = {
extraConfig = '' extraConfig = ''
reverse_proxy :8086 { reverse_proxy :8086 {

View File

@@ -1,15 +1,11 @@
{ {
virtualisation.oci-containers = { virtualisation.oci-containers.containers.sun-panel = {
containers = {
sun-panel = {
image = "hslr/sun-panel:latest"; image = "hslr/sun-panel:latest";
volumes = [ volumes = [
"/var/lib/sun-panel:/app/conf" "/var/lib/sun-panel:/app/conf"
]; ];
ports = [ "8085:3002" ]; ports = [ "8085:3002" ];
}; };
};
};
services.caddy.virtualHosts."home.imxyy.top" = { services.caddy.virtualHosts."home.imxyy.top" = {
extraConfig = '' extraConfig = ''
reverse_proxy :8085 reverse_proxy :8085

View File

@@ -1,5 +1,9 @@
{ ... }: { ... }:
{ {
users.users.immich = {
home = "/mnt/nas/immich";
createHome = true;
};
services.immich = { services.immich = {
enable = true; enable = true;
host = "127.0.0.1"; host = "127.0.0.1";

View File

@@ -1,45 +1,68 @@
{ {
services.matrix-synapse = { config,
enable = true; secrets,
settings = { ...
server_name = "matrix.imxyy.top"; }:
public_baseurl = "https://matrix.imxyy.top";
listeners = [
{ {
port = 8094; sops.secrets.tuwunel-reg-token = {
bind_addresses = [ "127.0.0.1" ]; sopsFile = secrets.tuwunel-reg-token;
type = "http"; format = "binary";
tls = false; owner = config.services.matrix-tuwunel.user;
x_forwarded = true; group = config.services.matrix-tuwunel.group;
resources = [
{
names = [
"client"
"federation"
];
compress = true;
}
];
}
];
turn_uris = [ "turns:vkvm.imxyy.top:5349" ];
turn_shared_secret = "ac779a48c03bb451839569d295a29aa6ab8c264277bec2df9c9c7f5e22936288";
turn_user_lifetime = "1h";
database_type = "psycopg2";
database_args.database = "matrix-synapse";
}; };
extraConfigFiles = [ services.matrix-tuwunel = {
"/var/lib/matrix-synapse/secret" enable = true;
]; settings.global = {
address = [ "127.0.0.1" ];
port = [ 8094 ];
server_name = "imxyy.top";
allow_registration = true;
registration_token_file = config.sops.secrets.tuwunel-reg-token.path;
};
};
services.caddy.virtualHosts."imxyy.top" = {
extraConfig = ''
handle /.well-known/matrix/client {
header Content-Type application/json
header "Access-Control-Allow-Origin" "*"
respond `{"m.homeserver": {"base_url": "https://matrix.imxyy.top"}}` 200
}
'';
};
services.caddy.virtualHosts."imxyy.top:8448" = {
extraConfig = ''
reverse_proxy :8094
handle /.well-known/matrix/client {
header Content-Type application/json
header "Access-Control-Allow-Origin" "*"
respond `{"m.homeserver": {"base_url": "https://matrix.imxyy.top"}}` 200
}
'';
}; };
services.caddy.virtualHosts."matrix.imxyy.top" = { services.caddy.virtualHosts."matrix.imxyy.top" = {
extraConfig = '' extraConfig = ''
reverse_proxy :8094 reverse_proxy :8094
handle_path /_matrix {
reverse_proxy :8094 handle /.well-known/matrix/client {
header Content-Type application/json
header "Access-Control-Allow-Origin" "*"
respond `{"m.homeserver": {"base_url": "https://matrix.imxyy.top"}}` 200
} }
handle_path /_synapse/client { '';
};
services.caddy.virtualHosts."matrix.imxyy.top:8448" = {
extraConfig = ''
reverse_proxy :8094 reverse_proxy :8094
handle /.well-known/matrix/client {
header Content-Type application/json
header "Access-Control-Allow-Origin" "*"
respond `{"m.homeserver": {"base_url": "https://matrix.imxyy.top"}}` 200
} }
''; '';
}; };

View File

@@ -1,5 +1,6 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
{ {
/*
systemd.services."fabric1.20.6" = { systemd.services."fabric1.20.6" = {
description = "fabric 1.20.6 minecraft server"; description = "fabric 1.20.6 minecraft server";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@@ -8,9 +9,10 @@
WorkingDirectory = "/opt/minecraft/fabric1.20.6"; WorkingDirectory = "/opt/minecraft/fabric1.20.6";
ExecStart = "${lib.getExe' pkgs.openjdk21 "java"} -Xms1G -Xmx5G -jar fabric-server-mc.1.20.6-loader.0.15.11-launcher.1.0.1.jar"; ExecStart = "${lib.getExe' pkgs.openjdk21 "java"} -Xms1G -Xmx5G -jar fabric-server-mc.1.20.6-loader.0.15.11-launcher.1.0.1.jar";
Restart = "always"; Restart = "always";
RestartSec = "10s"; RestartSec = 120;
}; };
}; };
*/
my.persist = { my.persist = {
nixosDirs = [ nixosDirs = [
"/opt/minecraft" "/opt/minecraft"

View File

@@ -1,7 +1,7 @@
{ config, sopsRoot, ... }: { config, secrets, ... }:
{ {
sops.secrets.minio-env = { sops.secrets.minio-env = {
sopsFile = sopsRoot + /minio.env; sopsFile = secrets.minio;
format = "dotenv"; format = "dotenv";
}; };
services.minio = { services.minio = {

View File

@@ -3,7 +3,7 @@
lib, lib,
pkgs, pkgs,
username, username,
sopsRoot, secrets,
... ...
}: }:
{ {
@@ -131,17 +131,17 @@
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO imxyy@imxyy-nix" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO imxyy@imxyy-nix"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
]; ];
users.users.${username}.openssh.authorizedKeys.keys = [ users.users.${username}.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO imxyy@imxyy-nix" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO imxyy@imxyy-nix"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
]; ];
sops.secrets.dae-imxyy-nix-server = { sops.secrets.dae-imxyy-nix-server = {
sopsFile = sopsRoot + /dae-imxyy-nix-server.dae; sopsFile = secrets.dae-imxyy-nix-server;
format = "binary"; format = "binary";
}; };
services.dae = { services.dae = {
@@ -150,7 +150,7 @@
}; };
systemd.services.dae.after = [ "sops-nix.service" ]; systemd.services.dae.after = [ "sops-nix.service" ];
sops.secrets.mihomo = { sops.secrets.mihomo = {
sopsFile = sopsRoot + /mihomo.yaml; sopsFile = secrets.mihomo;
format = "yaml"; format = "yaml";
key = ""; key = "";
}; };
@@ -162,7 +162,7 @@
}; };
sops.secrets.frp-env = { sops.secrets.frp-env = {
sopsFile = sopsRoot + /frp.env; sopsFile = secrets.frp;
format = "dotenv"; format = "dotenv";
}; };
systemd.services.frp.serviceConfig.EnvironmentFile = [ systemd.services.frp.serviceConfig.EnvironmentFile = [
@@ -377,6 +377,20 @@
customDomains = [ "sy.imxyy.top" ]; customDomains = [ "sy.imxyy.top" ];
} }
{
name = "matrix-root-http";
type = "http";
localIP = "127.0.0.1";
localPort = 80;
customDomains = [ "imxyy.top" ];
}
{
name = "matrix-root-https";
type = "https";
localIP = "127.0.0.1";
localPort = 443;
customDomains = [ "imxyy.top" ];
}
{ {
name = "matrix-http"; name = "matrix-http";
type = "http"; type = "http";
@@ -391,6 +405,13 @@
localPort = 443; localPort = 443;
customDomains = [ "matrix.imxyy.top" ]; customDomains = [ "matrix.imxyy.top" ];
} }
{
name = "matrix-fed";
type = "tcp";
localIP = "127.0.0.1";
localPort = 8448;
remotePort = 8448;
}
{ {
name = "immich-http"; name = "immich-http";
@@ -407,6 +428,21 @@
customDomains = [ "immich.imxyy.top" ]; customDomains = [ "immich.imxyy.top" ];
} }
{
name = "memo-http";
type = "http";
localIP = "127.0.0.1";
localPort = 80;
customDomains = [ "memo.imxyy.top" ];
}
{
name = "memo-https";
type = "https";
localIP = "127.0.0.1";
localPort = 443;
customDomains = [ "memo.imxyy.top" ];
}
{ {
name = "minecraft"; name = "minecraft";
type = "tcp"; type = "tcp";
@@ -449,12 +485,6 @@
}; };
}; };
systemd.services."headscale" = { systemd.services."headscale" = {
serviceConfig = {
Restart = lib.mkOverride 500 "always";
RestartMaxDelaySec = lib.mkOverride 500 "1m";
RestartSec = lib.mkOverride 500 "100ms";
RestartSteps = lib.mkOverride 500 9;
};
after = [ after = [
"podman-obligator.service" "podman-obligator.service"
]; ];
@@ -464,7 +494,7 @@
}; };
sops.secrets.et-imxyy-nix-server = { sops.secrets.et-imxyy-nix-server = {
sopsFile = sopsRoot + /et-imxyy-nix-server.toml; sopsFile = secrets.et-imxyy-nix-server;
format = "binary"; format = "binary";
}; };
environment.systemPackages = [ pkgs.easytier ]; environment.systemPackages = [ pkgs.easytier ];
@@ -472,10 +502,8 @@
enable = true; enable = true;
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server.path}"; script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server.path}";
serviceConfig = { serviceConfig = {
Restart = lib.mkOverride 500 "always"; Restart = "always";
RestartMaxDelaySec = lib.mkOverride 500 "1m"; RestartSec = 30;
RestartSec = lib.mkOverride 500 "100ms";
RestartSteps = lib.mkOverride 500 9;
User = "root"; User = "root";
}; };
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@@ -485,9 +513,7 @@
]; ];
}; };
virtualisation.oci-containers = { virtualisation.oci-containers.containers.obligator = {
containers = {
obligator = {
image = "anderspitman/obligator:latest"; image = "anderspitman/obligator:latest";
volumes = [ volumes = [
"/var/lib/obligator:/data" "/var/lib/obligator:/data"
@@ -505,8 +531,6 @@
"1616" "1616"
]; ];
}; };
};
};
services.caddy.virtualHosts."headscale.imxyy.top" = { services.caddy.virtualHosts."headscale.imxyy.top" = {
extraConfig = '' extraConfig = ''
reverse_proxy :8080 { reverse_proxy :8080 {
@@ -571,6 +595,7 @@
"ai" "ai"
"sy" "sy"
"minio" "minio"
"immich"
]; ];
in in
{ {

View File

@@ -2,7 +2,7 @@
lib, lib,
config, config,
username, username,
sopsRoot, secrets,
... ...
}: }:
{ {
@@ -13,17 +13,16 @@
timeout = 0; timeout = 0;
}; };
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
systemd.services.nix-daemon = { systemd.services.nix-daemon = {
environment.TMPDIR = "/var/cache/nix"; environment.TMPDIR = "/var/cache/nix";
serviceConfig.CacheDirectory = "nix"; serviceConfig.CacheDirectory = "nix";
}; };
environment.variables.NIX_REMOTE = "daemon"; environment.variables.NIX_REMOTE = "daemon";
my.audio.enable = false;
sops.secrets.imxyy-nix-server-hashed-password = { sops.secrets.imxyy-nix-server-hashed-password = {
sopsFile = sopsRoot + /imxyy-nix-server-hashed-password.txt; sopsFile = secrets.imxyy-nix-server-hashed-password;
format = "binary"; format = "binary";
neededForUsers = true; neededForUsers = true;
}; };

View File

@@ -1,21 +1,20 @@
{ {
config, config,
sopsRoot, secrets,
... ...
}: }:
{ {
sops.secrets = { sops.secrets = {
flatnote-env = { flatnote-env = {
sopsFile = sopsRoot + /flatnote.env; sopsFile = secrets.flatnote;
format = "dotenv"; format = "dotenv";
}; };
siyuan-env = { siyuan-env = {
sopsFile = sopsRoot + /siyuan.env; sopsFile = secrets.siyuan;
format = "dotenv"; format = "dotenv";
}; };
}; };
virtualisation.oci-containers = { virtualisation.oci-containers.containers = {
containers = {
flatnotes = { flatnotes = {
image = "dullage/flatnotes:latest"; image = "dullage/flatnotes:latest";
volumes = [ volumes = [
@@ -44,6 +43,12 @@
]; ];
ports = [ "8095:6806" ]; ports = [ "8095:6806" ];
}; };
memos = {
image = "neosmemo/memos:stable";
volumes = [
"/mnt/nas/memos:/var/opt/memos"
];
ports = [ "8097:5230" ];
}; };
}; };
services.caddy.virtualHosts = { services.caddy.virtualHosts = {
@@ -57,5 +62,10 @@
reverse_proxy :8095 reverse_proxy :8095
''; '';
}; };
"memo.imxyy.top" = {
extraConfig = ''
reverse_proxy :8097
'';
};
}; };
} }

View File

@@ -1,7 +1,7 @@
{ config, sopsRoot, ... }: { config, secrets, ... }:
{ {
sops.secrets.vaultwarden-env = { sops.secrets.vaultwarden-env = {
sopsFile = sopsRoot + /vaultwarden.env; sopsFile = secrets.vaultwarden;
format = "dotenv"; format = "dotenv";
}; };
services.postgresql.ensureUsers = [ services.postgresql.ensureUsers = [

View File

@@ -13,7 +13,7 @@ let
in in
{ {
boot = { boot = {
initrd.kernelModules = [ initrd.kernelModules = lib.mkBefore [
"vfio_pci" "vfio_pci"
"vfio" "vfio"
"vfio_iommu_type1" "vfio_iommu_type1"

View File

@@ -4,7 +4,7 @@
localproxy_on = "export http_proxy=http://192.168.128.1:7890 https_proxy=http://192.168.128.1:7890 all_proxy=socks://192.168.128.1:7890"; localproxy_on = "export http_proxy=http://192.168.128.1:7890 https_proxy=http://192.168.128.1:7890 all_proxy=socks://192.168.128.1:7890";
}; };
my = { my = {
sops.sshKeyPath = "/home/${username}/.ssh/id_ed25519"; sops.sshKeyFile = "/home/${username}/.ssh/id_ed25519";
coding.all.enable = true; coding.all.enable = true;
coding.editor.vscode.enable = lib.mkForce false; coding.editor.vscode.enable = lib.mkForce false;
cli.misc.enable = true; cli.misc.enable = true;

View File

@@ -1,6 +1,4 @@
{ {
config,
lib,
pkgs, pkgs,
username, username,
... ...
@@ -10,8 +8,6 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
localsend localsend
rclone
wpsoffice-cn wpsoffice-cn
wps-office-fonts wps-office-fonts
ttf-wps-fonts ttf-wps-fonts
@@ -20,24 +16,33 @@
anki anki
ayugram-desktop ayugram-desktop
telegram-desktop
signal-desktop signal-desktop
discord element-desktop
qq qq
wechat wechat
gnome-clocks gnome-clocks
wineWowPackages.waylandFull
pavucontrol
pamixer
]; ];
programs.zsh = { programs.zsh = {
sessionVariables = { sessionVariables = {
PATH = "/home/${username}/bin:$PATH"; PATH = "/home/${username}/bin:$PATH";
}; };
}; };
programs.niri.settings = {
environment.STEAM_FORCE_DESKTOPUI_SCALING = "1.25";
outputs = {
eDP-1 = {
enable = true;
mode = {
width = 1920;
height = 1200;
refresh = 60.002;
};
scale = 1.25;
};
};
};
}; };
my = { my = {
@@ -45,8 +50,7 @@
cli.all.enable = true; cli.all.enable = true;
coding.all.enable = true; coding.all.enable = true;
desktop.all.enable = true; desktop.all.enable = true;
virt.moonlight.enable = true;
desktop.browser.librewolf.enable = lib.mkForce false;
i18n.fcitx5.enable = true; i18n.fcitx5.enable = true;
@@ -92,15 +96,6 @@
"image/png" = imageviewer; "image/png" = imageviewer;
"image/webp" = imageviewer; "image/webp" = imageviewer;
}; };
extraBookmarks =
let
homedir = config.my.home.home.homeDirectory;
in
[
"file://${homedir}/NAS NAS"
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
];
}; };
persist = { persist = {
enable = true; enable = true;
@@ -118,23 +113,25 @@
".local/state" ".local/state"
".local/share/Anki2" ".local/share/Anki2"
".local/share/shotwell" ".local/share/shotwell"
".local/share/cheat.sh"
".local/share/Kingsoft" ".local/share/Kingsoft"
".local/share/AyuGramDesktop" ".local/share/AyuGramDesktop"
".local/share/TelegramDesktop"
".config/Signal" ".config/Signal"
".config/discord" ".config/Element"
".config/QQ" ".config/QQ"
".xwechat" ".xwechat"
".config/Kingsoft" ".config/Kingsoft"
".config/dconf" ".config/dconf"
".config/gh"
".config/pulse"
".config/pip" ".config/pip"
".config/libreoffice"
".config/sunshine" ".config/sunshine"
".gemini"
".claude"
".claude-code-router"
];
homeFiles = [
".claude.json"
]; ];
}; };
}; };

View File

@@ -1,8 +1,7 @@
{ {
config, config,
lib,
pkgs, pkgs,
sopsRoot, secrets,
... ...
}: }:
{ {
@@ -10,10 +9,51 @@
"biosdevname=0" "biosdevname=0"
"net.ifnames=0" "net.ifnames=0"
]; ];
networking.networkmanager.enable = true; networking = {
networkmanager.enable = true;
firewall.enable = false;
nftables = {
enable = true;
flushRuleset = true;
ruleset = ''
table inet firewall {
set LANv4 {
type ipv4_addr
flags interval
elements = { 10.0.0.0/8, 100.64.0.0/10, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 }
}
set LANv6 {
type ipv6_addr
flags interval
elements = { fd00::/8, fe80::/10 }
}
chain output {
type filter hook output priority 100; policy accept;
}
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state invalid drop
ct state established,related accept
ip saddr @LANv4 accept
ip6 saddr @LANv6 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
}
'';
};
};
sops.secrets.dae-imxyy-nix-x16 = { sops.secrets.dae-imxyy-nix-x16 = {
sopsFile = sopsRoot + /dae-imxyy-nix-x16.dae; sopsFile = secrets.dae-imxyy-nix-x16;
format = "binary"; format = "binary";
}; };
services.dae = { services.dae = {
@@ -22,7 +62,7 @@
}; };
systemd.services.dae.after = [ "sops-nix.service" ]; systemd.services.dae.after = [ "sops-nix.service" ];
sops.secrets.mihomo = { sops.secrets.mihomo = {
sopsFile = sopsRoot + /mihomo.yaml; sopsFile = secrets.mihomo;
format = "yaml"; format = "yaml";
key = ""; key = "";
}; };
@@ -34,7 +74,7 @@
}; };
sops.secrets.et-imxyy-nix-x16 = { sops.secrets.et-imxyy-nix-x16 = {
sopsFile = sopsRoot + /et-imxyy-nix-x16.toml; sopsFile = secrets.et-imxyy-nix-x16;
format = "binary"; format = "binary";
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -44,10 +84,8 @@
enable = true; enable = true;
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-x16.path}"; script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-x16.path}";
serviceConfig = { serviceConfig = {
Restart = lib.mkOverride 500 "always"; Restart = "always";
RestartMaxDelaySec = lib.mkOverride 500 "1m"; RestartSec = 30;
RestartSec = lib.mkOverride 500 "100ms";
RestartSteps = lib.mkOverride 500 9;
User = "root"; User = "root";
}; };
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];

View File

@@ -1,9 +1,8 @@
{ {
lib,
pkgs, pkgs,
config, config,
username, username,
sopsRoot, secrets,
... ...
}: }:
{ {
@@ -36,36 +35,6 @@
}; };
environment.variables.NIX_REMOTE = "daemon"; environment.variables.NIX_REMOTE = "daemon";
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = false;
alsa.support32Bit = false;
pulse.enable = false;
audio.enable = false;
};
services.pulseaudio = {
enable = true;
support32Bit = true;
package = pkgs.pulseaudioFull;
extraConfig = ''
load-module module-switch-on-connect
unload-module module-suspend-on-idle
'';
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
Disable = "HeadSet";
MultiProfile = "multiple";
};
};
};
users.extraUsers.${username}.extraGroups = [ "audio" ];
fonts = { fonts = {
enableDefaultPackages = false; enableDefaultPackages = false;
fontDir.enable = true; fontDir.enable = true;
@@ -102,6 +71,9 @@
services.printing.enable = true; services.printing.enable = true;
services.upower.enable = true;
services.power-profiles-daemon.enable = true;
services.keyd = { services.keyd = {
enable = true; enable = true;
keyboards.default.settings = { keyboards.default.settings = {
@@ -134,7 +106,7 @@
]; ];
sops.secrets.imxyy-nix-rclone = { sops.secrets.imxyy-nix-rclone = {
sopsFile = sopsRoot + /imxyy-nix-rclone.conf; sopsFile = secrets.imxyy-nix-rclone;
format = "binary"; format = "binary";
}; };
fileSystems = { fileSystems = {
@@ -154,21 +126,6 @@
"vfs-cache-mode=full" "vfs-cache-mode=full"
]; ];
}; };
"/home/${username}/NAS" = {
device = "//10.0.0.1/share";
fsType = "cifs";
options = [
"username=nas"
"password=nasshare"
"x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"
"nodev"
"nofail"
"uid=1000"
"gid=100"
"vers=3"
"rw"
];
};
}; };
my.persist.nixosDirs = [ "/etc/NetworkManager/system-connections" ]; my.persist.nixosDirs = [ "/etc/NetworkManager/system-connections" ];

View File

@@ -1,6 +1,4 @@
{ {
config,
lib,
pkgs, pkgs,
username, username,
... ...
@@ -10,8 +8,6 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
localsend localsend
rclone
wpsoffice-cn wpsoffice-cn
wps-office-fonts wps-office-fonts
ttf-wps-fonts ttf-wps-fonts
@@ -20,18 +16,12 @@
anki anki
ayugram-desktop ayugram-desktop
telegram-desktop
signal-desktop signal-desktop
discord element-desktop
qq qq
wechat wechat
gnome-clocks gnome-clocks
wineWowPackages.waylandFull
pavucontrol
pamixer
]; ];
programs.zsh = { programs.zsh = {
shellAliases = { shellAliases = {
@@ -91,8 +81,6 @@
coding.all.enable = true; coding.all.enable = true;
desktop.all.enable = true; desktop.all.enable = true;
desktop.browser.librewolf.enable = lib.mkForce false;
i18n.fcitx5.enable = true; i18n.fcitx5.enable = true;
xdg = { xdg = {
@@ -137,16 +125,6 @@
"image/png" = imageviewer; "image/png" = imageviewer;
"image/webp" = imageviewer; "image/webp" = imageviewer;
}; };
extraBookmarks =
let
homedir = config.my.home.home.homeDirectory;
in
[
"file://${homedir}/Documents/%E7%8F%AD%E7%BA%A7%E4%BA%8B%E5%8A%A1 "
"file://${homedir}/NAS NAS"
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
];
}; };
persist = { persist = {
enable = true; enable = true;
@@ -162,23 +140,20 @@
".local/state" ".local/state"
".local/share/Anki2" ".local/share/Anki2"
".local/share/shotwell" ".local/share/shotwell"
".local/share/cheat.sh"
".local/share/Kingsoft" ".local/share/Kingsoft"
".local/share/AyuGramDesktop" ".local/share/AyuGramDesktop"
".local/share/TelegramDesktop"
".config/Signal" ".config/Signal"
".config/discord" ".config/Element"
".config/QQ" ".config/QQ"
".xwechat" ".xwechat"
".config/Kingsoft" ".config/Kingsoft"
".config/dconf" ".config/dconf"
".config/gh"
".config/pulse"
".config/pip" ".config/pip"
".config/libreoffice"
".config/sunshine" ".config/sunshine"
".gemini"
]; ];
}; };
}; };

View File

@@ -2,8 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
sopsRoot, secrets,
username,
... ...
}: }:
{ {
@@ -86,7 +85,7 @@
}; };
sops.secrets.dae-imxyy-nix = { sops.secrets.dae-imxyy-nix = {
sopsFile = sopsRoot + /dae-imxyy-nix.dae; sopsFile = secrets.dae-imxyy-nix;
format = "binary"; format = "binary";
}; };
services.dae = { services.dae = {
@@ -95,7 +94,7 @@
}; };
systemd.services.dae.after = [ "sops-nix.service" ]; systemd.services.dae.after = [ "sops-nix.service" ];
sops.secrets.mihomo = { sops.secrets.mihomo = {
sopsFile = sopsRoot + /mihomo.yaml; sopsFile = secrets.mihomo;
format = "yaml"; format = "yaml";
key = ""; key = "";
}; };
@@ -107,7 +106,7 @@
}; };
sops.secrets.et-imxyy-nix = { sops.secrets.et-imxyy-nix = {
sopsFile = sopsRoot + /et-imxyy-nix.toml; sopsFile = secrets.et-imxyy-nix;
format = "binary"; format = "binary";
}; };
environment.systemPackages = [ pkgs.easytier ]; environment.systemPackages = [ pkgs.easytier ];
@@ -115,10 +114,8 @@
enable = true; enable = true;
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix.path}"; script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix.path}";
serviceConfig = { serviceConfig = {
Restart = lib.mkOverride 500 "always"; Restart = "always";
RestartMaxDelaySec = lib.mkOverride 500 "1m"; RestartSec = 30;
RestartSec = lib.mkOverride 500 "100ms";
RestartSteps = lib.mkOverride 500 9;
User = "root"; User = "root";
}; };
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];

View File

@@ -3,7 +3,7 @@
pkgs, pkgs,
config, config,
username, username,
sopsRoot, secrets,
... ...
}: }:
let let
@@ -22,7 +22,7 @@ let
temp = line.split(" ") temp = line.split(" ")
bus = temp[1] bus = temp[1]
device = temp[3][:-1] device = temp[3][:-1]
subprocess.run(["${lib.getExe usbreset}", f"/dev/bus/usb/{bus}/{device}"]) subprocess.run(["${lib.getExe' pkgs.usbutils "usbreset"}", f"{bus}/{device}"])
return True return True
if __name__ == "__main__": if __name__ == "__main__":
@@ -36,44 +36,6 @@ let
with open("/tmp/.btreseted", "w"): with open("/tmp/.btreseted", "w"):
... ...
''; '';
usbreset = pkgs.writeCBin "usbreset" ''
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc, char **argv)
{
const char *filename;
int fd;
int rc;
if (argc != 2) {
fprintf(stderr, "Usage: usbreset device-filename\n");
return 1;
}
filename = argv[1];
fd = open(filename, O_WRONLY);
if (fd < 0) {
perror("Error opening output file");
return 1;
}
printf("Resetting USB device %s\n", filename);
rc = ioctl(fd, USBDEVFS_RESET, 0);
if (rc < 0) {
perror("Error in ioctl");
return 1;
}
printf("Reset successful\n");
close(fd);
return 0;
}
'';
in in
{ {
security.pam.loginLimits = [ security.pam.loginLimits = [
@@ -111,36 +73,6 @@ in
}; };
environment.variables.NIX_REMOTE = "daemon"; environment.variables.NIX_REMOTE = "daemon";
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = false;
alsa.support32Bit = false;
pulse.enable = false;
audio.enable = false;
};
services.pulseaudio = {
enable = true;
support32Bit = true;
package = pkgs.pulseaudioFull;
extraConfig = ''
load-module module-switch-on-connect
unload-module module-suspend-on-idle
'';
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
Disable = "HeadSet";
MultiProfile = "multiple";
};
};
};
users.extraUsers.${username}.extraGroups = [ "audio" ];
fonts = { fonts = {
enableDefaultPackages = false; enableDefaultPackages = false;
fontDir.enable = true; fontDir.enable = true;
@@ -225,7 +157,7 @@ in
]; ];
sops.secrets.imxyy-nix-rclone = { sops.secrets.imxyy-nix-rclone = {
sopsFile = sopsRoot + /imxyy-nix-rclone.conf; sopsFile = secrets.imxyy-nix-rclone;
format = "binary"; format = "binary";
}; };
fileSystems = { fileSystems = {

231
flake.lock generated
View File

@@ -37,11 +37,11 @@
"base16-helix": { "base16-helix": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1748408240, "lastModified": 1752979451,
"narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-helix", "repo": "base16-helix",
"rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -98,6 +98,26 @@
"type": "github" "type": "github"
} }
}, },
"catppuccin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1754950929,
"narHash": "sha256-75hsUMshZ5ZlO/X2JWfZqKHPM66uhUNsDG/Zozwh/xs=",
"owner": "catppuccin",
"repo": "nix",
"rev": "45512611f1537c75e439d508409efc6901286645",
"type": "github"
},
"original": {
"owner": "catppuccin",
"repo": "nix",
"type": "github"
}
},
"chaotic": { "chaotic": {
"inputs": { "inputs": {
"flake-schemas": "flake-schemas", "flake-schemas": "flake-schemas",
@@ -107,11 +127,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1752141190, "lastModified": 1755169038,
"narHash": "sha256-RHNq77Z84BtLTwyRtrBffm5V9006Dqw4vh3vrvULlxM=", "narHash": "sha256-lIAE8ou7ukvoOE0nZ2lNcl/n8mnj6m2cGsx9U7Xhew4=",
"owner": "chaotic-cx", "owner": "chaotic-cx",
"repo": "nyx", "repo": "nyx",
"rev": "ef0794b8e94eea166407141f7e92da75f6df925a", "rev": "5efc0389eaca14046e1ee2068bcba6fe64cf6e2e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -128,11 +148,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1750940343, "lastModified": 1754000084,
"narHash": "sha256-qmc/jreM09MOwQ8dOa/+yyh99rU7TowSqo8L33VHfto=", "narHash": "sha256-m3UMp3dJfGptOR8WDGYgaHfax7Wpad0wKfOI8xZLC1s=",
"owner": "Bali10050", "owner": "Bali10050",
"repo": "Darkly", "repo": "Darkly",
"rev": "77770c8d3c35f7ad39da2c57122c360096df0aac", "rev": "39b4100b86c4531a5729e00e1584df9970b02468",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -171,11 +191,11 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1752129689, "lastModified": 1755240331,
"narHash": "sha256-0Xq5tZbvgZvxbbxv6kRHFuZE4Tq2za016NXh32nX0+Q=", "narHash": "sha256-wEtw76+R/TOHEIjYOnxADC91G6s422HGruAngbjzsDw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "70bb04a7de606a75ba0a2ee9d47b99802780b35d", "rev": "3f076d4502001c64877099093318b2dbd8b062a1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -457,11 +477,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1748528448, "lastModified": 1751817769,
"narHash": "sha256-Tyn+PgBm78Ibq28/WbEz8+pYJZMdbJKsyXMCpT6TjrM=", "narHash": "sha256-j7ORyAJFNxYWwF+6fs2z5IcJ40TpVwrkFYU9/CGHwfA=",
"owner": "imxyy1soope1", "owner": "imxyy1soope1",
"repo": "go-musicfox", "repo": "go-musicfox",
"rev": "1870fd3501631577ad4daef1489b03885abcb037", "rev": "179b9440b6f209e7fd6ade589117b72bdd9042a6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -500,11 +520,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751824240, "lastModified": 1755121891,
"narHash": "sha256-aDDC0CHTlL7QDKWWhdbEgVPK6KwWt+ca0QkmHYZxMzI=", "narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "fd9e55f5fac45a26f6169310afca64d56b681935", "rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -520,11 +540,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752202894, "lastModified": 1755229570,
"narHash": "sha256-knafgng4gCjZIUMyAEWjxxdols6n/swkYnbWr+oF+1w=", "narHash": "sha256-soZegto0xXzG2zYlu/zjknDHv0Z7tRS5EQs+Z/VRTBg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "fab659b346c0d4252208434c3c4b3983a4b38fec", "rev": "11626a4383b458f8dc5ea3237eaa04e8ab1912f3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -542,11 +562,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1743604125, "lastModified": 1752603129,
"narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=", "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a", "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -595,11 +615,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751529406, "lastModified": 1755151620,
"narHash": "sha256-jwKDHyUycp678zDYa5Hyfq3msO73YMXdZPxp96dU7po=", "narHash": "sha256-fVMalQZ+tRXR8oue2SdWu4CdlsS2NII+++rI40XQ8rU=",
"owner": "Jovian-Experiments", "owner": "Jovian-Experiments",
"repo": "Jovian-NixOS", "repo": "Jovian-NixOS",
"rev": "b2e5ce654e4f5bf8905c2e07a96dcf4966e6277d", "rev": "16e12d22754d97064867006acae6e16da7a142a6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -658,21 +678,17 @@
"inputs": { "inputs": {
"niri-stable": "niri-stable", "niri-stable": "niri-stable",
"niri-unstable": "niri-unstable", "niri-unstable": "niri-unstable",
"nixpkgs": [ "nixpkgs": "nixpkgs_5",
"nixpkgs" "nixpkgs-stable": "nixpkgs-stable",
],
"nixpkgs-stable": [
"nixpkgs-stable"
],
"xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1752078530, "lastModified": 1755104498,
"narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=", "narHash": "sha256-kMosXLeEB43OtUKvhvzikKfFLpv7H7JzObCQO0j4X34=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf", "rev": "22a24ab05a9f4b3a94fba0aa0d8d850e6269241a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -701,11 +717,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1750791124, "lastModified": 1755074352,
"narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=", "narHash": "sha256-I+kpboTzfMwRVK76OoTmHStrGuzJPcmvZKxmlmL9q+A=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "37458d94b288945f6cfbd3c5c233f634d59f246c", "rev": "af9ce533100b49e8bc879b557ab830f5d3a18805",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -804,11 +820,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752199438, "lastModified": 1755171343,
"narHash": "sha256-xSBMmGtq8K4Qv80TMqREmESCAsRLJRHAbFH2T/2Bf1Y=", "narHash": "sha256-h6bbfhqWcHlx9tcyYa7dhaEiNpusLCcFYkJ/AnltLW8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "d34d9412556d3a896e294534ccd25f53b6822e80", "rev": "e37cfef071466a9ca649f6899aff05226ce17e9e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -819,11 +835,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1751984180, "lastModified": 1755027561,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -847,11 +863,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1752206449, "lastModified": 1755243717,
"narHash": "sha256-NVAbC/s4CupABWGXF8M9mDiVw/n0YCftxwc1KatVjDk=", "narHash": "sha256-x2YnDp3CsXwrRMaUHtNacD15uG7I9+IRzodafD3DjHc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1bd4d0d4a678d48b63eb18f457d74df2fcee6c69", "rev": "b4516d45cfdf4b37c1643eafcefe8620896a8aeb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -863,11 +879,27 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1752203688, "lastModified": 1754937576,
"narHash": "sha256-uJ054F5PVGPu5SvLPMevhdY/EfK0X5DUyRtXhQYNUyo=", "narHash": "sha256-3sWA5WJybUE16kIMZ3+uxcxKZY/JRR4DFBqLdSLBo7w=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ddae11e58c0c345bf66efbddbf2192ed0e58f896",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1755243528,
"narHash": "sha256-YGBq/8D3gWuwLmDZb63h4a21GOMquBH8JcZsrJFL43Y=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a70a12c75e13aa546c20ce0fe515de634d52c39e", "rev": "c3a6f30dea7d1e58267488a687db1a6f07ff6063",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -879,11 +911,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1752124863, "lastModified": 1755166611,
"narHash": "sha256-5rWuf6RAlMDp/CAEuyYEz7ryxzgjxOCgUDhWEef864c=", "narHash": "sha256-sk8pK8kWz4IE4ErAjKE1d8tMChY6VQR32U4yS68FIog=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "40de82b434526744da778ed53c742c1282d9e75e", "rev": "1a341e3c908f4a3105e737bd13af0318dc06fbe3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -943,11 +975,27 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1751984180, "lastModified": 1755027561,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1755027561,
"narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -960,14 +1008,14 @@
"nur": { "nur": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_5" "nixpkgs": "nixpkgs_6"
}, },
"locked": { "locked": {
"lastModified": 1752207112, "lastModified": 1755102471,
"narHash": "sha256-dnVoQSGQqEGJQzS6iHAG95c0oFrezzBinwu1bDLj9J4=", "narHash": "sha256-ecWsZvrU/v7phSRIulxUYoCZ+i8s+mQ0ecmxxcgHUko=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "f166dc14862dfec043f9545e8291cc4402f8b866", "rev": "94c6c5b9798480dc220ee2cc8b1ce93a472a8d8f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1001,28 +1049,9 @@
"type": "github" "type": "github"
} }
}, },
"quickshell": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1752146885,
"narHash": "sha256-ZJK989GL+bTCQSxbG8v8/7tHMCEl/FPovkeDBNyClQE=",
"ref": "refs/heads/master",
"rev": "d7079b75241c6e2b67f2429996fa7679ffc052e2",
"revCount": 616,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"root": { "root": {
"inputs": { "inputs": {
"catppuccin": "catppuccin",
"chaotic": "chaotic", "chaotic": "chaotic",
"darkly": "darkly", "darkly": "darkly",
"fenix": "fenix", "fenix": "fenix",
@@ -1037,10 +1066,9 @@
"nixpkgs-unstable" "nixpkgs-unstable"
], ],
"nixpkgs-master": "nixpkgs-master", "nixpkgs-master": "nixpkgs-master",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable_2",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur", "nur": "nur",
"quickshell": "quickshell",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"stylix": "stylix", "stylix": "stylix",
"zen": "zen" "zen": "zen"
@@ -1049,11 +1077,11 @@
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1752086493, "lastModified": 1755004716,
"narHash": "sha256-USpVUdiWXDfPoh+agbvoBQaBhg3ZdKZgHXo/HikMfVo=", "narHash": "sha256-TbhPR5Fqw5LjAeI3/FOPhNNFQCF3cieKCJWWupeZmiA=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "6e3abe164b9036048dce1a3aa65a7e7e5200c0d3", "rev": "b2a58b8c6eff3c3a2c8b5c70dbf69ead78284194",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1071,11 +1099,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751856221, "lastModified": 1755139244,
"narHash": "sha256-/QE1eV0ckFvgRMcKjZqgdJDoXFNwSMepwRoBjaw2MCk=", "narHash": "sha256-SN1BFA00m+siVAQiGLtTwjv9LV9TH5n8tQcSziV6Nv4=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "34cae4b56929c5b340e1c5b10d9a98a425b2a51e", "rev": "aeae248beb2a419e39d483dd9b7fec924aba8d4d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1091,15 +1119,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751606940, "lastModified": 1755217133,
"narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=", "narHash": "sha256-rnc6cHwCz/o6/pjDiwODNXRxtKfewjho+2ogvDkbiBU=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d", "rev": "0936ef21bed8aae3cc15a913e1445f0df28e19dd",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Mic92", "owner": "Mic92",
"ref": "pull/779/merge",
"repo": "sops-nix", "repo": "sops-nix",
"type": "github" "type": "github"
} }
@@ -1125,11 +1154,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1752201883, "lastModified": 1755211397,
"narHash": "sha256-SZVbQ4YThvYU50cJ4W4GNMy7/rVOJI8qmXqbEcRNsug=", "narHash": "sha256-kw6iLWUj6+fiEpuc8ntrIzJ2gdS36wIcRINbKU0AIbA=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "d395780b9c5c36f191b990b2021c71af180a1982", "rev": "928ca832d22ab3167b49dc5f4d52ff5d26b0b52a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1269,11 +1298,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1751228685, "lastModified": 1754533920,
"narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=", "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b", "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1290,11 +1319,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752164817, "lastModified": 1755199018,
"narHash": "sha256-LJFIx27IOUowLsJn5wci9mHZ4CesJsiAivQWDjnZPCc=", "narHash": "sha256-y7dM6ihF4feDgbssaeFxKXjsJb6Rzjz1brc17kSkcoQ=",
"owner": "0xc000022070", "owner": "0xc000022070",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "9193992c4c2c4349b4280ec2b49648cae208fe63", "rev": "8bf64e38baa26429c31d0623c3f16812b794b436",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -13,8 +13,9 @@
# Nyxpkgs # Nyxpkgs
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
# SOPS # TODO: sops-nix: remove pr patch once merged
sops-nix.url = "github:Mic92/sops-nix"; # https://github.com/Mic92/sops-nix/pull/779
sops-nix.url = "github:Mic92/sops-nix/pull/779/merge";
sops-nix.inputs.nixpkgs.follows = "nixpkgs"; sops-nix.inputs.nixpkgs.follows = "nixpkgs";
# Home manager # Home manager
@@ -29,11 +30,6 @@
# Niri # Niri
niri.url = "github:sodiboo/niri-flake"; niri.url = "github:sodiboo/niri-flake";
niri.inputs.nixpkgs.follows = "nixpkgs";
niri.inputs.nixpkgs-stable.follows = "nixpkgs-stable";
quickshell.url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
quickshell.inputs.nixpkgs.follows = "nixpkgs";
darkly.url = "github:Bali10050/Darkly"; darkly.url = "github:Bali10050/Darkly";
darkly.inputs.nixpkgs.follows = "nixpkgs"; darkly.inputs.nixpkgs.follows = "nixpkgs";
@@ -55,6 +51,9 @@
zen.url = "github:0xc000022070/zen-browser-flake"; zen.url = "github:0xc000022070/zen-browser-flake";
zen.inputs.nixpkgs.follows = "nixpkgs"; zen.inputs.nixpkgs.follows = "nixpkgs";
catppuccin.url = "github:catppuccin/nix";
catppuccin.inputs.nixpkgs.follows = "nixpkgs";
infuse.url = "git+https://codeberg.org/amjoseph/infuse.nix"; infuse.url = "git+https://codeberg.org/amjoseph/infuse.nix";
infuse.flake = false; infuse.flake = false;
@@ -71,10 +70,10 @@
let let
inherit (self) outputs; inherit (self) outputs;
vars = import ./vars.nix; vars = import ./vars.nix;
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed; forAllSystems = lib.genAttrs lib.systems.flakeExposed;
forAllHosts = forAllHosts =
mkSystem: mkSystem:
nixpkgs.lib.attrsets.mergeAttrsList ( lib.mergeAttrsList (
builtins.map (hostname: { builtins.map (hostname: {
${hostname} = mkSystem hostname; ${hostname} = mkSystem hostname;
}) (builtins.attrNames (builtins.readDir ./config/hosts)) }) (builtins.attrNames (builtins.readDir ./config/hosts))
@@ -139,17 +138,6 @@
darkly-qt5 = inputs.darkly.packages.${final.system}.darkly-qt5; darkly-qt5 = inputs.darkly.packages.${final.system}.darkly-qt5;
darkly-qt6 = inputs.darkly.packages.${final.system}.darkly-qt6; darkly-qt6 = inputs.darkly.packages.${final.system}.darkly-qt6;
}) })
(final: prev: {
quickshell = inputs.quickshell.packages.${final.system}.default.override {
withJemalloc = true;
withQtSvg = true;
withWayland = true;
withPipewire = false;
withPam = false;
withX11 = false;
withHyprland = false;
};
})
(final: prev: { (final: prev: {
inherit lib; inherit lib;
}) })
@@ -185,8 +173,16 @@
outputs outputs
hostname hostname
; ;
sopsRoot = ./secrets; secrets =
} // vars; with lib.haumea;
load {
src = ./secrets;
loader = [
(matchers.always loaders.path)
];
};
}
// vars;
modules = modules =
(lib.umport { (lib.umport {
paths = [ ./modules ]; paths = [ ./modules ];
@@ -205,6 +201,7 @@
inputs.impermanence.nixosModules.impermanence inputs.impermanence.nixosModules.impermanence
inputs.home-manager.nixosModules.default inputs.home-manager.nixosModules.default
inputs.niri.nixosModules.niri inputs.niri.nixosModules.niri
inputs.catppuccin.nixosModules.catppuccin
home home
pkgsConf pkgsConf
]; ];

26
modules/audio.nix Normal file
View File

@@ -0,0 +1,26 @@
{
config,
lib,
pkgs,
username,
...
}:
lib.my.makeSwitch {
inherit config;
default = true;
optionName = "default audio settings";
optionPath = [ "audio" ];
config' = {
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
audio.enable = true;
};
users.extraUsers.${username}.extraGroups = [ "audio" ];
my.persist.homeDirs = [ ".local/state/wireplumber" ];
my.home.home.packages = [ pkgs.pwvucontrol ];
};
}

20
modules/bluetooth.nix Normal file
View File

@@ -0,0 +1,20 @@
{ config, lib, ... }:
lib.my.makeSwitch {
inherit config;
default = true;
optionName = "default bluetooth settings";
optionPath = [ "bluetooth" ];
config' = {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
Disable = "HeadSet";
MultiProfile = "multiple";
};
};
};
};
}

View File

@@ -9,7 +9,6 @@ lib.my.makeSwitch {
]; ];
config' = { config' = {
my.cli.media = { my.cli.media = {
cava.enable = true;
go-musicfox.enable = true; go-musicfox.enable = true;
mpd.enable = true; mpd.enable = true;
ffmpeg.enable = true; ffmpeg.enable = true;

View File

@@ -1,167 +0,0 @@
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
mode = normal
# Accepts only non-negative values.
framerate = 60
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-200). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
bars = 0
bar_width = 5
bar_spacing = 1
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
[input]
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
method = pulse
source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
[output]
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
# 'noncurses' is for systems that does not suport ncurses.
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
method = ncurses
# Visual styles. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
style = mono
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# [color]
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
# ; background = black
# ; foreground = cyan
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
# gradient = 1
# gradient_color_1 = '#0099ff'
# gradient_color_2 = '#ff3399'
[smoothing]
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
# Higher values means smoother, but less precise. Set to 0 to disable.
; integral = 0.7
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
; monstercat = 1
; waves = 1
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
; gravity = 2
# In bar height, bars that would have been lower that this will not be drawn.
; ignore = 0
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more then one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
#; 1 = 1 # bass
#; 2 = 1
#; 3 = 1 # midtone
#; 4 = 1
#; 5 = 1 # treble
1=1
2=1
3=2
4=1
5=1
[color]
#background = '#191724'
gradient = 1
gradient_count = 6
gradient_color_1 = '#31748f'
gradient_color_2 = '#9ccfd8'
gradient_color_3 = '#c4a7e7'
gradient_color_4 = '#ebbcba'
gradient_color_5 = '#f6c177'
gradient_color_6 = '#eb6f92'
[color]
gradient = 1
gradient_color_1 = '#94e2d5'
gradient_color_2 = '#89dceb'
gradient_color_3 = '#74c7ec'
gradient_color_4 = '#89b4fa'
gradient_color_5 = '#cba6f7'
gradient_color_6 = '#f5c2e7'
gradient_color_7 = '#eba0ac'
gradient_color_8 = '#f38ba8'

View File

@@ -1,167 +0,0 @@
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
mode = normal
# Accepts only non-negative values.
framerate = 60
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-200). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
bars = 0
bar_width = 2
bar_spacing = 1
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
[input]
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
method = pulse
source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
[output]
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
# 'noncurses' is for systems that does not suport ncurses.
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
method = ncurses
# Visual styles. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
style = mono
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# [color]
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
# ; background = black
# ; foreground = cyan
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
# gradient = 1
# gradient_color_1 = '#0099ff'
# gradient_color_2 = '#ff3399'
[smoothing]
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
# Higher values means smoother, but less precise. Set to 0 to disable.
; integral = 0.7
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
; monstercat = 1
; waves = 1
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
; gravity = 1
# In bar height, bars that would have been lower that this will not be drawn.
; ignore = 0
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more then one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
#; 1 = 1 # bass
#; 2 = 1
#; 3 = 1 # midtone
#; 4 = 1
#; 5 = 1 # treble
1=1
2=1
3=2
4=1
5=1
[color]
#background = '#191724'
gradient = 1
gradient_count = 6
gradient_color_1 = '#31748f'
gradient_color_2 = '#9ccfd8'
gradient_color_3 = '#c4a7e7'
gradient_color_4 = '#ebbcba'
gradient_color_5 = '#f6c177'
gradient_color_6 = '#eb6f92'
[color]
gradient = 1
gradient_color_1 = '#94e2d5'
gradient_color_2 = '#89dceb'
gradient_color_3 = '#74c7ec'
gradient_color_4 = '#89b4fa'
gradient_color_5 = '#cba6f7'
gradient_color_6 = '#f5c2e7'
gradient_color_7 = '#eba0ac'
gradient_color_8 = '#f38ba8'

View File

@@ -1,79 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform int bar_width; // bar width (configurable), not used here
uniform int bar_spacing; // space bewteen bars (configurable)
uniform vec3 u_resolution; // window resolution
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
uniform vec3 bg_color; // background color
uniform vec3 fg_color; // foreground color
uniform int gradient_count;
uniform vec3 gradient_colors[8]; // gradient colors
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
{
//create color based on fraction of this color and next color
float yr = (y - y_min) / (y_max - y_min);
return col_1 * (1.0 - yr) + col_2 * yr;
}
void main()
{
// find which bar to use based on where we are on the x axis
float x = u_resolution.x * fragCoord.x;
int bar = int(bars_count * fragCoord.x);
//calculate a bar size
float bar_size = u_resolution.x / bars_count;
//the y coordinate and bar values are the same
float y = bars[bar];
// make sure there is a thin line at bottom
if (y * u_resolution.y < 1.0)
{
y = 1.0 / u_resolution.y;
}
//draw the bar up to current height
if (y > fragCoord.y)
{
//make some space between bars basen on settings
if (x > (bar + 1) * (bar_size) - bar_spacing)
{
fragColor = vec4(bg_color,1.0);
}
else
{
if (gradient_count == 0)
{
fragColor = vec4(fg_color,1.0);
}
else
{
//find which color in the configured gradient we are at
int color = int((gradient_count - 1) * fragCoord.y);
//find where on y this and next color is supposed to be
float y_min = color / (gradient_count - 1.0);
float y_max = (color + 1.0) / (gradient_count - 1.0);
//make color
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
}
}
}
else
{
fragColor = vec4(bg_color,1.0);
}
}

View File

@@ -1,38 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
float normalize_C(float x, float x_min, float x_max, float r_min, float r_max )
{
float xr;
xr = (r_max-r_min) * (x - x_min) / (x_max - x_min) + r_min;
return xr;
}
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
// create a normal along the y axis based on the bar height
float x = normalize_C(fragCoord.y, 1.0, 0.0, 0.0, bars[bar]);
// set color
fragColor.r=fg_color.x*x;
fragColor.g=fg_color.y*x;
fragColor.b=fg_color.z*x;
fragColor.a=1.0;
}

View File

@@ -1,34 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
float y = (bars[bar]) * bar_y;
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
bar_r = bar_r * bar_r * 2;
// set color
fragColor.r = fg_color.x * y * bar_r;
fragColor.g = fg_color.y * y * bar_r;
fragColor.b = fg_color.z * y * bar_r;
}

View File

@@ -1,14 +0,0 @@
#version 330
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 fragCoord;
void main()
{
gl_Position = vec4(vertexPosition_modelspace,1);
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
}

View File

@@ -1,22 +0,0 @@
{
config,
lib,
pkgs,
...
}:
lib.my.makeHomePackageConfig {
inherit config pkgs;
packageName = "cava";
packagePath = [ "cava" ];
optionPath = [
"cli"
"media"
"cava"
];
extraConfig = {
my.home.xdg.configFile."cava" = {
source = ./config;
recursive = true;
};
};
}

View File

@@ -23,8 +23,3 @@ audio_output {
type "pipewire" type "pipewire"
name "pipewire" name "pipewire"
} }
audio_output {
type "pulse"
name "pulseaudio"
}

View File

@@ -42,6 +42,8 @@ lib.my.makeSwitch {
dnsutils dnsutils
killall killall
comma
]; ];
programs.dconf.enable = true; programs.dconf.enable = true;
@@ -80,6 +82,10 @@ lib.my.makeSwitch {
enableAutoUpdates = true; enableAutoUpdates = true;
settings.updates.auto_update = true; settings.updates.auto_update = true;
}; };
programs.television = {
enable = true;
enableZshIntegration = true;
};
}; };
}; };
} }

View File

@@ -44,11 +44,11 @@ lib.my.makeSwitch {
jj = { jj = {
ignore_timeout = true; ignore_timeout = true;
description = "The current jj status"; description = "The current jj status";
when = "jj root"; when = true;
symbol = " ";
command = '' command = ''
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template ' jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
separate(" ", separate(" ",
" ",
change_id.shortest(4), change_id.shortest(4),
bookmarks, bookmarks,
"|", "|",
@@ -64,19 +64,9 @@ lib.my.makeSwitch {
"(no description set)", "(no description set)",
) ++ raw_escape_sequence("\x1b[0m"), ) ++ raw_escape_sequence("\x1b[0m"),
) )
' ' || (starship module git_branch && starship module git_status)
''; '';
}; };
git_branch = {
when = true;
command = "jj root >/dev/null 2>&1 || starship module git_branch";
description = "Only show git_branch if we're not in a jj repo";
};
git_status = {
when = true;
command = "jj root >/dev/null 2>&1 || starship module git_status";
description = "Only show git_status if we're not in a jj repo";
};
}; };
git_state.disabled = true; git_state.disabled = true;
git_commit.disabled = true; git_commit.disabled = true;
@@ -88,7 +78,7 @@ lib.my.makeSwitch {
}; };
programs.zsh = { programs.zsh = {
enable = true; enable = true;
dotDir = ".config/zsh"; dotDir = "${config.my.home.xdg.configHome}/zsh";
history = { history = {
path = "${stateHome}/zsh_history"; path = "${stateHome}/zsh_history";
ignorePatterns = [ ignorePatterns = [

View File

@@ -26,6 +26,7 @@ lib.my.makeHomeProgramConfig {
ui = { ui = {
graph.style = "square"; graph.style = "square";
default-command = "status"; default-command = "status";
conflict-marker-style = "snapshot";
}; };
signing = { signing = {
backend = "ssh"; backend = "ssh";

View File

@@ -26,31 +26,9 @@ lib.my.makeHomeProgramConfig {
vimAlias = true; vimAlias = true;
vimdiffAlias = true; vimdiffAlias = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
gcc gcc # treesitter
gnumake
pyright ripgrep # telescope
clang-tools
rust-analyzer
pest-ide-tools
nixd
gotools
gopls
stylua
lua-language-server
nodePackages.vscode-langservers-extracted
nodePackages.typescript-language-server
vue-language-server
typescript
nodejs
ripgrep
]; ];
}; };
}; };

View File

@@ -4,5 +4,3 @@ require("core.keymaps")
require("langs.langs-setup") require("langs.langs-setup")
require("plugins.plugins-setup") require("plugins.plugins-setup")
require("core.autostart")

View File

@@ -1,7 +0,0 @@
-- Open tree when in config dir
local configdir = vim.fn.system("echo $HOME/.config")
configdir = string.sub(configdir, 1, string.len(configdir) - 1)
if string.find(vim.fn.system("pwd"), configdir) ~= nil then
vim.cmd("NvimTreeOpen")
vim.cmd("NvimTmuxNavigateRight")
end

View File

@@ -13,27 +13,13 @@ keymap.set("n", "<leader>nh", ":nohl<CR>", opt)
keymap.set("n", "<leader>sv", "<C-w>v", opt) keymap.set("n", "<leader>sv", "<C-w>v", opt)
keymap.set("n", "<leader>sh", "<C-w>s", opt) keymap.set("n", "<leader>sh", "<C-w>s", opt)
keymap.set("i", "<S-up>", "<ESC>v<up>", opt)
keymap.set("i", "<S-down>", "<ESC>v<down>", opt)
keymap.set("n", "<S-up>", "v<up>", opt)
keymap.set("n", "<S-down>", "v<down>", opt)
keymap.set("v", "<S-up>", "<up>", opt)
keymap.set("v", "<S-down>", "<down>", opt)
keymap.set("i", "<S-left>", "<ESC>v<left>", opt)
keymap.set("i", "<S-right>", "<ESC>v<right>", opt)
keymap.set("n", "<S-left>", "v<left>", opt)
keymap.set("n", "<S-right>", "v<right>", opt)
keymap.set("v", "<S-left>", "<left>", opt)
keymap.set("v", "<S-right>", "<right>", opt)
keymap.set("v", ".", ">gv", opt) keymap.set("v", ".", ">gv", opt)
keymap.set("v", ",", "<gv", opt) keymap.set("v", ",", "<gv", opt)
keymap.set({ "n", "v" }, "<pageup>", "9k", opt) keymap.set({ "n", "v" }, "<pageup>", "9k", opt)
keymap.set({ "n", "v" }, "<pagedown>", "9j", opt) keymap.set({ "n", "v" }, "<pagedown>", "9j", opt)
keymap.set("i", "<pageup>", "<up><up><up><up><up><up><up><up><up>", opt) keymap.set("i", "<pageup>", string.rep("<up>", 9), opt)
keymap.set("i", "<pagedown>", "<down><down><down><down><down><down><down><down><down>", 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>so", ":so<CR>", opt)
@@ -54,15 +40,6 @@ keymap.set("n", "L", ":BufferLineCycleNext<CR>", opt)
keymap.set("n", "<A-h>", ":BufferLineMovePrev<CR>", opt) keymap.set("n", "<A-h>", ":BufferLineMovePrev<CR>", opt)
keymap.set("n", "<A-l>", ":BufferLineMoveNext<CR>", opt) keymap.set("n", "<A-l>", ":BufferLineMoveNext<CR>", opt)
-- reload config
keymap.set("n", "<leader>rc", ":so ~/.config/nvim/init.lua<CR>", opt)
keymap.set("n", "<leader>rp", ":so ~/.config/nvim/lua/plugins/plugins-setup.lua<CR>", opt)
-- Workspaces
keymap.set("n", "<leader>wo", ":Telescope workspaces<CR>", opt)
keymap.set("n", "<leader>wa", ":WorkspacesAdd<CR>", opt)
keymap.set("n", "<leader>wr", ":WorkspacesRemove<CR>", opt)
-- Neovide config -- Neovide config
if vim.g.neovide then if vim.g.neovide then
keymap.set("v", "<C-C>", '"+y', opt) keymap.set("v", "<C-C>", '"+y', opt)

View File

@@ -9,6 +9,7 @@ local servers = {
"cssls", "cssls",
"nixd", "nixd",
"html", "html",
"java_language_server",
} }
local extra_config = { local extra_config = {
@@ -73,7 +74,6 @@ capabilities.textDocument.foldingRange = {
dynamicRegistration = false, dynamicRegistration = false,
lineFoldingOnly = true, lineFoldingOnly = true,
} }
local lspconfig = require("lspconfig")
for _, server in ipairs(servers) do for _, server in ipairs(servers) do
local extra = extra_config[server] or {} local extra = extra_config[server] or {}
local config = { local config = {
@@ -82,5 +82,6 @@ for _, server in ipairs(servers) do
for k, v in pairs(extra) do for k, v in pairs(extra) do
config[k] = v config[k] = v
end end
lspconfig[server].setup(config) vim.lsp.config(server, config)
vim.lsp.enable(server)
end end

View File

@@ -15,6 +15,7 @@ lib.my.makeSwitch {
python.enable = true; python.enable = true;
rust.enable = true; rust.enable = true;
lua.enable = true; lua.enable = true;
java.enable = true;
qml.enable = true; qml.enable = true;
}; };
}; };

View File

@@ -14,6 +14,10 @@ lib.my.makeHomePackageConfig {
"go" "go"
]; ];
extraConfig = { extraConfig = {
my.home.home.packages = with pkgs; [
gotools
gopls
];
my.persist.homeDirs = [ my.persist.homeDirs = [
"go" "go"
]; ];

View File

@@ -0,0 +1,21 @@
{
config,
lib,
pkgs,
...
}:
lib.my.makeSwitch {
inherit config;
optionName = "java";
optionPath = [
"coding"
"langs"
"java"
];
config' = {
my.home.home.packages = with pkgs; [
openjdk24
java-language-server
];
};
}

View File

@@ -16,9 +16,10 @@ lib.my.makeSwitch {
my.home = { my.home = {
home.packages = with pkgs; [ home.packages = with pkgs; [
nodejs nodejs
nodePackages.npm
typescript typescript
nodePackages.typescript-language-server
vue-language-server
]; ];
home.file.".npmrc".text = '' home.file.".npmrc".text = ''
prefix = ''${HOME}/.npm-global prefix = ''${HOME}/.npm-global

View File

@@ -15,6 +15,8 @@ lib.my.makeSwitch {
config' = { config' = {
my.home.home.packages = with pkgs; [ my.home.home.packages = with pkgs; [
luajit luajit
stylua
lua-language-server
]; ];
}; };
} }

View File

@@ -16,6 +16,7 @@ lib.my.makeHomePackageConfig {
extraConfig = { extraConfig = {
my.home.home.packages = with pkgs; [ my.home.home.packages = with pkgs; [
uv uv
pyright
]; ];
}; };
} }

View File

@@ -21,8 +21,11 @@ lib.my.makeSwitch {
"rust-src" "rust-src"
"rustc" "rustc"
"rustfmt" "rustfmt"
"rust-analyzer"
]) ])
evcxr # rust repl evcxr # rust repl
pest-ide-tools
]; ];
home.file.".cargo/config.toml".text = '' home.file.".cargo/config.toml".text = ''
[source.crates-io] [source.crates-io]
@@ -34,6 +37,9 @@ lib.my.makeSwitch {
[net] [net]
git-fetch-with-cli = true git-fetch-with-cli = true
''; '';
programs.zsh.initContent = lib.mkAfter ''
export PATH=$PATH:$HOME/.cargo/bin
'';
}; };
my.persist.homeDirs = [ my.persist.homeDirs = [
".cargo" ".cargo"

View File

@@ -16,7 +16,6 @@ lib.my.makeSwitch {
terminal.all.enable = true; terminal.all.enable = true;
wm.all.enable = true; wm.all.enable = true;
style.enable = true; style.enable = true;
quickshell.enable = true;
wine.enable = true; wine.enable = true;
}; };
}; };

View File

@@ -10,7 +10,6 @@ lib.my.makeSwitch {
config' = { config' = {
my.desktop.browser = { my.desktop.browser = {
firefox.enable = true; firefox.enable = true;
librewolf.enable = true;
chromium.enable = true; chromium.enable = true;
zen.enable = true; zen.enable = true;
}; };

View File

@@ -1,15 +0,0 @@
{ config, lib, ... }:
lib.my.makeHomeProgramConfig {
inherit config;
programName = "librewolf";
optionPath = [
"desktop"
"browser"
"librewolf"
];
extraConfig = {
my.persist.homeDirs = [
".librewolf"
];
};
}

View File

@@ -13,10 +13,8 @@ lib.my.makeSwitch {
"minecraft" "minecraft"
]; ];
config' = { config' = {
my.home.home.packages = with pkgs; [ my.home.home.packages = [
hmcl pkgs.hmcl
openjdk21
]; ];
my.persist.homeDirs = [ my.persist.homeDirs = [

View File

@@ -1,48 +0,0 @@
import Quickshell
import Quickshell.Services.UPower
import QtQuick
import QtQuick.Layouts
import org.kde.kirigami
Rectangle {
id: bat
Layout.preferredWidth: batIcon.width
Layout.fillHeight: true
color: 'transparent'
readonly property var battery: UPower.displayDevice
readonly property int percentage: Math.round(battery.percentage * 100)
property var size: height * 0.4
visible: battery.isLaptopBattery
Icon {
id: batIcon
anchors.centerIn: parent
implicitHeight: bat.size
implicitWidth: bat.size
// This recolors the entire svg, instead of only classless components.
// Hopefully in the future classes can be selected for recoloring.
isMask: true
color: 'white'
source: {
const nearestTen = Math.round(bat.percentage / 10) * 10;
const number = nearestTen.toString().padStart(2, "0");
let charging;
if (bat.battery.state == UPowerDeviceState.Charging) {
charging = "-charging";
} else if (bat.battery.state.toString() == UPowerDeviceState.FullyCharged) {
charging = "-charged";
} else {
charging = "";
}
return Quickshell.iconPath(`battery-level-${number}${charging}-symbolic`);
}
}
}

View File

@@ -1,16 +0,0 @@
import QtQuick
import QtQuick.Layouts
import "../../utils"
Rectangle {
Layout.fillHeight: true
color: "transparent"
implicitWidth: clockText.width
Text {
id: clockText
text: Time.time
color: Colors.fg
anchors.centerIn: parent
}
}

View File

@@ -1,14 +0,0 @@
import QtQuick
import QtQuick.Layouts
Rectangle {
Layout.fillHeight: true
color: "salmon"
implicitWidth: mprisText.width
Text {
id: mprisText
text: "Mpris"
anchors.centerIn: parent
}
}

View File

@@ -1,54 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import "../../utils"
Rectangle {
id: resources
Layout.fillHeight: true
color: "transparent"
implicitWidth: rowLayout.width
property int valueSize: 8
property int textSize: 6
property string valueColor: "white"
property string textColor: "lightgray"
RowLayout {
id: rowLayout
anchors.centerIn: parent
ColumnLayout {
id: cpuColumn
Label {
color: textColor
font.pointSize: textSize
text: "CPU"
Layout.alignment: Qt.AlignCenter
}
Label {
color: valueColor
font.pointSize: valueSize
text: Resources.cpu_percent + "%"
Layout.alignment: Qt.AlignCenter
}
}
ColumnLayout {
Label {
color: textColor
font.pointSize: textSize
text: "MEM"
Layout.alignment: Qt.AlignCenter
}
Label {
color: valueColor
font.pointSize: valueSize
text: Resources.mem_percent + "%"
Layout.alignment: Qt.AlignCenter
}
}
}
}

View File

@@ -1,5 +0,0 @@
import QtQuick
Text {
renderType: Text.NativeRendering
}

View File

@@ -1,14 +0,0 @@
import QtQuick
import QtQuick.Layouts
Rectangle {
Layout.fillHeight: true
color: "lightblue"
implicitWidth: trayText.width
Text {
id: trayText
text: "Tray"
anchors.centerIn: parent
}
}

View File

@@ -1,26 +0,0 @@
import QtQuick
import QtQuick.Layouts
Rectangle {
id: ws
property bool hovered: false
Layout.preferredWidth: parent.height * 0.4
Layout.preferredHeight: parent.height * 0.4
Layout.alignment: Qt.AlignHCenter
radius: height / 2
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: () => {
ws.hovered = true;
}
onExited: () => {
ws.hovered = false;
}
onClicked: () => console.log(`workspace ?`)
}
}

View File

@@ -1,55 +0,0 @@
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import "../../../utils"
import Quickshell.Hyprland
Rectangle {
id: workspaces
color: 'transparent'
width: workspacesRow.implicitWidth
Layout.fillHeight: true
RowLayout {
id: workspacesRow
height: parent.height
implicitWidth: (parent.height * 0.5 + spacing) * 2 - spacing
anchors.centerIn: parent
spacing: height / 7
Repeater {
id: repeater
model: HyprlandUtils.maxWorkspace
Workspace {
id: ws
required property int index
property HyprlandWorkspace currWorkspace: Hyprland.workspaces.values.find(e => e.id == index + 1) || null
property bool nonexistent: currWorkspace === null
property bool focused: index + 1 === Hyprland.focusedMonitor.activeWorkspace.id
Layout.preferredWidth: {
if (focused) {
return parent.height * 0.8;
} else {
return parent.height * 0.4;
}
}
color: {
if (nonexistent) {
return Colors.bgBlur;
} else {
return Colors.monitorColors[Hyprland.monitors.values.indexOf(Hyprland.workspaces.values.find(e => e.id === index + 1).monitor)];
}
}
}
}
}
}

View File

@@ -1,6 +0,0 @@
import "./windows"
import Quickshell // for ShellRoot and PanelWindow
ShellRoot {
Bar {}
}

View File

@@ -1,9 +0,0 @@
import Quickshell
pragma Singleton
Singleton {
property var bgBar: Qt.rgba(0, 0, 0, 0.21)
property var bgBlur: Qt.rgba(0, 0, 0, 0.3)
property var fg: "white"
property list<var> monitorColors: ["#e06c75", "#e5c07b", "#98c379", "#61afef"]
}

View File

@@ -1,67 +0,0 @@
pragma Singleton
import Quickshell
import Quickshell.Hyprland
import QtQuick
Singleton {
id: hyprland
property list<HyprlandWorkspace> workspaces: sortWorkspaces(Hyprland.workspaces.values)
property HyprlandWorkspace focusedWorkspace: Hyprland.focusedMonitor?.activeWorkspace
property int maxWorkspace: findMaxId()
function sortWorkspaces(ws) {
return [...ws].sort((a, b) => a?.id - b?.id);
}
function switchWorkspace(w: int): void {
console.log(`workspace: focus ${focusedWorkspace.id} -> ${w}`);
Hyprland.dispatch(`workspace ${w}`);
}
function findMaxId(): int {
let num = hyprland.workspaces.length;
return hyprland.workspaces[num - 1]?.id;
}
Connections {
target: Hyprland
function onRawEvent(event) {
// console.log("EVENT NAME", event.name);
// consow.wg("EVENT DATA", event.data);
let eventName = event.name;
switch (eventName) {
// Both of these are required in order to detect workspace changes
// even when switching monitors.
// case "workspacev2":
// {
// // hyprland.focusedWorkspace = Hyprland.focusedMonitor?.activeWorkspace;
// console.log(`workspace: ${hyprland.focusedWorkspace.id}`);
// console.log(`num workspaces ${hyprland.workspaces.length}`)
// console.log(`num workspaces (real) ${Hyprland.workspaces.values.length}`)
// break;
// }
// case "focusedmonv2":
// {
// // hyprland.focusedWorkspace = Hyprland.focusedMonitor?.activeWorkspace;
// console.log(`workspace: ${hyprland.focusedWorkspace.id}`);
// console.log(`num workspaces ${hyprland.workspaces.length}`)
// console.log(`num workspaces (real) ${Hyprland.workspaces.values.length}`)
// break;
// }
case "createworkspacev2":
{
hyprland.workspaces = hyprland.sortWorkspaces(Hyprland.workspaces.values);
hyprland.maxWorkspace = findMaxId();
}
case "destroyworkspacev2":
{
hyprland.workspaces = hyprland.sortWorkspaces(Hyprland.workspaces.values);
hyprland.maxWorkspace = findMaxId();
}
}
}
}
}

View File

@@ -1,67 +0,0 @@
pragma Singleton
import Quickshell
import Quickshell.Io
import QtQuick
Singleton {
property int cpu_percent
property string cpu_freq
property int mem_percent
property string mem_used
Process {
id: process_cpu_percent
running: true
command: ["sh", "-c", "top -bn1 | rg '%Cpu' | awk '{print 100-$8}'"]
stdout: SplitParser {
onRead: data => cpu_percent = Math.round(data)
}
}
Process {
id: process_cpu_freq
running: true
command: ["sh", "-c", "lscpu --parse=MHZ"]
stdout: SplitParser {
onRead: data => {
// delete the first 4 lines (comments)
const mhz = data.split("\n").slice(4);
// compute mean frequency
const freq = mhz.reduce((acc, e) => acc + Number(e), 0) / mhz.length;
cpu_freq = Math.round(freq) + " MHz";
}
}
}
Process {
id: process_mem_percent
running: true
command: ["sh", "-c", "free | awk 'NR==2{print $3/$2*100}'"]
stdout: SplitParser {
onRead: data => mem_percent = Math.round(data)
}
}
Process {
id: process_mem_used
running: true
command: ["sh", "-c", "free --si -h | awk 'NR==2{print $3}'"]
stdout: SplitParser {
onRead: data => mem_used = data
}
}
Timer {
interval: 2000
running: true
repeat: true
onTriggered: () => {
process_cpu_percent.running = true
process_cpu_freq.running = true
process_mem_percent.running = true
process_mem_used.running = true
}
}
}

View File

@@ -1,29 +0,0 @@
pragma Singleton
import Quickshell
import Quickshell.Io
import QtQuick
Singleton {
property var locale: Qt.locale()
function createDate(): string {
let date = new Date();
let hh = date.getHours().toString().padStart(2, 0);
let mm = date.getMinutes().toString().padStart(2, 0)
let weekday = locale.dayName(date.getDay(), Locale.ShortFormat)
let month = locale.monthName(date.getMonth(), Locale.ShortFormat)
let day = date.getDate()
return `${weekday} ${month} ${day} ${hh}:${mm}`
}
property var time: createDate()
Timer {
interval: 1000
running: true
repeat: true
onTriggered: time = createDate()
}
}

View File

@@ -1,79 +0,0 @@
//@ pragma NativeTextRendering
import Quickshell
import QtQuick
import QtQuick.Layouts
import "../utils"
import "../components/bar"
import "../components/bar/workspaces"
Scope {
PanelWindow {
id: barWindow
screen: Quickshell.screens[0]
anchors {
top: true
left: true
right: true
}
height: 32
color: "transparent"
Rectangle {
id: bar
anchors.fill: parent
color: Colors.bgBlur
// left
// RowLayout {
// id: barLeft
//
// anchors.bottom: parent.bottom
// anchors.left: parent.left
// anchors.top: parent.top
//
// anchors.leftMargin: height / 4
// anchors.rightMargin: height / 4
// spacing: height / 4
//
// Workspaces {}
// }
// middle
RowLayout {
id: barMiddle
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.leftMargin: height / 4
anchors.rightMargin: height / 4
spacing: height / 4
Mpris {}
}
// right
RowLayout {
id: barRight
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.top: parent.top
anchors.leftMargin: height / 4
anchors.rightMargin: height / 4
spacing: height / 4
Tray {}
Resources {}
Battery {}
Clock {}
}
}
}
}

View File

@@ -1,29 +0,0 @@
{
config,
lib,
pkgs,
...
}:
lib.my.makeSwitch {
inherit config;
default = false;
optionName = "quickshell";
optionPath = [
"desktop"
"quickshell"
];
config' = {
my.home = {
home.packages = [ pkgs.quickshell ];
home.sessionVariables.QML2_IMPORT_PATH = lib.concatStringsSep ":" [
"${pkgs.quickshell}/lib/qt-6/qml"
"${pkgs.kdePackages.qtdeclarative}/lib/qt-6/qml"
"${pkgs.kdePackages.kirigami.unwrapped}/lib/qt-6/qml"
];
xdg.configFile."quickshell" = {
source = ./config;
recursive = true;
};
};
};
}

View File

@@ -12,6 +12,19 @@ lib.my.makeSwitch {
"style" "style"
]; ];
config' = { config' = {
catppuccin.sddm = {
enable = true;
font = "Jetbrains Mono";
fontSize = "18";
};
services.displayManager.sddm = {
package = pkgs.kdePackages.sddm;
settings.Theme = {
CursorTheme = "breeze-dark";
CursorSize = 24;
};
};
my.home = { my.home = {
stylix = { stylix = {
enable = true; enable = true;
@@ -64,6 +77,15 @@ lib.my.makeSwitch {
]; ];
platformTheme.name = "qtct"; platformTheme.name = "qtct";
}; };
xdg.configFile = {
"qt5ct/qt5ct.conf".source = pkgs.replaceVars ./qtct/qt5ct.conf {
darker = pkgs.libsForQt5.qt5ct + /share/qt5ct/colors/darker.conf;
};
"qt6ct/qt6ct.conf".source = pkgs.replaceVars ./qtct/qt6ct.conf {
darker = pkgs.qt6ct + /share/qt6ct/colors/darker.conf;
};
};
}; };
}; };
} }

View File

@@ -0,0 +1,32 @@
[Appearance]
color_scheme_path=@darker@
custom_palette=true
icon_theme=Papirus-Dark
standard_dialogs=xdgdesktopportal
style=Darkly
[Fonts]
fixed="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()

View File

@@ -0,0 +1,32 @@
[Appearance]
color_scheme_path=@darker@
custom_palette=true
icon_theme=Papirus-Dark
standard_dialogs=xdgdesktopportal
style=Darkly
[Fonts]
fixed="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()

View File

@@ -6,7 +6,6 @@
}: }:
lib.my.makeSwitch { lib.my.makeSwitch {
inherit config; inherit config;
default = true;
optionName = "wine"; optionName = "wine";
optionPath = [ optionPath = [
"desktop" "desktop"

View File

@@ -10,7 +10,7 @@
input = { input = {
focus-follows-mouse = { focus-follows-mouse = {
enable = true; enable = true;
max-scroll-amount = "40%"; max-scroll-amount = "0%";
}; };
workspace-auto-back-and-forth = true; workspace-auto-back-and-forth = true;
}; };
@@ -39,7 +39,7 @@
{ proportion = 0.6; } { proportion = 0.6; }
{ proportion = 0.66667; } { proportion = 0.66667; }
]; ];
default-column-width.proportion = 0.4; default-column-width.proportion = 1.0;
background-color = "transparent"; background-color = "transparent";
}; };
@@ -151,17 +151,19 @@
"XF86AudioRaiseVolume" = { "XF86AudioRaiseVolume" = {
allow-when-locked = true; allow-when-locked = true;
action.spawn = [ action.spawn = [
"pamixer" "wpctl"
"-i" "set-volume"
"2" "@DEFAULT_SINK@"
"2%+"
]; ];
}; };
"XF86AudioLowerVolume" = { "XF86AudioLowerVolume" = {
allow-when-locked = true; allow-when-locked = true;
action.spawn = [ action.spawn = [
"pamixer" "wpctl"
"-d" "set-volume"
"2" "@DEFAULT_SINK@"
"2%-"
]; ];
}; };
"XF86AudioMute" = { "XF86AudioMute" = {
@@ -173,7 +175,7 @@
"play-pause" "play-pause"
]; ];
}; };
"Mod+XF86AudioRaiseVolume" = { "Super+XF86AudioRaiseVolume" = {
allow-when-locked = true; allow-when-locked = true;
action.spawn = [ action.spawn = [
"playerctl" "playerctl"
@@ -182,7 +184,7 @@
"next" "next"
]; ];
}; };
"Mod+XF86AudioLowerVolume" = { "Super+XF86AudioLowerVolume" = {
allow-when-locked = true; allow-when-locked = true;
action.spawn = [ action.spawn = [
"playerctl" "playerctl"
@@ -192,6 +194,39 @@
]; ];
}; };
"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+Q".action = close-window;
"Mod+Left".action = focus-column-left; "Mod+Left".action = focus-column-left;

View File

@@ -2,7 +2,6 @@ args@{
lib, lib,
config, config,
pkgs, pkgs,
username,
... ...
}: }:
let let
@@ -44,29 +43,29 @@ in
xdg-desktop-portal-gnome xdg-desktop-portal-gnome
]; ];
}; };
services.gnome.gnome-keyring.enable = true;
programs.niri = { programs.niri = {
enable = true; enable = true;
package = pkg; package = pkg;
}; };
services.displayManager = { services.displayManager = {
autoLogin = {
enable = true;
user = username;
};
sddm = { sddm = {
enable = true; enable = true;
wayland.enable = true; wayland.enable = true;
autoLogin.relogin = true;
}; };
}; };
my.home = { my.home = {
home.packages = with pkgs; [ home.packages = with pkgs; [
xwayland-satellite-unstable
wlr-randr wlr-randr
wl-clipboard wl-clipboard
cliphist cliphist
playerctl
brightnessctl
swaynotificationcenter swaynotificationcenter
nemo-with-extensions nemo-with-extensions
xwayland-satellite-unstable
]; ];
programs.wofi.enable = true; programs.wofi.enable = true;
xdg.configFile."wofi" = { xdg.configFile."wofi" = {

View File

@@ -19,8 +19,8 @@ _: {
modules-right = [ modules-right = [
"custom/notification" "custom/notification"
"tray" "tray"
"pulseaudio" "wireplumber"
"pulseaudio#microphone" "wireplumber#source"
]; ];
"niri/workspaces" = { "niri/workspaces" = {
@@ -73,7 +73,6 @@ _: {
stopped = ""; stopped = "";
}; };
tooltip = false; tooltip = false;
toottip-format = "{status_icon} Musicfox {artist} - {album} - {title}";
on-scroll-up = "playerctl -p musicfox volume 0.05+"; on-scroll-up = "playerctl -p musicfox volume 0.05+";
on-scroll-down = "playerctl -p musicfox volume 0.05-"; on-scroll-down = "playerctl -p musicfox volume 0.05-";
}; };
@@ -81,37 +80,21 @@ _: {
format = " {:%H:%M %m.%d}"; format = " {:%H:%M %m.%d}";
tooltip = false; tooltip = false;
}; };
pulseaudio = { wireplumber = {
format = "{icon} {volume}%"; format = "󰋋 {volume}%";
tooltip = false; tooltip = false;
format-muted = "󰟎 Muted"; format-muted = "󰟎 Muted";
on-click = "pamixer -t"; on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
on-click-middle = "pavucontrol & disown"; on-click-middle = "pwvucontrol";
on-scroll-up = "pamixer -i 5";
on-scroll-down = "pamixer -d 5";
scroll-step = 5; scroll-step = 5;
format-icons = {
headphone = "󰋋";
hands-free = "󰋋";
headset = "󰋋";
phone = "";
portable = "";
car = "";
default = [
""
""
""
];
}; };
}; "wireplumber#source" = {
"pulseaudio#microphone" = { node-type = "Audio/Source";
format = "{format_source}"; format = "󰍬 {volume}%";
tooltip = false; tooltip = false;
format-source = "󰍬 {volume}%"; format-muted = "󰍭 Muted";
format-source-muted = "󰍭 Muted"; on-click = "wpctl set-mute @DEFAULT_SOURCE@ toggle";
on-click = "pamixer --default-source -t"; on-click-middle = "pwvucontrol";
on-scroll-up = "pamixer --default-source -i 5";
on-scroll-down = "pamixer --default-source -d 5";
scroll-step = 5; scroll-step = 5;
}; };
} }

View File

@@ -100,7 +100,7 @@ tooltip * {
#window, #window,
#clock, #clock,
#battery, #battery,
#pulseaudio, #wireplumber,
#network, #network,
#workspaces, #workspaces,
#taskbar, #taskbar,
@@ -219,13 +219,13 @@ window#waybar.empty #window {
border-right: 0; border-right: 0;
} }
#pulseaudio { #wireplumber {
color: #89b4fa; color: #89b4fa;
border-right: 0px; border-right: 0px;
border-radius: 10px 0px 0px 10px; border-radius: 10px 0px 0px 10px;
} }
#pulseaudio.microphone { #wireplumber.source {
color: #cba6f7; color: #cba6f7;
margin-right: 5px; margin-right: 5px;
border-left: 0px; border-left: 0px;
@@ -238,10 +238,3 @@ window#waybar.empty #window {
margin-right: 10px; margin-right: 10px;
border-left: 0px; border-left: 0px;
} }
#custom-weather {
border-radius: 0px 10px 10px 0px;
border-left: 0;
border-right: 0;
margin-left: 0px;
}

View File

@@ -11,8 +11,7 @@ let
cfg = config.my.autologin; cfg = config.my.autologin;
gettycfg = config.services.getty; gettycfg = config.services.getty;
baseArgs = baseArgs = [
[
"--login-program" "--login-program"
"${gettycfg.loginProgram}" "${gettycfg.loginProgram}"
] ]

View File

@@ -18,7 +18,6 @@ lib.my.makeSwitch {
fcitx5 = { fcitx5 = {
addons = with pkgs; [ addons = with pkgs; [
fcitx5-chinese-addons # fcitx5-mozc fcitx5-chinese-addons # fcitx5-mozc
fluent-fcitx5
fcitx5-lightly fcitx5-lightly
]; ];
waylandFrontend = true; waylandFrontend = true;
@@ -102,6 +101,99 @@ lib.my.makeSwitch {
ignoreUserConfig = true; ignoreUserConfig = true;
}; };
}; };
nixpkgs.overlays = [
(
final: prev:
lib.mergeAttrsList (
map
(
{
pkg,
exe,
desktop,
}:
{
${pkg} = final.stdenvNoCC.mkDerivation {
inherit (prev.${pkg}) pname version;
src = prev.${pkg};
phases = [
"unpackPhase"
"installPhase"
];
nativeBuildInputs = [ final.makeWrapper ];
installPhase = ''
cp -r . $out
substituteInPlace $out/share/applications/${desktop}.desktop --replace-quiet "${prev.${pkg}}" $out
wrapProgram $out/bin/${exe} --add-flags "--wayland-text-input-version=3"
'';
};
}
)
[
{
pkg = "qq";
exe = "qq";
desktop = "qq";
}
{
pkg = "vscodium";
exe = "codium";
desktop = "codium";
}
{
pkg = "signal-desktop";
exe = "signal-desktop";
desktop = "signal";
}
]
)
)
(
final: prev:
lib.mergeAttrsList (
map
(
{ pkg, desktops }:
{
${pkg} = final.stdenvNoCC.mkDerivation {
inherit (prev.${pkg}) pname version;
src = prev.${pkg};
phases = [
"unpackPhase"
"installPhase"
];
installPhase =
"cp -r . $out \n"
+ lib.concatLines (
map (
desktop:
"substituteInPlace $out/share/applications/${desktop}.desktop --replace-fail 'Exec=' 'Exec=env QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx '"
) desktops
);
};
}
)
[
{
pkg = "wechat";
desktops = [ "wechat" ];
}
{
pkg = "wpsoffice-cn";
desktops = map (app: "wps-office-${app}") [
"et"
"pdf"
"prometheus"
"wpp"
"wps"
];
}
]
)
)
];
my.home.programs.niri.settings = { my.home.programs.niri.settings = {
binds."Mod+Space".action.spawn = [ binds."Mod+Space".action.spawn = [
"fcitx5-remote" "fcitx5-remote"

View File

@@ -3,6 +3,8 @@
config, config,
lib, lib,
pkgs, pkgs,
secrets,
username,
... ...
}: }:
lib.my.makeSwitch { lib.my.makeSwitch {
@@ -37,8 +39,8 @@ lib.my.makeSwitch {
# Deduplicate and optimize nix store # Deduplicate and optimize nix store
auto-optimise-store = true; auto-optimise-store = true;
substituters = [ substituters = [
"https://mirror.sjtu.edu.cn/nix-channels/store"
"https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store" "https://mirrors.sjtug.sjtu.edu.cn/nix-channels/store"
"https://mirror.sjtu.edu.cn/nix-channels/store"
"https://mirrors.ustc.edu.cn/nix-channels/store" "https://mirrors.ustc.edu.cn/nix-channels/store"
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://cache.nixos.org" "https://cache.nixos.org"
@@ -48,6 +50,19 @@ lib.my.makeSwitch {
]; ];
}; };
sops.secrets.nix-github-token = {
sopsFile = secrets.nix-github-token;
format = "binary";
owner = username;
group = "users";
mode = "0400";
};
my.home.nix.extraOptions = ''
!include ${config.sops.secrets.nix-github-token.path}
'';
my.home.home.packages = [ pkgs.nixd ];
# uncomment to enable auto gc # uncomment to enable auto gc
/* /*
nix.gc = { nix.gc = {

View File

@@ -14,25 +14,21 @@ in
type = lib.types.bool; type = lib.types.bool;
default = true; default = true;
}; };
sshKeyPath = lib.mkOption { sshKeyFile = lib.mkOption {
type = lib.types.str; type = lib.types.str;
default = "${config.my.persist.location}/home/${username}/.ssh/id_ed25519"; default = "${config.my.persist.location}/home/${username}/.ssh/id_ed25519";
}; };
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
sops.age.sshKeyPaths = [ sops.age.sshKeyFile = cfg.sshKeyFile;
cfg.sshKeyPath
];
users.users.${username}.extraGroups = [ "keys" ]; users.users.${username}.extraGroups = [ "keys" ];
environment.variables.SOPS_AGE_KEY_FILE = "/run/secrets.d/age-keys.txt";
my.home = { my.home = {
sops.age.sshKeyPaths = [ sops.age.sshKeyFile = cfg.sshKeyFile;
cfg.sshKeyPath
];
home.packages = [ home.packages = [
pkgs.sops pkgs.sops
]; ];
home.sessionVariables.SOPS_AGE_SSH_PRIVATE_KEY_FILE = cfg.sshKeyFile;
}; };
}; };
} }

View File

@@ -4,7 +4,7 @@
pkgs, pkgs,
username, username,
userdesc, userdesc,
sopsRoot, secrets,
... ...
}: }:
lib.my.makeSwitch { lib.my.makeSwitch {
@@ -16,7 +16,7 @@ lib.my.makeSwitch {
programs.zsh.enable = true; programs.zsh.enable = true;
sops.secrets.imxyy-nix-hashed-password = { sops.secrets.imxyy-nix-hashed-password = {
sopsFile = sopsRoot + /imxyy-nix-hashed-password.txt; sopsFile = secrets.imxyy-nix-hashed-password;
format = "binary"; format = "binary";
neededForUsers = true; neededForUsers = true;
}; };

View File

@@ -220,11 +220,14 @@ in
(lib.mkIf cfg.enable { (lib.mkIf cfg.enable {
virtualisation.libvirtd = { virtualisation.libvirtd = {
enable = true; enable = true;
qemu.verbatimConfig = '' qemu = {
package = pkgs.qemu_kvm;
verbatimConfig = ''
dynamic_ownership = 0 dynamic_ownership = 0
remember_owner = 0 remember_owner = 0
''; '';
}; };
};
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
users.users.${username}.extraGroups = [ "libvirtd" ]; users.users.${username}.extraGroups = [ "libvirtd" ];
environment.systemPackages = with pkgs; [ virglrenderer ]; environment.systemPackages = with pkgs; [ virglrenderer ];

View File

@@ -53,10 +53,6 @@ in
"file://${homedir}/Videos " "file://${homedir}/Videos "
"file://${homedir}/Music " "file://${homedir}/Music "
"file://${homedir}/workspace " "file://${homedir}/workspace "
"file://${homedir}/Documents/%E7%8F%AD%E7%BA%A7%E4%BA%8B%E5%8A%A1 "
"file://${homedir}/NAS NAS"
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
]; ];
}; };
}; };

View File

@@ -22,11 +22,6 @@
cage.__output.patches.__append = [ ./cage-specify-output-name.patch ]; cage.__output.patches.__append = [ ./cage-specify-output-name.patch ];
matrix-synapse.__assign = final.stable.matrix-synapse; matrix-synapse.__assign = final.stable.matrix-synapse;
bottles.__input.removeWarningPopup.__assign = true; bottles.__input.removeWarningPopup.__assign = true;
qq.__output.preInstall.__append = ''
gappsWrapperArgs+=(
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--wayland-text-input-version=3}}"
)
'';
sing-box.__assign = prev.sing-box.overrideAttrs (finalAttrs: { sing-box.__assign = prev.sing-box.overrideAttrs (finalAttrs: {
version = "1.11.14"; version = "1.11.14";

View File

@@ -1,38 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
}:
stdenv.mkDerivation {
pname = "fcitx5-themes";
version = "unstable-2022-09-28";
src = fetchFromGitHub {
owner = "thep0y";
repo = "fcitx5-themes";
rev = "9d6e437289aa8de61d2c198b2e6ce4b5edea204f";
hash = "sha256-iNOquWc6d1rgdWeGPBQ6na/bq+ZOV9cx4MCLf3SdBLg=";
};
phases = [
"unpackPhase"
"installPhase"
];
installPhase = ''
runHook preInstall
rm -rf images README.md install.sh
mkdir -p $out/share/fcitx5/themes
cp -r * $out/share/fcitx5/themes
runHook postInstall
'';
meta = with lib; {
description = "fcitx5";
homepage = "https://github.com/thep0y/fcitx5";
platforms = platforms.all;
};
}

View File

@@ -1,37 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
}:
stdenv.mkDerivation {
pname = "fluent-fcitx5";
version = "unstable-2024-03-10";
src = fetchFromGitHub {
owner = "Reverier-Xu";
repo = "Fluent-fcitx5";
rev = "e4745fd598ddfd4b26f693cfb951cd028575a1f0";
hash = "sha256-tVPp6kFgsWlSLcEUffOvXCWDEV0y7qcSqYKQkGO7lrM=";
};
phases = [
"unpackPhase"
"installPhase"
];
installPhase = ''
runHook preInstall
mkdir -p $out/share/fcitx5/themes
cp -r Fluent* $out/share/fcitx5/themes
runHook postInstall
'';
meta = with lib; {
description = "A Fluent-Design theme with blur effect and shadow. ";
homepage = "https://github.com/Reverier-Xu/Fluent-fcitx5";
platforms = platforms.all;
};
}

View File

@@ -1,37 +0,0 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
}:
stdenvNoCC.mkDerivation rec {
pname = "translate-shell";
version = "0.9.7.1";
src = fetchFromGitHub {
owner = "soimort";
repo = pname;
rev = "gh-pages";
hash = "sha256-YQevXwslWzHen9n+Fn0a+oNx/EKg0Kd/Ge8ksYP0ekY=";
};
phases = [
"unpackPhase"
"installPhase"
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin
patchShebangs ./trans
cp ./trans $out/bin/trans
runHook postInstall
'';
meta = {
description = "Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.";
homepage = "https://github.com/soimort/translate-shell";
license = lib.licenses.unlicense;
};
}

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrU0tyT3hYaXpqeWlpSENr\nVk5FVUdtZXhCdTlhNExqYm90NkIyOUdLQ3hjClRTUTYxeTdwTDgxcElkMUlPOFJI\nRHFWYzh4cEdDd3AwcG1od2Z4Ty9JS3MKLS0tIG1nUEI5MG5uNnhUcTNLeE83ejZB\nRmp1L3dmY2FNNWRZbDVUN09zWTNXQjAKIP8ydrd2QpqhlNRcNeeyNd2v5nkLgv0v\nR9K6YKnc0VSh2gJBcJpW8cChB5kGpHw9+mhZm7XGoWxkM6JlyRrpdA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAxam1X\nTlg4aEpIZ2hMYzFGbUNRVjVkaUlONldydDllWmZ3SUVBVDNvS0hJClNadnM4dUtP\nZ1NJMUZtTnRseGg4cFo5M0Y0cU0yRjkzQVR5SkczOVBrQ3MKLS0tIG5rU2xXRWV3\nV2hBZWV2L3IwVmJPdCtFMVlpa0tsLy82RVRpYjA0TTBvWFUKTFOeZFlejKGhp5ia\nCJXYhJkfRVZvacaCUyV40h28FqRrKyLIFcgjPpCG+77XzdHG4rZR7mw2+ybsBde7\n6+21lg==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpRDhPQXY4aWFyZTNhVExx\nUVlJOXhCQ3FmME1SRC9Qd1FLUzBiSnZnUm13Ci9TODhRT3Y1ZHBSVHBOd0hNTGtG\nbmxIaSt4N1BNbEZFdlJpNDZWbGFwNDgKLS0tIE1LSW9uRDYxWUpLeUZZbm1RWGJE\nSjlyVGZ2NjhLdzRQZ2hnamhnNTZNcUkKSHIovzfFzM8HLIPxSOUwpsrfR5qobhgR\nYnfCPFT3Uadf1/ehQZst3O/KHi48YJLxA5uU9GIoM58rNYqIPevSMQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyB3TEtJ\ncjFqUThZSkVrT25nMnpFRExKdWZkaXBidlByR2g0WXVsQUtHdHhFCk5WL20vK04w\nV3NjS1p4TzV4MWFES3dtbmVIYWEraWQyazhqNGNUbmpiM0UKLS0tIGxZWW01QVFz\ncXZRTlBicFlXYS9yTW9zYVIvcXBraU81d2NNS2l6WFRSbVEK9xh6F4/ePk8WF4lF\nxmvZs3/jLsQYUtXkNnAUQU5EvD7cubQX8J5EhUTkjzCOzeEWXfK56tcgaJZQWVW1\ns8QrNA==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUQzVFeCtHSmRUQ0ZXdlla\nbTBhUXFXeCtmaTh1SmRVQXlJZmpkUU01UERJCmpncU5oSzcxVDBZdlpzREhZWnhr\naWhMT1picXA3T0EzRlpnVmZrQjVobGMKLS0tIHZoYUttcHZoMkROYVE3YSt6QWNp\nak9LOGppQjBoZG5zalAvQzFLSkRiSWMKeUaKHUGR0eLo+MgomJW3sfIs5xHQ3Hcj\nDlkbty7WsI1aGZ/+pEq9dAg/bNfrLNMvKSOYFKvTJs33GEJfRC0j5Q==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyArQkg0\nMkdBbTdQNWdXRFRxK0NUS3Y5NXE3MElqdWN2bjdxdVZBN3dSMFJrClMyS2FxZVFQ\nOEFjR3B5RVZwUWltSjdoTFRpc0VJcTkyOVRXWmdGT3N0WnMKLS0tIExSZWtSSFox\nVnFvNy9GcEg4ZkM3ZmQ4T2VzVHFuMUw3RkFRVlQ2cEZmNGcKWuK7dtmMWQ77/Uyw\nesW/oM50irkONmxTKOggpo6gmJ9YvOPRHybvBwOifIIRCj+dvKFC/a0wAhgfpDcP\nMXEfPA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArakRPZWFaZkZRZG5Pc2pl\nRVVFRnZjK0RleDRpSXBMK2tVYWVtRzRRdTI4CjFWUUxsWUJleENHc1lSUkUwVmdm\nZVpHOEloSDJDNW1TZUVSV0pTcnJhVm8KLS0tIDBUOFpMY2tsQUx5anpPWHlWK0U2\nV2JaSTMvbUJteFNOTm1mYzBmYWRXTWsK1lnXL0j5a6mBVfmsJLJ7JcSd8XIsXC+f\n7veQtqb7ADAFcxtreKMXfAKalyyJu4HcXc0JSvvurAUOBTARPV4oeA==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-06-08T04:38:03Z", "lastmodified": "2025-06-08T04:38:03Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6Rkd2QndUdGxqV1BHOXh2\neXp5MTM0c3FkS0NnNzIvZ2NFUi93bEJHS3hBCkExVjZVUjFoZ3V3TGFVWHNZUmJw\nSzMvdVpuL05QYXNaQ0FQcElnZHhsYVkKLS0tIHNSVHdhaHZYZ0lodzhTODkwQnNP\nQ0RJOXJvSkh2akRRc0NhSUVmNUU0dDQKtVlaZs3yTJUWP802nfaX5ql5WKvn13Eu\n2Cn/jS/HSB5muU89rsJqe0mSZlOjrqyErtiF3hVDFOqODEkFb0EmsQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBDN0Va\nSlREWkhkc2dWZTBzWnlRWE1lUzh1eVJ3dXN5TWR0Z2J4aWMrbHdRClJidG9wMHMy\nMldWbTJLN2tjVlRlQ0QyekRibDRRbWFsNlZnZDFUR2dMemsKLS0tIHFPU28ya0FB\nOUVxMnBBZUp6MG1HTFhWRklTbFB5aGlTTGhvOEFOOVJHVkkKSEqFAPJi3FgDAIl+\n8oB7Xnlj32CO6XjDOb07ZWrTCSTEXnu+ICvW10yJPlkKBw01xhEkMUBAPaYWIiUs\n/I4ziA==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTbUtrV2oyMHVvR3RjRDVH\nV2tHajZZT1h6UzMvVVNIbFkyQnJ5Mm1raUFJCitjRllhbU53ZUdjMXJoNk5lc3du\nM3lDSFFXSTZmOVI5dS9sOS84RVY2dTQKLS0tIFVPL3g0NTBDTnI3WWlOMWptL1Vn\nSnZYUHpxZmp1ckYxYWxERFJQQXZFTjAKezXPfvGON1KJAnH4fJ5y1otrMLQubR08\nLiJFBpGIft6YKWQq/Nc9Fnkar8WasUneGGR6a6A+xx7eEibrEapJuQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBNenJm\nS3BNZ3lucllPUWM0ZnJGajhpU3EzRFhNVVNlWHhPb1FueU9ZTEVFCndGNFY2ekpK\nZGxaZlhCbExGbWxMVUJWWFljdTZaZTdhZHJtYWc3YlF5eXMKLS0tIGM2amVwd0xH\nVXF5WS84NjVoN2VEODBwZG5adjB3TzdkbkZUU3lBMHpQVEkKEZ8O2V2W6gN1/v1S\n2FaNPMEyIBPrB4B2cEFvFi0awKyZcirxIcE1nlqkEo2urXhV42QqIvJbeF88pSuT\njY8ZEg==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2MDFId3R4dGJiVDFETlNj\nSmg5QzRabm1odytXVk83cWVTclRCN3k2MGt3CnBLYlMxMlF5a1lTZCs1cXdjT3Nz\neGwvQTJZdG5SMWVVbmFXbWRGWEZ2aUUKLS0tIEpvSTBJVkRCNjBpNEx1bzJqTWdB\nK0VaL3JpeTB4T3FSYTdmaEozQklFWmMKYHga2PwW6ZdHrSczVviS/Z0utfAF9Z+J\nzGctQj+Xo748ItLYnIOCFST4BltlPo8SD0fzlaEnR5bTJuWNDnA2TA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBSbDkv\nWE8raHdHNVJpZTJFam5ZOTJWL3Zzb0ZjYlV4R21MeFBUaEpqVWpZCnVtZmppc09R\nNFhHUUs5YkdITFoyS1UrVy9nOFgzVkRTRTJzalhxSnBJdUEKLS0tIGZYUjdpblRi\nUWZiZ0oyQjF0dVQwbmJjbzdhZUJPeEpTbnNUWTFHT1BVdmMK1Hmu1aWvvgTZo/ea\nIKeEWeXR3/j2Xi4w3JIy/rjrYGdA6oVfEWvib0qkGM9D4/UcOVkBc7+rrfAwTmL+\nc6988A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSaTc2SUxJd1doeDRZelBR\nM3FLVjlsZTJHUThRaVA4K0lMTXl0allIc0ZzClIxT3BpWllEcnM2Y3JKbXBTY2xK\nUXk5TDlzVXdlSFlaUEg3cG1XSUdoQ1EKLS0tIEo1Y3c2OHJMUnExMmF0cGxuVlpH\ncEFoSDkwOFR1a3ExOXBSNlF5b0ZiNzQKBfjzWTcX5mpuMOu0+RnuTdwLyTQo+cQa\n3s3eiUuwMITf9OZJsV9GX+GDfpkM3ioK6GIdiJB3qcTb+i+rnpGP8Q==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-07-12T12:32:11Z", "lastmodified": "2025-07-12T12:32:11Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6Rkd2QndUdGxqV1BHOXh2\neXp5MTM0c3FkS0NnNzIvZ2NFUi93bEJHS3hBCkExVjZVUjFoZ3V3TGFVWHNZUmJw\nSzMvdVpuL05QYXNaQ0FQcElnZHhsYVkKLS0tIHNSVHdhaHZYZ0lodzhTODkwQnNP\nQ0RJOXJvSkh2akRRc0NhSUVmNUU0dDQKtVlaZs3yTJUWP802nfaX5ql5WKvn13Eu\n2Cn/jS/HSB5muU89rsJqe0mSZlOjrqyErtiF3hVDFOqODEkFb0EmsQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBFR1Vs\ndlNMK1REVXpXeGRqV0oyZmJRWlh4eXVzT3BpbW90eURxQzZ2SVZRClpVcVVnRGFV\nSlVRNG5sb09lK1dWOE5oL08vSUFBM2dLc1lkcitEbHdxSm8KLS0tIDE5SUJVdWNr\nOXNXNlE5RVBCQTYzeXB1UnFmMzdqbjd3OWlBNVlIVzdmVDAKwFxXxbqBZkgS6zKX\nN9RNx+waALQAMNVOoMYufwhTfh33lnfDZIIfnU4IgwtG1t+SKIb/B2/TgdgJZAQs\nUt0M4w==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTbUtrV2oyMHVvR3RjRDVH\nV2tHajZZT1h6UzMvVVNIbFkyQnJ5Mm1raUFJCitjRllhbU53ZUdjMXJoNk5lc3du\nM3lDSFFXSTZmOVI5dS9sOS84RVY2dTQKLS0tIFVPL3g0NTBDTnI3WWlOMWptL1Vn\nSnZYUHpxZmp1ckYxYWxERFJQQXZFTjAKezXPfvGON1KJAnH4fJ5y1otrMLQubR08\nLiJFBpGIft6YKWQq/Nc9Fnkar8WasUneGGR6a6A+xx7eEibrEapJuQ==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBnR1hQ\neWZjbE94R0gzVjJWOEZsVDFhMDFIQXorTFN3UVF1T2dPcGFYM24wCnJEYWdxS3Mw\nVUdFU1VZM2RZSGZnMHNySG1UYkR5M3pEMUp6eTFvUmlMTlUKLS0tIGtiNGpzWWRh\ncnJwZm45Nm5GZTJYNWxJdmtJajdXYXZVTTZVcm1VNGUwQm8KZOjKmeD73Adn3eGE\nck/IiUth6hn99mVzPlRoXBXozOSUpJ5HaKi17Xs8mLfgeWfVS0Igxf4gaW9XsgIm\nAgmVsA==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2MDFId3R4dGJiVDFETlNj\nSmg5QzRabm1odytXVk83cWVTclRCN3k2MGt3CnBLYlMxMlF5a1lTZCs1cXdjT3Nz\neGwvQTJZdG5SMWVVbmFXbWRGWEZ2aUUKLS0tIEpvSTBJVkRCNjBpNEx1bzJqTWdB\nK0VaL3JpeTB4T3FSYTdmaEozQklFWmMKYHga2PwW6ZdHrSczVviS/Z0utfAF9Z+J\nzGctQj+Xo748ItLYnIOCFST4BltlPo8SD0fzlaEnR5bTJuWNDnA2TA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBhZGdu\naU44TU1kd0xndzErZGNrTkNYQjNlR0hHTXRuRUxIVnorKzdrTERvCm9XNWpvQUkz\nZWtxMGJYZFk3K2l5bG1iblFaZVJ4UzlFakZmQWg5UlYvcjQKLS0tIEpmOGwzUFJy\nTXdRbWxaOWZrN0dqaGxId0FMQ0JkRFpRSVRKdWpYdjJvQjgKwU75Xry6ayMUwxVF\nt9api0gyPPq2TWDCnradKctpQ/MQTFz5lcawg2vmDNhtXA5UfEh2Nl9RPA749lU0\nDaG31g==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSaTc2SUxJd1doeDRZelBR\nM3FLVjlsZTJHUThRaVA4K0lMTXl0allIc0ZzClIxT3BpWllEcnM2Y3JKbXBTY2xK\nUXk5TDlzVXdlSFlaUEg3cG1XSUdoQ1EKLS0tIEo1Y3c2OHJMUnExMmF0cGxuVlpH\ncEFoSDkwOFR1a3ExOXBSNlF5b0ZiNzQKBfjzWTcX5mpuMOu0+RnuTdwLyTQo+cQa\n3s3eiUuwMITf9OZJsV9GX+GDfpkM3ioK6GIdiJB3qcTb+i+rnpGP8Q==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-06-15T02:13:29Z", "lastmodified": "2025-06-15T02:13:29Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvQmk1OU5hcXpMSGhHQWcx\nVlFHN3c4a2pIekpUL3FEUnlVUXBwdjJlT0RZClhteUdNMGdMQWl0WTRGK0p5czFv\nTTh3WkR4dlMwTmFzTTkvekgzREhZY2sKLS0tIDA1K2tSQWxhNlM4djByV1RaT1NC\nNXdNR0poRlpMOVJsQURMbDF2OXN2aEkKcgwIWqVHG6iIgfWvZBmbthlyusIECSHl\n1dPrE3nOx8X2vfl5vwP0w0uOTaAaHrI0Afnh6mnIz1d/qIbzGycYjA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBlWDB3\nZU1jL29uVlZKL0hndnBGd0dvQXFXMmxyOXUrWXU4NDVIejM0QVRJCmNUTkowbGVn\nUWkyRnBheWlkeUw4a2UrdGlDVG9MV2ZDb0xIMHhJSVlMbEUKLS0tIDB1OXd3RU96\nU3Y3dHJsMEtGa29iczI2d09PbURHcHUzVHl6TmFTQ2xaV2MKgmMcJlyI7HMNfa5u\nsnbfX7qSAa/zhwLmtGxRWp0FIPCbVDbitVYffUXilJ9/WF2vqgo5RC9uZXN7gvT+\n3i+HgA==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dmVrN045MGpsZHNCZTV1\nVFZkZ1JVTXhzWE1VQ3cwYTBLQ2JsS2xrTjJnClZwWjVJY3NYVytnL2NoMDVHR2c4\nMVU1WlBYaEFDL20yZkxYR0J2MTVMbXcKLS0tIDlsOTBtREZWNGthTytGOUNxSnlS\nTkc1NDZrK0FlRGJkSzBibkZxQ0R3T0kK/em5c4vwXA25vtDduSsKPzKSXWUqvTqa\nZQ2pzhqwM3O5XGd3VySQRnzdAOcdLfvPMQEDTHwlNk5bj5i8fWShUA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyB1bzRY\nUU1Tb3RGS1Y0VnlqM3Fjd1BWWFc2Y3BwUUh1ek14T2NvVTc0UWxFCnhqMG5WUkgx\nMXFCYXR2M0VOQ3NYVDdWejdCRVoyMVBjTnJ6UG1aUDBUWjQKLS0tIER5aHptcWcx\nbnlMU09oem4zTTlvMThmb0VEYWpWZ05LUHhKR1VjMkdVSXMKG4xMqepfQYcWtQGW\nn0dF0xA9v91heF11UHWF/hnLfsoBfL4G+om8NIpsMqBvIu3SnDRjx6t8JJT9XYZ5\nPGfyaw==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBZVZDMlo5ajRyakZwcC9W\nY2RWT3ZtdE9qUUZ1WE8reEZna3pvbnVHR1FFCnVqQlo4eXdZUWxibm9TcnFGemN6\nNXZjTHd4TTUxdFpPc2dITTMyYnhXS00KLS0tIHJ4SERnZy9FUjhVZkVveXFMTzdo\nTlg0MnNJbFBzdWM3WEJLSlFXSzdGdk0K/CpPqIi2zloQrdE/sE2vobrXcgOIl28l\nmokeEUrGLpcnJIHue0eq9YBWXJBFDxoRyPtLvP89LScu5K6gmq0h4Q==\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"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3OEtWNFpDWVdTcnNnN2d6\nVEVSR240VHRQdUFIa2ZKWUcrTjMxM2UrRG5zCnk5aU5DdzdoNGN3d2NQKzRMS1Vv\nTnpWUDBCVW5xK3d3Z1BET1laTUVsZUUKLS0tIFRMb09RbTlDQ1l2RWpQamZPa2Jk\nRURYUFhpUmpUbkdQSDdOTStOa3ZCZzgK/bt8btAM5jbeXiDcMhjKOphMIBOh/lFQ\n8sNVTESTUWWu53FPkeMA+sDrsG5iM/5q+57OXN+X/SxIcyVzklkpJQ==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-06-28T15:14:52Z", "lastmodified": "2025-06-28T15:14:52Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFY3lTTjRKSmxZMFhXYzNO\nQ2NIQ2ZrUWNEUTMxL09aWW02RXE2NGhJbEdnCkJpaE8yaTVTWDJZQzJFUW5zN05j\nV2FVSmIvVllJa2M2OWpuMWpTTFRRcTgKLS0tIG5PYXcweHNsYUNPRVYzMTBHYmFp\nUUxFMnlXdDFUUjFQM1hRKytGMWEraWMKiUfQEFQYezVH+sd/bJbCMcOMt79+XjK+\nTOZazSVg7ZSu7VsXv0h/uMWNpQZc6y7Nq/hEalMcpwHpdPCjp5HRNA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBXV0RH\nbkZTSWVZdTV4dzVCRUU3Kyt3c0l3NFFocVhaMzQvSXlUSGc4Z3cwCkVMdk5uMlUv\nQklQSHZzbzJyWlRHWTlXcE9qL0Z4MW1DL2p6QWRqQVlneVkKLS0tIFFNNVJFZ0py\nYTR6SXpHSEpvSmxqM0x0SG5EajR6dnB3Q0czckpjMWZmQUUKdVbsotKQxQqTXQE+\nvxIprPHlBMKFrD0r8uVIu0Trojb4aiSQxpnRtx22FeWe+Xg5E62uKpsLgQugIsID\nsi+EqQ==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhek1aeW9nRXpTOTBHV0Fq\nRmNvZHFnaHJhUXdRMWo3QTlYMEljQitobXg0CmxTTkxOenFhZHlsMFpPMVgzSk1G\nQi96Y245a3VWL2dZcUk3MndmRTlhVTAKLS0tIDZIMkJwYVNZTDdua1BjRm15V2Ft\nbEppeFBRb1hrTVFiU0VGT01vWDF2QlUKxVgS3L/kU0+N1KqzJxHokzj1zAuvlzlA\nv44bTVEA1p5Z1LGB8yswQS7zQRh7S0spgJukZfcqlzsMDpf9RY5TVA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyA5SGVI\nZzl1UG8yNkhRdWZQcFRNNUJFTnBsdldNU05HYnhIVGhzZHVuN0dJCkJiQzc2UVZV\nMU12am5mMkpWY2Z5S2JKYUJRY0FRUXhKK1ZDQTFqZlpLcjQKLS0tIGJBL2NVY3lX\nSnEvNFJubDFkSG5tVC96OVNjZlpLNUpPeXdCakFzTjlBT28Kkulsz5fDYbyuJNv5\nOG/zikwE66A/GXk6iW1cy3WRUS1kWSTnEEd5Ke4UWW14k6AtBC+rhI3hYwKY4c8s\n1OC8og==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0U3hMOWFWWHlXWFBnV3do\na3kzNmtnT0VMOUprT21scmtDQVBxRVhZQmo4CkhQdDBibE10aUJtTXlBbkY3bU5Y\nY1VVVElVdkp4c1QzTnhPVG9hM0orem8KLS0tIFJJRllZZjd3bHFyV3FEREZ3djc5\nbE83bHk3anhUcDNKd0NmeXppcU9mc3cKrMmYNq/R0gr8ZKm0+xP9nFay+FW+2LhU\ndrbXL5zN4qVFT51uxDQLnaoTHs86gZbYrK4bciLtQgQJTZ0ppiDWAw==\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"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvVzBRaDM5ZmlrS2hBMjd0\nQi8rZE9DOEE2UllhYlh0SzluYjZXQXFMUVJBCktoWWl2UGwvbWxES0ltUnhQWXFp\nWkFkOEpOTWg3b1U2QjJlY2RMRGY5TUUKLS0tIC9rOUt6WkVnaHhsUlJIQ1NKOGJ4\nQ2YraElCai9XZkNONjhXNkpxUHhyRlkKi/poARA4FzYojwF+tcgZRiS1z0vCbG5T\nmofxZ1JYWLbqIc+aP2r3sD/gle4v2BpMJ63KuC9R0rtWCdClQYAVtA==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-05-28T10:44:26Z", "lastmodified": "2025-05-28T10:44:26Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByWCtldEc5SkxxMUtUZTI3\nTExjbFRUSngwdmszMVFyYXlLTkNDSHU4SUFRClp2Sk9MWktQdnRNR1RMaUpNOHZM\ncm93Y0R0OXB4L0xvdGlLOEEyRlo4WEEKLS0tIHhQOFF2cExJTC8wYWY1RU5BWkd2\nblpFRFdpenkrSnh4bXE4RG8xZmt1d1EKgNNSj6Fpx1bnlPOXXt+l2lgH4kS8PrIe\nZhU0Y6yM60G6qpV4mrOWy+JEOAtSrZU5K48DOgZl+Us0ZuRO1jXTKg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBVM2lu\nL3EwVFg3WjdSN0REaGFndmtNN1BmNjloWU10NFlEaGZtaDdOK3pFCm5aRGdpZU9o\nR1FXQ20yVXkzakh2Ty9qVlpqMllJZWRjbE1PR0FGMkpKSHMKLS0tIDlvdjNPNmdP\nb2ZYYnR2UXBoTGFmQkd5S2J1U3pQRjlUUFFrd1JnUFJRdEEKhwlcJwXav7f4bVmb\nMumds5QXYwiT4MtGlVsA1DRRW1y9DTgUpgHw972Fqwml8kzfrgJcaAX4VbDPkPRE\nsWgeOg==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWSXZxSk5rZTZCMnkyNVZj\nK0Q5MURqNzJwRnIrZmgyeHVrOWFIcy91VERFCkhvT1Nac211OC9BWVlOUmd6amMy\neW90czl1alZ4R25VcGlIcmY0R0VwTWsKLS0tIGJEcXB0Sk9meURpcm00eTkyei9h\nNnpWTG5vYk5iVHdITVlvQkpnUGVLVVEK/UDh251NXPc9hnnmTVFRnR2yUufRRVKR\nMNJBH2Ku0IcpJFiYQ+xNonIQKmZCg5zP3Ncqj/teKOkA9lx7CL4Ncg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBYbGpr\ndTJUSVV3dzdwdUZwdmFsQmhIL3J2MXZEWlJiZ2JBZlJZSVRtejBrCnZEUHFYdndK\nMG1mc2EycWdNTlVaK3BnMm9jZnViOGNNUWVtc0Ryc1R0c0kKLS0tIGlIalM0NFJJ\nZmdMVWp6Q0JRb2RqeDhLTktWaWgyQ0poMEcxMmlPak9sb2cKKH7wFJS0uFyxtfvY\nWzYwiJNv0oc6ArCPCFL7s0ygKdj8352baOPi4HMtT2kLgXiaW/g0JM++ODkpJxGv\nu32UCA==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzN2ppQUltaFFpVFNIdWNo\ndFNrYnl0enNKdnRBQ2dyWVRzdjlMUThnRmdjClZTazNOVlNXeVRwNG9wenZJcXBM\ndnBqUWZTTlRBeHl3ZFE2c3lnUERwZUkKLS0tIFA0cVV6d285L3cyNkcyeFZUWDRm\nVHdveTRxRys2a1dDcU0zaWdTeHVlb2sK5c/jnmcwSn0BhATWbN/mVoRt59hQ3v7F\nAwdVdqGzFqiMVDIooMNTSFhrIRiq2W2YtmzkMW358ur69CD/85e0YQ==\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"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2aE5yVkdEVUtENCtxZTZB\nOG1lMWdoWmJ5MWx1SUtuSk1ZVDhPeGhtL3c4CmNTWnl6Q0FWaHlVanhxRVdlTHFj\nTmRWKy82Y3RVVVZ4L1Znd0ZkbWs5dTQKLS0tIHFSMzJtY1R2WHorNHVnRzRjd3U4\nZytia05EbFBDQ1V5RnBLOHc5TFpYSjAKbtlr4VIM6MCohc11RIJ21lOMvPnJfNSL\n1j0niVAToYLPH5U7ZmZb6QO0xsB3QQxe0O8+SjkW0RQ8rXu5CDd36g==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-05-28T10:44:37Z", "lastmodified": "2025-05-28T10:44:37Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByWCtldEc5SkxxMUtUZTI3\nTExjbFRUSngwdmszMVFyYXlLTkNDSHU4SUFRClp2Sk9MWktQdnRNR1RMaUpNOHZM\ncm93Y0R0OXB4L0xvdGlLOEEyRlo4WEEKLS0tIHhQOFF2cExJTC8wYWY1RU5BWkd2\nblpFRFdpenkrSnh4bXE4RG8xZmt1d1EKgNNSj6Fpx1bnlPOXXt+l2lgH4kS8PrIe\nZhU0Y6yM60G6qpV4mrOWy+JEOAtSrZU5K48DOgZl+Us0ZuRO1jXTKg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBCUjFJ\nYXB0ZkRudjZRcXBRY3RZNUNFVk1aUHI1eDF3MENvNnNqNFF1akI0CnZBN1pqLzBD\nZnIyVGs1V0hxREJtTEllSURLQ3JJNVBNcDhTQTBYOGxjQWcKLS0tIExLL2pPeVVR\nVW9UdmFMdUlNMGxRS1Ura251QzEvMTQ0c01sU0JPVmxtN1UKQxAjmEgeSgocSA9Q\nbngYGWx6sSomaBaqBRWhxCeyvnP+M5sZkBI6bEDVvfqly6yfPb43xKxh4LrOv0te\nfJzWcg==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWSXZxSk5rZTZCMnkyNVZj\nK0Q5MURqNzJwRnIrZmgyeHVrOWFIcy91VERFCkhvT1Nac211OC9BWVlOUmd6amMy\neW90czl1alZ4R25VcGlIcmY0R0VwTWsKLS0tIGJEcXB0Sk9meURpcm00eTkyei9h\nNnpWTG5vYk5iVHdITVlvQkpnUGVLVVEK/UDh251NXPc9hnnmTVFRnR2yUufRRVKR\nMNJBH2Ku0IcpJFiYQ+xNonIQKmZCg5zP3Ncqj/teKOkA9lx7CL4Ncg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBmZUxB\na2h2WGVySHQ5RFFTQmloT2pYMTZVcU8vc25wbUZmUWRvK25TMnpvClE4QVZEdnpB\nVDEzSnIxN0ZpTkxyclZRL1NRNHNJbVhvRVdCSUNubzBNMG8KLS0tIEZWbk5sc3U1\nOERuZVBPZ1g2U2VKSVF2dFJ4OUEyeW91V3VFMHdPaVhWZUEKLbQAvuT6WeoJl49G\ntmPO4rAiGFc2/Psoq1ShBRk/RbyBB9248ttaiyLgVNFnE0J825ade5B2wcf6+Pfq\nZV2UEw==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzN2ppQUltaFFpVFNIdWNo\ndFNrYnl0enNKdnRBQ2dyWVRzdjlMUThnRmdjClZTazNOVlNXeVRwNG9wenZJcXBM\ndnBqUWZTTlRBeHl3ZFE2c3lnUERwZUkKLS0tIFA0cVV6d285L3cyNkcyeFZUWDRm\nVHdveTRxRys2a1dDcU0zaWdTeHVlb2sK5c/jnmcwSn0BhATWbN/mVoRt59hQ3v7F\nAwdVdqGzFqiMVDIooMNTSFhrIRiq2W2YtmzkMW358ur69CD/85e0YQ==\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"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2aE5yVkdEVUtENCtxZTZB\nOG1lMWdoWmJ5MWx1SUtuSk1ZVDhPeGhtL3c4CmNTWnl6Q0FWaHlVanhxRVdlTHFj\nTmRWKy82Y3RVVVZ4L1Znd0ZkbWs5dTQKLS0tIHFSMzJtY1R2WHorNHVnRzRjd3U4\nZytia05EbFBDQ1V5RnBLOHc5TFpYSjAKbtlr4VIM6MCohc11RIJ21lOMvPnJfNSL\n1j0niVAToYLPH5U7ZmZb6QO0xsB3QQxe0O8+SjkW0RQ8rXu5CDd36g==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-05-28T10:44:37Z", "lastmodified": "2025-05-28T10:44:37Z",

View File

@@ -3,14 +3,12 @@ FLATNOTES_PASSWORD=ENC[AES256_GCM,data:jC/lVZPDGvcYzXhdnvjs,iv:0O6nNNlWjD5OWIa2o
FLATNOTES_SECRET_KEY=ENC[AES256_GCM,data:I8zrSTMRnPNWn7u+KZiQW2YdpAkKOBxRKv7ov7dLLNA=,iv:I4YP4KqyMR6jfofEdYxQ+I9PQjTNQwCgnTUfHnDW55A=,tag:P7QcugaQWMCfb5+G5JdMXw==,type:str] FLATNOTES_SECRET_KEY=ENC[AES256_GCM,data:I8zrSTMRnPNWn7u+KZiQW2YdpAkKOBxRKv7ov7dLLNA=,iv:I4YP4KqyMR6jfofEdYxQ+I9PQjTNQwCgnTUfHnDW55A=,tag:P7QcugaQWMCfb5+G5JdMXw==,type:str]
PUID=ENC[AES256_GCM,data:ZA==,iv:xfnOzfWvf7gozw9YMTAw2uarfsGHRpx3rsEN5ja1k7w=,tag:yuXkWMkXAUpF7h+AaYW14g==,type:str] PUID=ENC[AES256_GCM,data:ZA==,iv:xfnOzfWvf7gozw9YMTAw2uarfsGHRpx3rsEN5ja1k7w=,tag:yuXkWMkXAUpF7h+AaYW14g==,type:str]
PGID=ENC[AES256_GCM,data:RA==,iv:m8CO/d9Gh0cjc4QYX6CsUx87Vu5iqtU0uVOsA3AeWgs=,tag:Ri0arOjuwRC83fz4EynVtg==,type:str] PGID=ENC[AES256_GCM,data:RA==,iv:m8CO/d9Gh0cjc4QYX6CsUx87Vu5iqtU0uVOsA3AeWgs=,tag:Ri0arOjuwRC83fz4EynVtg==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiWm9aaVVCa3V2Z1RYTVpi\nd055ZUk0ZXd3eFl5dEM3R0N1THVmRENrNFNRCkVPNTVIRWRFVVhoa1BSRWVvN1RP\nMmZldUsrSVhQa1RWd0YrZmRvR2RPOUUKLS0tIGpqK2doVDdwTDV6MXh4TUpQbnU5\nc1ZORHAvR0tCZ0RLVkpqNm96OW5nR3MKkw9A7/3o3XVxLr6xVXAsS29PgWw1RiuJ\nRM7riGPrQIPuiNqwOIRR5PnWXKsWLeoE7ybQ/NJuxEFBbW+KP4LzPA==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSAyc05U\nSVFwU1hUdzZveUsxaUJKbFAvdlN3UzIvdStXcDkvUlBEaXdXNWlFCmZ4eWlKVklQ\nNHlUYlpFRUJmNmllbDNyckFQQ1crRjF2VUFNZFJqdU9wbDQKLS0tIERVNWpyTTUr\ncUhzeU9FcXZURUNnVXB2SDI0aFljQkNGcWtRb2poaTJuVmsKEHX7jAOPXij+us4Z\nAG7t2j0X4JMi1xDOEaYvfL7GZJ3FQKzDpiyx7ifDp9HUVOrnBidKGC08CZgkCvzj\nl2+42Q==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDVWhuUTFJS2R0MjNKbUNY\nZDllbXowY2NLWnBkbC9qY25jNVR5RHFKUmxNCjl2bnlOVTc3Q0hqT2x0MDFWcG4r\nV3o1MlJqdkpwNnp5d2pqN2loNTNkZzQKLS0tIGQ5TjBVakEwQkxKcytqeEVQYVVM\nRzBUN0ZoeG5ydUk0UHAvOTZxb3JMZkEKejQzUpkFJdx0xUVpVOZ7CH5fqGY2SZ+i\nBoUjB4UxwENQ3jVVfJUzmY81O4HYr9NW2lUj4gwIHFMcG6DQ6Q7AaQ==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBCM24z\nd1RGdnJNQ05mVHRVNDkwZnZMaVBIa3JSR2I3bzJ0NE5UMkNsRWhzClZIMXRwbHQ3\neTdIRUlYSEtaenVMa2dEMkZXblhoSE9TcWo3bGk2OXJrZG8KLS0tIGgwMjg4TnFh\nc1Bkd2FYdStZWktBd21GVHNxZ0FsdVU2aHVnZlFQelgzRUkKIzTyudaXGk1sESbn\noLXLtgjZJFBZRV5s/+bBMgZ81zk5s1O4/vm/HDgxxM4y1VVmss/toxpQUGuAR3gd\ntlvEEQ==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_1__map_recipient=age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6 sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArVFRwWXowT0RWbERmc0FJ\ndUxUMXA1NWk2bEcvWnVNem5zTmVuMCtmMTEwClZCZGZzd3J2cWxscS96U0ppOUtO\nQ2FwY05PeDM4cE5SNzFwZC84WFdoeTQKLS0tIDJkTmtxTXJSbktJcjRyNWNMcHNB\nRWUzeUIxbVh2anJDUDFKTXl1VnU2K0UKHN3kcm4XGU2gDSuMt2UftaaBKbPHq2rI\n6LCPtG4caf+kTieQMgZ6x3ofmKpKOoW4xFGf77aGaMFA7i3cdbS3IQ==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBLV25m\nakVoSjQ3VFBadTk1OUJVcDg0b1huajZDVmtIK2pUb1MxS0g1RjBJCllpdjBpK3lx\nV2ZVa0dPNmFIN3dCeDRvZHpPRW1Wa2dJVlo0dkhLVllwSHMKLS0tIHRHYytINXF1\ncGZLWjdPMHZJM0s3TlRxd3g4VnhkckRUTWRjN0d5OWdUbzgKXaSeWmzdFcW6AEjZ\nIkRk/alyOFnI+18jibEBJaZNo87tAzpVHQxN7mA1mpoMNbqK/Co1Ut3/Q1J/McB7\nqeg//Q==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_2__map_recipient=age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_age__list_3__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUblBoSUkwS21VbkNXMm1u\nZ1BDZi9NUEZQWjFacW1FV1NDaDVYYzBxaHdrCkVqTUJLZ0lZcHdkMUxSL2k1SVox\nWFE1SXJGejlYKzRkaHhLREIrR3dPNFUKLS0tIGwvU25POS9yMTFZTVBoZDhtRXh4\nWGlzZ2RKWWFFckt0OGtYVVc5eTBSazgKRZVGa+o9qY8bOKuQAH7dqmp4/qR/le7W\ns06L5qs1429IHinhmoEjauQmnSl5nS4YDq0K9pEr+JW9g/aiNWZhNQ==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_3__map_recipient=age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8
sops_lastmodified=2025-03-02T03:46:13Z sops_lastmodified=2025-03-02T03:46:13Z
sops_mac=ENC[AES256_GCM,data:j/JqiPLHw6a21iJV/qNhAr+4kVkCnXG0uYGEJ4m5K5UerN/nXLzVafa7ciaMzBC1k6KBZwSyuKcQxJt3Q5+R733AD97VgrClSAU8w1pQhlWAUpzD959PwW5dTX8N9G+gih0xcJ5RsMALfWppeTImAAyAoKo1mtxE2MtfQZw1DU4=,iv:jYM3YfA2cbDjKVLHhQ8Rzv90Rg2R4iiY6zFL1N8knv0=,tag:8wRhD2XDZXI9v2j5XHKtqQ==,type:str] sops_mac=ENC[AES256_GCM,data:j/JqiPLHw6a21iJV/qNhAr+4kVkCnXG0uYGEJ4m5K5UerN/nXLzVafa7ciaMzBC1k6KBZwSyuKcQxJt3Q5+R733AD97VgrClSAU8w1pQhlWAUpzD959PwW5dTX8N9G+gih0xcJ5RsMALfWppeTImAAyAoKo1mtxE2MtfQZw1DU4=,iv:jYM3YfA2cbDjKVLHhQ8Rzv90Rg2R4iiY6zFL1N8knv0=,tag:8wRhD2XDZXI9v2j5XHKtqQ==,type:str]
sops_unencrypted_suffix=_unencrypted sops_unencrypted_suffix=_unencrypted

View File

@@ -1,12 +1,10 @@
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+IFgyNTUxOSB5cFA1K1RGbkxpYmgwMGJo\naGdYYzVZNVljcEJWbUNBNUZZbWoxTHBDcEVFCm1BNTgyU21IeXE1bjQ2ZlU5VTJp\nMFpXUXIrQ1JuQ3hydXBzREhkMWRacFkKLS0tIHJYMG9HS0xydW5IYW5Bd0pNd3F2\nK3U3WWFSV2U4dEpadmFaRW9RdGJ5amMKt+lVGKjc8Mh3EfkDlFrHB6hMMlwNc9g7\nc+s5I7ivWqkKMBW0yzdLZbv4xBc8fbgjnCAp01PMTLgh+kFGWmktlQ==\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=age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns sops_age__list_0__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO
sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkam5kT2tBQzg5RjA5ZEFn\nZnhqaXo1NTg3emtpVENkUGpNVGhPV0N4MFVZClFMZFI5OFFhaCtRQlUvU201cjcy\nUnoyZzQzQ0w1eU90cm5uelBxOVF3LzgKLS0tIHJ3b2lmOXdGVGZBYnk2a29nRjFv\nKzMxQVlQK3c5OFJlQ21KYytmZS9tZXMKaqcjYNcNV9EY8zBxpqSYQzZ8jlx4usoq\nHKfa1/fVNSGt3Zr5tbTuXExGdfQvsyVI+2TpVMMALBj8/vonjsnWpg==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBKMXhO\ndk85UUUrYkgyRHp5OUFidGNXU3NQRk5VYlAwMVFkcUwvUndsendzCmpudHEwbTMw\nT3UxaS96US9yT1FsZGZjc3V3dWFmak1tdWZCdlREV2I5N0UKLS0tIGpXV20remtx\najFHR1kydHJNYWlveG9zUDhUUkRWOXRuQklBdCswZ3hBWkEKiGzMkWCaGb+v01ym\nwGIRjyp8StrSOJRYit8xnoM42ozJLBf/HDuWdSfu/VQuKGNVTRDLY7T5PNrzCVIj\n9sFh6Q==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_1__map_recipient=age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6 sops_age__list_1__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire
sops_age__list_2__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmQnYwOW5USUNkRGpwYlZj\nVHVGY2VabDMyRUlQb2ZrbmNRL3NJbWwrb2djCk0ycWtlZEtDcDVpc3poZTJ3TnhK\nN1hnU01SWGZFUlJsSDZaemR4SGs3c2sKLS0tIDhOV2RDc0JRbkIrM2NabE9oQXRn\nR3VUdDYrVG52QVd3bC9EY21qQTdhR00KPAv1yi75FhrOtdZEEQQExSkZ8wxkFxjA\n1ze4YARfnkrkILs1C/wtULc9lHr4pzTF4+B4aql42GKcuv3n798pzA==\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=age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq sops_age__list_2__map_recipient=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/
sops_age__list_3__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIalYrWEZLc2tZUUw1YUYx\ncHJyRFY0eUZZU28yU21wN0dFbUFTUGRpUlhVClJTSVVONGJQY3B6eEkzcG5yUndN\naURMNVhNc3B4V2JkU0F0R0hqbWgwY0EKLS0tIHJ1ZVVrRjRjZEFjSmJHS2M0dFBZ\nWFhuSGJpaFhDTXkwM3JwanlPM1RKZ00KL9ts0rd+CUg1jeh9K3nMVUaoIduwB/8X\nyyVEUXH+Z6AHN9RB+eCbxhPBwdU0wI4FJdATkpDXFSTW0eBMkrnlcw==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_3__map_recipient=age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8
sops_lastmodified=2025-04-13T06:57:07Z sops_lastmodified=2025-04-13T06:57:07Z
sops_mac=ENC[AES256_GCM,data:WJ9FCO78LRFbU7o9uEZ70s/OJIHN5/UQVKrgt/Zve6x9yVChaRtHmvk7kF/SoRsheLIbeYoY8RI0rUn3Sx7Y7o/ib/u9dMAec0xGt0K6+yde0DUO/uH1KpjXd6WHRPjoMERld6xA1fWVRu7G+gXrEZA1dN5Jbs8ZWVYGF6IBw2A=,iv:r4eYeCDJOw40hK7cyIEbEW+Pq+VFgUOJr1ydkSyjaEg=,tag:ucFH1pNqAHg7eWm1tYYi/g==,type:str] sops_mac=ENC[AES256_GCM,data:WJ9FCO78LRFbU7o9uEZ70s/OJIHN5/UQVKrgt/Zve6x9yVChaRtHmvk7kF/SoRsheLIbeYoY8RI0rUn3Sx7Y7o/ib/u9dMAec0xGt0K6+yde0DUO/uH1KpjXd6WHRPjoMERld6xA1fWVRu7G+gXrEZA1dN5Jbs8ZWVYGF6IBw2A=,iv:r4eYeCDJOw40hK7cyIEbEW+Pq+VFgUOJr1ydkSyjaEg=,tag:ucFH1pNqAHg7eWm1tYYi/g==,type:str]
sops_unencrypted_suffix=_unencrypted sops_unencrypted_suffix=_unencrypted

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4TlZGM3N1OGxKQ0NiMDZJ\ndGZET3cydHRnS0xmK1o0ZFhYcVM4d1lYNUZJCkN6MHdPc2wzejdsb2JXQ08wK042\nR3IwVS83d3NqQ2I5WGlxWDNLcElJZXMKLS0tIEdVck5OaXlnTzQwbHYxVDIreWRN\namNpQnZpUGlZMkdiaTFSRHNGZG9tb3cK8/m06LMrEr+Adrv13LdlpLSU7JV3US6w\nE4/SUJk8qm1i4lQ6Y8rzaQMpYkmLJJuCLlLcjP2retjUS93/wwE6lg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBzdmsw\nQ3V4dWNyU3BzWW90cDBiSnBGRnNScEVTaS9QT09hZGt6OFVOUmdRCkoyY0pITDAr\nNUVVbUlOVUp3M2dlcWpkOXBZUVpNUE5TOGZjS3ZiWURLaFkKLS0tIFljSFBXVzdG\nME1veHo5ekl5UkR6TmNValFPdHpGTjAyMWdJeWJMRWRWS2MKIrBXeVOj3tcnX2Wo\nqQ2MYF+mxvMOpFdmYtk7kBwopyieCCn396L+WyoOJR/QcLMsEmtuTKhrG2HWn35c\n+3SSVQ==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2NUswaXc2ZksySXR6b1Ix\nWFEwT2N5bkJ2WDF3Vi9aempVS3ZHRnMyRVhzCmdQODZSM1FzZldCdG9jZFJjS3VV\nNHdSSDRzcm9PaS85U0kyaTZxc3h5YmcKLS0tIEZjMTFrU3llRGhKbHpkeGJ5YzU3\nN2FJcEthOFV2c2JvOEJKSmgrVjMyNjQKPaqDJcG+bCVCJmkwaeO2F2PAoIERDOaI\ndpoq4SoBcFRS71C2GzPvZPBs7RFaDGSlIqALpYzbDwdA+z7uqplcoA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBIcG9t\nNldXTW40eitucEN0N2t0cnlxek83Z3lqejdNUVZpNVROdVR5Q2pjCjVtNi8xN1Ja\nWHJ3MnQ2ejFQYVcvc2FEMXovT29DN3FkN2wwRjJGdWxqK3cKLS0tIGE3QjhVR2Fs\nZkNkUmhxS09wWFJ2WEFHZDJkYXJuZHROUzlrZk50MGN2dUUK3qmwF0oWpc8qhzIV\ni6S3pcfz3rKcVyOGVNvwrxl+X+bRqT/lsf/T+pU79rJwX+wP1Cd96G8HlwDKsYHo\n7x2f1g==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1VUNCcnNEOWEzWFFaU29N\nQTFzdnpRcTZCUjN4NFJ3TExyR3M0QytuU0FnCmlyZkNyVk04NDBhay8xVExpWnhr\nK2JzUUwvTGFBeWQ4dndwUzUwbjMxMlUKLS0tIHRRdlNwdE1NdDlxajBOd1ZkNmh0\nSG5oY1o3L2t2SHB6VmlnTmFscHFudWMKsg2o0xG3P5hTeHz5N5rs3QwUc35qV0eC\nrup+751+KYUPE5/xtdhQ5t4uqeUY2LXT7diW6fo4wNR5BL5mIoaP3A==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBPbHdr\neWlXUGt1NDRhcXlyTG0xSTZDRlhsdnhjalR4RUNDRDJ6R3NSNWpFCjQ0eGRTWWtZ\nTzlqTmk0d2wwY1JoZTErWVJ2a25VUTJzMnB4ZUZHNUtNWTQKLS0tIGpUQUU1d1hE\nQXgvbWl5VTUxeGJPZDNnN3paSXlpVERoMmpxYVQvbCtwM0EKL2LmRYps5W3fqfY1\nPHPJ+9UOCff650nzeohMa/s40+KPycIN/inYjmFst9fLM3l3lI5zOS5KZqU+6sTs\nLiR9Ng==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvTHM0WXRTMFloYUUrOFVL\naGZwclBzL3BNeUZwd0dnYk9iaHRKTXlwY1NFCkNGQlBrMTRwdlVoVWtFL0Q3YXVS\nOEtyOGJJVjU3ZlBQb0VrMUVBTFdCMWMKLS0tIDFiajl5a1d2ZWwxak5NRUd1YTJK\nU3NqVVVUVVdlN3RrU3NTYmN6NFJOTU0KM31BZlxkvg66NghMELNM2KMOcN0tuDuD\nu7ujktQMC68GZ+wuAN1ki/vuA8ZCSDqC0EDfxT/BezjYxXHOd7CQNg==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-06-28T14:43:36Z", "lastmodified": "2025-06-28T14:43:36Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxTmVNRkJ6ZTBObWF1RE5v\nUkdHMXkyQXU5RlEvblZ3bitBMTFURzUvTGlZClMrMlVDejRkZHpiWUlpRm5jSHdi\nbXAyc1l2S2JUZjh0Y2xjZEJ2YklCRzgKLS0tIDFKWEY4R2JJeFIzMUN3ZUUzVjQw\nMkprdnJYek44OWs1L1VXSTR6VlVTYkkK8zqmmr8iiYvNMPyGha1g5WKqYCbOEnAw\ncO1T7eN3IMfwK7ueBZkZQsDL/XZ4JoNKL2aseCDxbiDqIxHV5Dttdw==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSBEdGl2\naURodyt5anZuRm5WaTFSeUQ2VG5rQ1oxckJxbUs0RzEzalFWc3dJClBBRFRCaG5L\nMGF6Y0EweFFEckRoR0ZMMGw4WlFpWEFUNEp5bWxNMUd3M28KLS0tIGFjckxTa2FN\nUUtqM0kyU2Q3WWZlN0dlVFRaUXJObWZQbVo3NVZlTkF0UUEKeHFgQtgIybfyzNbs\nGWumTzHwwgQlc2HlmFmDg+mAeHRL1vdRokaCCUJ0pubRNXWzOOZpghwDUk8vYBhV\nKnx1wQ==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1bFFaNUd2Tm9TSyt0WjJV\nRVhDeHpGWlB5SHRNRGoxOGwxZi81OEpYQ240CjRvZFJhVDNRTlFUOHFtSUtrVk11\nYXpiYjZ1OFRJYmEwUDd3bklJRlJWMmMKLS0tIHN5dFpxUE43ZlpkdHJFb1daWjB5\nRTZxWEJIOGNhNkJHTWRSVExvUVpkYk0K/8zXTA8HjMQzoUpyK+Sa1orZzukLxJPw\nR8ts/mKk/lL+hXWN0QdLu8cSvOGth1QvzeGjNb/2eToQa9fZtar6YA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBjZXZh\nNlJqLzJ0RWgxUjl4Vnd0K2J2SHpvZTQzNlpPUk5MWUhLWllnSUJnCmswUEszYnl4\nQkU3KzZhWFlUalQrZ1MzR25tQStHVDhUVng5Tk5SeG0wL1EKLS0tIGtRUU1WNUpm\nZlFKNkRSdC9ENllLZmVBMzZXRVM2VU5pYjJ5ckVSZnFoUHcKC5IDoAwNih9aJkBx\n4e9Q6sEsaAUGOmRuFtVMabwCpfOnP3IEBSPrx0XB77G4h6HYPm79dedX3zHcN+RS\nrxiv3w==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvYm5Zb2ozdTI0TTVuWE92\naHRUOGhhVW9jSTVxRlJMSk4xVVBBeXVlMnh3CnZCUUVvTjl0VzFVVHhLOXNpYmdu\nYmp4SWxBTGc0MU1Sc3N5S2NwVlkvNGcKLS0tIHZ0c0hRNlRyR09TRGFYUXBsVnZQ\nbENCNlZucFVDcm1ZazJOU3VMbjJuZncKbwTyidmzUzITHdFiihdToOyvJ8BEdrgU\naOftPVH2B9YJ6GuLRFLSMJEhSStITLFkzEshB6EJbUkZPbUSwHnX+g==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWS1d4\nbHExemVWeC9DSGhsa1MrV3FXTmJPeHgweVhZVGdlTUlEVDdDbzBvCml0WFBvRHNF\nUWk2MnREaU4vVFd2UW5XNHEwZG9BbzV5bkFqaVRQbmNNK0kKLS0tIFdYZmZMWldI\nM0w3L0VuMkR2b1I4SWk1ZEplOHo2WmtZZTFjQStnQzQwU00K1Oqkbyhz6PL/jQJQ\nAU+/bjJdbP0bVnsRP7tK4TBw/Z2am+YpMSjYHrCDjEYBAtHFacu0DCsYa+3BiHkU\npLa4AQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5WnRMbVczYVNSblF6YThh\nMmpwWDUrWjV1Q1ljYUxDZFp5U2k2NUR6aFdZCjZ1SW02cTB2cDhIOHBqSFFuU0du\naENsUFhlcG80ZnRuVkRFYysyc1ZRejAKLS0tIDZTa2NJYnc5bXNSUUpkb0EwUkhu\nQXI2RnNFRmNxUXJXMTh2OWVERHVRZjgK5YtTAGRr1a1qT3A2zYbutc7kpa1mVC0g\nKr5dsCrjzvLUxs1bP8ynFX2zhsy47GEEwL3LMwIZY9JAZiLuyeA3tA==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-04-19T02:58:06Z", "lastmodified": "2025-04-19T02:58:06Z",

View File

@@ -3,20 +3,16 @@
"sops": { "sops": {
"age": [ "age": [
{ {
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkOVVqKzZGejZUZzlNSDhD\nNEFNTzZrWXgrVjkrbEp2NzhoUm9pS2Q5dFI0CmxBcVVDek53dDJPVVlQT2lERWRH\nUnM1bzc1dWtJU3pFa1RZRWY4akM3ZVEKLS0tIHV6TEtUNkFySytmRGM3bThTOHdq\nV3RYS0FSdUNSQVYyMStIenF5TEJWOFEKwvn0+N9jwrfcAziwfd1eSL+3oacoh/90\n6x+RlGR6ZPV4uK2zkS3D1kCTmlDsFUhQInhRaaPG+RFXRjhOCKxs8A==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDltTWRrUSArdXZX\nYmgrc1dqMUJ0b21IdnI4b2V2OStlOTE3MXRkTENYNnJVYXg5cGw0CjJwd0xmVHJV\nWG5hTVc3aFlBK29oMTBmSmVuQmxtb2IxVEE2elorc1haRTgKLS0tIG9rWlNEYSth\nQWJpUGdRYXFlT3MrQmJCR3pNVmhTZU5oZFJadFBqQXA3MGsKddPBxfpkNjt6yQCS\nF3316VQXjCmvhzBPijkKoCqrw7DXMRn2OfTDG87MS/AA1rVNL1HYC9LqoBwSusCu\nMYhDCw==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB28jpN+h5euh3NtdN+A+EtqgIatC22e4i1TPTioKire",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQY3pRdVNSV2RLQThmK01B\nU1NWeHhkeU80Wkhkb3ZwQzk5WW00cGNCZHpzClByendzSjQ0WlE0ZmcvbHV3QzNa\nMmJNZ3IzempuMjF3SFAzdXZwRzlrV3cKLS0tIHpDUUdqTExXc1lKWEVsMlp4bFN1\nbG52aXgrSG1PTGd3YUtZS29UbzNGYnMKYXcr/5+Z9+KT6JDqAGEuxeLZryYxMTi6\nG1UxTWJ/yqoEHovENdMGSyvu1GiEll0irlY2DygD+hI0PML7S5aA5g==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJNY1d1ZyBBSS9Y\nb0dHNURncVBTTmRzbWVpMHJZZnJSZHk3cUVENVV1bUEwTXQ1dERZCmdYeHFqT3Iy\nYnlXRnBxVmZYTThnQzRJYUFuZExFVHVoSU1hTk1ZQWlQZW8KLS0tIERyZWlrT3Fv\ndGR1d0V1S0wrV251bGQ1eDNyeE12VVg2bkQ3a1VYMk1DaFUKX+2QKvyVDj9um/3Y\nun84HFNNPQXv5HWSvtd5f7ooEpPzRWbAU2jsUkowELbzLis297H8x/YPaQqcLXty\n4tBfHQ==\n-----END AGE ENCRYPTED FILE-----\n"
}, },
{ {
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq", "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwSzMrNmR0eDNLbnp4ZjJ5\nU0lDU3NxRzNyN0Q4K0V0WmtSajlKK2x1Zm00CnZkYThLKy9uSzFjVnBpbnVqSytK\nanhKNVlzb0RmT0RJdEFtVHRKUDNzSFkKLS0tIDZUMnR3T2VGdkRUTGhCSHJEenE5\nZTRZRW1CVWcrcFpsT09IMFlNRm1TWmMKYq2J6Kwxh4cUs/NhqXc/rrWavcjZXZ/h\nbqBhZ6sTEAG5zcRyhYt2r3X7QW/A3TcYxEmAmWDNitug2Cv3jihkLg==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFhGYmtrZyBWNjNi\nVUVmQ0NuZ1pJdGtYa25qYzZpcFU2ZGd2cUkrbVliN2JkTHB6WG1RCkRLb1VyUmxr\nUm1mOHZkdzFXZm1TUHVRWTM5czRrdmZiazBpV1UvSHo2YWMKLS0tIC80UHZzOW9L\nRE51a2NCVllmcGUrc0FybFppQmZZRVJFaFZwL2kvTXJtZTQKU9aMC+fJjXooDFN9\nb/AUqVU1BgCSaxiDnbhbSTj78JgOELQr1Nv5qkHkn6xTfW4mJgr5hj+IItgUtbE/\nAkJuJw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkTUtuZmYvdk9OcHdMVnFt\ncGNHK2dpazlsMFhmNFhHWFVHZGVXOGgxQW5ZCjZXZk03WjlZR1RJMWNqaHIwbC84\nWHBjVit6czd6TTYvWGJNOGFUNFZ1WEkKLS0tIFpSa3pRVEJ2SUxaT2dlYUZhckRB\nWEovTDhOV05OZDBjV1loeTdMQ0RUbGsKFJWailZoXIJ1RnaduJakdTahOJZUweIc\nKT1IGw022cKd6EEKw/z9z4SCG3bltwYrNZ7TazgWVQlFLLU5tqaXSg==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-04-13T06:45:59Z", "lastmodified": "2025-04-13T06:45:59Z",

Some files were not shown because too many files have changed in this diff Show More