Compare commits
11 Commits
3a182533a6
...
14862f7de3
| Author | SHA1 | Date | |
|---|---|---|---|
| 14862f7de3 | |||
| cd0e1214cf | |||
| dca2fb09b7 | |||
| d487ad0c0f | |||
| bf0e460163 | |||
| ee4e003ccf | |||
| bd8c9210c9 | |||
| 036cd1a5de | |||
| 3f67ae6bba | |||
| 060cbf3b31 | |||
| f2ca3e2f1a |
@@ -0,0 +1,147 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"logo": {
|
||||
"type": "builtin", // Logo type: auto, builtin, small, file, etc.
|
||||
// "source": "arch",
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"padding": {
|
||||
"top": 3,
|
||||
"left": 2,
|
||||
"right": 2
|
||||
},
|
||||
"color": {
|
||||
"1": "blue",
|
||||
"2": "white",
|
||||
"3": "cyan"
|
||||
}
|
||||
},
|
||||
"display": { /* Display settings */},
|
||||
"modules": [
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "host",
|
||||
"key": " PC",
|
||||
"keyColor": "green",
|
||||
"format": "{2}"
|
||||
},
|
||||
{
|
||||
"type": "cpu",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "green",
|
||||
"format": "{1} | {4} @{6}"
|
||||
},
|
||||
{
|
||||
"type": "gpu",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "green",
|
||||
"format": "{2} | {7}"
|
||||
},
|
||||
{
|
||||
"type": "memory",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "green",
|
||||
"format": "{2}"
|
||||
},
|
||||
// {
|
||||
// "type": "disk",
|
||||
// "key": "└ └ ",
|
||||
// "keyColor": "green"
|
||||
// },
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "os",
|
||||
"key": " OS",
|
||||
"keyColor": "yellow",
|
||||
"format": " {2} {8}"
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "yellow",
|
||||
"format": "{1} {2}"
|
||||
},
|
||||
{
|
||||
"type": "bios",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "packages",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "yellow"
|
||||
},
|
||||
{
|
||||
"type": "de",
|
||||
"key": " DE",
|
||||
"keyColor": "blue",
|
||||
"format": "{2} | {3}"
|
||||
},
|
||||
{
|
||||
"type": "lm",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "blue",
|
||||
"format": "{1} {2} {3}"
|
||||
},
|
||||
{
|
||||
"type": "wm",
|
||||
"key": "│ ├ ",
|
||||
"keyColor": "blue",
|
||||
"format": "{2} {5}"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌──────────────────────Age───────────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": " › OS Age ",
|
||||
"keyColor": "magenta",
|
||||
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": " › Update ",
|
||||
"keyColor": "magenta",
|
||||
"text": "nixos-rebuild list-generations | awk '$NF == \"True\" {print $2, $3}' | xargs -I {} date -d \"{}\" +\"%s\" | awk '{diff=systime()-$1; printf \"%d days, %d hours, %d mins\\n\", diff/86400, (diff%86400)/3600, (diff%3600)/60}'"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": " › Uptime ",
|
||||
"keyColor": "magenta"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
{
|
||||
"type": "colors",
|
||||
"paddingLeft": 2,
|
||||
"block": {
|
||||
"width": 3,
|
||||
"range": [
|
||||
0,
|
||||
15
|
||||
]
|
||||
} //,
|
||||
//"symbol": "circle"
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
{ pkgs, config, ... }: {
|
||||
home.packages = with pkgs; [ fastfetch ];
|
||||
xdg.configFile."neofetch/config.conf".source = ./config.conf;
|
||||
xdg.configFile."fastfetch/config.jsonc".source = ./config.jsonc;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
{ config, containerCfg, pkgs, lib, builder, name,... }:
|
||||
let
|
||||
version = "latest";
|
||||
serverCfg = config.syscfg.server;
|
||||
in {
|
||||
sops = false;
|
||||
db = false;
|
||||
paths = [
|
||||
{
|
||||
path = "${serverCfg.configPath}/calibre-web/";
|
||||
mode = "0755";
|
||||
dirs = ["library" "ingest"];
|
||||
}
|
||||
];
|
||||
|
||||
containers = {
|
||||
server = builder.mkContainer {
|
||||
subdomain = containerCfg.subdomain;
|
||||
image = "crocodilestick/calibre-web-automated:${version}";
|
||||
port = 8083;
|
||||
# secret = name;
|
||||
extraEnv = {
|
||||
CWA_PORT_OVERRIDE = "8083";
|
||||
|
||||
PUID = "1000";
|
||||
PGID = "1000";
|
||||
#HARDCOVER_TOKEN= ....
|
||||
TRUSTED_PROXY_COUNT= "1";
|
||||
};
|
||||
overrides = {
|
||||
cmd = [ ];
|
||||
volumes = [
|
||||
"${serverCfg.configPath}/calibre-web/library/:/calibre-library"
|
||||
"${serverCfg.configPath}/calibre-web/ingest/:/cwa-book-ingest"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{ config, containerCfg, pkgs, lib, builder, name, ... }:
|
||||
let
|
||||
version = "latest";
|
||||
serverCfg = config.syscfg.server;
|
||||
in {
|
||||
sops = true;
|
||||
db = true;
|
||||
paths = [
|
||||
{
|
||||
path = "${serverCfg.configPath}/freshrss";
|
||||
owner = "1000:1000";
|
||||
mode = "0755";
|
||||
}
|
||||
];
|
||||
|
||||
containers = {
|
||||
server = builder.mkContainer {
|
||||
subdomain = containerCfg.subdomain;
|
||||
image = "ghcr.io/freshrss/freshrss:${version}";
|
||||
port = 80;
|
||||
secret = name;
|
||||
|
||||
extraEnv = {
|
||||
CRON_MIN = "5,35";
|
||||
PUID = "1000";
|
||||
PGID = "1000";
|
||||
TRUSTED_PROXY = "10.0.0.0/8 192.168.0.1/16";
|
||||
PUBLISHED_PORT = "80";
|
||||
ADMIN_PASSWORD = "admin"; # Change this to a secure password in production!
|
||||
ADMIN_API_PASSWORD = "admin"; # Change this to a secure password in production!
|
||||
BASE_URL = "https://${containerCfg.subdomain}.${serverCfg.domain}";
|
||||
SERVER_DNS = "${containerCfg.subdomain}.${serverCfg.domain}";
|
||||
DB_HOST = "${builder.host}";
|
||||
DB_BASE = "freshrss_db";
|
||||
DB_USER = "freshrss_user";
|
||||
};
|
||||
|
||||
overrides = {
|
||||
volumes = [
|
||||
"${serverCfg.configPath}/freshrss:/config"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
setup = {
|
||||
trigger = "server"; # Triggers atomic environment verification on main controller
|
||||
envFile = config.sops.secrets."FRESHRSS".path;
|
||||
script = pkgs.writeShellScript "setup-freshrss" ''
|
||||
RSS_URL="https://${containerCfg.subdomain}.${serverCfg.domain}"
|
||||
${pkgs.curl}/bin/curl -s -X POST "$RSS_URL/i/index.php?step=0" -H "Content-Type: application/x-www-form-urlencoded" --data-raw "language=en"
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -36,7 +36,8 @@ let
|
||||
showStats = false;
|
||||
statusStyle = "dot";
|
||||
hideErrors = true;
|
||||
auth = {
|
||||
auth = lib.flatten [{}
|
||||
(lib.optional (serverCfg.containers?authentik) {
|
||||
oidc = {
|
||||
enabled = true;
|
||||
provider = "authentik";
|
||||
@@ -46,7 +47,7 @@ let
|
||||
groupsProperty = "groups";
|
||||
|
||||
};
|
||||
};
|
||||
})];
|
||||
};
|
||||
widgets = pkgs.writers.writeYAML "widgets.yaml" [
|
||||
{openmeteo = {
|
||||
@@ -56,16 +57,17 @@ let
|
||||
units = "metric";
|
||||
cache = "15";
|
||||
};}
|
||||
{search = {
|
||||
{search = lib.flatten [{
|
||||
provider = "custom";
|
||||
focus = true;
|
||||
showSearchSuggestions = true;
|
||||
target = "_blank";
|
||||
|
||||
}
|
||||
(lib.optional (serverCfg.containers?searxng) {
|
||||
url = "https://${serverCfg.containers.searxng.subdomain}.${serverCfg.domain}/search?q=";
|
||||
suggestionUrl = "https://${serverCfg.containers.searxng.subdomain}.${serverCfg.domain}/autocompleter?q=";
|
||||
|
||||
};}
|
||||
})
|
||||
];}
|
||||
{stocks = {
|
||||
provider = "finnhub";
|
||||
color = true;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{ config, containerCfg, pkgs, lib, builder, name,... }:
|
||||
let
|
||||
version = "latest";
|
||||
serverCfg = config.syscfg.server;
|
||||
|
||||
in {
|
||||
sops = false;
|
||||
db = false;
|
||||
paths = [{
|
||||
path = "${serverCfg.configPath}/selfmark/";
|
||||
mode = "0444";
|
||||
}];
|
||||
|
||||
containers = {
|
||||
selfmark = builder.mkContainer {
|
||||
subdomain = containerCfg.subdomain;
|
||||
subpath = containerCfg.subpath;
|
||||
image = "ghcr.io/calibrain/shelfmark:${version}";
|
||||
port = 8080;
|
||||
|
||||
extraEnv = {
|
||||
FLASK_PORT = "8080";
|
||||
INGEST_DIR = "/books";
|
||||
PUID = "1000";
|
||||
PGID = "1000";
|
||||
SEARCH_MODE = "universal";
|
||||
};
|
||||
overrides = {
|
||||
ports = [ "8080:8080" ];
|
||||
cmd = [ ];
|
||||
volumes = [ ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{ config, containerCfg, pkgs, lib, builder, name,... }:
|
||||
let
|
||||
version = "stable";
|
||||
serverCfg = config.syscfg.server;
|
||||
in {
|
||||
sops = true;
|
||||
db =true;
|
||||
containers = {
|
||||
|
||||
server = builder.mkContainer {
|
||||
subdomain = containerCfg.subdomain;
|
||||
image = "ghcr.io/suwayomi/suwayomi-server:${version}";
|
||||
port = 4567;
|
||||
secret = name;
|
||||
|
||||
extraEnv = {
|
||||
BIND_PORT = "4567";
|
||||
AUTH_MODE = "none";
|
||||
WEB_UI_ENABLED = "true";
|
||||
DATABASE_URL = "postgresql://${builder.host}/suwayomi_db";
|
||||
DATABASE_USER = "suwayomi_user";
|
||||
FLARESOLVERR_ENABLED = lib.boolToString (builtins.elem "flaresolverr" (((config.syscfg.server.containers.servarr or {}).extra or {}).modules or []));
|
||||
FLARESOLVERR_URL = "http://servarr-flaresolverr:8191";
|
||||
};
|
||||
|
||||
overrides = {
|
||||
volumes = [
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
@@ -30,11 +30,14 @@ in{
|
||||
effectiveCfg = {
|
||||
owner = "root:root";
|
||||
mode = "0400";
|
||||
dirs = [];
|
||||
} // cfg;
|
||||
in ''
|
||||
${pkgs.coreutils}/bin/mkdir -p "${effectiveCfg.path}"
|
||||
${lib.concatMapStringsSep "\n" (dir: "${pkgs.coreutils}/bin/mkdir -p ${effectiveCfg.path}/${lib.escapeShellArg dir}") effectiveCfg.dirs}
|
||||
${pkgs.coreutils}/bin/chown ${effectiveCfg.owner} "${effectiveCfg.path}"
|
||||
${pkgs.coreutils}/bin/chmod ${effectiveCfg.mode} "${effectiveCfg.path}"
|
||||
|
||||
'') allPathConfigs);
|
||||
};
|
||||
|
||||
|
||||
@@ -39,3 +39,10 @@ IMMICH: |
|
||||
SERVARR: |
|
||||
SONARR__AUTH__APIKEY=...
|
||||
RADARR__AUTH__APIKEY=...
|
||||
FRESHRSS: |
|
||||
DB_PASSWORD=...
|
||||
SUWAYOMI: |
|
||||
DATABASE_PASSWORD=...
|
||||
DB_PASSWORD=...
|
||||
CALIBRE: |
|
||||
DB_PASSWORD=...
|
||||
|
||||
@@ -12,6 +12,9 @@ IMMICH: ENC[AES256_GCM,data:1y78yeawkRjUXLWPyFdMB5HCDQhb1PoxEMfHmKSZfv0CWloOrQWT
|
||||
INVIDIOUS: ENC[AES256_GCM,data:ZfgU5UFMmG9Cx9UaR0xnKr9VPebG3kut0difTFZmoqOSs+stG6YJfV82OOhj1RQLVJlPr/scydYy1+3LytwvP1BT7tLe0jII7XupbkL0w3n79KBaiIzAPdicqLxeqjKH45I0NjHra4djdnO2Ff4T8CTiFDlPn1rMuiw=,iv:UaDmOKJ4bFPGCaIePLXkWot9E6sTu2nhaVs83sI38G0=,tag:spTjxWEmLfPc8BZl2GglBA==,type:str]
|
||||
SERVARR: ENC[AES256_GCM,data:757WdthmToCGr2boph7iW1ycs3tQyGgD3lhYOcX/X3hjs9dLLPCWGI2zt5axp72IGJ/sVYEop2rqsRLxdPn3VIyQLvQ+3MYdo8Z/yOuMy7DAlnITQQQUI2ylZKHVmFAt39/xBpwsVjh3m/hBQvn/LbCDtR2s4qa+8fQDfeZXksTtnf7YZbVygTF7jWZ+0oVvkvNO1ZUejvP+uHL+jHwgMEwQnR22hOYWEKZ1s7PI+EZHujqyOhnwXB4jRG+XD7R4N6AhC5Z+nmkFpy3ffszCJ0/H,iv:NrNbkL6GWN4r+uzxNYrhoECD1APbRsRBcMBbVHD3DwM=,tag:YK1O50wV+lHAQa6TX9huUw==,type:str]
|
||||
INFLUX: ENC[AES256_GCM,data:woaZ/8zWRFtuO6U3HQ==,iv:iLo33tykE6oQW2jUNVGtR/JwrZbs9Fe1fFQ5/LnvaRY=,tag:6UDOU0JJgR7eyQ0hL8j5Qw==,type:str]
|
||||
FRESHRSS: ENC[AES256_GCM,data:xY20OMKI6D8aK8myu7ZquS4bTwZL/mrvTM3pDmDPwH4WIbrE227eqrwnRt5VlrPvs33bv31PCgM0fhP9ULVonEePQwM9+wUNhljcluo8JEAKF70ip0ofV5bIkFuO,iv:HUIl/p/w9llZzuN528SBH47fy0h1HGVKe65shjBLS50=,tag:z/ppfhL3M+elQVxVPtxWFg==,type:str]
|
||||
SUWAYOMI: ENC[AES256_GCM,data:uPfj1Cgr0IB8BTK0yy6/M0RexP/3IU1bKafvdi6vdwW1KBDdU64phSOGmOyqoHvtnXkUJKIv4Lm41gvQmJRbxvdM099GDXIQeRxuBgl8oUnfb0i/feEQHLnxLVeXZbOV+6jazk7oa6eHNir3tbawkTbYgVi2B/RktlGzEiajUpPryhbi+D2dgHE+GIb18P9m2+s9IZ4NfMOBm7BkgH1lnfCRhaOT7ZOr02GeEQz4gGZ9+F3ocRA85f7rWmOr/V1c,iv:qPmgtCRUR5JiJ1R9CXeNqDGYQtfNB6w8GCrwP9gI8/M=,tag:O+EMoX+QkgvPfCepBjtdBg==,type:str]
|
||||
CALIBRE: ENC[AES256_GCM,data:Uxz/5H4q/ugmW49a6oIQsG450w+SS1H58gOMXDVX/JQ8OCGxWQ8DRNmSGBZLgGsJ9UA1rxYRS4+pDuDL+iQsNVOmZzFRAuWJwUhEiF72B/Ah0IyXpnPIups8S2Nq,iv:rK274zWuvguY/DPHXxG174j+Ne11SB7ZCQLxO6Tvvg4=,tag:7wJyt94jRvRCZxgHWotzVA==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
|
||||
@@ -32,8 +35,8 @@ sops:
|
||||
S1NaTVFTL0FCdm1EQmRsUnlhclZNZlEKEgIe60qkvY8+UocjQU+WM2dTL/1y3Kqk
|
||||
d4RrlLP9NSozwVsPYI4ntygvMSApbT4v0YvoO7gV90lkGWEvW1YDfA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-05-31T19:09:28Z"
|
||||
mac: ENC[AES256_GCM,data:lnyCgfyqc+Fsq7jCQu2HgAmXxPScNzIXCDtKoJfzCPJLha2XG8VMfNl7mLGgcVQcdc0gBk6qh9gpZh2weRjWGgSvhuvms+rlwH+TNTq2owrti9QZCpBEDWW9pgKAol9VPtmFY+RbTkVufpFco5m3eeOVAhdv9WiDvVP5n6xHB+M=,iv:SusyVEVtV8ehEvx7kb1Gget/yYOkqSAbg653ajccjpI=,tag:ldqd0IR8CMUkejTl5GP+IA==,type:str]
|
||||
lastmodified: "2026-06-01T16:51:24Z"
|
||||
mac: ENC[AES256_GCM,data:rwOoGGhzrCVJGNbHRAG+yjbneeseLlwtBO2ZmTKXWbruZ9Zu4T41DntxkFl+Lw3vTrLriAPiRkdvxTEVRS9ehHTAikUiyPO18vJmOLhlNq7n/HE2YqADJMq2cIJLGhCzA1AFuB5p07ovATPoUyo2OHvnEDgcRVdXJ+ml5zPTvSU=,iv:vYYShdVUDW1SsDlDEpO2EAaahIDexxBLJ5cs5fIx3qA=,tag:F5Q6zAXtRumGYYLDLGL5mw==,type:str]
|
||||
pgp:
|
||||
- created_at: "2026-05-05T23:46:27Z"
|
||||
enc: |-
|
||||
|
||||
@@ -44,19 +44,24 @@
|
||||
# collabora.subdomain = "office";
|
||||
# etherpad.subdomain = "pad";
|
||||
# ethercalc.subdomain = "calc";
|
||||
immich.subdomain = "pic";
|
||||
# immich.subdomain = "pic";
|
||||
# ===== FLIX =====
|
||||
# invidious.subdomain = "yt";
|
||||
# jellyfin.subdomain = "flix";
|
||||
servarr.subdomain = "arr";
|
||||
transmission = { subdomain = "arr"; subpath = "transmission"; };
|
||||
# servarr.subdomain = "arr";
|
||||
# transmission = { subdomain = "arr"; subpath = "transmission"; };
|
||||
# handbrake = { subdomain = "arr"; subpath = "hb"; };
|
||||
# ===== DEV =====
|
||||
gitea.subdomain = "git";
|
||||
# ===== HOME =====
|
||||
# openhab.subdomain = "hab";
|
||||
# trmnl = { subdomain = "hass"; subpath = "trmnl"; };
|
||||
influx.subdomain = "metrum";
|
||||
# influx.subdomain = "metrum";
|
||||
|
||||
freshrss.subdomain = "rss";
|
||||
suwayomi.subdomain = "manga";
|
||||
calibre.subdomain = "books";
|
||||
selfmark = { subdomain = "arr"; subpath = "selfmark"; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user