Compare commits

..

58 commits
71 ... main

Author SHA1 Message Date
81bf6d1c45
feat(tailscale): disable for now, ssh works without 2026-03-12 20:02:34 +11:00
9d3c2336dc Merge pull request 'Install LibreWolf' (#137) from 99 into main
Reviewed-on: #137
2026-03-12 20:01:30 +11:00
7483af690a
feat(firefox): remove for now in favour of librewolf 2026-03-12 19:49:14 +11:00
d7196bb746
feat(firefox): update config based on librewolf config 2026-03-12 19:49:00 +11:00
5acabc9745
feat(librewolf): install 2026-03-12 19:48:50 +11:00
f98b6fe4a7
fix(syncthing): alternative config should be empty set, not null 2026-03-12 19:01:05 +11:00
6328d80bdf
fix(lazygit): allow rewording signed commits 2026-03-09 14:36:45 +11:00
a2d43c4dd9
feat(borgbackup): replace borgmatic 2026-03-09 14:09:06 +11:00
github-actions[bot]
d26b436626 flake.lock: Update
Flake lock file updates:

• Updated input 'copyparty':
    'github:9001/copyparty/ab8bd01' (2026-02-23)
  → 'github:9001/copyparty/981a7cd' (2026-03-08)
• Updated input 'home-manager':
    'github:nix-community/home-manager/9a4b494' (2026-02-23)
  → 'github:nix-community/home-manager/5be5d82' (2026-03-08)
• Updated input 'nix-citizen':
    'github:LovingMelody/nix-citizen/bebdc04' (2026-02-20)
  → 'github:LovingMelody/nix-citizen/73c8d04' (2026-03-06)
• Updated input 'nix-citizen/flake-parts':
    'github:hercules-ci/flake-parts/5792860' (2026-02-02)
  → 'github:hercules-ci/flake-parts/f20dc5d' (2026-03-01)
• Updated input 'nix-citizen/nixpkgs':
    'github:NixOS/nixpkgs/0182a36' (2026-02-17)
  → 'github:NixOS/nixpkgs/80bdc1e' (2026-03-04)
• Updated input 'nix-citizen/treefmt-nix':
    'github:numtide/treefmt-nix/337a4fe' (2026-02-04)
  → 'github:numtide/treefmt-nix/3710e0e' (2026-03-04)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/e70ef85' (2026-02-23)
  → 'github:fufexan/nix-gaming/d2b0b28' (2026-03-08)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/5792860' (2026-02-02)
  → 'github:hercules-ci/flake-parts/f20dc5d' (2026-03-01)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/7271616' (2026-02-01)
  → 'github:nix-community/nixpkgs.lib/c185c7a' (2026-03-01)
• Added input 'nix-gaming/git-hooks':
    'github:cachix/git-hooks.nix/8baab58' (2026-03-07)
• Added input 'nix-gaming/git-hooks/flake-compat':
    'github:NixOS/flake-compat/5edf11c' (2025-12-29)
• Added input 'nix-gaming/git-hooks/gitignore':
    'github:hercules-ci/gitignore.nix/637db32' (2024-02-28)
• Added input 'nix-gaming/git-hooks/gitignore/nixpkgs':
    follows 'nix-gaming/git-hooks/nixpkgs'
• Added input 'nix-gaming/git-hooks/nixpkgs':
    follows 'nix-gaming/nixpkgs'
• Updated input 'nix-gaming/nixpkgs':
    'github:NixOS/nixpkgs/d1c15b7' (2026-02-16)
  → 'github:NixOS/nixpkgs/917fec9' (2026-03-05)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/0182a36' (2026-02-17)
  → 'github:nixos/nixpkgs/aca4d95' (2026-03-06)
• Updated input 'nixvim':
    'github:nix-community/nixvim/ed0424f' (2026-02-15)
  → 'github:nix-community/nixvim/21ae25e' (2026-03-01)
• Updated input 'nur':
    'github:nix-community/NUR/c5fa7a8' (2026-02-23)
  → 'github:nix-community/NUR/407db2f' (2026-03-08)
2026-03-08 16:07:14 +00:00
Will
adba178f3d
Merge pull request #134 from wi11-holdsworth/111
feat(mealie): install
2026-03-07 16:54:55 +11:00
1b86bc33db
feat(homepage-dashboard): add mealie 2026-03-07 16:54:55 +11:00
2548046985
feat(mealie): install 2026-03-07 16:54:55 +11:00
Will
e71dd7e87d
Merge pull request #133 from wi11-holdsworth/101
feat(fi33.buzz): host personal website
2026-03-07 14:34:48 +11:00
5a6da0744b
feat(fi33.buzz): host personal website 2026-03-07 14:34:23 +11:00
Will
ebf47820a0
Merge pull request #132 from wi11-holdsworth/123
feat(gatus): add ntfy alerting for all services
2026-03-07 13:39:56 +11:00
3ac81e38e8
feat: add gatus config to web-feature template 2026-03-07 13:39:16 +11:00
c41995561a
feat(gatus): add ntfy alerting for all services 2026-03-07 13:39:05 +11:00
9a7169c1cb
feat(ntfy): add user for gatus with token 2026-03-07 13:38:39 +11:00
Will
a89d9a1952
Merge pull request #131 from wi11-holdsworth/129
feat(gatus): add custom appearance
2026-03-07 13:35:41 +11:00
a7b5995e01
feat(gatus): add custom appearance 2026-03-07 13:35:14 +11:00
Will
c30348d810
Merge pull request #122 from wi11-holdsworth/95
Host gatus
2026-03-04 21:27:32 +11:00
48315cfb8e
feat: add gatus entry for each subdomain 2026-03-04 21:26:18 +11:00
fe11ecea2a
feat(gatus): install 2026-03-04 18:53:49 +11:00
663b39451c
feat(laptop): update hardware uuids and ssh keys 2026-03-04 18:17:22 +11:00
c96f08c3f1
feat(homepage-dashboard): initially collapse utilities section, and hide app version 2026-03-02 23:35:01 +11:00
7a4898b4db
feat(homepage-dashboard): add status monitoring 2026-03-02 23:21:50 +11:00
Will
81c741f5da
Merge pull request #121 from wi11-holdsworth/116
Host LibreTranslate
2026-03-02 04:08:19 -08:00
a9ac65f3f7
feat(homepage-dashboard): add libretranslate 2026-03-02 23:07:50 +11:00
d4118655df
feat(libretranslate): install 2026-03-02 23:07:50 +11:00
de21c82acb
style(homepage-dashboard): update service taglines by taking inspiration from repository taglines 2026-03-02 22:51:55 +11:00
Will
e032370b99
Merge pull request #120 from wi11-holdsworth/114
Host CryptPad
2026-03-02 03:51:14 -08:00
Will
c545418355
Merge branch 'main' into 114 2026-03-02 03:51:06 -08:00
036e775835
feat(homepage-dashboard): add cryptpad 2026-03-02 22:46:03 +11:00
2551f74ca4
feat(cryptpad): install 2026-03-02 22:46:03 +11:00
Will
522c9fc253
Merge pull request #119 from wi11-holdsworth/113
Install send
2026-03-02 21:54:50 +11:00
7f0f92dcf2
feat(homepage-dashboard): add send 2026-03-02 21:54:50 +11:00
Will
bd1de92aea
Merge pull request #119 from wi11-holdsworth/113
Install send
2026-03-02 02:46:46 -08:00
0c8fb875c3
feat(homepage-dashboard): add send 2026-03-02 21:46:11 +11:00
143f1dafac
feat(send): install 2026-03-02 21:46:01 +11:00
Will
cea5fc1df7
Merge pull request #110 from wi11-holdsworth/79
fix(prowlarr): data dir doesn't seem to be supported properly
2026-03-02 21:18:08 +11:00
afa8f669c9
fix(prowlarr): data dir doesn't seem to be supported properly, just use default data dir at /var/lib 2026-03-02 21:18:08 +11:00
cab4e8fd57
fix(borgmatic): revert #2197490b 2026-03-01 13:16:31 +11:00
927428224f
refactor(agenix): remove unused keys 2026-02-24 23:38:12 +11:00
b1369d9233
feat(git): add signing key to secrets store and sign all commits by default 2026-02-24 23:15:49 +11:00
wi11-holdsworth
e3c18152d5 fix(homepage-dashboard): for some bizzare reason, the "bazarr" key wasn't working but I changed the name to "subtitles" and it works so yay 2026-02-24 22:25:00 +11:00
github-actions[bot]
9ce15bc963 flake.lock: Update
Flake lock file updates:

• Updated input 'copyparty':
    'github:9001/copyparty/d067d2a' (2026-02-14)
  → 'github:9001/copyparty/ab8bd01' (2026-02-23)
• Updated input 'home-manager':
    'github:nix-community/home-manager/ae8003d' (2026-02-15)
  → 'github:nix-community/home-manager/9a4b494' (2026-02-23)
• Updated input 'nix-citizen':
    'github:LovingMelody/nix-citizen/2affbcd' (2026-02-13)
  → 'github:LovingMelody/nix-citizen/bebdc04' (2026-02-20)
• Updated input 'nix-citizen/nixpkgs':
    'github:NixOS/nixpkgs/ec7c70d' (2026-02-11)
  → 'github:NixOS/nixpkgs/0182a36' (2026-02-17)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/0c4bf3a' (2026-02-15)
  → 'github:fufexan/nix-gaming/e70ef85' (2026-02-23)
• Updated input 'nix-gaming/nixpkgs':
    'github:NixOS/nixpkgs/2343bbb' (2026-02-11)
  → 'github:NixOS/nixpkgs/d1c15b7' (2026-02-16)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/a82ccc3' (2026-02-13)
  → 'github:nixos/nixpkgs/0182a36' (2026-02-17)
• Updated input 'nur':
    'github:nix-community/NUR/76daea0' (2026-02-16)
  → 'github:nix-community/NUR/c5fa7a8' (2026-02-23)
2026-02-24 22:08:31 +11:00
wi11-holdsworth
3c46d9e066 feat: prepare for exposure to the internet
* open ports 80 and 443
* password-protect copyparty and ntfy-sh
* randomise usernames for radicale and copyparty
2026-02-24 22:08:31 +11:00
wi11-holdsworth
fbd4da91c0 fix(copyparty): disable read access for all non-users 2026-02-22 16:47:53 +11:00
wi11-holdsworth
9bdffc9a3a fix(copyparty): support reverse proxies 2026-02-22 16:47:53 +11:00
wi11-holdsworth
b6dafe4908 fix(yazi): update shell wrapper name 2026-02-22 16:47:53 +11:00
wi11-holdsworth
3323c6ba7a fix(syncthing): only needs to be defined in the default module, not also the server module 2026-02-22 16:47:53 +11:00
wi11-holdsworth
a54857c365 refactor: remove software associated with llms 2026-02-22 16:47:53 +11:00
wi11-holdsworth
c0e7f6f649 fix: nexus mods app is no longer maintained 2026-02-18 19:22:10 +11:00
github-actions[bot]
ce72f5129a flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/fcdea22' (2025-11-08)
  → 'github:ryantm/agenix/b027ee2' (2026-02-04)
• Updated input 'copyparty':
    'github:9001/copyparty/d5a8a34' (2026-01-12)
  → 'github:9001/copyparty/d067d2a' (2026-02-14)
• Updated input 'home-manager':
    'github:nix-community/home-manager/8bc5473' (2026-01-10)
  → 'github:nix-community/home-manager/ae8003d' (2026-02-15)
• Updated input 'nix-citizen':
    'github:LovingMelody/nix-citizen/7b5ad5f' (2026-01-10)
  → 'github:LovingMelody/nix-citizen/2affbcd' (2026-02-13)
• Updated input 'nix-citizen/flake-parts':
    'github:hercules-ci/flake-parts/250481a' (2026-01-05)
  → 'github:hercules-ci/flake-parts/5792860' (2026-02-02)
• Updated input 'nix-citizen/nixpkgs':
    'github:NixOS/nixpkgs/3497aa5' (2026-01-08)
  → 'github:NixOS/nixpkgs/ec7c70d' (2026-02-11)
• Updated input 'nix-citizen/treefmt-nix':
    'github:numtide/treefmt-nix/778a1d6' (2026-01-07)
  → 'github:numtide/treefmt-nix/337a4fe' (2026-02-04)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/c104472' (2026-01-13)
  → 'github:fufexan/nix-gaming/0c4bf3a' (2026-02-15)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/250481a' (2026-01-05)
  → 'github:hercules-ci/flake-parts/5792860' (2026-02-02)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/2075416' (2025-12-14)
  → 'github:nix-community/nixpkgs.lib/7271616' (2026-02-01)
• Updated input 'nix-gaming/nixpkgs':
    'github:NixOS/nixpkgs/3146c6a' (2026-01-10)
  → 'github:NixOS/nixpkgs/2343bbb' (2026-02-11)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/ffbc9f8' (2026-01-11)
  → 'github:nixos/nixpkgs/a82ccc3' (2026-02-13)
• Updated input 'nixvim':
    'github:nix-community/nixvim/7eb8f36' (2026-01-08)
  → 'github:nix-community/nixvim/ed0424f' (2026-02-15)
• Updated input 'nixvim/flake-parts':
    'github:hercules-ci/flake-parts/a34fae9' (2025-12-15)
  → 'github:hercules-ci/flake-parts/5792860' (2026-02-02)
• Updated input 'nur':
    'github:nix-community/NUR/ecccc8e' (2026-01-12)
  → 'github:nix-community/NUR/76daea0' (2026-02-16)
2026-02-16 16:15:54 +00:00
wi11-holdsworth
b9ec41d462 refactor(homepage-dashboard): remove unnecessary quotes around non-spaced words 2026-01-20 15:43:57 +11:00
wi11-holdsworth
3f069b9391 feat(homepage-dashboard): use equal heights in all sections 2026-01-20 15:43:54 +11:00
wi11-holdsworth
69c335dc2f feat(shell-aliases): break out to separate module to ensure aliases can be used over all shells 2026-01-20 13:13:57 +11:00
wi11-holdsworth
2197490b63 feat(borgmatic): ensure that all sqlite databases are backed up separately from the services they store data for 2026-01-20 13:13:57 +11:00
71 changed files with 1679 additions and 590 deletions

152
flake.lock generated
View file

@ -10,11 +10,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1762618334, "lastModified": 1770165109,
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=", "narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "fcdea223397448d35d9b31f798479227e80183f6", "rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -29,11 +29,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1768232598, "lastModified": 1772965444,
"narHash": "sha256-G+KqlGfXQ8PWvJbG5IqSBJcNLltS+erRkVhn9D0UBM4=", "narHash": "sha256-VjcI4CozsowxGkZBzxQ6LYe49e9T1qfT1BzNrnc96y0=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "d5a8a34bcafde04165c4e07e4885b11f6ddd2aff", "rev": "981a7cd9dda0acedbc7f53b2c44adb241c38cb84",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -64,6 +64,22 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
@ -72,11 +88,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767609335, "lastModified": 1772408722,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca", "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -90,11 +106,11 @@
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1767609335, "lastModified": 1772408722,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca", "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -111,11 +127,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765835352, "lastModified": 1769996383,
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "a34fae9c08a15ad73f295041fec82323541400a9", "rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -160,6 +176,51 @@
"type": "github" "type": "github"
} }
}, },
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nix-gaming",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772893680,
"narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"nix-gaming",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -188,11 +249,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768068402, "lastModified": 1772985285,
"narHash": "sha256-bAXnnJZKJiF7Xr6eNW6+PhBf1lg2P1aFUO9+xgWkXfA=", "narHash": "sha256-wEEmvfqJcl9J0wyMgMrj1TixOgInBW/6tLPhWGoZE3s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "8bc5473b6bc2b6e1529a9c4040411e1199c43b4c", "rev": "5be5d8245cbc7bc0c09fbb5f38f23f223c543f85",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -213,11 +274,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1768085843, "lastModified": 1772840927,
"narHash": "sha256-fwh2ImVwwHWsUhem3xlscEM6n7q4rkeKXEv25QWdzjs=", "narHash": "sha256-WdIuEJpH7eUP3ya8laJAYf71WilE4x7xetgMferL5Ko=",
"owner": "LovingMelody", "owner": "LovingMelody",
"repo": "nix-citizen", "repo": "nix-citizen",
"rev": "7b5ad5f6593893cc70c30a5ce45028ea0cd97ab3", "rev": "73c8d04ba69fb0bb5c4521c4b91a930a0ce283a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -229,14 +290,15 @@
"nix-gaming": { "nix-gaming": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_2",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1768269856, "lastModified": 1772937574,
"narHash": "sha256-O7Qy+w2fK4kBq2I70haCDJYpzbpPW58FscHpRzw9lfA=", "narHash": "sha256-Yw1tP/ASebNYuW2GcYDTgWf2Mg9qcUYo6MTagXyeFCs=",
"owner": "fufexan", "owner": "fufexan",
"repo": "nix-gaming", "repo": "nix-gaming",
"rev": "c104472764fc9e8926e40ccc7e0e6d540d718458", "rev": "d2b0b283deb24cdbb2750e658fa7001fee5ad586",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -283,11 +345,11 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1765674936, "lastModified": 1772328832,
"narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -298,11 +360,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1767892417, "lastModified": 1772624091,
"narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=", "narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", "rev": "80bdc1e5ce51f56b19791b52b2901187931f5353",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -314,11 +376,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1768032153, "lastModified": 1772736753,
"narHash": "sha256-6kD1MdY9fsE6FgSwdnx29hdH2UcBKs3/+JJleMShuJg=", "narHash": "sha256-au/m3+EuBLoSzWUCb64a/MZq6QUtOV8oC0D9tY2scPQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3146c6aa9995e7351a398e17470e15305e6e18ff", "rev": "917fec990948658ef1ccd07cef2a1ef060786846",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -330,11 +392,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1768127708, "lastModified": 1772773019,
"narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", "rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -353,11 +415,11 @@
"systems": "systems_3" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1767906546, "lastModified": 1772402258,
"narHash": "sha256-AoSWS8+P+7hQ/jIdv0wBjgH1MvnerdWBFXO4GV3JoQs=", "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "7eb8f36f085b85a2aeff929aff52d0f6aa14e000", "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -374,11 +436,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768233111, "lastModified": 1772985100,
"narHash": "sha256-+ispedVffXCQUVDCgJDY6USEILM8rZsEZaxPZdXzKtA=", "narHash": "sha256-EXFbJvUZrElVq839MnMgJEDnyXWn84Zx+MiHcZiCQmg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "ecccc8eec0e39e4b8bf12dc73d57083e4682f162", "rev": "407db2f6f4ba94992815f872ffce9a9d99ccc13c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -452,11 +514,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767801790, "lastModified": 1772660329,
"narHash": "sha256-QfX6g3Wj2vQe7oBJEbTf0npvC6sJoDbF9hb2+gM5tf8=", "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "778a1d691f1ef45dd68c661715c5bf8cbf131c80", "rev": "3710e0e1218041bbad640352a0440114b1e10428",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -18,7 +18,6 @@
"external-speakers" "external-speakers"
"gaming" "gaming"
"link2c" "link2c"
"llm"
"plasma" "plasma"
"star-citizen" "star-citizen"
# keep-sorted end # keep-sorted end

View file

@ -27,10 +27,9 @@
# keep-sorted end # keep-sorted end
]); ]);
boot.initrd.luks.devices."luks-a7726a9d-535f-44bc-9c0e-adc501fad371".device = boot.initrd.luks.devices."luks-c2f5123c-0be0-4357-b383-b3f422e99a34".device = "/dev/disk/by-uuid/c2f5123c-0be0-4357-b383-b3f422e99a34";
"/dev/disk/by-uuid/a7726a9d-535f-44bc-9c0e-adc501fad371";
system.stateVersion = "24.11"; system.stateVersion = "25.05";
users.users.${userName} = { users.users.${userName} = {
extraGroups = [ extraGroups = [

View file

@ -14,20 +14,20 @@
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" =
{ device = "/dev/disk/by-uuid/b772799b-5434-4d5e-b0f9-ab425e36b9a1"; { device = "/dev/disk/by-uuid/a240787a-6cc8-4c03-8a01-742adf305b1e";
fsType = "ext4"; fsType = "ext4";
}; };
boot.initrd.luks.devices."luks-de6f14d8-8c7e-4e77-bfe5-264a39ef0bea".device = "/dev/disk/by-uuid/de6f14d8-8c7e-4e77-bfe5-264a39ef0bea"; boot.initrd.luks.devices."luks-f7d7a54f-d217-4260-8754-3cac7022e7d5".device = "/dev/disk/by-uuid/f7d7a54f-d217-4260-8754-3cac7022e7d5";
fileSystems."/boot" = fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/3730-5237"; { device = "/dev/disk/by-uuid/B3C9-7C0A";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [ "fmask=0077" "dmask=0077" ];
}; };
swapDevices = swapDevices =
[ { device = "/dev/disk/by-uuid/081de704-5e9a-4e6d-ae8d-df492d0f662c"; } [ { device = "/dev/disk/by-uuid/b07c858a-2bd7-4b9a-aec3-3f9593c461c9"; }
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -15,7 +15,7 @@
] ]
++ (util.toImports ../../modules/nixos/features [ ++ (util.toImports ../../modules/nixos/features [
# keep-sorted start # keep-sorted start
"borgmatic" "borgbackup"
"intel-gpu" "intel-gpu"
# keep-sorted end # keep-sorted end
]) ])
@ -30,16 +30,16 @@
fsType = "ext4"; fsType = "ext4";
options = [ options = [
"nofail" "nofail"
"defaults"
"user"
"rw"
"utf8"
"noauto"
"umask=000"
]; ];
}; };
networking.hostName = "${hostName}"; networking = {
hostName = "${hostName}";
firewall.interfaces."enp2s0".allowedTCPPorts = [
80
443
];
};
# hardened openssh # hardened openssh
services.openssh = { services.openssh = {

View file

@ -6,7 +6,6 @@
imports = util.toImports ../features [ imports = util.toImports ../features [
# keep-sorted start # keep-sorted start
"direnv" "direnv"
"zed-editor"
# keep-sorted end # keep-sorted end
]; ];
} }

View file

@ -6,7 +6,7 @@
imports = util.toImports ../features [ imports = util.toImports ../features [
# keep-sorted start # keep-sorted start
"alacritty" "alacritty"
"firefox" "librewolf"
"obsidian" "obsidian"
# "zen-browser" # "zen-browser"
# keep-sorted end # keep-sorted end

View file

@ -6,15 +6,15 @@
imports = util.toImports ./features [ imports = util.toImports ./features [
# keep-sorted start # keep-sorted start
"agenix" "agenix"
"bash"
"bat" "bat"
"bottom" "bottom"
"delta" "delta"
"eza" "eza"
"fd" "fd"
"fish"
"gh"
"git" "git"
"lazygit" "lazygit"
"shell-aliases"
"starship" "starship"
"yazi" "yazi"
"zoxide" "zoxide"

View file

@ -0,0 +1,4 @@
{
home.shell.enableBashIntegration = true;
programs.bash.enable = true;
}

View file

@ -12,6 +12,7 @@
"browser.aboutwelcome.enabled" = false; "browser.aboutwelcome.enabled" = false;
"browser.bookmarks.addedImportButton" = false; "browser.bookmarks.addedImportButton" = false;
"browser.bookmarks.restore_default_bookmarks" = false; "browser.bookmarks.restore_default_bookmarks" = false;
"browser.download.useDownloadDir" = true;
"browser.newtabpage.enabled" = false; "browser.newtabpage.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false; "browser.safebrowsing.downloads.enabled" = false;
"browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.malware.enabled" = false;
@ -22,6 +23,8 @@
"browser.startup.homepage" = "chrome://browser/content/blanktab.html"; "browser.startup.homepage" = "chrome://browser/content/blanktab.html";
"browser.startup.page" = 3; "browser.startup.page" = 3;
"browser.tabs.groups.smart.userEnabled" = false; "browser.tabs.groups.smart.userEnabled" = false;
"browser.tabs.warnOnClose" = true;
"browser.tabs.warnOnOpen" = false;
"browser.toolbars.bookmarks.visibility" = "never"; "browser.toolbars.bookmarks.visibility" = "never";
"browser.urlbar.suggest.searches" = false; "browser.urlbar.suggest.searches" = false;
"datareporting.healthreport.uploadEnabled" = false; "datareporting.healthreport.uploadEnabled" = false;
@ -35,18 +38,20 @@
"network.trr.uri" = "https://firefox.dns.nextdns.io/"; "network.trr.uri" = "https://firefox.dns.nextdns.io/";
"privacy.annotate_channels.strict_list.enabled" = true; "privacy.annotate_channels.strict_list.enabled" = true;
"privacy.bounceTrackingProtection.mode" = 1; "privacy.bounceTrackingProtection.mode" = 1;
"privacy.clearOnShutdown_v2.formdata" = true;
"privacy.fingerprintingProtection" = true; "privacy.fingerprintingProtection" = true;
"privacy.globalprivacycontrol.enabled" = true; "privacy.globalprivacycontrol.enabled" = true;
"privacy.globalprivacycontrol.was_ever_enabled" = true; "privacy.globalprivacycontrol.was_ever_enabled" = true;
"privacy.history.custom" = false;
"privacy.query_stripping.enabled " = true; "privacy.query_stripping.enabled " = true;
"privacy.query_stripping.enabled.pbmode" = true; "privacy.query_stripping.enabled.pbmode" = true;
"privacy.sanitize.sanitizeOnShutdown" = false;
"privacy.trackingprotection.allow_list.baseline.enabled" = true; "privacy.trackingprotection.allow_list.baseline.enabled" = true;
"privacy.trackingprotection.allow_list.convenience.enabled" = false; "privacy.trackingprotection.allow_list.convenience.enabled" = false;
"privacy.trackingprotection.consentmanager.skip.pbmode.enabled" = false; "privacy.trackingprotection.consentmanager.skip.pbmode.enabled" = false;
"privacy.trackingprotection.emailtracking.enabled" = true; "privacy.trackingprotection.emailtracking.enabled" = true;
"privacy.trackingprotection.enabled" = true; "privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true; "privacy.trackingprotection.socialtracking.enabled" = true;
"services.sync.engine.passwords" = false;
"sidebar.main.tools" = "syncedtabs,history,bookmarks"; "sidebar.main.tools" = "syncedtabs,history,bookmarks";
"sidebar.new-sidebar.has-used" = true; "sidebar.new-sidebar.has-used" = true;
"sidebar.position_start" = false; "sidebar.position_start" = false;
@ -75,7 +80,6 @@
# detect-cloudflare # detect-cloudflare
bitwarden bitwarden
dearrow dearrow
floccus
nixpkgs-pr-tracker nixpkgs-pr-tracker
react-devtools react-devtools
return-youtube-dislikes return-youtube-dislikes
@ -87,144 +91,144 @@
# keep-sorted start block=yes # keep-sorted start block=yes
# sponsorblock # sponsorblock
"sponsorBlocker@ajay.app".settings = { "sponsorBlocker@ajay.app".settings = {
hideSegmentCreationInPopup = false; hideSegmentCreationInPopup = false;
autoSkipOnMusicVideosUpdate = true; autoSkipOnMusicVideosUpdate = true;
changeChapterColor = true; changeChapterColor = true;
autoSkipOnMusicVideos = false; autoSkipOnMusicVideos = false;
hideVideoPlayerControls = false; hideVideoPlayerControls = false;
useVirtualTime = true; useVirtualTime = true;
categoryPillColors = { }; categoryPillColors = { };
payments = { payments = {
chaptersAllowed = false; chaptersAllowed = false;
freeAccess = false; freeAccess = false;
lastCheck = 0; lastCheck = 0;
lastFreeCheck = 0; lastFreeCheck = 0;
licenseKey = null; licenseKey = null;
};
allowExpirements = true;
allowScrollingToEdit = true;
audioNotificationOnSkip = false;
autoHideInfoButton = true;
categoryPillUpdate = true;
chapterCategoryAdded = true;
checkForUnlistedVideos = false;
cleanPopup = false;
darkMode = true;
deArrowInstalled = true;
defaultCategory = "chooseACategory";
disableSkipping = false;
donateClicked = 0;
dontShowNotice = false;
forceChannelCheck = false;
fullVideoLabelsOnThumbnails = true;
fullVideoSegments = true;
hideDeleteButtonPlayerControls = false;
hideDiscordLaunches = 0;
hideDiscordLink = false;
hideInfoButtonPlayerControls = false;
hideSkipButtonPlayerControls = false;
hideUploadButtonPlayerControls = false;
categorySelections = [
{
name = "sponsor";
option = 2;
}
{
name = "poi_highlight";
option = 1;
}
{
name = "exclusive_access";
option = 0;
}
{
name = "chapter";
option = 0;
}
{
name = "selfpromo";
option = 1;
}
{
name = "interaction";
option = 1;
}
{
name = "intro";
option = 1;
}
{
name = "outro";
option = 1;
}
{
name = "preview";
option = 1;
}
{
name = "filler";
option = 1;
}
{
name = "music_offtopic";
option = 2;
}
{
name = "hook";
option = 1;
}
];
manualSkipOnFullVideo = false;
minDuration = 0;
isVip = false;
muteSegments = false;
noticeVisibilityMode = 3;
renderSegmentsAsChapters = false;
scrollToEditTimeUpdate = false;
serverAddress = "https://sponsor.ajay.app";
showAutogeneratedChapters = false;
showCategoryGuidelines = true;
showCategoryWithoutPermission = false;
showChapterInfoMessage = true;
showDeArrowInSettings = true;
showDeArrowPromotion = true;
showDonationLink = false;
showNewFeaturePopups = false;
showSegmentFailedToFetchWarning = true;
showSegmentNameInChapterBar = true;
showTimeWithSkips = true;
showUpcomingNotice = false;
showUpsells = false;
minutesSaved = 67.630516;
shownDeArrowPromotion = false;
showZoomToFillError2 = false;
skipNoticeDuration = 4;
sponsorTimesContributed = 0;
testingServer = false;
trackDownvotes = false;
trackDownvotesInPrivate = false;
trackViewCount = false;
trackViewCountInPrivate = false;
ytInfoPermissionGranted = false;
skipNonMusicOnlyOnYoutubeMusic = false;
hookUpdate = false;
permissions = {
sponsor = true;
selfpromo = true;
exclusive_access = true;
interaction = true;
intro = true;
outro = true;
preview = true;
hook = true;
music_offtopic = true;
filler = true;
poi_highlight = true;
chapter = false;
};
segmentListDefaultTab = 0;
prideTheme = false;
}; };
allowExpirements = true;
allowScrollingToEdit = true;
audioNotificationOnSkip = false;
autoHideInfoButton = true;
categoryPillUpdate = true;
chapterCategoryAdded = true;
checkForUnlistedVideos = false;
cleanPopup = false;
darkMode = true;
deArrowInstalled = true;
defaultCategory = "chooseACategory";
disableSkipping = false;
donateClicked = 0;
dontShowNotice = false;
forceChannelCheck = false;
fullVideoLabelsOnThumbnails = true;
fullVideoSegments = true;
hideDeleteButtonPlayerControls = false;
hideDiscordLaunches = 0;
hideDiscordLink = false;
hideInfoButtonPlayerControls = false;
hideSkipButtonPlayerControls = false;
hideUploadButtonPlayerControls = false;
categorySelections = [
{
name = "sponsor";
option = 2;
}
{
name = "poi_highlight";
option = 1;
}
{
name = "exclusive_access";
option = 0;
}
{
name = "chapter";
option = 0;
}
{
name = "selfpromo";
option = 1;
}
{
name = "interaction";
option = 1;
}
{
name = "intro";
option = 1;
}
{
name = "outro";
option = 1;
}
{
name = "preview";
option = 1;
}
{
name = "filler";
option = 1;
}
{
name = "music_offtopic";
option = 2;
}
{
name = "hook";
option = 1;
}
];
manualSkipOnFullVideo = false;
minDuration = 0;
isVip = false;
muteSegments = false;
noticeVisibilityMode = 3;
renderSegmentsAsChapters = false;
scrollToEditTimeUpdate = false;
serverAddress = "https://sponsor.ajay.app";
showAutogeneratedChapters = false;
showCategoryGuidelines = true;
showCategoryWithoutPermission = false;
showChapterInfoMessage = true;
showDeArrowInSettings = true;
showDeArrowPromotion = true;
showDonationLink = false;
showNewFeaturePopups = false;
showSegmentFailedToFetchWarning = true;
showSegmentNameInChapterBar = true;
showTimeWithSkips = true;
showUpcomingNotice = false;
showUpsells = false;
minutesSaved = 67.630516;
shownDeArrowPromotion = false;
showZoomToFillError2 = false;
skipNoticeDuration = 4;
sponsorTimesContributed = 0;
testingServer = false;
trackDownvotes = false;
trackDownvotesInPrivate = false;
trackViewCount = false;
trackViewCountInPrivate = false;
ytInfoPermissionGranted = false;
skipNonMusicOnlyOnYoutubeMusic = false;
hookUpdate = false;
permissions = {
sponsor = true;
selfpromo = true;
exclusive_access = true;
interaction = true;
intro = true;
outro = true;
preview = true;
hook = true;
music_offtopic = true;
filler = true;
poi_highlight = true;
chapter = false;
};
segmentListDefaultTab = 0;
prideTheme = false;
};
# ublock-origin # ublock-origin
"uBlock0@raymondhill.net".settings = { "uBlock0@raymondhill.net".settings = {
advancedUserEnabled = true; advancedUserEnabled = true;

View file

@ -9,31 +9,6 @@
interactiveShellInit = '' interactiveShellInit = ''
set fish_greeting set fish_greeting
''; '';
shellAliases = {
# keep-sorted start
",cat" = "bat";
",curl" = "xh";
",cut" = "choose";
",df" = "duf";
",diff" = "delta";
",du" = "dua";
",find" = "fd";
",grep" = "rga";
",ping" = "gping";
",ps" = "procs";
",sed" = "sd";
",ss" = "snitch";
",top" = "btm";
",unzip" = "ripunzip";
"g" = "lazygit";
"l" = "eza";
"la" = "eza -a";
"ls" = "eza";
"ns" = "nh os switch";
"vi" = "nvim";
"vim" = "nvim";
# keep-sorted end
};
plugins = [ plugins = [
# INFO: Using this to get shell completion for programs added to the path through nix+direnv. # INFO: Using this to get shell completion for programs added to the path through nix+direnv.
# Issue to upstream into direnv:Add commentMore actions # Issue to upstream into direnv:Add commentMore actions

View file

@ -1,15 +1,12 @@
{
userName,
...
}:
{ {
programs.git = { programs.git = {
enable = true; enable = true;
settings = { settings = {
init.defaultBranch = "main"; # keep-sorted start block=yes
core.editor = "nvim";
push.autoSetupRemote = true;
pull.rebase = true;
user = {
name = "wi11-holdsworth";
email = "83637728+wi11-holdsworth@users.noreply.github.com";
};
aliases = { aliases = {
# keep-sorted start # keep-sorted start
a = "add"; a = "add";
@ -30,6 +27,20 @@
s = "status -s"; s = "status -s";
# keep-sorted end # keep-sorted end
}; };
core.editor = "nvim";
init.defaultBranch = "main";
pull.rebase = true;
push.autoSetupRemote = true;
user = {
name = "Will Holdsworth";
email = "me@fi33.buzz";
};
# keep-sorted end
};
signing = {
key = "/home/${userName}/.ssh/git_signature.pub";
format = "ssh";
signByDefault = true;
}; };
}; };
} }

View file

@ -5,6 +5,7 @@
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
settings = { settings = {
git.overrideGpg = true;
log = { log = {
localBranchSortOrder = "recency"; localBranchSortOrder = "recency";
remoteBranchSortOrder = "recency"; remoteBranchSortOrder = "recency";

View file

@ -0,0 +1,255 @@
{
pkgs,
...
}:
{
programs.librewolf = {
enable = true;
languagePacks = [ "en-GB" ];
profiles.will = {
settings = {
# keep-sorted start
"browser.aboutwelcome.enabled" = false;
"browser.bookmarks.addedImportButton" = false;
"browser.bookmarks.restore_default_bookmarks" = false;
"browser.download.useDownloadDir" = true;
"browser.newtabpage.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false;
"browser.safebrowsing.malware.enabled" = false;
"browser.safebrowsing.phishing.enabled" = false;
"browser.safebrowsing.remote.block_potentially_unwanted" = false;
"browser.safebrowsing.remote.block_uncommon" = false;
"browser.search.suggest.enabled" = false;
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
"browser.startup.page" = 3;
"browser.tabs.groups.smart.userEnabled" = false;
"browser.tabs.warnOnClose" = true;
"browser.tabs.warnOnOpen" = false;
"browser.toolbars.bookmarks.visibility" = "never";
"browser.urlbar.suggest.searches" = false;
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.usage.uploadEnabled" = false;
"dom.security.https_only_mode" = true;
"dom.security.https_only_mode_ever_enabled" = true;
"extensions.formautofill.creditCards.enabled" = false;
"general.autoScroll" = true;
"identity.fxaccounts.enabled" = true;
"intl.locale.requested" = "en-GB";
"network.trr.mode" = 3;
"network.trr.uri" = "https://firefox.dns.nextdns.io/";
"privacy.annotate_channels.strict_list.enabled" = true;
"privacy.bounceTrackingProtection.mode" = 1;
"privacy.fingerprintingProtection" = true;
"privacy.globalprivacycontrol.enabled" = true;
"privacy.globalprivacycontrol.was_ever_enabled" = true;
"privacy.history.custom" = false;
"privacy.query_stripping.enabled " = true;
"privacy.query_stripping.enabled.pbmode" = true;
"privacy.sanitize.sanitizeOnShutdown" = false;
"privacy.trackingprotection.allow_list.baseline.enabled" = true;
"privacy.trackingprotection.allow_list.convenience.enabled" = false;
"privacy.trackingprotection.consentmanager.skip.pbmode.enabled" = false;
"privacy.trackingprotection.emailtracking.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
"services.sync.engine.passwords" = false;
"sidebar.main.tools" = "syncedtabs,history,bookmarks";
"sidebar.new-sidebar.has-used" = true;
"sidebar.position_start" = false;
"sidebar.revamp" = true;
"sidebar.verticalTabs" = true;
"sidebar.verticalTabs.dragToPinPromo.dismissed" = true;
"signon.autofillForms" = false;
"signon.firefoxRelay.feature" = "disabled";
"signon.generation.enabled" = false;
"signon.management.page.breach-alerts.enabled" = false;
"signon.rememberSignons" = false;
"toolkit.telemetry.reportingpolicy.firstRun" = false;
# keep-sorted end
};
search = {
default = "ddg";
privateDefault = "ddg";
engines = { };
order = [ ];
force = true;
};
extensions = {
force = true;
packages = with pkgs.nur.repos.rycee.firefox-addons; [
# keep-sorted start sticky_comments=no
# detect-cloudflare
bitwarden
dearrow
nixpkgs-pr-tracker
react-devtools
return-youtube-dislikes
sponsorblock
ublock-origin
# keep-sorted end
];
settings = {
# keep-sorted start block=yes
# sponsorblock
"sponsorBlocker@ajay.app".settings = {
hideSegmentCreationInPopup = false;
autoSkipOnMusicVideosUpdate = true;
changeChapterColor = true;
autoSkipOnMusicVideos = false;
hideVideoPlayerControls = false;
useVirtualTime = true;
categoryPillColors = { };
payments = {
chaptersAllowed = false;
freeAccess = false;
lastCheck = 0;
lastFreeCheck = 0;
licenseKey = null;
};
allowExpirements = true;
allowScrollingToEdit = true;
audioNotificationOnSkip = false;
autoHideInfoButton = true;
categoryPillUpdate = true;
chapterCategoryAdded = true;
checkForUnlistedVideos = false;
cleanPopup = false;
darkMode = true;
deArrowInstalled = true;
defaultCategory = "chooseACategory";
disableSkipping = false;
donateClicked = 0;
dontShowNotice = false;
forceChannelCheck = false;
fullVideoLabelsOnThumbnails = true;
fullVideoSegments = true;
hideDeleteButtonPlayerControls = false;
hideDiscordLaunches = 0;
hideDiscordLink = false;
hideInfoButtonPlayerControls = false;
hideSkipButtonPlayerControls = false;
hideUploadButtonPlayerControls = false;
categorySelections = [
{
name = "sponsor";
option = 2;
}
{
name = "poi_highlight";
option = 1;
}
{
name = "exclusive_access";
option = 0;
}
{
name = "chapter";
option = 0;
}
{
name = "selfpromo";
option = 1;
}
{
name = "interaction";
option = 1;
}
{
name = "intro";
option = 1;
}
{
name = "outro";
option = 1;
}
{
name = "preview";
option = 1;
}
{
name = "filler";
option = 1;
}
{
name = "music_offtopic";
option = 2;
}
{
name = "hook";
option = 1;
}
];
manualSkipOnFullVideo = false;
minDuration = 0;
isVip = false;
muteSegments = false;
noticeVisibilityMode = 3;
renderSegmentsAsChapters = false;
scrollToEditTimeUpdate = false;
serverAddress = "https://sponsor.ajay.app";
showAutogeneratedChapters = false;
showCategoryGuidelines = true;
showCategoryWithoutPermission = false;
showChapterInfoMessage = true;
showDeArrowInSettings = true;
showDeArrowPromotion = true;
showDonationLink = false;
showNewFeaturePopups = false;
showSegmentFailedToFetchWarning = true;
showSegmentNameInChapterBar = true;
showTimeWithSkips = true;
showUpcomingNotice = false;
showUpsells = false;
minutesSaved = 67.630516;
shownDeArrowPromotion = false;
showZoomToFillError2 = false;
skipNoticeDuration = 4;
sponsorTimesContributed = 0;
testingServer = false;
trackDownvotes = false;
trackDownvotesInPrivate = false;
trackViewCount = false;
trackViewCountInPrivate = false;
ytInfoPermissionGranted = false;
skipNonMusicOnlyOnYoutubeMusic = false;
hookUpdate = false;
permissions = {
sponsor = true;
selfpromo = true;
exclusive_access = true;
interaction = true;
intro = true;
outro = true;
preview = true;
hook = true;
music_offtopic = true;
filler = true;
poi_highlight = true;
chapter = false;
};
segmentListDefaultTab = 0;
prideTheme = false;
};
# ublock-origin
"uBlock0@raymondhill.net".settings = {
advancedUserEnabled = true;
selectedFilterLists = [
"user-filters"
"ublock-filters"
"ublock-badware"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"easylist"
"easyprivacy"
"adguard-spyware-url"
"urlhaus-1"
"plowe-0"
];
};
# keep-sorted end
};
};
};
};
}

View file

@ -0,0 +1,27 @@
{
home.shellAliases = {
# keep-sorted start
",cat" = "bat";
",curl" = "xh";
",cut" = "choose";
",df" = "duf";
",diff" = "delta";
",du" = "dua";
",find" = "fd";
",grep" = "rga";
",ping" = "gping";
",ps" = "procs";
",sed" = "sd";
",ss" = "snitch";
",top" = "btm";
",unzip" = "ripunzip";
"g" = "lazygit";
"l" = "eza";
"la" = "eza -a";
"ls" = "eza";
"ns" = "nh os switch";
"vi" = "nvim";
"vim" = "nvim";
# keep-sorted end
};
}

View file

@ -5,6 +5,7 @@
{ {
programs.yazi = { programs.yazi = {
enable = true; enable = true;
shellWrapperName = "y";
plugins = { plugins = {
# keep-sorted start # keep-sorted start
diff = pkgs.yaziPlugins.diff; diff = pkgs.yaziPlugins.diff;

View file

@ -4,7 +4,6 @@
settings = { settings = {
theme = "catppuccin-mocha"; theme = "catppuccin-mocha";
show_startup_tips = false; show_startup_tips = false;
default_shell = "fish";
}; };
}; };
} }

View file

@ -1,7 +1,6 @@
{ {
programs.zoxide = { programs.zoxide = {
enable = true; enable = true;
enableBashIntegration = true;
options = [ options = [
"--cmd j" "--cmd j"
]; ];

View file

@ -7,12 +7,7 @@
# keep-sorted start # keep-sorted start
bacon bacon
cargo-info cargo-info
devenv
just
mask mask
# rusty-man
vscode
# keep-sorted end # keep-sorted end
]; ];
} }

View file

@ -14,10 +14,10 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# keep-sorted start # keep-sorted start
beeper
cameractrls-gtk3 cameractrls-gtk3
jellyfin-desktop jellyfin-desktop
onlyoffice-desktopeditors libreoffice
signal-desktop
textsnatcher textsnatcher
# keep-sorted end # keep-sorted end
]; ];

View file

@ -9,29 +9,33 @@
"caddy" "caddy"
"copyparty" "copyparty"
"couchdb" "couchdb"
"firefly" "cryptpad"
"fi33.buzz"
"gatus"
"homepage-dashboard" "homepage-dashboard"
"immich" "immich"
"jellyfin" "jellyfin"
"karakeep"
"kavita" "kavita"
"libretranslate"
"lidarr" "lidarr"
"mealie"
"miniflux" "miniflux"
"ntfy-sh" "ntfy-sh"
"nzbget" "nzbget"
"paperless" "paperless"
"prowlarr" "prowlarr"
"qbittorrent" "qbittorrent"
"qui"
"radarr" "radarr"
"radicale" "radicale"
"readarr" "readarr"
"send"
"sonarr" "sonarr"
"syncthing"
"upbank2firefly"
"vaultwarden" "vaultwarden"
# keep-sorted end # keep-sorted end
]; ];
services.borgmatic.settings.source_directories = [ "/srv" ]; services.borgbackup.jobs = {
onsite.paths = [ "/srv" ];
offsite.paths = [ "/srv" ];
};
} }

View file

@ -16,7 +16,6 @@
"nixvim" "nixvim"
"syncthing" "syncthing"
"systemd-boot" "systemd-boot"
"tailscale"
# keep-sorted end # keep-sorted end
]; ];
@ -26,8 +25,6 @@
# keep-sorted start # keep-sorted start
broot # large directory browser broot # large directory browser
choose # cut choose # cut
circumflex # hacker news browsing
cointop # crypto ticker
ddgr # web search ddgr # web search
doggo # dns doggo # dns
dua # du dua # du
@ -63,7 +60,7 @@
ticker # stock ticker ticker # stock ticker
tldr # cheat sheets tldr # cheat sheets
tmpmail # temporary email address tmpmail # temporary email address
topydo # todo.txt helper tool # topydo # todo.txt helper tool
tt # typing test tt # typing test
wtfutil # terminal homepage wtfutil # terminal homepage
xh # curl xh # curl

View file

@ -1,6 +1,8 @@
let let
port = 5017; port = 5017;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "subtitles.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -11,7 +13,22 @@ in
listenPort = port; listenPort = port;
}; };
caddy.virtualHosts."bazarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Bazarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -0,0 +1,57 @@
{
config,
pkgs,
...
}:
let
jobConfig = {
compression = "auto,zlib";
doInit = false;
preHook = ''
/run/wrappers/bin/sudo -u postgres ${pkgs.postgresql}/bin/pg_dumpall > /srv/backup/database/postgres/dump.sql
'';
postHook = ''
rm /srv/backup/database/postgres/dump.sql
'';
prune.keep = {
daily = 7;
weekly = 4;
monthly = 6;
yearly = 1;
};
readWritePaths = [
"/srv/backup"
];
startAt = "*-*-* 03:00:00";
extraCreateArgs = [ "-v" ];
};
in
{
services.borgbackup = {
jobs = {
onsite = {
encryption = {
passCommand = "cat ${config.age.secrets.borgbackup-onsite.path}";
mode = "repokey-blake2";
};
removableDevice = true;
repo = "/mnt/external/backup/take2";
}
// jobConfig;
offsite = {
encryption = {
passCommand = "cat ${config.age.secrets.borgbackup-offsite.path}";
mode = "repokey-blake2";
};
environment.BORG_RSH = "ssh -i /home/srv/.ssh/id_ed25519";
repo = "ssh://vuc5c3xq@vuc5c3xq.repo.borgbase.com/./repo";
}
// jobConfig;
};
};
age.secrets = {
borgbackup-onsite.file = ../../../secrets/borgbackup-onsite.age;
borgbackup-offsite.file = ../../../secrets/borgbackup-offsite.age;
};
}

View file

@ -20,6 +20,8 @@
ntfy = { ntfy = {
topic = "backups"; topic = "backups";
server = config.services.ntfy-sh.settings.base-url; server = config.services.ntfy-sh.settings.base-url;
username = "borgmatic";
password = "{credential file ${config.age.secrets.borgmatic-ntfy.path}}";
finish = { finish = {
title = "Ping!"; title = "Ping!";
message = "Your backups have succeeded :)"; message = "Your backups have succeeded :)";
@ -40,12 +42,10 @@
{ {
path = "/mnt/external/backup/repo"; path = "/mnt/external/backup/repo";
label = "onsite"; label = "onsite";
# encryption = "repokey-blake2";
} }
{ {
path = "ssh://vuc5c3xq@vuc5c3xq.repo.borgbase.com/./repo"; path = "ssh://vuc5c3xq@vuc5c3xq.repo.borgbase.com/./repo";
label = "offsite"; label = "offsite";
# encryption = "repokey-blake2";
} }
]; ];
retries = 3; retries = 3;
@ -73,11 +73,10 @@
"borgmatic-pg:${config.age.secrets.borgmatic-pg.path}" "borgmatic-pg:${config.age.secrets.borgmatic-pg.path}"
]; ];
# onsite drive
# secrets # secrets
age.secrets = { age.secrets = {
"borgmatic".file = ../../../secrets/borgmatic.age; "borgmatic".file = ../../../secrets/borgmatic.age;
"borgmatic-ntfy".file = ../../../secrets/borgmatic-ntfy.age;
"borgmatic-pg".file = ../../../secrets/borgmatic-pg.age; "borgmatic-pg".file = ../../../secrets/borgmatic-pg.age;
}; };
} }

View file

@ -9,6 +9,7 @@
globalConfig = '' globalConfig = ''
auto_https disable_redirects auto_https disable_redirects
''; '';
openFirewall = true;
}; };
security.acme = { security.acme = {

View file

@ -8,6 +8,8 @@
let let
port = 5000; port = 5000;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "files.fi33.buzz";
url = "https://${hostname}";
in in
{ {
imports = [ inputs.copyparty.nixosModules.default ]; imports = [ inputs.copyparty.nixosModules.default ];
@ -21,20 +23,36 @@ in
e2ts = true; e2ts = true;
e2vu = true; e2vu = true;
p = port; p = port;
xff-hdr = "x-forwarded-for";
rproxy = 1;
}; };
accounts.will.passwordFile = config.age.secrets.copyparty-will.path; accounts.Impatient7119.passwordFile = config.age.secrets.copyparty.path;
volumes."/" = { volumes."/" = {
path = "/srv/copyparty"; path = "/srv/copyparty";
access = { access = {
r = "*"; A = [ "Impatient7119" ];
A = [ "will" ];
}; };
}; };
}; };
caddy.virtualHosts."copyparty.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "copyparty";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3
@ -43,8 +61,8 @@ in
}; };
# secrets # secrets
age.secrets."copyparty-will" = { age.secrets."copyparty" = {
file = ../../../secrets/copyparty-will.age; file = ../../../secrets/copyparty.age;
owner = "copyparty"; owner = "copyparty";
}; };

View file

@ -1,6 +1,8 @@
let let
port = 5984; port = 5984;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "couchdb.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -29,13 +31,28 @@ in
cors = { cors = {
credentials = true; credentials = true;
origins = '' origins = ''
app://obsidian.md,capacitor://localhost,http://localhost,https://localhost,capacitor://couchdb.fi33.buzz,http://couchdb.fi33.buzz,https://couchdb.fi33.buzz app://obsidian.md,capacitor://localhost,http://localhost,https://localhost,capacitor://${hostname},http://${hostname},${url}
''; '';
}; };
}; };
}; };
caddy.virtualHosts."couchdb.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "CouchDB";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 401"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -0,0 +1,66 @@
let
httpPort = 5022;
websocketPort = 5024;
certloc = "/var/lib/acme/fi33.buzz";
hostname = "cryptpad.fi33.buzz";
url = "https://${hostname}";
in
{
services = {
cryptpad = {
enable = true;
settings = {
inherit httpPort;
inherit websocketPort;
httpUnsafeOrigin = url;
httpSafeOrigin = "https://cryptpad-ui.fi33.buzz";
inactiveTime = 7;
archiveRetentionTime = 7;
accountRetentionTime = 7;
};
};
gatus.settings.endpoints = [
{
name = "CryptPad";
group = "Public Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts."${hostname} cryptpad-ui.fi33.buzz".extraConfig = ''
header Strict-Transport-Security "includeSubDomains; preload"
handle /cryptpad_websocket* {
reverse_proxy localhost:${toString websocketPort} {
header_up Host {host}
header_up X-Real-IP {remote_host}
}
}
handle {
reverse_proxy localhost:${toString httpPort} {
header_up Host {host}
header_up X-Real-IP {remote_host}
}
}
@register {
host ${hostname}
path /register*
}
respond @register 403
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
}

View file

@ -0,0 +1,19 @@
let
certloc = "/var/lib/acme/fi33.buzz";
hostname = "www.fi33.buzz";
in
{
# TODO why can't I serve content on fi33.buzz? dns propagation issue?
services.caddy.virtualHosts = {
"fi33.buzz".extraConfig = ''
redir https://www.fi33.buzz{uri} permanent
'';
${hostname}.extraConfig = ''
root * /srv/fi33.buzz/public
file_server
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
}

View file

@ -24,13 +24,6 @@ in
}; };
}; };
borgmatic.settings.sqlite_databases = [
{
name = "firefly";
path = "/srv/firefly/storage/database/database.sqlite";
}
];
caddy.virtualHosts."firefly.fi33.buzz".extraConfig = '' caddy.virtualHosts."firefly.fi33.buzz".extraConfig = ''
root * ${config.services.firefly-iii.package}/public root * ${config.services.firefly-iii.package}/public
php_fastcgi unix//${config.services.phpfpm.pools.firefly-iii.socket} php_fastcgi unix//${config.services.phpfpm.pools.firefly-iii.socket}

View file

@ -7,7 +7,6 @@
# keep-sorted start # keep-sorted start
heroic heroic
mangohud mangohud
nexusmods-app
prismlauncher prismlauncher
protonup-qt protonup-qt
wine wine

View file

@ -0,0 +1,55 @@
{
config,
...
}:
let
port = 5025;
certloc = "/var/lib/acme/fi33.buzz";
hostname = "status.fi33.buzz";
url = "https://${hostname}";
in
{
services = {
gatus = {
enable = true;
environmentFile = config.age.secrets.gatus.path;
settings = {
alerting = {
ntfy = {
topic = "services";
url = config.services.ntfy-sh.settings.base-url;
token = "$NTFY_TOKEN";
click = url;
default-alert = {
description = "Health Check Failed";
send-on-resolved = true;
};
};
};
connectivity.checker = {
target = "1.1.1.1:53";
interval = "60s";
};
ui = {
title = "Health Dashboard | Fi33Buzz";
description = "Fi33Buzz health dashboard";
dashboard-heading = "";
dashboard-subheading = "";
header = "Fi33Buzz Status";
link = "https://home.fi33.buzz/";
default-sort-by = "group";
};
web.port = port;
};
};
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
age.secrets.gatus.file = ../../../secrets/gatus.age;
}

View file

@ -23,12 +23,11 @@ let
secrets = [ secrets = [
# keep-sorted start # keep-sorted start
"bazarr"
"immich" "immich"
"jellyfin" "jellyfin"
"karakeep"
"kavita-api" "kavita-api"
"lidarr" "lidarr"
"mealie"
"miniflux" "miniflux"
"nzbget" "nzbget"
"paperless" "paperless"
@ -36,120 +35,218 @@ let
"radarr" "radarr"
"readarr" "readarr"
"sonarr" "sonarr"
"subtitles"
# keep-sorted end # keep-sorted end
]; ];
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "home.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
homepage-dashboard = { homepage-dashboard = {
enable = true; enable = true;
listenPort = port; listenPort = port;
allowedHosts = "homepage-dashboard.fi33.buzz"; allowedHosts = hostname;
services = [ services = [
{
"Public Services" = [
{
CryptPad = {
description = "Collaborative office suite";
icon = "cryptpad.svg";
href = "https://cryptpad.fi33.buzz/";
siteMonitor = "https://cryptpad.fi33.buzz/";
};
}
{
LibreTranslate = {
description = "Machine Translation API";
icon = "libretranslate.svg";
href = "https://translate.fi33.buzz/";
siteMonitor = "https://translate.fi33.buzz/";
};
}
{
Send = {
description = "Simple, private file sharing";
icon = "send.svg";
href = "https://send.fi33.buzz/";
siteMonitor = "https://send.fi33.buzz/";
};
}
];
}
{ {
"Media Management" = [ "Media Management" = [
{ {
"Radarr" = { Radarr = {
"description" = "Movie collection manager"; description = "Movie organizer/manager";
"icon" = "radarr.svg"; icon = "radarr.svg";
"href" = "https://radarr.fi33.buzz/"; href = "https://movies.fi33.buzz/";
"widget" = { siteMonitor = "https://movies.fi33.buzz/";
"type" = "radarr"; widget = {
"url" = "https://radarr.fi33.buzz/"; type = "radarr";
"key" = "@radarr@"; url = "https://movies.fi33.buzz/";
"enableQueue" = true; key = "@radarr@";
enableQueue = true;
}; };
}; };
} }
{ {
"Sonarr" = { Sonarr = {
"description" = "TV show collection manager"; description = "Smart PVR";
"icon" = "sonarr.svg"; icon = "sonarr.svg";
"href" = "https://sonarr.fi33.buzz/"; href = "https://shows.fi33.buzz/";
"widget" = { siteMonitor = "https://shows.fi33.buzz/";
"type" = "sonarr"; widget = {
"url" = "https://sonarr.fi33.buzz/"; type = "sonarr";
"key" = "@sonarr@"; url = "https://shows.fi33.buzz/";
"enableQueue" = true; key = "@sonarr@";
enableQueue = true;
}; };
}; };
} }
{ {
"Lidarr" = { Lidarr = {
"description" = "Music collection manager"; description = "Like Sonarr but made for music";
"icon" = "lidarr.svg"; icon = "lidarr.svg";
"href" = "https://lidarr.fi33.buzz/"; href = "https://music.fi33.buzz/";
"widget" = { siteMonitor = "https://music.fi33.buzz/";
"type" = "lidarr"; widget = {
"url" = "https://lidarr.fi33.buzz/"; type = "lidarr";
"key" = "@lidarr@"; url = "https://music.fi33.buzz/";
"enableQueue" = true; key = "@lidarr@";
enableQueue = true;
}; };
}; };
} }
{ {
"Readarr" = { Readarr = {
"description" = "Book collection manager"; description = "Book Manager and Automation";
"icon" = "readarr.svg"; icon = "readarr.svg";
"href" = "https://readarr.fi33.buzz/"; href = "https://books.fi33.buzz/";
"widget" = { siteMonitor = "https://books.fi33.buzz/";
"type" = "readarr"; widget = {
"url" = "https://readarr.fi33.buzz/"; type = "readarr";
"key" = "@readarr@"; url = "https://books.fi33.buzz/";
"enableQueue" = true; key = "@readarr@";
enableQueue = true;
}; };
}; };
} }
{ {
"Bazarr" = { Bazarr = {
"description" = "Subtitle downloader and manager"; description = "Subtitle manager and downloader";
"icon" = "bazarr.svg"; icon = "bazarr.svg";
"href" = "https://bazarr.fi33.buzz/"; href = "https://subtitles.fi33.buzz/";
"widget" = { siteMonitor = "https://subtitles.fi33.buzz/";
"type" = "bazarr"; widget = {
"url" = "https://bazarr.fi33.buzz/"; type = "bazarr";
"key" = "@bazarr@"; url = "https://subtitles.fi33.buzz/";
key = "@subtitles@";
}; };
}; };
} }
{ {
"Prowlarr" = { Prowlarr = {
"description" = "Indexer management tool"; description = "Indexer manager/proxy";
"icon" = "prowlarr.svg"; icon = "prowlarr.svg";
"href" = "https://prowlarr.fi33.buzz/"; href = "https://prowlarr.fi33.buzz/";
"widget" = { siteMonitor = "https://prowlarr.fi33.buzz/";
"type" = "prowlarr"; widget = {
"url" = "https://prowlarr.fi33.buzz/"; type = "prowlarr";
"key" = "@prowlarr@"; url = "https://prowlarr.fi33.buzz/";
key = "@prowlarr@";
}; };
}; };
} }
{ {
"NZBget" = { NZBget = {
"description" = "Usenet client"; description = "Usenet Downloader";
"icon" = "nzbget.svg"; icon = "nzbget.svg";
"href" = "https://nzbget.fi33.buzz/"; href = "https://usenet.fi33.buzz/";
"widget" = { siteMonitor = "https://usenet.fi33.buzz/";
"type" = "nzbget"; widget = {
"url" = "https://nzbget.fi33.buzz/"; type = "nzbget";
"username" = "nzbget"; url = "https://usenet.fi33.buzz/";
"password" = "@nzbget@"; username = "nzbget";
password = "@nzbget@";
}; };
}; };
} }
{ {
"qui" = { qBittorrent = {
"description" = "qBittorrent front end"; description = "BitTorrent client";
"icon" = "qui.svg"; icon = "qbittorrent.svg";
"href" = "https://qui.fi33.buzz/"; href = "https://bittorrent.fi33.buzz/";
siteMonitor = "https://bittorrent.fi33.buzz/";
};
}
];
}
{
"Private Services" = [
{
copyparty = {
description = "Portable file server";
icon = "sh-copyparty.svg";
href = "https://files.fi33.buzz/";
siteMonitor = "https://files.fi33.buzz/";
}; };
} }
{ {
"qBittorrent" = { CouchDB = {
"description" = "BitTorrent client"; description = "Syncing database";
"icon" = "qbittorrent.svg"; icon = "couchdb.svg";
"href" = "https://qbittorrent.fi33.buzz/"; href = "https://couchdb.fi33.buzz/_utils/";
siteMonitor = "https://couchdb.fi33.buzz/_utils/";
};
}
{
Mealie = {
description = "Recipe manager and meal planner";
icon = "mealie.svg";
href = "https://mealie.fi33.buzz/";
siteMonitor = "https://mealie.fi33.buzz/";
widget = {
type = "mealie";
url = "https://mealie.fi33.buzz/";
version = 2;
key = "@mealie@";
};
};
}
{
ntfy = {
description = "Send push notifications using PUT/POST";
icon = "ntfy.svg";
href = "https://notify.fi33.buzz/";
siteMonitor = "https://notify.fi33.buzz/";
};
}
{
Radicale = {
description = "A simple CalDAV (calendar) and CardDAV (contact) server";
icon = "radicale.svg";
href = "https://caldav.fi33.buzz";
siteMonitor = "https://caldav.fi33.buzz";
};
}
{
Syncthing = {
description = "Open Source Continuous File Synchronization";
icon = "syncthing.svg";
href = "https://sync.fi33.buzz/";
siteMonitor = "https://sync.fi33.buzz/";
};
}
{
Vaultwarden = {
description = "Unofficial Bitwarden compatible server";
icon = "vaultwarden.svg";
href = "https://vault.fi33.buzz/";
siteMonitor = "https://vault.fi33.buzz/";
}; };
} }
]; ];
@ -157,152 +254,104 @@ in
{ {
"Media Streaming" = [ "Media Streaming" = [
{ {
"Immich" = { Immich = {
"description" = "Photo backup"; description = "Photo and video management solution";
"icon" = "immich.svg"; icon = "immich.svg";
"href" = "https://immich.fi33.buzz/"; href = "https://photos.fi33.buzz/";
"widget" = { siteMonitor = "https://photos.fi33.buzz/";
"type" = "immich"; widget = {
"fields" = [ type = "immich";
fields = [
"users" "users"
"photos" "photos"
"videos" "videos"
"storage" "storage"
]; ];
"url" = "https://immich.fi33.buzz/"; url = "https://photos.fi33.buzz/";
"version" = 2; version = 2;
"key" = "@immich@"; key = "@immich@";
}; };
}; };
} }
{ {
"Jellyfin" = { Jellyfin = {
"description" = "Media streaming"; description = "Media System";
"icon" = "jellyfin.svg"; icon = "jellyfin.svg";
"href" = "https://jellyfin.fi33.buzz/"; href = "https://media.fi33.buzz/";
"widget" = { siteMonitor = "https://media.fi33.buzz/";
"type" = "jellyfin"; widget = {
"url" = "https://jellyfin.fi33.buzz/"; type = "jellyfin";
"key" = "@jellyfin@"; url = "https://media.fi33.buzz/";
"enableBlocks" = true; key = "@jellyfin@";
"enableNowPlaying" = true; enableBlocks = true;
"enableUser" = true; enableNowPlaying = true;
"showEpisodeNumber" = true; enableUser = true;
"expandOneStreamToTwoRows" = false; showEpisodeNumber = true;
expandOneStreamToTwoRows = false;
}; };
}; };
} }
{ {
"Kavita" = { Kavita = {
"description" = "Book reader"; description = "Reading server";
"icon" = "kavita.svg"; icon = "kavita.svg";
"href" = "https://kavita.fi33.buzz/"; href = "https://library.fi33.buzz/";
"widget" = { siteMonitor = "https://library.fi33.buzz/";
"type" = "kavita"; widget = {
"url" = "https://kavita.fi33.buzz/"; type = "kavita";
"key" = "@kavita-api@"; url = "https://library.fi33.buzz/";
key = "@kavita-api@";
}; };
}; };
} }
{ {
"Karakeep" = { Miniflux = {
"description" = "Web clipper"; description = "Feed reader";
"icon" = "karakeep.svg"; icon = "miniflux.svg";
"href" = "https://karakeep.fi33.buzz/"; href = "https://feeds.fi33.buzz/";
"widget" = { siteMonitor = "https://feeds.fi33.buzz/";
"type" = "karakeep"; widget = {
"url" = "https://karakeep.fi33.buzz/"; type = "miniflux";
"key" = "@karakeep@"; url = "https://feeds.fi33.buzz/";
key = "@miniflux@";
}; };
}; };
} }
{ {
"Miniflux" = { Paperless = {
"description" = "RSS aggregator"; description = "Document management system";
"icon" = "miniflux.svg"; icon = "paperless.svg";
"href" = "https://miniflux.fi33.buzz/"; href = "https://documents.fi33.buzz/";
"widget" = { siteMonitor = "https://documents.fi33.buzz/";
"type" = "miniflux"; widget = {
"url" = "https://miniflux.fi33.buzz/"; type = "paperlessngx";
"key" = "@miniflux@"; url = "https://documents.fi33.buzz/";
}; username = "admin";
}; password = "@paperless@";
}
{
"Paperless" = {
"description" = "Digital filing cabinet";
"icon" = "paperless.svg";
"href" = "https://paperless.fi33.buzz/";
"widget" = {
"type" = "paperlessngx";
"url" = "https://paperless.fi33.buzz/";
"username" = "admin";
"password" = "@paperless@";
}; };
}; };
} }
]; ];
} }
{ {
"Services" = [ Utilities = [
{ {
"copyparty" = { Gatus = {
"description" = "Cloud file manager"; description = "Status page";
"icon" = "sh-copyparty.svg"; icon = "gatus.svg";
"href" = "https://copyparty.fi33.buzz/"; href = "https://status.fi33.buzz/";
siteMonitor = "https://status.fi33.buzz/";
widget = {
type = "gatus";
url = "https://status.fi33.buzz/";
};
}; };
} }
{ {
"CouchDB" = { NanoKVM = {
"description" = "Obsidian sync database"; description = "Remote KVM switch";
"icon" = "couchdb.svg"; icon = "mdi-console.svg";
"href" = "https://couchdb.fi33.buzz/_utils/"; href = "http://nano-kvm/";
};
}
{
"Firefly" = {
"description" = "Budget Planner";
"icon" = "firefly-iii.svg";
"href" = "https://firefly.fi33.buzz/";
};
}
{
"ntfy" = {
"description" = "Notification service";
"icon" = "ntfy.svg";
"href" = "https://ntfy-sh.fi33.buzz/";
};
}
{
"Radicale" = {
"description" = "CalDAV/CardDAV service";
"icon" = "radicale.svg";
"href" = "https://radicale.fi33.buzz";
};
}
{
"Syncthing" = {
"description" = "Decentralised file synchronisation";
"icon" = "syncthing.svg";
"href" = "https://syncthing.fi33.buzz/";
};
}
{
"Vaultwarden" = {
"description" = "Password manager";
"icon" = "vaultwarden.svg";
"href" = "https://vaultwarden.fi33.buzz/";
};
}
];
}
{
"Utilities" = [
{
"NanoKVM" = {
"description" = "Remote KVM switch";
"icon" = "mdi-console.svg";
"href" = "http://nano-kvm/";
}; };
} }
]; ];
@ -313,18 +362,27 @@ in
theme = "dark"; theme = "dark";
color = "neutral"; color = "neutral";
headerStyle = "clean"; headerStyle = "clean";
hideVersion = true;
layout = [ layout = [
{ {
"Media Streaming" = { "Public Services" = {
style = "row"; style = "row";
columns = 3; columns = 3;
useEqualHeights = true; useEqualHeights = true;
}; };
} }
{ {
"Services" = { "Private Services" = {
style = "row"; style = "row";
columns = 4; columns = 3;
useEqualHeights = true;
};
}
{
"Media Streaming" = {
style = "row";
columns = 3;
useEqualHeights = true;
}; };
} }
{ {
@ -335,16 +393,17 @@ in
}; };
} }
{ {
"Utilities" = { Utilities = {
style = "row"; style = "row";
columns = 3; columns = 3;
useEqualHeights = true;
initiallyCollapsed = true;
}; };
} }
]; ];
quicklaunch.searchDescriptions = true; quicklaunch.searchDescriptions = true;
disableUpdateCheck = true; disableUpdateCheck = true;
showStats = true; showStats = true;
statusStyle = "dot";
}; };
widgets = [ widgets = [
{ {
@ -377,7 +436,22 @@ in
]; ];
}; };
caddy.virtualHosts."homepage-dashboard.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Homepage Dashboard";
group = "Utilities";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 2283; port = 2283;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "photos.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -10,16 +12,22 @@ in
mediaLocation = "/srv/immich"; mediaLocation = "/srv/immich";
}; };
borgmatic.settings.postgresql_databases = [ gatus.settings.endpoints = [
{ {
name = "immich"; name = "Immich";
hostname = "localhost"; group = "Media Streaming";
username = "root"; inherit url;
password = "{credential systemd borgmatic-pg}"; interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
} }
]; ];
caddy.virtualHosts."immich.fi33.buzz".extraConfig = '' caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 8096; port = 8096;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "media.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -10,7 +12,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."jellyfin.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Jellyfin";
group = "Media Streaming";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -5,6 +5,8 @@
let let
port = 5015; port = 5015;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "library.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -15,7 +17,22 @@ in
tokenKeyFile = config.age.secrets.kavita.path; tokenKeyFile = config.age.secrets.kavita.path;
}; };
caddy.virtualHosts."kavita.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Kavita";
group = "Media Streaming";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -0,0 +1,37 @@
let
port = 5023;
certloc = "/var/lib/acme/fi33.buzz";
hostname = "translate.fi33.buzz";
url = "https://${hostname}";
in
{
services = {
libretranslate = {
enable = true;
inherit port;
updateModels = true;
};
gatus.settings.endpoints = [
{
name = "LibreTranslate";
group = "Public Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
}

View file

@ -1,6 +1,8 @@
let let
port = 5012; port = 5012;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "music.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -13,7 +15,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."lidarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Lidarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -0,0 +1,53 @@
{
pkgs,
...
}:
let
port = 5026;
certloc = "/var/lib/acme/fi33.buzz";
hostname = "mealie.fi33.buzz";
url = "https://${hostname}";
in
{
services = {
mealie = {
enable = true;
inherit port;
settings = {
TZ = "Australia/Melbourne";
ALLOW_SIGNUP = "false";
};
};
gatus.settings.endpoints = [
{
name = "Mealie";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
borgbackup.jobs = {
onsite = {
paths = [ "/var/lib/mealie" ];
};
offsite = {
paths = [ "/var/lib/mealie" ];
};
};
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
}

View file

@ -5,6 +5,8 @@
let let
port = 5010; port = 5010;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "feeds.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -12,21 +14,27 @@ in
enable = true; enable = true;
adminCredentialsFile = config.age.secrets.miniflux-creds.path; adminCredentialsFile = config.age.secrets.miniflux-creds.path;
config = { config = {
BASE_URL = "https://miniflux.fi33.buzz"; BASE_URL = url;
LISTEN_ADDR = "localhost:${toString port}"; LISTEN_ADDR = "localhost:${toString port}";
}; };
}; };
borgmatic.settings.postgresql_databases = [ gatus.settings.endpoints = [
{ {
name = "miniflux"; name = "Miniflux";
hostname = "localhost"; group = "Media Streaming";
username = "root"; inherit url;
password = "{credential systemd borgmatic-pg}"; interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
} }
]; ];
caddy.virtualHosts."miniflux.fi33.buzz".extraConfig = '' caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,23 +1,59 @@
{
config,
...
}:
let let
port = 5002; port = 5002;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "notify.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
ntfy-sh = { ntfy-sh = {
enable = true; enable = true;
environmentFile = config.age.secrets.ntfy.path;
settings = { settings = {
base-url = "https://ntfy-sh.fi33.buzz"; base-url = url;
listen-http = ":${toString port}"; listen-http = ":${toString port}";
behind-proxy = true; behind-proxy = true;
auth-default-access = "deny-all";
auth-users = [
"Debit3885:$2a$12$ZeFimzdifNFSmf0W2oi.vuZfsqae75md9nhC/Q2BcKMyvDO8T.uEK:admin"
"gatus:$2a$12$OswG3sB8oDaB.KpawKM3P.78dID.Tj/0y5qeVD5BE6EH5bpGKe.na:user"
];
auth-access = [
"gatus:services:wo"
];
}; };
}; };
caddy.virtualHosts."ntfy-sh.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "ntfy";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
}
];
borgbackup.jobs = {
onsite.paths = [ "/var/lib/ntfy-sh" ];
offsite.paths = [ "/var/lib/ntfy-sh" ];
};
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3
} }
''; '';
}; };
age.secrets.ntfy.file = ../../../secrets/ntfy.age;
} }

View file

@ -5,6 +5,8 @@
let let
port = 5018; port = 5018;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "usenet.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -17,7 +19,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."nzbget.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "NZBget";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 401"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -5,6 +5,8 @@
let let
port = 5013; port = 5013;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "documents.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -15,22 +17,26 @@ in
passwordFile = config.age.secrets.paperless.path; passwordFile = config.age.secrets.paperless.path;
inherit port; inherit port;
settings = { settings = {
PAPERLESS_URL = "https://paperless.fi33.buzz"; PAPERLESS_URL = url;
}; };
}; };
borgmatic.settings = { gatus.settings.endpoints = [
postgresql_databases = [ {
{ name = "Paperless";
name = "paperless"; group = "Media Streaming";
hostname = "localhost"; inherit url;
username = "root"; interval = "5m";
password = "{credential systemd borgmatic-pg}"; conditions = [
} "[STATUS] == 200"
]; "[CONNECTED] == true"
}; "[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts."paperless.fi33.buzz".extraConfig = '' caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,18 +1,47 @@
{
pkgs,
...
}:
let let
port = 5009; port = 5009;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "prowlarr.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
prowlarr = { prowlarr = {
enable = true; enable = true;
dataDir = "/srv/prowlarr";
settings.server = { settings.server = {
inherit port; inherit port;
}; };
}; };
caddy.virtualHosts."prowlarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Prowlarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
borgbackup.jobs = {
onsite = {
paths = [ "/var/lib/prowlarr" ];
};
offsite = {
paths = [ "/var/lib/prowlarr" ];
};
};
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 5005; port = 5005;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "bittorrent.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -14,7 +16,22 @@ in
]; ];
}; };
caddy.virtualHosts."qbittorrent.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "qBittorrent";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 5007; port = 5007;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "movies.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -13,7 +15,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."radarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Radarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -5,6 +5,8 @@
let let
port = 5003; port = 5003;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "caldav.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -28,7 +30,22 @@ in
}; };
}; };
caddy.virtualHosts."radicale.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Radicale";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 5016; port = 5016;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "books.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -13,7 +15,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."readarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Readarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -0,0 +1,45 @@
let
port = 5020;
certloc = "/var/lib/acme/fi33.buzz";
hostname = "send.fi33.buzz";
url = "https://${hostname}";
in
{
services = {
send = {
enable = true;
inherit port;
baseUrl = url;
environment = {
DEFAULT_EXPIRE_SECONDS = 360;
EXPIRE_TIMES_SECONDS = "360";
DOWNLOAD_COUNTS = "1";
MAX_DOWNLOADS = 1;
MAX_EXPIRE_SECONDS = 1024;
MAX_FILE_SIZE = 134217728;
};
};
gatus.settings.endpoints = [
{
name = "Send";
group = "Public Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3
}
'';
};
}

View file

@ -1,6 +1,8 @@
let let
port = 5006; port = 5006;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "shows.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -13,7 +15,22 @@ in
group = "srv"; group = "srv";
}; };
caddy.virtualHosts."sonarr.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Sonarr";
group = "Media Management";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -13,7 +13,7 @@ let
} }
{ {
device = "laptop"; device = "laptop";
id = "XDDGWB2-5OFYWSY-7LN652V-3WNQMWV-4WCVHCR-2EXLDW7-FUL2MC4-MMLO4QV"; id = "CTU345T-27VU5KK-HXLPSMO-H6C47TL-XZG3BVU-AZF7HSX-FCQHAMA-QOA3CAT";
} }
{ {
device = "phone"; device = "phone";
@ -41,6 +41,8 @@ let
) (builtins.filter (deviceSet: deviceSet.device != hostName) devicesList) ) (builtins.filter (deviceSet: deviceSet.device != hostName) devicesList)
); );
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "sync.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -56,18 +58,37 @@ in
}; };
}; };
borgmatic.settings = gatus.settings.endpoints = [
{
name = "Syncthing";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
borgbackup.jobs =
if userName == "srv" then if userName == "srv" then
{ {
source_directories = [ onsite.paths = [
"/home/srv/.config/syncthing" "/home/srv/.config/syncthing"
"/home/srv/Sync" "/home/srv/Sync/"
];
offsite.paths = [
"/home/srv/.config/syncthing"
"/home/srv/Sync/"
]; ];
} }
else else
null; { };
caddy.virtualHosts."syncthing.fi33.buzz".extraConfig = '' caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy http://localhost:${toString port} reverse_proxy http://localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -46,24 +46,6 @@ in
docker build -t compose2nix/upbank2firefly . docker build -t compose2nix/upbank2firefly .
''; '';
}; };
"upbank2firefly-getall" = {
script = ''
cd /srv/upbank2firefly
docker container exec -e FLASK_APP=main upbank2firefly flask getall --since "$(date -d "1 hour ago" +"%Y-%m-%d %H:%M:%S")"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
};
timers."upbank2firefly-getall" = {
wantedBy = [ "timers.target" ];
timerConfig = {
Unit = "upbank2firefly-getall.service";
OnCalendar = "hourly";
Persistent = true;
};
}; };
}; };

View file

@ -5,6 +5,8 @@
let let
port = 5001; port = 5001;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "vault.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -13,7 +15,7 @@ in
backupDir = "/srv/vaultwarden"; backupDir = "/srv/vaultwarden";
config = { config = {
rocketPort = toString port; rocketPort = toString port;
domain = "https://vaultwarden.fi33.buzz"; domain = url;
signupsAllowed = false; signupsAllowed = false;
invitationsAllowed = false; invitationsAllowed = false;
showPasswordHint = false; showPasswordHint = false;
@ -23,7 +25,22 @@ in
}; };
}; };
caddy.virtualHosts."vaultwarden.fi33.buzz".extraConfig = '' gatus.settings.endpoints = [
{
name = "Vaultwarden";
group = "Private Services";
inherit url;
interval = "5m";
conditions = [
"[STATUS] == 200"
"[CONNECTED] == true"
"[RESPONSE_TIME] < 500"
];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,6 +1,8 @@
let let
port = 0000; port = 0000;
certloc = "/var/lib/acme/fi33.buzz"; certloc = "/var/lib/acme/fi33.buzz";
hostname = "feature.fi33.buzz";
url = "https://${hostname}";
in in
{ {
services = { services = {
@ -8,19 +10,27 @@ in
enable = true; enable = true;
}; };
# borgmatic.settings = { gatus.settings.endpoints = [
# source_directories = [ ]; {
# postgresql_databases = [ name = "feature";
# { group = "";
# name = "feature"; inherit url;
# hostname = "localhost"; interval = "5m";
# username = "root"; conditions = [
# password = "{credential systemd borgmatic-pg}"; "[STATUS] == 200"
# } "[CONNECTED] == true"
# ]; "[RESPONSE_TIME] < 500"
# }; ];
alerts = [ { type = "ntfy"; } ];
}
];
caddy.virtualHosts."feature.fi33.buzz".extraConfig = '' borgbackup.jobs = {
onsite.paths = [ "" ];
offsite.paths = [ "" ];
};
caddy.virtualHosts.${hostname}.extraConfig = ''
reverse_proxy localhost:${toString port} reverse_proxy localhost:${toString port}
tls ${certloc}/cert.pem ${certloc}/key.pem { tls ${certloc}/cert.pem ${certloc}/key.pem {
protocols tls1.3 protocols tls1.3

View file

@ -1,9 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 qLT+DQ pNb65h8kPUdFi7vgKoENqFf9NuQAfegSAM+SVxoTdGQ -> ssh-ed25519 qLT+DQ sHlKSMDLuGOLY2qwoFCS2ZiC/903ChAP0wp4wJYksi8
7pDfhxs55Q4HQetasY6tZX76aOleLTCTi3xEdCqPdFo jIzt2BvZy53dMdUSYBEa2QsWQ7yluk9ltdk4wrTkIbo
-> ssh-ed25519 7+xRyQ SiBuQH6fIUFidqFUIFfE9i0zJhuMAWYmDCeszOJLZlE -> ssh-ed25519 7+xRyQ /JHmkqPhx/nJFhOxWu5nrX89NCBI/Bhyih81bIv2OR8
ASEBjHaAVrH6z/43Rfnh2P0REg7f0b53fqbLHD44P8g VJPt3EFgYWc6bYBSNNzLFnWBNVx7RYJaG/hNF2EswQ4
-> ssh-ed25519 LtK9yQ F6FnS/nRerbt/tMCl48CMjyKwhgCI8ti40klovGXdGU -> ssh-ed25519 LtK9yQ znUR+X5uu9wdKPdUBEOhs295e/zLAD8E49vZ0QEaL10
ksVfKN3xowiBhwzyS9DLdmVX1QLCo8hvNiNux0MkiXU ADBASujra+DSzavY/m/gU3xgAzaSqlTh2txpzyyJIJQ
--- rMrNsQ0G/k0MAwDOBd9IYDb2Lc8N/RaGXIGKtm9FL1c --- j21Ms0NWBwHJV1NPbIp19lSgCMkCHSUX3UwWjg43OLk
qåû 9êo”-²dätB7v¢*i:ï.G€¬»¡/t£¬ ),+ÿ/vCœD„}SçÌâX(ç} *<2A>è4[æ°~l ©[“Ù,´WM¨ÎÑ?¿&>“Ê„ Žä1ÛP<03> ˜Ä«Ñßí"oÍìKÞ“j¤hÊiÒª&UMïþ¤ÊPãÐr&

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ NuEGxxieL0H7mUFKft+fuH1jd0XFDf3xESLrVcb9GAg
KxJcj9P/+cr63TmqEIPwfykz07luqe9VLRLzs3CWx9Y
-> ssh-ed25519 NanIwQ HRHMV4jFn7vJVHd6gFqcOTA14VI6+QaITXMpZbeGoDg
aANuHXv4O1KKwPCClatphXgWDFnsCy/AoQJT0+D560o
-> ssh-ed25519 LtK9yQ NHLTdStEdoXSGKxoz4/gR+oT9bLq8wwz4XRHS2rd9Xo
lndB74KBkWrfNuZyuQufl35lQIPNqbppLfSZRerIDaA
--- dro8ECdWcFtleQv5nffX/Wh97w/FGXQZwSIjPE9WIX8
8…ƒÄRé#ÇÉç;ÒrpEÚ÷hȾW8-.ÿ é `OÎW¸']Úk§JdõC žÛï.ÿÆßT)Nø_ÅkqüëÕ_=ϰç

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ 3UW3CErZDv6UkjXJZldymqYmmJoQcbSjVX4IUX7KRn8
pnbegKpKiNW8QY9rD7pD1mrhOSdD+cxUxcNKtLM5uOQ
-> ssh-ed25519 NanIwQ qAl2RheS1lTOU60xeodc4/WvyzYRGiWR+55QvsVE5H0
j/UoLITpRpMF2t0J/Y0zL0kAgz5nJ02I/nwUp+pEowg
-> ssh-ed25519 LtK9yQ sbldK/F2u6MMgIR8F6c5ZFkMesq+GHKRmlqt3n6L2yw
GTSzhGfj+Shg+MQ3hde12pKi6zfeGNw6RXwSAoGyaak
--- 6WmdTjpwgwb6/1o06i5xtvnOQcvNztwpBmvH/9wYbmo
K®öò<EFBFBD>°^¼Ñ­þ¢Ubù|œ:m@*Þ±Žö<>ÚСg1ž>)±–Çã«ÚqëÐs,n{™ DdvÅöÉœÿEuH<j4Ëì

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ GTuLiTsgOVunKC+DyalVPV3gKm3WiKoSIQXg/0ElJF8
UiOLJdTn4Q5oTkqAtZ6K0uxW+EsrpfA156uC1ncrIY0
-> ssh-ed25519 7+xRyQ k2ta2Gl7zCvHiv4DwzgRK5REDYayIoTfC32BF5yHxgg
n7sqfJ6fx/3VnQCD+H4n92ekGdoFCdk/SeXdSU8FZHc
-> ssh-ed25519 LtK9yQ BQ9U3//Lzx7dX+iDyP2lqx6K860kFTu/iB5uMAskKhA
xiV+QxL8ffx9n9gIUr5wwQ5zGvZlFsf2DclayQh8SJI
--- k06SInBOn82DqWfIf4t62pjAZ1R0uWAyQTi5ELDD/6U
 _$®T56"T­Hô;4}ù<M Á/Œ“ð8j¡³?H~Þ„Oó}…bGßj4tn ô2mçÁÈC R

View file

@ -1,9 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ C3A3TKOyIWzbW8JupvhTmLKetnr+0uzkPq985NA0DCs
ahrHVR7WadjOfOXBWOqBAf9L0UdCNeD0Ynk6sKDF7WM
-> ssh-ed25519 7+xRyQ evZ6zSS3olbORnqiCnEAL68D1FNPgg2oBoJSaquLAAA
BYoo9AVOHsRsTbXkRQdS/7WN25vBuJOAb0YfnSY+hGQ
-> ssh-ed25519 LtK9yQ jLIdKPvVhPsRIJevWLmads3P2hM29c0B143OWoINzlY
ziCUQ1TtB6BUgbNZ/zFXoaOtpxyrbKobsTvXo/dSpSA
--- Q6JHS+5vuYLIqyIb6x3qCbIJvsjk2++ovL1zkVGs69o
<EFBFBD>ã쇽NM1±WBýy•M.ù²ø-Ø|GlºÈ]¡8Z,(5è±²P¶èè!ÿpmp¡¢°Eaû¤;<3B>Ôâ¿Ä(tq!ÊKÕU4×m

View file

@ -1,9 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ zfLZc8A30KjoMrhUSl4OgTp+Yg11fmVjDioxtIYMqDU
URhJwUCElaJcSd+k5wBQAXvdC/68ZcCA5WbHGAJTYfY
-> ssh-ed25519 7+xRyQ mrGrjW0fQIRNMDdw4Hoc9N/xAEm1P0IFukShfeVdKE8
yLUmj7LBfHQ/i4buBB57ktNUOnHpoC8NYTQUnK5e5y4
-> ssh-ed25519 LtK9yQ THjOsSIr/DQTulFlwd4r5DYb73VQ0vWgyDHkfJV3NR0
Dl8FwK1WciiEMs5MdrFcUIOFGmlbZf3APOWzLN6rkOE
--- 3mjYPT9APy0F5NNbbCIQhzZ0XjKBtB9YGGS3t37eoRU
ôT^væ—U‹§òÏ{™>[÷õ¦dhé§PC6þZ|é£ûýK|~lÝ<6C>bŒÀD¢ûÖÙt”΄¨ø]¨1P$ø10¨ ¿ïAý±$

10
secrets/gatus.age Normal file
View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ 3vJV+PZ1IvwiFPplPEwXkaZK4y0QLxkvi/stzAV+HWg
3htQOBS3ph9+OXG2ZYtMyzErGtYRP1vzycua+vhPX+4
-> ssh-ed25519 NanIwQ 748IDG9uT6jMj0CSU3EeBqRd7lZ7NTJoUldo4FUfkFI
bYaXhcXjYgKqEaUeRZQhx9neK1pDVN3QbhblLOcGUg0
-> ssh-ed25519 LtK9yQ au/UGPL91M0sUzMeOKPOkltXWDPoWeCrUWrD2OIsJA0
thILTQH9hrcBYBbRSZaHMODAhCKWsqomDuEK4hcKAqM
--- UpA2kIfSBwfgMxjt2x61KFAiUaV3sHQ6Gp2R87cvnwo
*D2Ä7Êpƒ梔 °p·ï¥·Q
Fuf°ýïpÚ°4±ÉQ<C389>5ÀµËѨeÿéÓªã <0B>Þˆá;šê“z8ýi{@ÛÇ—›

BIN
secrets/git_signing_key.age Normal file

Binary file not shown.

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ NMzN1Cll+cH5GgEQvCRpb8c1m7CDHWBtUZ5QNMluKkg
H77YBVoCAZerRyoG90h9W6PKZbpjNBl2mfsW3Eco27w
-> ssh-ed25519 7+xRyQ 67NFmrcLe9R5ni0HnvIiHcN0tlRVXpAiaVOQfIpqWzI
H7jbIgVXVl+lENksb4KUfASeIKPBI/FtHhhlQzhXwik
-> ssh-ed25519 LtK9yQ jvrWRlZF/H20QARL4lWWX0cDDoIK0Et5ZMxdsPJPXn0
g+ZaDYycq65tBEBFuDpSl1BKuCTmxCJuYqG8kSCtL9U
--- jZ2xp/oW3CgXPc8jriK53zTODB9lhDNZr8YfSYLAmio
íAûKwÕ;÷À2R
Ö¨†Ø<11>Øb—éSÓ'æÀ7/ˆ‘¾/ÎkXÿHÓ–ùÿªÉÝW†œƒ<°P p•HcÁTáúæG÷ÿÒ 'ŠFå¾…&Î!‹†(… ³=˜6 ŒŸ”HØ_ y <79>éËTlj­ªUbëó1

BIN
secrets/mealie.age Normal file

Binary file not shown.

9
secrets/ntfy.age Normal file
View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 qLT+DQ jySlchGAPxdkjpZzg+5BLH7O5yM+O5a9CleBVMqbck8
I5OEMjXJNrNKIBumXmiAMXRa1AZx0cKQ0BfM7HYCcRc
-> ssh-ed25519 NanIwQ 29upo2jTQF8Vz91yWmYCXnQW4LgYcvt1TcF/HLA5klA
eQla3EMQnRPzhd5MyDL3byPhIiio0rFFM+yesPLEtv8
-> ssh-ed25519 LtK9yQ Vx/lQ6M/wYa9483YpuCwwobNuIZjv/Sy9vl695H05BQ
qqUWRnrMYfflhcznrF2QKfODDa7vmz6Uy7fk1zSpbEE
--- xunznREPjjEVRWAmqI/4xKp/NrNk6C3B1Z+3Vjf2TL4
ˆÔm³{­œšïž¾²úz\ÀÂ,TºSS7T<0E>¤k«)úhçÙ—V—X´¶²€—¢0m»N?=ÓŸx TdÄY0²[)Û“SZš¸Ùñ:û><3E>FUÖ™~

View file

@ -1,9 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 qLT+DQ EgHCxhqEyRGiBNRBw8Cs2NmM4nihbZSEw4C3JJ2muRE -> ssh-ed25519 qLT+DQ k6AiMFgWygHRf2yPApcnQYDPaJx/Dp6BTq3+BdyBiyM
Pqnh8JpDHEvsgkJTwJzrkx/A0oBg2n7TumVCgHOceD8 64MyfaTpMcAl8o9zkWXCoZQ5uy+7izd30A90LLiALTY
-> ssh-ed25519 7+xRyQ WLCkfRiBsqZohjc+z4rs4sHFMAtsRvqiocsnUlZkAVg -> ssh-ed25519 7+xRyQ YcPcsux5lCSDbV8hSCvhkI+1qnAmXcpd5FDmT7bMXk0
ebJft8vHhi4rd9T0BOl388SKun+3vF3P6/u7U4vdy5c bbkjozzt/bL7j7uJTtgkklI/qJ11zYgQsYmZhFwGV+c
-> ssh-ed25519 LtK9yQ 8suX3vEyfqVcbNy4ZQxPRvaJg+4TJTR0cSlAgV04rzc -> ssh-ed25519 LtK9yQ Ol8eU/Pyb3gDCsIzE1zT8FNsTCGKZZc5zfX6lW/5+2w
i8cmfhsETd4Y7epbyan5ION7W2g5QazyJA3AcGlXKKI Gj0ssfpyQcy0vfVXgNXxzFzHGpPBOyfkR7UeRYina4A
--- 7jsZ4aF4WyshNUtjP83yf2yHaR1UXfWEdbHhwmfyGhM --- +iLccZwqDkqDg2atoNRSuhEf3v3fyU6oda4vOw+BuKc
&<EFBFBD>zñP Ý'ôÂØ³„¦Ìö]ã,qTõµ‹Ÿ€ºÿ„ßÚçx@l× Io.qíGT|èéˆ!=¿ŸÌ &LÝóÓ:đ 9:"‰¤<>|©· d¸m9<6D>§ĂČvń1€ďy"ŇĂvOŰYüŞĎnx=ň4D

Binary file not shown.

View file

@ -1,7 +1,7 @@
let let
# keep-sorted start # keep-sorted start
desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPHAnTQP77HQ/8nbf1oX7xftfKYtbH6MSh83wic0qdBy"; desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPHAnTQP77HQ/8nbf1oX7xftfKYtbH6MSh83wic0qdBy";
laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOeu5HwuRayiXIZE35AxX6PmxHxbXZ8NTlTgHrcPwhcQ"; laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOmM4LEjGPJbcUeG5363NpB3XJUyn/4B+eBCFzzuC/Td";
srv = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOeV0NxqIGIXXgLYE6ntkHE4PARceZBp1FTI7kKLBbk8"; srv = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOeV0NxqIGIXXgLYE6ntkHE4PARceZBp1FTI7kKLBbk8";
# keep-sorted end # keep-sorted end
@ -15,31 +15,31 @@ let
in in
{ {
# keep-sorted start # keep-sorted start
"bazarr.age".publicKeys = users; "borgbackup-offsite.age".publicKeys = users;
"borgmatic-pg.age".publicKeys = users; "borgbackup-onsite.age".publicKeys = users;
"borgmatic.age".publicKeys = users; "copyparty.age".publicKeys = users;
"copyparty-will.age".publicKeys = users; "gatus.age".publicKeys = users;
"firefly-db.age".publicKeys = users; "git_signing_key.age".publicKeys = users;
"firefly.age".publicKeys = users; "git_signing_key.pub.age".publicKeys = users;
"immich.age".publicKeys = users; "immich.age".publicKeys = users;
"jellyfin.age".publicKeys = users; "jellyfin.age".publicKeys = users;
"karakeep.age".publicKeys = users;
"kavita-api.age".publicKeys = users; "kavita-api.age".publicKeys = users;
"kavita.age".publicKeys = users; "kavita.age".publicKeys = users;
"lidarr.age".publicKeys = users; "lidarr.age".publicKeys = users;
"mealie.age".publicKeys = users;
"miniflux-creds.age".publicKeys = users; "miniflux-creds.age".publicKeys = users;
"ntfy.age".publicKeys = users;
"nzbget.age".publicKeys = users; "nzbget.age".publicKeys = users;
"paperless.age".publicKeys = users; "paperless.age".publicKeys = users;
"porkbun-api.age".publicKeys = users; "porkbun-api.age".publicKeys = users;
"protonmail-cert.age".publicKeys = users; "protonmail-cert.age".publicKeys = users;
"protonmail-desktop-password.age".publicKeys = users; "protonmail-desktop-password.age".publicKeys = users;
"protonmail-laptop-password.age".publicKeys = users;
"prowlarr.age".publicKeys = users; "prowlarr.age".publicKeys = users;
"radarr.age".publicKeys = users; "radarr.age".publicKeys = users;
"radicale.age".publicKeys = users; "radicale.age".publicKeys = users;
"readarr.age".publicKeys = users; "readarr.age".publicKeys = users;
"sonarr.age".publicKeys = users; "sonarr.age".publicKeys = users;
"upbank2firefly.age".publicKeys = users; "subtitles.age".publicKeys = users;
"vaultwarden-admin.age".publicKeys = users; "vaultwarden-admin.age".publicKeys = users;
# keep-sorted end # keep-sorted end
} }

BIN
secrets/subtitles.age Normal file

Binary file not shown.