cfg(readest): Add

This commit is contained in:
js0ny 2026-03-08 18:43:28 +00:00
parent 7e0e7fcae8
commit fe11cf7a65
8 changed files with 201 additions and 5 deletions

3
.gitignore vendored
View file

@ -47,3 +47,6 @@ nvim-healthcheck.txt
private_pid
private_security
private_fish_variables
# NixOS local secrets
nixcfgs/secrets/local.nix

View file

@ -1,6 +1,8 @@
tavily_api: ENC[AES256_GCM,data:2hdsutsj0mqytujPIF1t1gpfSE7ym4WV2/lDbdLUw4yyLv7Rfvgtww8=,iv:kIYZ7ETQtQzyf2ymsgSTrvOh00qLQt6715SEi3dqxt4=,tag:M4qTgeoMlcnfh7D418ppfQ==,type:str]
openrouter_api: ENC[AES256_GCM,data:XmsmgAEdiYP90JHnKmdy/jzgaFhmoU/wdYqxahIZ3NMZshgGIWv/fq7apOH8bh+yTytiIMrOdGGP1LZRHWVMeTqoDnWAimpweA==,iv:m2qykUpt9qE4ZAIHzQ0qhFUqEhPG6TiuVZWK+kOP2fg=,tag:Jtr/s17DJMVW215sh2/6+Q==,type:str]
anki_sync_key: ENC[AES256_GCM,data:58zVvhbW6DS+CaxYHBUh5w==,iv:f8XOGMHS72p8cEVuburgsWBOpkw+axNjyP09NR4P3lo=,tag:UZzrdhnEfxtxCZwviEM+4g==,type:str]
openclaw_gateway_token: ENC[AES256_GCM,data:htTV/5GmsahHs+3N/L3Q1Kn2y0t0+kPMoH1P5z07xspnTwn+vxQ/QiR+1G506VM0y4Jm93tLk+sZRruLeaSFTw==,iv:mtid4CE2fyDadu2fePs4rcVLR35WUPiiRzuUA9GHWRw=,tag:ICW9ocQwgswwM/yrXMdC1A==,type:str]
openclaw_tgbot_token: ENC[AES256_GCM,data:9q3Q6oYNO6Vj3UryVoS8yDgrO6zrBV6vvXWx7gH3IlG6gVnJ5pqYFSfiyItUsg==,iv:9MBfBK/k/9J6PACvyyhhdCIGrVN0LDeg1viivSZJdaA=,tag:r4w+QkE30O2QraGeXvXySA==,type:str]
sops:
age:
- recipient: age1z2km2vu3mw6usw8p2rhjzkugddmsvk0ypwjw76cscyy3ar3tnufqtrv3nu
@ -21,7 +23,7 @@ sops:
MlBBYzA4bWkyOFNzWlFWbWhDMU9VSG8KJGAr3Gjg6+1OUC+d8+Yu+AW+zzfQ2MtX
7RzIvGv4R3YtAHlX79BcIT6XwGMXVIF86Fu2QOoU7u8o4wpyAt0CXA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-23T15:05:53Z"
mac: ENC[AES256_GCM,data:VBgIJR2RJpaB8sSO/BhNbBdU8QYk2csS07a4mCSBJGonuT9iO3mLr65uTI76uayZS/2uiDCYUMGR635IlBhAc8pvy/bif8FCheVNestUjJeppS44fjatS+Wz+i6hz3ED9ECpEFlgoqi31uG0hzPeECinVXKDZr3o0JJmw4s7ZM8=,iv:0D4YD8C0rtXmJ+Qv7rzMWUJ2CaUogP6sQk6GEJFpnSo=,tag:nlT55c7ikMqq2TImVp9cSA==,type:str]
lastmodified: "2026-03-08T15:47:15Z"
mac: ENC[AES256_GCM,data:jzMalds3vg6mfWgktBKRXmGqh3VRLUXRAEwEMh6Q+NUzwm7j0rkqzs2Bz8W3bu7GNL4SQwiBnHCoEL/9E/6qLOzMbyOZmXyleRByUEUMSBGCJa25vhjGF9x3oPANksEhTLZ0N4MA3xak66CKU6c2z1DGjV5cU61e6g8kEd3pAKI=,iv:JNHZgygwKoVBrNPVc2ODT4Ai9vNAh5w4HYgJLlv9R4Q=,tag:wfmBTup5fV4JSA3BdoEzRQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0
version: 3.12.1

View file

@ -39,7 +39,7 @@ in {
"com.qq.QQ"
"com.tencent.WeChat"
# "eu.betterbird.Betterbird"
# "com.baidu.NetDisk"
"com.baidu.NetDisk"
# "com.discordapp.Discord"
"com.google.EarthPro"
"com.wps.Office"

View file

@ -11,7 +11,7 @@
review-heatmap
# recolor # Use stylix
];
sync = {
profiles."User 1".sync = {
autoSync = true;
autoSyncMediaMinutes = 15;
username = "ankiweb.unusable450@passmail.net";

View file

@ -0,0 +1,140 @@
# OpenClaw - AI Gateway with Telegram/Discord Integration
# Documentation: https://github.com/openclaw/nix-openclaw
{
pkgs,
lib,
config,
...
}: let
# Import local machine-specific values (git-ignored)
# Create nixcfgs/secrets/local.nix with your Telegram User ID
localSecrets = import ../../../secrets/local.nix;
in {
programs.openclaw = {
enable = true;
# Documents directory containing AGENTS.md, SOUL.md, TOOLS.md, etc.
# Located at ~/.local/share/openclaw-docs
documents = "${config.home.homeDirectory}/.local/share/openclaw-docs";
# Core gateway configuration
config = {
gateway = {
mode = "local"; # "local" or "remote"
auth = {
# Gateway authentication token (managed by sops-nix)
token = config.sops.secrets."OPENCLAW_GATEWAY_TOKEN".path;
};
};
# Communication channels
channels = {
telegram = {
# Get bot token from @BotFather on Telegram (managed by sops-nix)
tokenFile = config.sops.secrets."OPENCLAW_TGBOT_TOKEN".path;
# Your Telegram user ID - get from @userinfobot
# Imported from nixcfgs/secrets/local.nix (git-ignored)
allowFrom = lib.optionals (localSecrets.telegramUserId != 0) [
localSecrets.telegramUserId
];
# Group chat configuration
groups = {
"*" = {requireMention = true;}; # Default: require @mention in all groups
# "-1001234567890" = { requireMention = false; }; # Specific group without @mention
};
};
# Discord configuration (optional)
# discord = {
# tokenFile = config.sops.secrets."DISCORD_BOT_TOKEN".path;
# allowFrom = [
# "your-discord-user-id"
# ];
# };
};
# Provider API keys (managed by sops-nix)
env.vars = {
OPENROUTER_API_KEY = config.sops.secrets."OPENROUTER_API_KEY".path;
# OPENAI_API_KEY = config.sops.secrets."OPENAI_API_KEY".path;
};
};
# Built-in plugins
bundledPlugins = {
summarize.enable = true; # Summarize web pages, PDFs, videos
peekaboo.enable = lib.mkIf pkgs.stdenv.isDarwin true; # Take screenshots (macOS only)
poltergeist.enable = false; # Control macOS UI (macOS only)
sag.enable = false; # Text-to-speech
camsnap.enable = false; # Camera snapshots (macOS only)
gogcli.enable = false; # Google Calendar integration
goplaces.enable = false; # Google Places API
bird.enable = false; # Twitter/X integration
sonoscli.enable = false; # Sonos speaker control
imsg.enable = false; # iMessage integration (macOS only)
# Example: Plugin with sops-nix configuration
# goplaces = {
# enable = true;
# config.env.GOOGLE_PLACES_API_KEY = config.sops.secrets."GOOGLE_PLACES_API_KEY".path;
# };
};
# Custom/community plugins
# plugins = [
# # Simple plugin from GitHub
# { source = "github:owner/repo-name"; }
#
# # Plugin with sops-nix managed secrets
# {
# source = "github:owner/plugin-name";
# config = {
# env = {
# PLUGIN_AUTH_FILE = config.sops.secrets."PLUGIN_AUTH_KEY".path;
# };
# settings = {
# default_option = "value";
# retries = 3;
# tags = [ "tag1" "tag2" ];
# };
# };
# }
#
# # Local plugin development
# { source = "path:${config.home.homeDirectory}/code/my-openclaw-plugin"; }
# ];
# Tool management (avoid conflicts with system packages)
# excludeTools = [ "git" "jq" "ripgrep" ]; # Exclude tools already installed
};
# Multi-instance configuration (advanced)
# Use when you need separate prod/dev environments
# programs.openclaw.instances = {
# prod = {
# enable = true;
# stateDir = "${config.home.homeDirectory}/.openclaw";
# workspaceDir = "${config.home.homeDirectory}/.openclaw/workspace";
# config = {
# gateway.auth.token = config.sops.secrets."OPENCLAW_GATEWAY_TOKEN_PROD".path;
# channels.telegram.tokenFile = config.sops.secrets."TELEGRAM_BOT_TOKEN_PROD".path;
# # ... other prod config
# };
# plugins = [ /* production plugins */ ];
# };
#
# dev = {
# enable = true;
# gatewayPort = 18790;
# gatewayPath = "${config.home.homeDirectory}/code/openclaw"; # Local development
# config = {
# gateway.auth.token = config.sops.secrets."OPENCLAW_GATEWAY_TOKEN_DEV".path;
# channels.telegram.tokenFile = config.sops.secrets."TELEGRAM_BOT_TOKEN_DEV".path;
# # ... other dev config
# };
# plugins = [ /* dev plugins with local overrides */ ];
# };
# };
}

View file

@ -0,0 +1,30 @@
{
pkgs,
lib,
config,
...
}: let
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
mkMergedJson = mergetools.mkMergedJson;
readestSettings = mkMergedJson {
name = "readest-settings";
target = ".config/com.bilingify.readest/settings.json";
settings = {
globalViewSettings = {
serifFont = "LXGW WenKai GB Screen";
defaultCJKFont = "LXGW WenKai GB Screen";
sansSerifFont = config.stylix.fonts.sansSerif.name;
monospaceFont = config.stylix.fonts.monospace.name ++ " Regular";
uiLanguage = "zh-CN";
};
telemetryEnabled = false;
};
};
in {
home.packages = [
pkgs.readest
];
imports = [
readestSettings
];
}

View file

@ -42,6 +42,26 @@ in {
"ANKI_SYNC_KEY" = {
key = "anki_sync_key";
};
# OpenClaw secrets
"OPENCLAW_GATEWAY_TOKEN" = {
key = "openclaw_gateway_token";
};
"OPENCLAW_TGBOT_TOKEN" = {
key = "openclaw_tgbot_token";
};
"TELEGRAM_USER_ID_AMS" = {
key = "telegram_userid_ams";
};
# Optional OpenClaw secrets (uncomment as needed)
# "DISCORD_BOT_TOKEN" = {
# key = "discord_bot_token";
# };
# "OPENAI_API_KEY" = {
# key = "openai_api_key";
# };
# "GOOGLE_PLACES_API_KEY" = {
# key = "google_places_api_key";
# };
};
};

View file

@ -82,6 +82,7 @@ in {
./programs/elisa.nix
./programs/lollypop.nix
./programs/gallery-dl.nix
./programs/readest.nix
# Desktop Linux
./programs/desktop/gnome