Compare commits

...
25 Commits
Author SHA1 Message Date
finn.markwitz 4d9d0ccf9f chore: Flake update 2026-10-22 08:35:02 +02:00
finn.markwitz 027b366d32 chore: Flake Update 2026-10-20 08:41:54 +02:00
finn.markwitz 6c637b7d2a chore: Flake & Mibook Desktop Config 2026-10-13 11:33:29 +02:00
marthsincemelee ec01840c03 chore: Disable Desktop for Mibook 2026-10-13 10:24:47 +02:00
marthsincemelee d4025b39f6 chore: App/Dev-App Cleanup 2026-10-13 10:12:48 +02:00
marthsincemelee cb27d06be3 chore: Update Athena Model 2026-10-12 21:00:59 +02:00
finn.markwitzandClaude Sonnet 5 db61ca7b28 fix(homepage): restore scheme on minecraft widget url
homepage-dashboard parses the widget url with JS's URL() and reads
.hostname/.port off the result. Without a "scheme://" prefix,
"rechberg.online:25565" parses "rechberg.online" as the scheme and
leaves hostname empty, which the minecraftstatuspinger lookup()
rejects with "No hostname was provided!" (confirmed via
journalctl -u homepage-dashboard). The scheme itself is discarded by
the widget code, so any scheme works; tcp:// documents intent since
this widget always does a plain TCP server-list ping.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HCHg6BFAjZGUZer7RW5faD
2026-10-08 13:21:45 +02:00
finn.markwitzandClaude Sonnet 5 39156b44f6 fix(homepage): move minecraft widget from top bar to its service tile
The minecraft widget type isn't a valid top-of-page info widget (only
resources/datetime/search/etc. are), so homepage rendered a "Missing
minecraft" placeholder there. gethomepage.dev only supports it as a
per-service widget, so attach it to a new Minecraft tile in the
Gaming group instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HCHg6BFAjZGUZer7RW5faD
2026-10-08 10:12:06 +02:00
finn.markwitzandClaude Sonnet 5 0a90261623 fix(homepage): correct minecraft widget protocol
Widget used udp:// (Bedrock/RakNet ping) against port 25565, the Java
Edition default, so the server-list ping protocol never matched and
the widget showed as unreachable.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HCHg6BFAjZGUZer7RW5faD
2026-10-08 10:02:18 +02:00
marthsincemelee 329f9855a6 fix: Missing simicolon 2026-10-05 14:41:05 +02:00
finn.markwitz 2e93c57b37 Merge pull request 'feat(homepage): add Gaming section with FoundryVTT servers' (#18) from feat/homepage-gaming-section into main
Reviewed-on: #18
2026-10-05 14:39:55 +02:00
finn.markwitz 3f48c0400b Merge pull request 'fix(nix): stop automatic rebuilds and nightly GC from tripping GitHub's rate limit' (#19) from fix/nix-gc-github-rate-limit into main
Reviewed-on: #19
2026-10-05 14:37:46 +02:00
finn.markwitzandClaude Sonnet 5 4de92dcbe8 fix(nix): stop automatic rebuilds and nightly GC from tripping GitHub's rate limit
autoUpgrade was silently failing daily on both hosts (legacy channel path,
no --flake set) without reaching the network — disabled outright since
rebuilds should only happen manually. Separately, nix-gc.timer's nightly
sweep was deleting eval-time-only flake input sources (not part of the
runtime closure), forcing the next evaluation to cold-refetch hermes-agent's
entire dependency tree from GitHub in one burst, which alone was enough to
hit the unauthenticated codeload rate limit. keep-outputs/keep-derivations
stop GC from evicting those sources.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJS8qsYPXSUm5mdWGdaHjF
2026-10-05 14:35:19 +02:00
marthsincemelee 2f88d5567e feat: MC widget and Foundry Description 2026-10-05 14:20:07 +02:00
marthsincemeleeandClaude Opus 5.5 b725bb37c2 feat(homepage): add Gaming section with FoundryVTT servers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 14:14:00 +02:00
finn.markwitz f7196c0c86 chore: Flake Update 2026-10-04 18:39:52 +02:00
finn.markwitz 20c2b43ae5 Merge pull request 'Feat/hermes webpage port' (#17) from feat/hermes-webpage-port into main
Reviewed-on: #17
2026-10-04 18:37:36 +02:00
finn.markwitz eecb7fa2b2 Merge pull request 'Feat/jupiter seerr rename' (#16) from feat/jupiter-seerr-rename into feat/hermes-webpage-port
Reviewed-on: #16
2026-10-04 18:36:35 +02:00
finn.markwitzandClaude Sonnet 5 84ada68069 fix(mibook): disable hermes-agent's built-in self-update GitHub polling
Its self-updater was independently polling GitHub for the same repo the
flake input tracks, and stacked with a runaway crash-restart loop this
exhausted the GitHub rate limit, causing unrelated flake fetches to 429.
The Nix flake input is already the source of truth for hermes's version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F9ge2kVMD55sLJExx3v2G3
2026-09-29 17:36:18 +02:00
finn.markwitz 07a1d8ee62 feat(mibook): open port 47823 for hermes ad-hoc webpage hosting
Distinct from the existing 9119 dashboard port — this lets the agent
serve one-off pages to devices on the local network.
2026-09-26 08:15:58 +02:00
finn.markwitzandClaude Sonnet 5 565ec2bf39 feat(jupiter): rename jellyseerr profile to seerr
Jellyseerr was rebranded upstream to Seerr (seerr-team/seerr), and
nixpkgs now aliases services.jellyseerr to services.seerr with an
identical state directory, so this is a same-data rename. Also fixes
systemd.services.jellyseerr.after, which was a silent no-op since the
underlying unit has always been named seerr.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019MLWL7mWHCV6UGfzmhnfqN
2026-09-22 11:51:02 +02:00
finn.markwitz 34a55841eb chore: Flake Update 2026-09-21 16:12:45 +02:00
finn.markwitzandClaude Sonnet 5 e110cb6b87 fix(homepage): replace GitLab links with self-hosted Gitea
Migrated from gitlab.smoothcloud.de to git.rechberg.online; drop the
now-obsolete bookmark and repoint the Services tile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QD5x9KR8cM7EPPsxKATHfQ
2026-09-21 16:01:50 +02:00
finn.markwitzandClaude Sonnet 5 33ac72aaed fix(home-assistant): disable otbr-agent, ZBT-2 antenna not connected
otbr-agent can't reach the Thread radio without the antenna attached
and crash-loops on every switch, failing the rebuild.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QD5x9KR8cM7EPPsxKATHfQ
2026-09-21 15:55:20 +02:00
finn.markwitzandClaude Sonnet 5 30b7f177c5 feat(immich): upgrade to 3.x via unstable overlay
nixos-26.05 pins immich at 2.7.5; pull 3.2.0 from pkgs.unstable
instead. The machine-learning service picks up the matching version
automatically via the package's passthru. Verified jupiter's toplevel
still builds; pgvecto.rs->vectorchord migration was already in place
so no DB migration is needed for the bump itself.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDyhS2N9XEeMq4GisBrqyf
2026-09-21 15:42:31 +02:00
17 changed files with 290 additions and 84 deletions
@@ -0,0 +1,164 @@
# Homepage Widgets Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Add a `my.homepage.widgets` NixOS option so widgets can be declared in the homepage module and contributed from other modules, mirroring how `my.homepage.services` works today.
**Architecture:** Add a `my.homepage.widgets` option (typed `listOf attrs` since widget shapes vary by type) to the homepage module, import a `manual-widgets.nix` for ad-hoc definitions, merge both and pass to `services.homepage-dashboard.widgets`. Add starter widgets in `machines/jupiter/environments.nix` to confirm the wiring works end-to-end.
**Tech Stack:** Nix, NixOS module system, gethomepage.dev (`services.homepage-dashboard`)
---
## File Map
| Action | File | Responsibility |
|--------|------|----------------|
| Modify | `modules/environments/homepage/default.nix` | Add `my.homepage.widgets` option + wire to dashboard |
| Create | `modules/environments/homepage/manual-widgets.nix` | Empty list for ad-hoc widgets (parallel to `manual-services.nix`) |
| Modify | `machines/jupiter/environments.nix` | Declare starter widgets to verify the feature end-to-end |
---
### Task 1: Add `my.homepage.widgets` option to the homepage module
**Files:**
- Modify: `modules/environments/homepage/default.nix`
- Create: `modules/environments/homepage/manual-widgets.nix`
- [ ] **Step 1: Create `manual-widgets.nix`** — empty list, same pattern as `manual-services.nix`
```nix
# modules/environments/homepage/manual-widgets.nix
[ ]
```
- [ ] **Step 2: Add `manualWidgets` import in the `let` block of `default.nix`**
Current `let` block (lines 7–42) ends with `homepageServices`. Add one line after `manualServices`:
```nix
manualServices = import ./manual-services.nix;
manualWidgets = import ./manual-widgets.nix;
```
- [ ] **Step 3: Add the `my.homepage.widgets` option**
After the closing brace of `options.my.homepage.services` (line 80), add:
```nix
options.my.homepage.widgets = with lib; mkOption {
type = types.listOf types.attrs;
default = [ ];
description = "Widget definitions passed directly to services.homepage-dashboard.widgets. Each entry is an attrset like { resources = { cpu = true; memory = true; }; }.";
};
```
- [ ] **Step 4: Wire widgets to the dashboard in the `config` block**
The `config` block currently sets `services = homepageServices ++ manualServices;`. Add `widgets`:
```nix
config = lib.mkIf cfg.enable {
services.homepage-dashboard = {
enable = true;
listenPort = dashboardPort;
allowedHosts = "${dashboardHost}:${toString dashboardPort},localhost:${toString dashboardPort},127.0.0.1:${toString dashboardPort},jupiter.solar.internal:${toString dashboardPort}";
bookmarks = import ./bookmarks.nix;
services = homepageServices ++ manualServices;
widgets = config.my.homepage.widgets ++ manualWidgets;
};
# ... rest of config unchanged
};
```
- [ ] **Step 5: Build to check for eval errors (no switch yet)**
```bash
nixos-rebuild build --flake /Users/finnmarkwitz/development/nixos#jupiter 2>&1 | tail -20
```
Expected: build succeeds with no errors (widgets list is empty, so no visible change yet).
- [ ] **Step 6: Commit**
```bash
cd /Users/finnmarkwitz/development/nixos
git add modules/environments/homepage/default.nix modules/environments/homepage/manual-widgets.nix
git commit -m "feat: add my.homepage.widgets option to homepage module"
```
---
### Task 2: Add starter widgets in `environments.nix`
**Files:**
- Modify: `machines/jupiter/environments.nix`
- [ ] **Step 1: Add `my.homepage.widgets` to `environments.nix`**
Add the following after the `my.profiles` block (e.g. after line 39, before the `my.hardware` block):
```nix
my.homepage.widgets = [
{
search = {
provider = "google";
target = "_blank";
};
}
{
resources = {
cpu = true;
memory = true;
disk = "/";
cacheInterval = 5000;
};
}
{
datetime = {
text_size = "xl";
format = {
timeStyle = "short";
dateStyle = "short";
hour12 = false;
};
};
}
];
```
- [ ] **Step 2: Build to confirm eval**
```bash
nixos-rebuild build --flake /Users/finnmarkwitz/development/nixos#jupiter 2>&1 | tail -20
```
Expected: build succeeds.
- [ ] **Step 3: Switch and verify visually**
```bash
sudo nixos-rebuild switch --flake /Users/finnmarkwitz/development/nixos#jupiter
```
Open `http://jupiter.solar.internal:8082` (or `http://localhost:8082`) in a browser.
Expected: search bar, CPU/memory/disk resource monitor, and date/time widget appear at the top of the dashboard.
- [ ] **Step 4: Commit**
```bash
cd /Users/finnmarkwitz/development/nixos
git add machines/jupiter/environments.nix
git commit -m "feat: add starter homepage widgets (search, resources, datetime)"
```
---
## Verification Checklist
- [ ] `nixos-rebuild build` passes with no eval errors
- [ ] Dashboard at `:8082` shows widgets at top of page
- [ ] Existing services and bookmarks are unchanged
- [ ] Other modules can now contribute widgets via `my.homepage.widgets = [ ... ];` in their `config` block
Generated
+40 -40
View File
@@ -21,11 +21,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1788450739,
"narHash": "sha256-glZLQlzIn1fXH6PazR2iUmTo7kzzyYSshrWhLS9TqCU=",
"lastModified": 1790898470,
"narHash": "sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "31729ca8cbdb4fa927b34e5f4353e6a83f39e993",
"rev": "024633cd702b10285db5cb19b40ad48d2399ba60",
"type": "github"
},
"original": {
@@ -63,11 +63,11 @@
]
},
"locked": {
"lastModified": 1785627969,
"narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
"lastModified": 1790898470,
"narHash": "sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
"rev": "024633cd702b10285db5cb19b40ad48d2399ba60",
"type": "github"
},
"original": {
@@ -87,11 +87,11 @@
]
},
"locked": {
"lastModified": 1784288435,
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
"lastModified": 1790500375,
"narHash": "sha256-XN3sDtn8TU9hAc9xqZ+SqRB/HHm2wjxM6aSWYLJU+oo=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
"rev": "a0e4241b51206fbcbf52fd322eb5f0cd80f153c4",
"type": "github"
},
"original": {
@@ -113,11 +113,11 @@
"uv2nix": "uv2nix"
},
"locked": {
"lastModified": 1789361774,
"narHash": "sha256-ashkMxyQelHq7T4AcJ0Zwuzm9/jMR3hTCWW+2FPwlDg=",
"lastModified": 1792650380,
"narHash": "sha256-4l8C4z7K4VQDq2ExP6v9NUdCpSFagB1hbt4gh/Y6YSw=",
"owner": "NousResearch",
"repo": "hermes-agent",
"rev": "5eb99eb2844b22ebb723711b8e6a0bbb80bb5f04",
"rev": "81a55437f3f31a9f12a30c53b6c5d49d420898aa",
"type": "github"
},
"original": {
@@ -157,11 +157,11 @@
"nixpkgs-regression": "nixpkgs-regression"
},
"locked": {
"lastModified": 1789352761,
"narHash": "sha256-jAcDj4iXkbxa5AlooMRZj7H3E81Cz/q7yN/bX7GPFSU=",
"lastModified": 1792618091,
"narHash": "sha256-sDmJ6tgPjlSk9P2jCXXjV2l0Ewe7K9CwclMcAvpEyR0=",
"owner": "NixOS",
"repo": "nix",
"rev": "920f6956361496578b8a97ae04ec5f400d729ab4",
"rev": "42d96171bbef8a8073106dd93ca68878d7339abd",
"type": "github"
},
"original": {
@@ -211,11 +211,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1789127271,
"narHash": "sha256-vL/Fpo7Zxa7wvO8V5FAToUBvP+K3XsMB1wUglTtd/J0=",
"lastModified": 1792491056,
"narHash": "sha256-6n1Dn+WYtD8lprnSi+0k4FjbKfIVNG8lblpJ5MiiqXs=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "24cfdc1f9344b90a1eee329a3906e2f39f4d0f1e",
"rev": "efb6d0d5e2394c3c5416a18652808aba206c0988",
"type": "github"
},
"original": {
@@ -226,11 +226,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1788921488,
"narHash": "sha256-JLopN/XSodSsJIZ7v7tEjpPZ+QXc883s3HoUIxHD8Io=",
"rev": "6aefcda9401be8acc2b74244fb3b37520ea1f0a8",
"lastModified": 1789344334,
"narHash": "sha256-it+7kNGnOOHBCEnl4SfZ7QtfGziH3EryzHqwvJpjAfg=",
"rev": "c3eea5b2156db11c7eeeada3dc737711255b253e",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/26.05/nixos-26.05.9440.6aefcda9401b/nixexprs.tar.xz"
"url": "https://releases.nixos.org/nixos/26.05/nixos-26.05.9729.c3eea5b2156d/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
@@ -255,11 +255,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1788057806,
"narHash": "sha256-DTQSMxzDWmT0zhguthvegnVkn7CFqGCv4IHCzk5ZUpM=",
"lastModified": 1790477367,
"narHash": "sha256-oujbxmVKDhci2E4EM3KyAbRUgp5/IsCoiA/LfEF7OOk=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "596e2e3940e09b2abbeb03f75fa1828c57fcd72c",
"rev": "f7cd230690d9fc982d06129f9189b101fddcfa3b",
"type": "github"
},
"original": {
@@ -286,11 +286,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1789286504,
"narHash": "sha256-3i80JnZ9pZ7tWReb/Sqpc32cfzffCu8TWLnbnH0hN9c=",
"rev": "ef34387ddd751e1ab8857adf4676492d32eb24ec",
"lastModified": 1792502884,
"narHash": "sha256-ij8QUxzTOHovLrNOxVRx+RAhGQFOMsJbji0veiatH5k=",
"rev": "02c087f3fe673c9e317f206a627cb6b910336dbe",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1073009.ef34387ddd75/nixexprs.tar.xz"
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1097682.02c087f3fe67/nixexprs.tar.zst"
},
"original": {
"id": "nixpkgs",
@@ -300,11 +300,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1767892417,
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"lastModified": 1789546076,
"narHash": "sha256-vWkSk5bbfTqdtMoSgD9FshACO8JCvXTFi+3cqEp0mH0=",
"rev": "b1b875982b17dabde9b4a37f3e229e74913e6db3",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1074753.b1b875982b17/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
@@ -313,11 +313,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1789114715,
"narHash": "sha256-eeH+/1GxEjw8NCObjaHVIy3YvCQ4Qckrx4LZj5xBaU4=",
"rev": "21a67dc470149f337cecafbe965d8d252a390518",
"lastModified": 1792615934,
"narHash": "sha256-q1ku4ygV7tdmv5Q9QYwhVDsNMZRJcRYjVczoX5+XWBo=",
"rev": "da6dc0e7b26060f2f71ce3ef7088fb56ee44fa36",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/26.05/nixos-26.05.9592.21a67dc47014/nixexprs.tar.xz"
"url": "https://releases.nixos.org/nixos/26.05/nixos-26.05.12400.da6dc0e7b260/nixexprs.tar.zst"
},
"original": {
"id": "nixpkgs",
@@ -415,11 +415,11 @@
]
},
"locked": {
"lastModified": 1788914643,
"narHash": "sha256-4GuMPW90JSxXWDPUB9M+1m7fYbe3H0apOd86/zBQ2Kw=",
"lastModified": 1792056300,
"narHash": "sha256-YU1LjDe1o2Ymg5zEiCHbmMXLkDCtxHQRiVqZ3nC5GGk=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "13616fff713a9f94055c66f15687ebdc17a335df",
"rev": "44931708c62937c2b1bf7953902989fa5bb9ee1b",
"type": "github"
},
"original": {
+7
View File
@@ -12,6 +12,13 @@
settings = {
auto-optimise-store = true;
# Without these, gc sweeps away eval-time-only sources (flake inputs,
# their build deps) since they're not part of the runtime closure.
# The next evaluation then cold-refetches everything from GitHub,
# which is enough on its own to trip GitHub's unauthenticated rate
# limit for large dependency trees (e.g. hermes-agent's).
keep-outputs = true;
keep-derivations = true;
};
gc = {
+4 -1
View File
@@ -72,6 +72,9 @@
system = {
stateVersion = "23.05";
autoUpgrade.enable = true;
# Was silently failing daily (legacy channel path, no --flake set) without
# ever reaching the network. Disabled rather than fixed: rebuilds should
# only happen when triggered manually.
autoUpgrade.enable = false;
};
}
+1 -1
View File
@@ -17,7 +17,7 @@ _: {
readarr.enable = true;
sonarr.enable = true;
jellyfin.enable = true;
jellyseerr.enable = true;
seerr.enable = true;
immich.enable = true;
development.enable = true;
home-assistant.enable = true;
+4 -1
View File
@@ -61,6 +61,9 @@
system = {
stateVersion = "23.05";
autoUpgrade.enable = true;
# Was silently failing daily (legacy channel path, no --flake set) without
# ever reaching the network. Disabled rather than fixed: rebuilds should
# only happen when triggered manually.
autoUpgrade.enable = false;
};
}
+3 -3
View File
@@ -4,8 +4,8 @@ _: {
kde-desktop.enable = true;
zsh.enable = true;
apps = {
desktop_apps = true;
dev_apps = true;
desktop_apps = false;
dev_apps = false;
};
development.enable = true;
docker.enable = true;
@@ -19,7 +19,7 @@ _: {
nvidia.enable = false;
};
my.services = {
vpn.enable = true;
vpn.enable = false;
};
}
+1
View File
@@ -4,5 +4,6 @@ _: {
# firewall otherwise blocks inbound connections from other devices.
networking.firewall.allowedTCPPorts = [
9119 # athena hermes dashboard
47823 # hermes agent ad-hoc webpage server
];
}
+2
View File
@@ -25,11 +25,13 @@ in
spotify
keepassxc
moonlight-qt
# jetbrains.idea-ultimate
nextcloud-client
pipewire
wireplumber
vlc
ghostty
zed-editor
];
};
}
+1 -1
View File
@@ -18,7 +18,7 @@
./readarr
./sonarr
./jellyfin
./jellyseerr
./seerr
./immich
./hermes-agent
];
@@ -15,11 +15,7 @@ in
config = lib.mkIf cfg.enable {
users.users.finn.packages = with pkgs; [
google-chrome
vscode
zed-editor
neovim
# jetbrains.idea-ultimate
go
nodejs # bundles npm
(python3.withPackages (
@@ -19,7 +19,10 @@ in
services.hermes-agent = {
enable = true;
# Deliberate pin, matches the approved design — bump on purpose, not by drift.
settings.model.default = "anthropic/claude-sonnet-4-5";
settings.model.default = "anthropic/claude-sonnet-5-5";
# The Nix flake input is the source of truth for hermes's version here; its
# built-in self-updater polling GitHub independently just burns API quota.
settings.updates.check = false;
environmentFiles = [ config.sops.secrets."hermes-env".path ];
addToSystemPackages = true;
@@ -54,14 +54,16 @@ in
"f /var/lib/hass/scenes.yaml 0644 hass hass - []"
];
services.openthread-border-router = {
enable = true;
package = pkgs.unstable.openthread-border-router;
openFirewall = true;
backboneInterfaces = [ "enp3s0" ];
radio.device = "/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D9149C7C-if00";
radio.baudRate = 460800;
};
# Disabled: ZBT-2 antenna isn't connected, so otbr-agent can't reach the
# radio and just crash-loops on every switch.
# services.openthread-border-router = {
# enable = true;
# package = pkgs.unstable.openthread-border-router;
# openFirewall = true;
# backboneInterfaces = [ "enp3s0" ];
# radio.device = "/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D9149C7C-if00";
# radio.baudRate = 460800;
# };
my.homepage.services = [
{
+1 -14
View File
@@ -1,16 +1,4 @@
[
{
Developer = [
{
Github = [
{
abbr = "GitLab - Smoothcloud";
href = "https://gitlab.smoothcloud.de/";
}
];
}
];
}
{
Social = [
{
@@ -18,7 +6,6 @@
{
icon = "reddit.png";
href = "https://reddit.com/";
description = "The front page of the internet";
}
];
}
@@ -29,7 +16,7 @@
{
YouTube = [
{
abbr = "YT";
icon = "youtube.png";
href = "https://youtube.com/";
}
];
@@ -17,10 +17,10 @@
};
}
{
"GitLab" = {
href = "https://gitlab.smoothcloud.de";
description = "Selfhosted GitLab";
icon = "gitlab.png";
"Gitea" = {
href = "https://git.rechberg.online";
description = "Selfhosted Gitea";
icon = "gitea.png";
};
}
{
@@ -32,4 +32,40 @@
}
];
}
{
"Gaming" = [
{
"Talon" = {
href = "https://ethraldos.online";
description = "Kunst der Täuschung";
icon = "foundry-vtt.png";
};
}
{
"Tyranny of Dragons" = {
href = "https://hotdq.smoothcloud.de";
description = "Tyranny of Dragons (D&D)";
icon = "foundry-vtt.png";
};
}
{
"Beholder D&D" = {
href = "https://beholder.ethraldos.online";
description = "Andrey FoundryVTT Server";
icon = "foundry-vtt.png";
};
}
{
"Minecraft" = {
href = "https://rechberg.online";
description = "Java Minecraft Server";
icon = "minecraft.png";
widget = {
type = "minecraft";
url = "tcp://rechberg.online:25565";
};
};
}
];
}
]
+2
View File
@@ -18,6 +18,8 @@ in
config = lib.mkIf cfg.enable {
services.immich = {
enable = true;
# nixos-26.05 pins immich 2.7.5; pull 3.x from the unstable overlay instead.
package = pkgs.unstable.immich;
host = "0.0.0.0";
inherit port;
openFirewall = true;
@@ -1,17 +1,17 @@
# manages and downloads films
{ config, lib, ... }:
let
cfg = config.my.profiles.jellyseerr;
cfg = config.my.profiles.seerr;
hostName = config.networking.hostName;
port = 5055;
in
{
options.my.profiles.jellyseerr = with lib; {
enable = mkEnableOption "JellySeerr Media Service";
options.my.profiles.seerr = with lib; {
enable = mkEnableOption "Seerr Media Service";
};
config = lib.mkIf cfg.enable {
services.jellyseerr = {
services.seerr = {
enable = true;
openFirewall = true;
};
@@ -19,14 +19,14 @@ in
my.homepage.services = [
{
group = "Media";
name = "Jellyseerr";
name = "Seerr";
description = "Media requests";
href = "http://${hostName}:${toString port}";
icon = "mdi-television-guide";
}
];
systemd.services.jellyseerr = {
systemd.services.seerr = {
after = [ "network-online.target" ];
};
};