Compare commits

..

608 commits

Author SHA1 Message Date
53cda72a1c Merge pull request 'chore(deps): update docker.io/ollama/ollama docker tag to v0.6.1' (#92) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #92
2025-03-14 21:58:27 -05:00
60117bf9bb chore(deps): update docker.io/ollama/ollama docker tag to v0.6.1 2025-03-14 20:01:57 +00:00
7962c00030 Merge pull request 'chore(deps): update docker.io/ollama/ollama docker tag to v0.6.0' (#90) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #90
2025-03-14 09:39:12 -05:00
3431eac3a5 Merge pull request 'chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.15' (#91) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #91
2025-03-14 09:39:04 -05:00
707c31d50b chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.15 2025-03-12 17:01:28 +00:00
470c5c6db2 chore(deps): update docker.io/ollama/ollama docker tag to v0.6.0 2025-03-12 01:01:31 +00:00
553a39c0dc
nvf 2025-03-11 13:25:31 -05:00
5be8330807 Merge pull request 'chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.12' (#86) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #86
2025-03-11 12:39:27 -05:00
fc17937891 Merge pull request 'chore(deps): update https://github.com/cachix/cachix-action action to v16' (#88) from renovate/https-github.com-cachix-cachix-action-16.x into main
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 2m6s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m59s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 31m33s
Reviewed-on: #88
2025-03-11 12:36:06 -05:00
1b5fe8c91c Merge pull request 'chore(deps): update ghcr.io/fallenbagel/jellyseerr docker tag to v2.5.0' (#87) from renovate/ghcr.io-fallenbagel-jellyseerr-2.x into main
Reviewed-on: #87
2025-03-11 12:35:28 -05:00
2da705ae31 Merge pull request 'chore(deps): update ghcr.io/onedr0p/plex docker tag to v1.41.5.9522-a96edc606' (#89) from renovate/ghcr.io-onedr0p-plex-1.x into main
Reviewed-on: #89
2025-03-11 12:34:32 -05:00
e2f5b239dc chore(deps): update ghcr.io/onedr0p/plex docker tag to v1.41.5.9522-a96edc606 2025-03-11 16:31:21 +00:00
a62f5b01b2 chore(deps): update ghcr.io/fallenbagel/jellyseerr docker tag to v2.5.0 2025-03-11 03:32:24 +00:00
69ae9a0473 chore(deps): update https://github.com/cachix/cachix-action action to v16 2025-03-10 19:01:29 +00:00
a5657bb002
switch shadowfax to workstation and remove sworkstation now that it's fully capable 2025-03-10 12:44:15 -05:00
a57fc1c6c5
add ghostty package
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 41s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m3s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 33m43s
2025-03-10 10:28:50 -05:00
36ab47590c chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.12 2025-03-10 03:02:22 +00:00
5c88fcde15
different service now 2025-03-09 13:15:00 -05:00
358929aafa
clean up and move acme to each host 2025-03-09 12:53:38 -05:00
96af04f592
update abbr 2025-03-09 00:41:26 -06:00
a4533ae581
update telchar sops pub key
update hosts and roll sops
2025-03-09 00:34:50 -06:00
2c57288228
enable mosh on varda 2025-03-09 00:17:28 -06:00
7b1e1b8cf4
remove cosmic substituter 2025-03-08 13:10:58 -06:00
11078a6ba0
add astro extension 2025-03-08 13:10:46 -06:00
b91da39d03
add distrobox and flake-config substituters
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m22s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m52s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 24m39s
2025-03-07 19:49:23 -06:00
7179e99f2a
enable nightly snap 2025-03-07 19:48:39 -06:00
ab200ae814
feat: add zen browser
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m40s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m56s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 22m14s
2025-03-07 06:15:01 -06:00
e6e258feeb
reformat --> alejandra 2025-03-06 09:51:33 -06:00
f4e15b7e90
update soft-serve and disable stats server
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 21s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m50s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 29m41s
vscode --> master. update extensions.
2025-03-06 09:44:07 -06:00
638158ecc5
move hardware to profile 2025-03-05 22:41:39 -06:00
62e3cd1a09
refactor: remove obsolete commented-out code 2025-03-05 13:43:48 -06:00
68cc4b8558 Merge pull request 'chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.8' (#85) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #85
2025-03-05 13:37:15 -06:00
8ab253654c
refactor: Move inputs section to bottom of flake.nix 2025-03-05 13:36:25 -06:00
b90d0361fb
aider 2025-03-05 12:53:45 -06:00
72545c1181 chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.8 2025-03-05 17:00:51 +00:00
efbf50f860
fix nvidia and ozone env var 2025-03-05 10:57:06 -06:00
a21deba5f2
move ozone var to wayland global 2025-03-05 10:35:26 -06:00
7624c21894 Merge pull request 'chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.7' (#84) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #84
2025-03-04 22:54:36 -06:00
48033142a4 chore(deps): update ghcr.io/koush/scrypted docker tag to v0.138.7 2025-03-05 04:14:13 +00:00
f20aee2353 Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.5.13' (#83) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #83
2025-03-04 21:37:46 -06:00
3a80f4d084 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.138.6' (#82) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #82
2025-03-04 21:37:28 -06:00
8f5942938e Update ghcr.io/koush/scrypted Docker tag to v0.138.6 2025-03-05 03:31:53 +00:00
68bccb1c90
Flake lock update -- all
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m16s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m59s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 38m1s
2025-03-04 17:32:42 -06:00
3025ed02f6
install themes from nixpkgs 2025-03-04 17:12:59 -06:00
d0d65ba07a chore(deps): update docker.io/ollama/ollama docker tag to v0.5.13 2025-03-04 01:30:50 +00:00
20b1998378
not needed 2025-03-03 18:58:11 -06:00
079b0858d9
hyprland and myPkg/overlay migrations 2025-03-03 17:08:24 -06:00
12dee64ccd
format 2025-03-03 17:07:42 -06:00
5c08f24307 Merge pull request 'chore(deps): update docker.io/ollama/ollama docker tag to v0.5.12' (#80) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #80
2025-03-01 07:50:59 -06:00
6e6111f5a5
correct path 2025-02-28 23:44:35 -06:00
98c0f8d201
add data dir 2025-02-28 23:38:51 -06:00
a221eca57b
add minecraft server test 2025-02-28 23:17:22 -06:00
9ba6e6ae4e
add vesktop 2025-02-28 23:17:11 -06:00
96393b4476
Cleanup db entries. 2025-02-28 22:48:27 -06:00
1f550f4019
moved my npm globals 2025-02-28 22:46:21 -06:00
6ec3873832
ah yes, gtk4 2025-02-28 22:46:07 -06:00
9155ae4cae
add nodejs, zulu open jdk, remove modrinth for now. I'll just use prism. 2025-02-28 22:45:52 -06:00
3300dd0480
fixes -- but no tls for some reason 2025-02-28 22:45:12 -06:00
60fa032842
Add modrinth v0.9.3 2025-02-28 16:57:17 -06:00
af474361ef
correct ask-pass program
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 37s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m56s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 26m31s
2025-02-28 13:57:28 -06:00
fd9c2f3d13
lots of fixes for hyprland 2025-02-28 13:17:00 -06:00
c689c4fe4a hyprland fixes and roll sops 2025-02-28 07:34:36 -06:00
aa71e5bc55 Merge pull request 'feat: hyprland module and adding telchar' (#81) from hyprland-and-telchar into main
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 2m23s
Build / nix-build (native-x86_64, telperion) (push) Successful in 7m15s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 28m46s
Reviewed-on: #81
2025-02-27 14:55:22 -06:00
21da9f6da2 feat: hyprland module and adding telchar 2025-02-27 13:59:11 -06:00
d0496de0b3
messy code deserves a one-liner doc 2025-02-25 13:03:44 -06:00
f5e45209ec
remove restic, add borgmatic.
update template

update config template

update
2025-02-25 13:03:44 -06:00
f96ed50dfa
Add 'my packages' 2025-02-24 16:14:45 -06:00
fca664b887
correct comment 2025-02-23 21:18:06 -06:00
4493b2519d
check network mount before backup - fail if disconnected 2025-02-23 20:25:53 -06:00
d3d9e0fd1a
zfs auto expand, scrub, and trim 2025-02-23 20:25:19 -06:00
95939c8b99 Update docker.io/ollama/ollama Docker tag to v0.5.12 2025-02-21 23:32:13 +00:00
c2004c61c7
add jellyseerr to containers 2025-02-20 11:31:25 -06:00
9d7fe1c0d5 Merge pull request 'Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.6' (#78) from renovate/ghcr.io-jellyfin-jellyfin-10.x into main
Reviewed-on: #78
2025-02-20 07:12:17 -06:00
d12f39bc0a Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.138.2' (#79) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #79
2025-02-20 07:12:07 -06:00
d94f172721
update radarr and arr derivation names 2025-02-19 15:52:40 -06:00
a7e673ac69
db is now optional for sonarr, radarr, and prowlarr. 2025-02-19 15:33:09 -06:00
5a11c51b33 Update ghcr.io/koush/scrypted Docker tag to v0.138.2 2025-02-18 22:02:21 +00:00
e310dbc581 Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.6 2025-02-16 22:33:10 +00:00
18274be266
update firewall, add wlr-xrandr
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 2m14s
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m53s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 31m10s
2025-02-15 18:24:14 -06:00
2bb9d5bf13
update arrs 2025-02-15 18:23:11 -06:00
fa3dd0637b Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.138.0' (#73) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #73
2025-02-14 12:03:25 -06:00
b392e37b0c Merge pull request 'Update ghcr.io/onedr0p/plex Docker tag to v1.41.4.9463-630c9f557' (#77) from renovate/ghcr.io-onedr0p-plex-1.x into main
Reviewed-on: #77
2025-02-14 12:03:09 -06:00
3f7007d88e Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.5.11' (#76) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #76
2025-02-14 12:02:54 -06:00
d9e42a4d32 Update docker.io/ollama/ollama Docker tag to v0.5.11 2025-02-14 08:03:05 +00:00
abc5c7cfd2
format and remove unused 2025-02-12 12:36:33 -06:00
50a1363b28 Update ghcr.io/onedr0p/plex Docker tag to v1.41.4.9463-630c9f557 2025-02-12 17:33:05 +00:00
9924c2e66c
enable 1pass gui and docker socket for podman 2025-02-12 09:22:47 -06:00
f69efddb53
try out alejandra and shorten bin paths 2025-02-12 09:22:47 -06:00
59ca85f8d6
dotenv and yaml not needed for nix 2025-02-12 09:20:14 -06:00
ffaeb78187
Use uwsm instead of running hyprland directly 2025-02-11 16:42:51 -06:00
04271382e1 Merge pull request 'feat: add multi-sonarr' (#75) from multi-sonarr into main
Reviewed-on: #75
2025-02-10 15:02:26 -06:00
fd800ff25d
add multi-sonarr 2025-02-10 15:01:31 -06:00
24bca63df5
cleanup 2025-02-10 12:13:09 -06:00
77d0962f1c Merge pull request 'feat: multi-radarr' (#74) from multi-radarr into main
Reviewed-on: #74
2025-02-10 11:49:52 -06:00
81ae076baf
enable radarr anime 2025-02-10 11:47:44 -06:00
b19ab0375b
reverse logic 2025-02-10 11:47:36 -06:00
5fa10d7038
update service names 2025-02-10 11:20:44 -06:00
5161eba75c
reconfig - no mkfunction 2025-02-10 11:20:38 -06:00
934af3c9b8
update flake lock -- all 2025-02-10 11:10:49 -06:00
84577eba78
update flake lock -- all
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 23s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m50s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 22m31s
2025-02-10 10:34:41 -06:00
2edb7c56ab
mkRadarrInstance 2025-02-09 23:32:13 -06:00
f02407bfca
mkRestic modifications, will add mkBorg later and use that instead. 2025-02-09 19:26:53 -06:00
4a4cce4e94
privatemounts = false is required if snap is separate from the backup service. 2025-02-09 19:24:36 -06:00
e782f7c268
to remove/rearrange files privileged is required. 2025-02-09 19:24:05 -06:00
aae3f3397e
add homekit port to scrypted/firewall 2025-02-09 19:23:31 -06:00
0d0245f850
harden sonarr, change zfs snap time 2025-02-09 19:23:16 -06:00
7fceed8568 Update ghcr.io/koush/scrypted Docker tag to v0.138.0 2025-02-05 21:33:04 +00:00
12f1164e0c
pull straight from servarr 2025-02-04 12:02:57 -06:00
de9e778a9d
update radarr 2025-02-04 11:34:33 -06:00
fee475957c
added unpackerr and pushover scripts 2025-02-04 11:18:05 -06:00
7c18be7e9a
add mnt 2025-02-04 10:42:03 -06:00
9728d8c014 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.132.0' (#72) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #72
2025-02-04 10:41:38 -06:00
4d77bcd28b Update ghcr.io/koush/scrypted Docker tag to v0.132.0 2025-02-04 16:03:11 +00:00
1e1d27b85a
add sonarr service and overlay sonarr/radarr unstable packages. 2025-02-03 16:13:03 -06:00
9041d39a77
add Radarr
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m5s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m2s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 21m25s
2025-02-03 15:07:44 -06:00
7f4bc84e9e
update firefox, vscode, nvim, and added prowlarr service config
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 21s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m48s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 33m52s
switched shadowfax to a sworkstation config from server config.
2025-02-02 16:02:02 -06:00
9c5fb62042 temp config for hyprland, sunshine, prowlarr, and re-enable vs code
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 30s
Build / nix-build (native-x86_64, telperion) (push) Failing after 1m11s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 2m20s
will move most of this to other files soon
2025-01-31 19:20:58 -06:00
9ec040c7df add kitty 2025-01-31 19:20:58 -06:00
eb78727d78 add arr/qb/sab groups if they exist 2025-01-31 19:20:58 -06:00
96da9c78ae add prowlarr overlay 2025-01-31 19:20:58 -06:00
497d4148df keep my own version updates for prowlarr 2025-01-31 19:17:31 -06:00
b6a3b644e1 reduce the amount of vs code extensions and update them 2025-01-31 19:16:46 -06:00
4388e399c5 disable precog on nvim
unless there's an easy access peek option i'll keep this disabled. It's
very jarring.
2025-01-31 19:16:04 -06:00
0764864142 add nvim and config 2025-01-29 09:35:46 -06:00
ecb833b4f9 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.130.1' (#67) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #67
2025-01-29 08:09:00 -06:00
90a4a3bffe Merge pull request 'Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.5' (#71) from renovate/ghcr.io-jellyfin-jellyfin-10.x into main
Reviewed-on: #71
2025-01-29 08:07:59 -06:00
9f7ec5d41d Update ghcr.io/koush/scrypted Docker tag to v0.130.1 2025-01-27 21:38:07 +00:00
b82793d688 Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.5 2025-01-25 19:33:19 +00:00
b10f89e54c added fd - finding files easier 2025-01-24 19:33:26 -06:00
95554bf9f0 added missing parameters 2025-01-24 19:33:08 -06:00
b79062c4ea enable snaps for sabnzbd and qbittorrent appdata 2025-01-24 19:32:45 -06:00
f1dbebd3e9 Merge pull request 'add sabnzbd' (#70) from sabnzbd into main
Reviewed-on: #70
2025-01-24 17:43:03 -06:00
5e0cd3a7ee add sabnzbd 2025-01-24 17:41:49 -06:00
debdcbfd6c gonna need that internet back thanks 2025-01-24 11:11:53 -06:00
88b2c35cb0 cleanup 2025-01-24 11:11:53 -06:00
e83d3dc743 add qbittorrent (#68)
Reviewed-on: #68
2025-01-24 10:29:19 -06:00
0c778e5994 better as inherit 2025-01-23 10:52:50 -06:00
13fd35a05f update containers
jellyfin, ollama, and scrypted
2025-01-23 10:46:55 -06:00
eed4e314a3 update lix & flake lock update -- all
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m15s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m3s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 23m23s
2025-01-23 07:53:25 -06:00
94b5cb6286 caddy nonsense 2025-01-22 18:38:53 -06:00
b7ca959d3e re-encrypt 2025-01-22 18:38:53 -06:00
1347ae0688 Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.5.5' (#64) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #64
2025-01-12 10:47:51 -06:00
f30f5e0ad5 tailscale --> caddy lb --> proxmox nodes
add caddy to global environment packages

caddy config and add Caddyfile to remove-tabs ignore

update name

proxymox
2025-01-10 23:15:41 -06:00
d0284c4028 Update docker.io/ollama/ollama Docker tag to v0.5.5 2025-01-11 02:33:00 +00:00
c5fd9f3892 open more nfs ports 2025-01-10 01:46:40 -06:00
94c05cf496 enabled ts on shadowfax and telperion
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 28s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m22s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 12m17s
2025-01-10 01:19:25 -06:00
1ade342932 unused input 2025-01-09 23:39:09 -06:00
777ad6d6a6 update settings 2025-01-09 23:38:56 -06:00
8611867708 deprecate gandalf 2025-01-09 23:38:23 -06:00
0ce2df5413 update shadowfax motd interface name 2025-01-09 23:14:31 -06:00
83cb1b7bf7 move mise to home manager 2025-01-09 23:14:11 -06:00
d8f451b410 flake lock update -- all 2025-01-09 23:13:54 -06:00
a87b6f9323 revert default, set host config for zfs snap backup 2025-01-06 06:24:06 -06:00
d441049526 debug backups 2025-01-06 00:19:43 -06:00
7115b48707 correct backup dir 2025-01-06 00:01:58 -06:00
4b81e0789a correct backup dir 2025-01-06 00:00:18 -06:00
b91bcbd9bc not needed 2025-01-04 19:21:33 -06:00
4f5c090534 snap and mount separation 2025-01-04 19:17:53 -06:00
b181efdb41 add bash lsp 2025-01-04 17:47:11 -06:00
7d2b3024ed add podman-compose 2025-01-04 17:47:11 -06:00
8561a16219 making snap-and-mount more maintainable 2025-01-04 17:47:11 -06:00
86674c4821 less snaps for nvr
monthly snap was taking up 1.5tb of nvme
2025-01-04 15:38:18 -06:00
240f1ede65 stagger after nightly snap and reduce random to 30m 2025-01-03 19:49:36 -06:00
df8ae40907 increase to 7 now that it's pushing to larger storage 2025-01-03 19:49:01 -06:00
5a09a0d8b6 stagger nightly snap after sanoid hourly 2025-01-03 19:48:40 -06:00
58457666af apparently recursive is being ignored in the template 2025-01-03 19:48:18 -06:00
6fc3a36beb unused 2025-01-03 19:47:58 -06:00
9cbf1434f9 updated forgejo dump backup location 2025-01-03 17:38:24 -06:00
46b304ceb4 add samba storagebox mount 2025-01-03 17:31:42 -06:00
4aa0b15af8 haproxy for talos k8s api 2025-01-03 11:43:29 -06:00
441bf8a0ad sops settings and format on save 2025-01-03 11:43:06 -06:00
44319f3881 open minio ports for firewall 2024-12-31 09:29:59 -06:00
267cb91ee8 static lacp bond for 10g interfaces 2024-12-29 04:12:40 -06:00
71335a95d2 updating $NIX_PATH to a correct setting 2024-12-29 04:11:57 -06:00
28ff22dbd7 add mosh, zellij, and update pre-commit 2024-12-28 15:11:42 -06:00
0c0afbeeb8 Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.5.4' (#62) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #62
2024-12-28 02:20:04 -06:00
2b6d062d16 reformat
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m13s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m23s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 4m38s
2024-12-27 21:30:25 -06:00
ada913b9c0 change nix formatters and add mise flake
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m18s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 5m50s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 12m32s
2024-12-27 13:04:19 -06:00
27fc225550 update yazi 2024-12-27 11:19:08 -06:00
403496b8e2 nix flake update -- all
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m36s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 2m7s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m31s
2024-12-27 10:26:04 -06:00
a7ffd9fddb roll sops 2024-12-27 03:28:28 -06:00
d3613a4ec4 restic backup overhaul
All checks were successful
Build / nix-build (native-x86_64, gandalf) (push) Successful in 5m3s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 5m43s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m9s
2024-12-27 03:25:38 -06:00
3beae7844f handled by the nix-index enable module 2024-12-26 15:25:21 -06:00
1ac1dc5707 excludepaths --> mkRestic, tmpfs and more options --> mkContainer 2024-12-26 12:06:59 -06:00
c0cc03fd8d services I never really used 2024-12-26 09:32:56 -06:00
8e6552e0e3 add charm skate 2024-12-23 23:56:32 -06:00
5f117ac077 add disabled module support and swapped minio module to unstable 2024-12-23 23:56:20 -06:00
026876791e minio default creds 2024-12-23 15:52:58 -06:00
0cfed884b5 add minio 2024-12-23 15:39:10 -06:00
28d955155d later ansible! 2024-12-23 15:39:02 -06:00
5ed5d31092 add 'bottom' resource monitor 2024-12-22 11:10:19 -06:00
34f4e33aa7 update talosctl to 1.9.0 2024-12-21 17:12:17 -06:00
ad6c57a909 update flack lock -- all
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m33s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 6m50s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 13m11s
2024-12-21 11:51:10 -06:00
6835de84b9 Merge pull request 'Update ghcr.io/onedr0p/plex Docker tag to v1.41.3.9314-a0bfb8370' (#63) from renovate/ghcr.io-onedr0p-plex-1.x into main
Reviewed-on: #63
2024-12-21 11:39:35 -06:00
cd23a2aa99 correct secrets and restic config 2024-12-17 22:04:18 -06:00
fd24e0bada Update ghcr.io/onedr0p/plex Docker tag to v1.41.3.9314-a0bfb8370 2024-12-17 22:33:41 +00:00
13338ab3e8 Update docker.io/ollama/ollama Docker tag to v0.5.4 2024-12-17 19:33:41 +00:00
93ba3b0b7e node exporter and netdata until it's all set up 2024-12-16 21:45:52 -06:00
3e10e6f139 no with 2024-12-16 12:31:22 -06:00
565d2631a1 ncdu dark, no dhcp on if02, update shadowfax secrets. 2024-12-16 10:21:28 -06:00
e1e9e24d40 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.123.58' (#59) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #59
2024-12-11 12:00:23 -06:00
004f7dcca5 Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.5.1' (#60) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #60
2024-12-11 12:00:15 -06:00
a353ac8685 Merge pull request 'Update ghcr.io/onedr0p/plex Docker tag to v1.41.3.9292-bc7397402' (#61) from renovate/ghcr.io-onedr0p-plex-1.x into main
Reviewed-on: #61
2024-12-11 12:00:02 -06:00
c91c78ae32 add k9s to the env 2024-12-11 11:47:11 -06:00
b660274ded Update ghcr.io/onedr0p/plex Docker tag to v1.41.3.9292-bc7397402 2024-12-11 16:33:30 +00:00
809a01820d decommission gandalf 2024-12-10 20:53:27 -06:00
c8c5d5126f add eru zpool to shadowfax 2024-12-10 20:49:18 -06:00
469ab4fa5e disable atuin up list and ctrl-r on TTYs. 2024-12-10 15:21:18 -06:00
fb72f5accb adding Hyprland again
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m53s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 8m26s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 15m8s
2024-12-10 14:26:44 -06:00
6e732b6f52 add missing dev utils 2024-12-10 14:26:11 -06:00
e7af69e5e8 added missing rules I generally like 2024-12-10 14:25:58 -06:00
4b6a2b31bb clean up 2024-12-10 14:25:37 -06:00
db3d508176 add container volumes to zfs snapshots. 2024-12-09 22:59:42 -06:00
8d6933ea47 update options for 24.11 changing soon 2024-12-09 22:59:27 -06:00
8d9bfa5fbc flake update - all
All checks were successful
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 9m29s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m40s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 48m31s
2024-12-09 20:43:41 -06:00
967f1151c5 shadowfax can deploy to varda now 2024-12-09 20:43:26 -06:00
2bdc61a61a nope 2024-12-09 20:43:07 -06:00
be9c93b33c back to nixos 2024-12-09 20:42:56 -06:00
31f44ca55a Update docker.io/ollama/ollama Docker tag to v0.5.1 2024-12-06 23:32:50 +00:00
2f3b4b8f85 Update ghcr.io/koush/scrypted Docker tag to v0.123.58 2024-12-05 20:02:57 +00:00
9a4e4eeff0
🚀 Nixpkgs 24.05 --> 24.11 🚀
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 6m42s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 23m34s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 24m59s
2024-12-03 13:21:04 -06:00
6dd240d563
Update flake lock -- all
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 6m32s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 9m39s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 21m31s
2024-12-03 09:55:38 -06:00
fecc584454
move unused container to archive 2024-12-02 23:42:55 -06:00
8a80c1b04f
add ld lib path for nvidia 2024-12-02 08:21:04 -06:00
0160c71b1e Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.4.7' (#58) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #58
2024-12-02 08:10:09 -06:00
4085d44ac2 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.123.47' (#57) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #57
2024-12-02 08:10:03 -06:00
6d719ce91e Update ghcr.io/koush/scrypted Docker tag to v0.123.47 2024-12-02 04:32:45 +00:00
4480f2023c Update docker.io/ollama/ollama Docker tag to v0.4.7 2024-11-30 23:02:40 +00:00
3194f20832 Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.4.6' (#56) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #56
2024-11-27 20:39:33 -06:00
5c40a06048 Update docker.io/ollama/ollama Docker tag to v0.4.6 2024-11-28 00:05:45 +00:00
0568faa717 Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.123.38' (#54) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #54
2024-11-26 03:54:45 -06:00
1f98f0750c Merge pull request 'Update docker.io/ollama/ollama Docker tag to v0.4.5' (#55) from renovate/docker.io-ollama-ollama-0.x into main
Reviewed-on: #55
2024-11-26 03:54:35 -06:00
56538ecf3f
mount nvidia libs and transcode dir -- works now --! 2024-11-26 03:32:55 -06:00
3270e3324a Update ghcr.io/koush/scrypted Docker tag to v0.123.38 2024-11-26 06:36:51 +00:00
2d4830dc7d Update docker.io/ollama/ollama Docker tag to v0.4.5 2024-11-26 02:01:48 +00:00
bcc1a4e028
remove vault env 2024-11-23 11:22:47 -06:00
deed097d47
added ollama and fixed pre-start command 2024-11-23 11:13:42 -06:00
7d8f5941ed
important volume added 2024-11-23 09:29:37 -06:00
7878b688bf Merge pull request 'Update ghcr.io/koush/scrypted Docker tag to v0.123.37' (#53) from renovate/ghcr.io-koush-scrypted-0.x into main
Reviewed-on: #53
2024-11-23 09:04:15 -06:00
b1af5a7367 Merge pull request 'Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.3' (#52) from renovate/ghcr.io-jellyfin-jellyfin-10.x into main
Reviewed-on: #52
2024-11-23 09:04:07 -06:00
2a2bb52729
update prestart with script 2024-11-23 09:02:56 -06:00
79cbd4b1a8
migrate plex container to manual systemd podman for nvidia device 2024-11-23 08:46:26 -06:00
7bb9b03b7f Update ghcr.io/jellyfin/jellyfin Docker tag to v10.10.3 2024-11-23 11:36:50 +00:00
b8070672ae Update ghcr.io/koush/scrypted Docker tag to v0.123.37 2024-11-23 05:33:01 +00:00
a2480da0b9
added nvidia to scrypted and jellyfin correctly
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m39s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 7m17s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 9m7s
2024-11-22 15:11:00 -06:00
6824855094
this is not how it works? 2024-11-22 11:15:01 -06:00
14975aa509
advertise & noauth for plex 2024-11-22 06:29:08 -06:00
8ef09cc9e6
until I have the right config 2024-11-21 23:11:27 -06:00
afc6e7c94c
correct podman device 2024-11-21 17:51:59 -06:00
46c4752395
add nvidia runtime 2024-11-21 17:44:51 -06:00
88f7106962
revert graphics to 24.05 style 2024-11-21 17:26:28 -06:00
d72aca1621
revert until flake is fixed 2024-11-21 17:24:31 -06:00
ee32975604
update to 24.11
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Failing after 1m34s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m50s
Build / nix-build (native-x86_64, shadowfax) (push) Failing after 6m52s
2024-11-21 17:05:38 -06:00
eafcd7412a
add plex jellyfin and scrypted 2024-11-21 17:05:29 -06:00
cd64a74160
can't do it -- needs to be static 2024-11-19 22:12:03 -06:00
81607cd8ff
change sops path 2024-11-19 21:18:13 -06:00
f40e2fbee2
add barebones plex 2024-11-19 21:11:07 -06:00
a5ce6a01dd
fedora jank 2024-11-19 18:14:25 -06:00
349e0a357b
sick of pins, will revist 2024-11-19 17:23:19 -06:00
1a9f2c8fb0 Merge pull request 'Update ghcr.io/onedr0p/plex Docker tag to v1.41.2.9200-c6bbc1b53' (#51) from renovate/ghcr.io-onedr0p-plex-1.x into main
Reviewed-on: #51
2024-11-19 16:57:36 -06:00
3558557526 Update ghcr.io/onedr0p/plex Docker tag to v1.41.2.9200-c6bbc1b53 2024-11-19 22:53:09 +00:00
b75bce55d4
working with pins 2024-11-19 16:49:06 -06:00
8a1d7312cc
exclude varda
All checks were successful
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m10s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 6m8s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 6m21s
2024-11-17 12:16:01 -06:00
da815cfd9d
pretty sure this can run here
Some checks failed
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m26s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 6m27s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 6m32s
Build / nix-build (native-x86_64, varda) (push) Failing after 3m56s
2024-11-17 11:46:02 -06:00
56ff863c44
merge version and image
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Waiting to run
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / nix-build (native-x86_64, shadowfax) (push) Has been cancelled
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
2024-11-17 11:45:24 -06:00
86e8979971
disable run on pr for now 2024-11-17 11:45:08 -06:00
7041197207
re-quote 2024-11-17 11:41:00 -06:00
2bd9739103 Merge pull request 'Migrate renovate config' (#47) from renovate/migrate-config into main
Reviewed-on: #47
2024-11-17 11:37:51 -06:00
81e8c7d28f Migrate config renovate.json5
Some checks failed
Build / nix-build (native-aarch64, varda) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, shadowfax) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telperion) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, gandalf) (pull_request) Has been cancelled
2024-11-17 17:31:56 +00:00
db998ac335
correct versioning 2024-11-17 11:03:38 -06:00
1c25671ae6
pindigests 2024-11-17 11:03:24 -06:00
30e11577c3
add json5 support 2024-11-17 11:03:08 -06:00
2428f5c26e
add plex 2024-11-17 10:41:05 -06:00
3bb3da2bca
no more laptop builds
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m32s
Build / nix-build (native-x86_64, telperion) (push) Successful in 7m31s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 27m9s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 30m38s
2024-11-15 17:06:12 -06:00
f810f59dfd
update flake lock -- all
Some checks failed
Build / nix-build (native-x86_64, telperion) (push) Waiting to run
Build / nix-build (native-x86_64, shadowfax) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-aarch64, varda) (push) Has been cancelled
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
2024-11-15 17:05:10 -06:00
512cf903fe
removing desktop systems and des 2024-11-15 16:42:57 -06:00
47f83ce397
xpipe things 2024-11-15 15:14:46 -06:00
2685edcd90
update devices and folders 2024-11-09 05:12:12 -06:00
5bf9930b16
ignore sync conflicts and reconfigure syncthing settings 2024-11-07 22:23:47 -06:00
98378ae285
add addresses 2024-11-07 20:34:26 -06:00
b20e4ad7b8
add syncthing 2024-11-07 20:24:27 -06:00
c7ffd8c186
add unstable sops 2024-11-07 17:01:21 -06:00
bdc2adde49
shell.nix unstable plz 2024-11-07 16:58:46 -06:00
b3f68b7c65
format 2024-11-07 16:25:56 -06:00
e2c667dbc2
update talosctl to v1.8.2 2024-11-06 08:01:44 -06:00
4388e7398c
newer, less bugs 2024-11-06 07:58:12 -06:00
2f6ad4b034
enable manual build.
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m15s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 6m55s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 7m22s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m40s
Build / nix-build (native-x86_64, telchar) (push) Successful in 14m6s
2024-11-05 09:40:09 -06:00
043b262fb2
removed peazip and tailspin due to compilation errors. 2024-11-05 09:36:41 -06:00
2e4b3fd545
update flake lock - all
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 2m24s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 6m11s
Build / nix-build (native-x86_64, telchar) (push) Failing after 6m32s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 7m48s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m45s
2024-11-05 09:18:16 -06:00
64083f9b41
fractal build was freezing my system and I need go-task unstable. 2024-11-05 09:15:37 -06:00
523c20d15f
nix flake update -- all
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 2m33s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 5m1s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 5m48s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m41s
Build / nix-build (native-x86_64, telchar) (push) Failing after 23m8s
2024-10-31 07:04:25 -05:00
3e90ceb22a
update nil settings and add glow 2024-10-31 07:03:33 -05:00
9b2de6d03c
update mods 2024-10-28 20:44:49 -05:00
e1580d7368
correct directory 2024-10-28 20:38:22 -05:00
92387ffb7d
enable pika backup separately if needed. 2024-10-28 20:37:03 -05:00
d9bcb76ed1
move pika backup to gnome only 2024-10-28 20:33:38 -05:00
0fa68032eb
add vorta to kde, pika is not working well on kde. 2024-10-28 16:33:27 -05:00
71f2e67c9c
move xpipe to env 2024-10-28 16:33:09 -05:00
42b1b5f23d
remove passed-through nix 2024-10-28 15:46:35 -05:00
a3317ff76c
swap nics 2024-10-28 15:35:44 -05:00
9b0e464862
only environment that can support VISUAL is my laptop. 2024-10-28 15:35:23 -05:00
22b9a24582
remove with lib and add neochat to kde 2024-10-28 14:10:57 -05:00
d20524b42e
flake lock update -- all
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 8m3s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 20m9s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m25s
Build / nix-build (native-x86_64, telchar) (push) Successful in 10m3s
Build / nix-build (native-x86_64, gandalf) (push) Failing after 3h6m37s
2024-10-28 13:40:46 -05:00
17ac35e4af
change to nixfmt-rfcstyle and nixd 2024-10-23 21:07:12 -05:00
0607896460
remove with and explicitly set what needs to be set in config. 2024-10-23 21:06:20 -05:00
a27cac9e4b
re-arrange and add zfs exporter 2024-10-23 13:51:14 -05:00
ea716bd3a6
re-arrange and add zfs exporter 2024-10-21 17:07:48 -05:00
8270ec8689
update flake lock -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m22s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 5m21s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 6m25s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m39s
Build / nix-build (native-x86_64, telchar) (push) Successful in 12m39s
2024-10-21 16:53:49 -05:00
5f7eb91a30
add rook ceph version shortcut 2024-10-18 18:01:06 -05:00
d9f929f136
remove unused overlays 2024-10-18 08:02:10 -05:00
fb2a0df0a8
latest tauri for yaak 2024-10-17 21:43:46 -05:00
02cba3f46e
update talos to unstable branch for latest go to compile 2024-10-17 21:42:16 -05:00
d5d2a7c888
remote lego-auto for gandalf 2024-10-15 15:51:25 -05:00
456c5b41cc
add ignore paths for renovate 2024-10-15 06:08:46 -05:00
29a3cca668
add hadolint 2024-10-14 13:51:03 -05:00
77dac5900f
flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m16s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 4m26s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 4m28s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m36s
Build / nix-build (native-x86_64, telchar) (push) Successful in 9m54s
2024-10-14 09:11:21 -05:00
e5afb75b16
archive unifi 2024-10-14 09:08:48 -05:00
b029979750
update talosctl to v1.8.1 with full overlay in unstable.talosctl 2024-10-11 12:52:32 -05:00
9034a3b46a
update talosctl to v1.8.1 2024-10-11 12:13:16 -05:00
6a9a49ec90
Update talosctl to v1.8.1. Making overlay default.nix a bit more readable. 2024-10-11 12:12:09 -05:00
db4527f078
replace faulty disk 2024-10-11 07:08:28 -05:00
958416516d
add cyme - lsusb rust based pretty replacement 2024-10-10 14:03:18 -05:00
650354860b
added SSH_ASKPASS_REQUIRE='prefer' so I don't have to enter my ssh passwords. 2024-10-10 10:30:37 -05:00
9df6969208
setting to unstable for latest version 2024-10-10 10:30:05 -05:00
7948141205
updated github copilot chat 2024-10-10 10:29:35 -05:00
da0bcdd5c8
update server properties 2024-10-09 16:01:39 -05:00
b313ab8e1c
add minecraft group to main user 2024-10-09 15:33:24 -05:00
88fd5146f0
add common minecraft server overlays and basic paper minecraft server. 2024-10-09 15:17:48 -05:00
78acd1ba12
nix-minecraft follows unstable
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m9s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m7s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m52s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m19s
Build / nix-build (native-x86_64, telchar) (push) Successful in 7m15s
2024-10-09 15:06:45 -05:00
744ff0da9c
add tmux 2024-10-09 14:19:30 -05:00
952b693232
flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m39s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m31s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m36s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m22s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m49s
2024-10-09 13:35:28 -05:00
5435dc5f6f
add nix-minecraft for easy server management 2024-10-09 13:35:18 -05:00
a0853e5f4c
remove vault and add openjdk-latest. 2024-10-09 13:34:45 -05:00
ebdbb2226c
add steam 2024-10-09 12:06:31 -05:00
9024408339
this makes a lot more sense lol 2024-10-08 05:04:08 -05:00
3a52632639
update coder to 2.16, added error handling for nvd diff when only one configuration is present. 2024-10-07 09:42:17 -05:00
4ce1c332af
flake lock update - all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m37s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m32s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m33s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m36s
Build / nix-build (native-x86_64, telchar) (push) Successful in 7m5s
2024-10-07 00:20:07 -05:00
8cb6d26c6e
add wireshark and xpipe 2024-10-07 00:19:51 -05:00
0b31da963f
flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m26s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m30s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m38s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m24s
Build / nix-build (native-x86_64, telchar) (push) Successful in 7m43s
2024-10-03 07:05:21 -05:00
17c7b18b9a
removed a domain 2024-10-01 18:47:12 -05:00
7863212362
adding fish integration for ghostty 2024-10-01 08:14:57 -05:00
75294398ac
add ghostty integration script 2024-10-01 07:00:55 -05:00
d2047078c1
fix cleanup backup script 2024-10-01 06:47:28 -05:00
225a716c48
correct method 2024-09-30 23:44:33 -05:00
989aac1f72
flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m21s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 4m52s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 5m4s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m50s
Build / nix-build (native-x86_64, telchar) (push) Successful in 7m45s
2024-09-30 13:35:22 -05:00
d39984b1a2
nice gui for flatpak updates 2024-09-30 13:35:02 -05:00
96ba822505
this overlay isn't working anyway. 2024-09-30 12:59:00 -05:00
643e38cb1f
enable pam integration for kwallet for my user 2024-09-26 09:39:46 -05:00
00494736d1
prune backups older than 3 days 2024-09-26 09:39:21 -05:00
eb182bb1e7
revert from unstable, doesn't run. 2024-09-25 19:09:54 -05:00
cc7d16d9fb
add sound to kde 2024-09-25 19:09:22 -05:00
d4d6c4794b
add proper overrides for proprietary codecs 2024-09-25 18:52:29 -05:00
8233c45aee
add flameshot and qt5 for compatibility 2024-09-25 18:08:20 -05:00
4d72c390e2
add flameshot to kde since it works there
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 10m36s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 25m46s
Build / nix-build (native-x86_64, telchar) (push) Successful in 26m28s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 27m35s
Build / nix-build (native-x86_64, telperion) (push) Successful in 7m3s
2024-09-25 17:18:50 -05:00
7d64f9a3ba
add kde module, remove cosmic defs. 2024-09-24 13:36:57 -05:00
5dbb043b5c
use flatpak version of vesktop to solve gpu issues. 2024-09-23 21:11:51 -05:00
e1899769ff
moved gnome to a host choice, not a profile choice. Added cosmic flake to check it out.
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m50s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m12s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m16s
Build / nix-build (native-x86_64, telperion) (push) Successful in 1m52s
Build / nix-build (native-x86_64, telchar) (push) Successful in 5m27s
2024-09-23 20:31:12 -05:00
4fb1431e83
vscode workspace settings and 2 extra extensions 2024-09-23 18:56:09 -05:00
e24f915f9c
smartctl workaround addition of scheduled tests 2024-09-20 09:13:22 -05:00
dde35a1451
move python extension to manual build. 2024-09-18 21:55:27 -05:00
31bded56bf
re-encrypt -- switch to btrfs for telchar -- turn off auto brightness. 2024-09-18 20:52:53 -05:00
3da0a1cb52
update telchar disk settings to btrfs 2024-09-18 12:47:54 -05:00
0672564dbe
flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m58s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m20s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m37s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m6s
Build / nix-build (native-x86_64, telchar) (push) Successful in 5m56s
2024-09-18 12:00:19 -05:00
425ae752fb
update zones for jahanson.tech 2024-09-17 12:30:23 -05:00
887dc26471
add helix and enable flatpaks 2024-09-17 09:59:40 -05:00
ce52589504
enable smartctl short and long tests on a schedule 2024-09-16 23:51:16 -05:00
e22584dd0c
update flake lock -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 7m52s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 8m57s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 5m18s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m20s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m50s
2024-09-16 23:19:14 -05:00
122bba2974
disable glances 2024-09-16 23:16:57 -05:00
164a365ec0
removed two hosts, added glances, and disabled loading of nvidia module. 2024-09-16 23:00:44 -05:00
d9c1439c2f
Flake lock update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 6m37s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 8m51s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 10m7s
Build / nix-build (native-x86_64, telperion) (push) Successful in 6m39s
Build / nix-build (native-x86_64, telchar) (push) Successful in 10m37s
2024-09-16 07:01:32 -05:00
1918c984d5
removing flameshot -- can't get it to work on wayland 2024-09-15 20:27:54 -05:00
ff63e8b393
flameshot fix and remove vivaldi overlay 2024-09-15 20:05:52 -05:00
bfb6a8aef6
upgrading forgejo to v8 2024-09-15 10:49:44 -05:00
75e2605c64
add rust plugins & update copilot chat for vscode 1.93 2024-09-15 10:49:19 -05:00
95585249e0
update vs code community extensions
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m43s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m0s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 3m7s
Build / nix-build (native-x86_64, telperion) (push) Successful in 1m57s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m10s
2024-09-15 00:11:21 -05:00
c5fe8aebe2
added coder-remote extension 2024-09-14 23:34:17 -05:00
98ac76def8
add rust rover & coder --> 1.15.0 overlay 2024-09-14 23:12:09 -05:00
d2e782d7fe
enable soft-serve server on shadowfax 2024-09-14 18:43:15 -05:00
fd7e98aa15
fix templates 2024-09-14 17:32:11 -05:00
9e21298f1d
add soft-serve 2024-09-14 16:25:15 -05:00
e77929c6c7
add jo and move around packages 2024-09-14 10:13:12 -05:00
9d17daffaa Merge pull request 'update flake - all' (#44) from update-flake-all into main
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m41s
Build / nix-build (native-x86_64, shadowfax) (push) Successful in 2m39s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m20s
Build / nix-build (native-x86_64, telperion) (push) Successful in 1m50s
Build / nix-build (native-x86_64, telchar) (push) Successful in 5m28s
Reviewed-on: #44
2024-09-13 21:47:57 -05:00
f31d7e4807 Merge pull request 'Update dependency goofball222/unifi to v8.4.62' (#43) from renovate/goofball222-unifi-8.x into main
Reviewed-on: #43
2024-09-13 21:07:37 -05:00
f048c10c55
re-building build action
All checks were successful
Build / nix-build (native-x86_64, gandalf) (pull_request) Successful in 2m54s
Build / nix-build (native-x86_64, telperion) (pull_request) Successful in 1m56s
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 6m49s
Build / nix-build (native-x86_64, shadowfax) (pull_request) Successful in 8m28s
Build / nix-build (native-x86_64, telchar) (pull_request) Successful in 13m21s
2024-09-13 21:03:15 -05:00
a0fdeaebf8
remove ghostty from flake -- installing in profile.
Some checks failed
Build / nix-build (native-x86_64, telchar) (pull_request) Failing after 1m34s
Build / nix-build (native-x86_64, gandalf) (pull_request) Failing after 3m38s
Build / nix-build (native-x86_64, telperion) (pull_request) Failing after 7m12s
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 7m34s
Build / Nix Build Successful (pull_request) Successful in 3s
2024-09-13 20:54:29 -05:00
b2735d6a07
update flake - all
Some checks failed
Build / nix-build (native-x86_64, telchar) (pull_request) Failing after 1m0s
Build / nix-build (native-x86_64, telperion) (pull_request) Failing after 7m35s
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 7m46s
Build / nix-build (native-x86_64, gandalf) (pull_request) Failing after 12m52s
Build / Nix Build Successful (pull_request) Successful in 3s
2024-09-13 20:21:26 -05:00
94bc017286
sting no longer exists 2024-09-13 14:15:47 -05:00
400b24cc85
Sting no longer exists. 2024-09-13 14:15:12 -05:00
c8a48c0f09
update 2024-09-13 14:11:44 -05:00
589bbbe440
add 1pw cli to shadowfax 2024-09-13 14:10:17 -05:00
3ac0bdcf4b
bump 2024-09-12 16:25:33 -05:00
cfb501db29
the previous url was incorrectly formatted to retrieve a more up to date file 2024-09-12 16:09:12 -05:00
403e57f9ad
update smartctl db to 5607 to fix nvme issue https://www.smartmontools.org/ticket/1741 2024-09-12 15:38:12 -05:00
d4b7f2fcb0
update smartmontools drive DB to RELEASE_7_4 2024-09-12 15:01:28 -05:00
cb6c8e8ba2
adding new zpool to smartd/import at boot 2024-09-12 13:33:08 -05:00
0854af3f80
import moria at boot 2024-09-12 13:15:23 -05:00
8f841bba81
remove passed through nic from motd 2024-09-12 12:21:05 -05:00
78c78653ef
add yt-dlp 2024-09-12 12:09:01 -05:00
65805355e0
add shadowfax and gandalf keys 2024-09-12 10:40:00 -05:00
ccb32a88e0
time to officially add /that/ system user 2024-09-12 10:16:24 -05:00
8bc8a49383
add ncdu 2024-09-12 09:24:56 -05:00
7039b1be26
update to allow indexing other repos for krew packages. 2024-09-11 18:41:26 -05:00
9d9b370215
testing new index feature for krewfile 2024-09-11 16:17:12 -05:00
f0fa47639b
added vault server module mvp
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 1m48s
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / Nix Build Successful (push) Has been cancelled
2024-09-11 16:15:18 -05:00
5e64eb0901 Update dependency goofball222/unifi to v8.4.62
Some checks failed
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 2m7s
Build / nix-build (native-x86_64, gandalf) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telchar) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telperion) (pull_request) Has been cancelled
Build / Nix Build Successful (pull_request) Has been cancelled
2024-09-11 18:02:53 +00:00
6c07f5ad50
final fix for fingerprint sensor. UDEV creates a symlink nto /dev/fingerprint_sensor whenever it's attached now. 2024-09-10 14:36:02 -05:00
6c8f89cd50
add hashicorp vault 2024-09-10 13:43:35 -05:00
dc09b422bb
replace discord with vesktop 2024-09-10 13:28:27 -05:00
9771c27cb3
move around krewfile 2024-09-10 13:27:42 -05:00
3fc3bdd27e
add vesktop (vencord desktop) 2024-09-10 09:45:55 -05:00
f14534fa93
usb changed again... 2024-09-10 09:41:04 -05:00
aa8cf61d10
charmbracelet mess around, added fish plugin to vscode, and reverted krewfile flake now that change is merged.
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 2m3s
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / Nix Build Successful (push) Has been cancelled
2024-09-09 22:24:26 -05:00
45dd700d6a
krewfile needs kubectl on a system level, not just imported in my shells. 2024-09-08 19:11:12 -05:00
8af6904499
add krewfile to manage krew and its plugins
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 7m3s
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / Nix Build Successful (push) Has been cancelled
2024-09-08 18:20:56 -05:00
d865c71e4e
fun with charmbracelet/gum in scripts 2024-09-08 18:11:57 -05:00
c9062c11b9
work with nixpkgs base overlay 2024-09-08 18:07:54 -05:00
a25ec4ae25
added utility script to find correct usb device for the fingerprint reader. 2024-09-08 18:02:17 -05:00
eb2f4aed00
move into folder 2024-09-08 18:00:38 -05:00
a39c41ce90
+comments 2024-09-08 17:58:53 -05:00
87c74d3f0b
added charmbracelet/mods 2024-09-08 17:57:20 -05:00
376dbda242
Fixed a couple of issues and the usb bus changed for the fingerprint sensor? 2024-09-08 15:47:13 -05:00
4bc5176a5c
re-enable smartd 2024-09-07 06:51:09 -05:00
eb5aaede5d
add nvme-cli and smartmontools to all systems 2024-09-07 06:45:39 -05:00
5ccdeaa97b
add smartd 2024-09-07 06:14:26 -05:00
f13bf26c16
add todo 2024-09-07 06:00:42 -05:00
b3ac1e27ef
full path :| 2024-09-07 05:44:35 -05:00
f12517b1a1
add scrutiny to shadowfax 2024-09-07 05:40:58 -05:00
cbfd905378 add port option 2024-09-06 20:59:41 -05:00
52fccdd546 requires lowercase.............. 2024-09-06 20:32:36 -05:00
1818f85bdc add scrutiny module and added it to gandalf 2024-09-06 20:26:11 -05:00
92175a2020
move termius around 2024-09-06 15:38:36 -05:00
6cad7b6179 disable nft for now 2024-09-06 15:34:57 -05:00
03f5e38020 Merge pull request 'Update dependency goofball222/unifi to v8.4.59' (#42) from renovate/goofball222-unifi-8.x into main
Reviewed-on: #42
2024-09-05 23:17:01 -05:00
e5714f305a
add sri script for easy updates
TODO: Make this a nix common-updater script.
2024-09-05 21:42:01 -05:00
617822c63e
Add full termius overlay and clean up 2024-09-05 21:11:36 -05:00
7a1b0796aa
update prettier config && format renovate 2024-09-05 16:22:46 -05:00
8822d30545
moved flameshot and datagrip to unstable 2024-09-05 15:26:23 -05:00
b69c3c32e0
add vs code snippets for nix modules 2024-09-05 15:25:16 -05:00
3a1eb9d320
Vivaldi overlay for v6.9
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 2m31s
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / Nix Build Successful (push) Has been cancelled
2024-09-05 14:25:02 -05:00
f983137f11
flake lock -- update all 2024-09-05 13:51:42 -05:00
e2ec473deb
no .idea 2024-09-05 12:19:44 -05:00
ec1def89ae Update dependency goofball222/unifi to v8.4.59
Some checks failed
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 2m20s
Build / nix-build (native-x86_64, gandalf) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telchar) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telperion) (pull_request) Has been cancelled
Build / Nix Build Successful (pull_request) Has been cancelled
2024-09-05 10:46:55 +00:00
519af2b5df
copy pasta -- intel --> amd 2024-09-04 22:09:43 -05:00
bff2c45694
update talosctl & termius 2024-09-04 20:43:50 -05:00
034964b3da Merge pull request 'incus preseed' (#41) from incus-preseed into main
Reviewed-on: #41
2024-09-04 16:37:55 -05:00
5f40891320
incus preseed
Some checks failed
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 2m17s
Build / nix-build (native-x86_64, gandalf) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telchar) (pull_request) Has been cancelled
Build / nix-build (native-x86_64, telperion) (pull_request) Has been cancelled
Build / Nix Build Successful (pull_request) Has been cancelled
moving configuration to module option to allow for multiple hosts to use
the same module.
2024-09-04 16:36:43 -05:00
6414b1cd49
update ghostty
Some checks are pending
Build / nix-build (native-x86_64, gandalf) (push) Waiting to run
Build / nix-build (native-x86_64, telchar) (push) Waiting to run
Build / nix-build (native-x86_64, telperion) (push) Waiting to run
Build / Nix Build Successful (push) Blocked by required conditions
Build / nix-build (native-aarch64, varda) (push) Successful in 2m11s
2024-09-04 14:15:01 -05:00
aa8e22ffae
zfs pool config 2024-09-04 14:14:51 -05:00
4b2667b061
adding shadowfax to sops 2024-09-04 09:53:52 -05:00
716c6fd033
update all -- flake lock
Some checks are pending
Build / nix-build (native-x86_64, gandalf) (push) Waiting to run
Build / nix-build (native-x86_64, telchar) (push) Waiting to run
Build / nix-build (native-x86_64, telperion) (push) Waiting to run
Build / Nix Build Successful (push) Blocked by required conditions
Build / nix-build (native-aarch64, varda) (push) Successful in 2m25s
2024-09-04 09:47:26 -05:00
62077f5f42
force it 2024-09-03 23:09:25 -05:00
37c9dcfa99
debug 2024-09-03 23:02:37 -05:00
5e29ab2602
update disko disk import. 2024-09-03 22:33:45 -05:00
0cf24b2cff
more configuration for shadowfax. 2024-09-03 21:46:29 -05:00
0e304182af
Add Shadowfax 2024-09-03 20:56:49 -05:00
2e9baab4d5 moved nftables config to host 2024-09-03 02:09:49 -05:00
e46a35741d added lshw 2024-09-03 02:09:18 -05:00
22bc5a050a update flake lock
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 8s
Build / nix-build (native-x86_64, gandalf) (push) Has been cancelled
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
Build / nix-build (native-x86_64, telperion) (push) Has been cancelled
Build / Nix Build Successful (push) Has been cancelled
2024-09-02 22:24:52 -05:00
3ef0ddcdfd
update vs code extensions
Some checks failed
Build / nix-build (native-x86_64, gandalf) (push) Waiting to run
Build / nix-build (native-x86_64, telchar) (push) Waiting to run
Build / nix-build (native-x86_64, telperion) (push) Waiting to run
Build / Nix Build Successful (push) Blocked by required conditions
Build / nix-build (native-aarch64, varda) (push) Failing after 18s
2024-09-02 22:20:31 -05:00
937658e50e
remove unifi borg backup since i've moved to a UDM SE 2024-09-02 22:20:17 -05:00
d5ee300cc9
update hass in zonefile 2024-09-02 22:19:45 -05:00
836a67c483
add go-task extension 2024-09-02 22:17:48 -05:00
1e29882c46 resolve incus merge conflict 2024-09-01 16:43:08 -05:00
81847253a0 add incus 2024-09-01 16:41:26 -05:00
eb7fdfc327
disable unifi 2024-09-01 16:00:08 -05:00
df5ab2da4e
update lockfile
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m46s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 4m5s
Build / nix-build (native-x86_64, telchar) (push) Successful in 15m23s
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m49s
Build / Nix Build Successful (push) Successful in 18s
2024-08-30 21:53:44 -05:00
9e7e6cfb4f
Disable firewall until I can fix tftp port issue 2024-08-25 17:57:11 -05:00
c6dda629ec
update node names 2024-08-25 17:00:53 -05:00
a47bdd2e9e
update master endpoints for second cluster 2024-08-25 16:53:39 -05:00
d702866d03
open tftp port 2024-08-25 11:15:02 -05:00
c3eb1261f3
talbox config 2024-08-25 10:32:55 -05:00
3a616b0eb9
update ghostty
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 7m29s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 12m22s
Build / nix-build (native-x86_64, telchar) (push) Failing after 2h27m40s
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m49s
Build / Nix Build Successful (push) Successful in 4s
2024-08-25 10:31:43 -05:00
5d78b21856
update bind -- hass 2024-08-24 12:55:00 -05:00
14461cf4ac
update file pattern for sops secrets pre-commit 2024-08-24 12:53:24 -05:00
01229ae62e
update vs code extensions, nixpkgs & unstable.
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 9m0s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 14m7s
Build / nix-build (native-x86_64, telchar) (push) Failing after 34m22s
Build / nix-build (native-x86_64, telperion) (push) Successful in 9m22s
Build / Nix Build Successful (push) Successful in 20s
2024-08-24 09:15:34 -05:00
66451254f9
add astro extension
Some checks failed
Build / nix-build (native-x86_64, telperion) (push) Waiting to run
Build / Nix Build Successful (push) Blocked by required conditions
Build / nix-build (native-aarch64, varda) (push) Successful in 1m47s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 2m25s
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
2024-08-24 09:12:55 -05:00
f36cce2196
update vscode flake 2024-08-21 17:48:15 -05:00
6425eaaf71
Update vs code ext 2024-08-21 17:45:43 -05:00
f22600ae5f
temp overlay 2024-08-21 16:36:33 -05:00
abd448c981
reorganize overlays 2024-08-21 16:35:31 -05:00
3a88ed008a
add nginx conf highligher/formatter 2024-08-21 16:29:58 -05:00
4951ad863f
add several dev packages and tidal 2024-08-21 16:29:37 -05:00
20ef6f5b90
update flake lock
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 1m49s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 8m8s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m31s
Build / nix-build (native-x86_64, telchar) (push) Failing after 23m22s
Build / Nix Build Successful (push) Has been cancelled
2024-08-21 02:22:34 -05:00
45d76d4f0f
add shfmt, reorganize. 2024-08-17 21:16:09 -05:00
800c102ea3
Ensure paths exist. 2024-08-17 18:02:06 -05:00
ccfed67fc0
correct package 2024-08-17 12:35:50 -05:00
e55e715ebe
override any alias used for ls 2024-08-16 21:50:57 -05:00
90e04807bd
update vscode-extensions
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m54s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 2m32s
Build / nix-build (native-x86_64, telchar) (push) Successful in 11m9s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m44s
Build / Nix Build Successful (push) Successful in 3s
2024-08-16 19:59:37 -05:00
1a68117923
update nixpkgs & unstable
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m47s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 2m23s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m19s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m13s
Build / Nix Build Successful (push) Successful in 3s
2024-08-16 19:29:47 -05:00
7e2c3bc4cf
remove pr for now
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m47s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 2m22s
Build / nix-build (native-x86_64, telchar) (push) Successful in 5m23s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m13s
Build / Nix Build Successful (push) Successful in 3s
2024-08-16 17:15:45 -05:00
a1b0dc1b63
remote detsys flake-lock-update 2024-08-16 17:13:19 -05:00
fcf6495865
re-enable internal field and bump
Some checks failed
update-flake-lock / lockfile (push) Failing after 1m38s
2024-08-16 17:09:24 -05:00
4bb8e156a5
re-enable nightly cron
Some checks failed
update-flake-lock / lockfile (push) Failing after 44s
2024-08-16 17:07:26 -05:00
8c6bdfe677
missing some files 2024-08-16 17:05:46 -05:00
2b5c0e4a3f
Host the action so I can change the third party action urls.
Some checks failed
update-flake-lock / lockfile (push) Failing after 20s
2024-08-16 17:01:49 -05:00
5dfda7fca4
debug
Some checks failed
update-flake-lock / lockfile (push) Failing after 2m0s
2024-08-13 19:16:48 -05:00
593601a022
debug
Some checks failed
update-flake-lock / lockfile (push) Failing after 5s
2024-08-13 19:15:54 -05:00
730774dd24
debug
Some checks failed
update-flake-lock / lockfile (push) Failing after 8s
2024-08-13 19:11:35 -05:00
b307534521
useless! 2024-08-13 11:46:29 -05:00
6fbf5d520d
re-pinning lix stable
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m44s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 7m49s
Build / nix-build (native-x86_64, telperion) (push) Successful in 4m0s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m6s
Build / Nix Build Successful (push) Successful in 3s
2024-08-13 11:45:19 -05:00
71e8ab5b19
re-pinning stable release 2024-08-13 11:44:09 -05:00
f62c9faf36
detsys auto flake lock updates 2024-08-13 07:37:33 -05:00
1b06ec2133
nixpkgs/unstable update
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m48s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 3m39s
Build / nix-build (native-x86_64, telchar) (push) Successful in 5m30s
Build / nix-build (native-x86_64, telperion) (push) Successful in 2m28s
Build / Nix Build Successful (push) Successful in 4s
2024-08-13 05:36:08 -05:00
2c3854acde
add tidal
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m45s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 2m28s
Build / nix-build (native-x86_64, telchar) (push) Successful in 9m24s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m38s
Build / Nix Build Successful (push) Successful in 4s
2024-08-12 00:28:32 -05:00
4ece43dbbd
update ghostty 2024-08-12 00:28:17 -05:00
74e9807bd7
already in system 2024-08-07 19:36:59 -05:00
4ac6cc4ab6
move to unstable lazygit on servers 2024-08-07 10:46:56 -05:00
80b62197bc
lazy update 2024-08-07 10:39:08 -05:00
24caeaf643
default false 2024-08-07 07:27:39 -05:00
73bd0b7d46
no de 2024-08-07 07:21:58 -05:00
89a9da926c
no de for gandalf 2024-08-07 07:20:13 -05:00
489b6a8fd1
lockfile update -- all
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 9m54s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 11m56s
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m27s
Build / nix-build (native-x86_64, telchar) (push) Successful in 9m2s
Build / Nix Build Successful (push) Successful in 3s
2024-08-06 16:25:17 -05:00
939fb731ee
update disko
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m28s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 4m37s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m12s
Build / nix-build (native-x86_64, telperion) (push) Successful in 3m8s
Build / Nix Build Successful (push) Successful in 4s
2024-08-06 15:25:24 -05:00
9d57a36ace
correct target
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 2m38s
Build / nix-build (native-x86_64, gandalf) (push) Successful in 14m47s
Build / nix-build (native-x86_64, telperion) (push) Successful in 5m40s
Build / nix-build (native-x86_64, telchar) (push) Successful in 7m5s
Build / Nix Build Successful (push) Successful in 4s
2024-08-06 10:30:54 -05:00
bd10e5685c
Lets see how well this works. 2024-08-06 10:28:17 -05:00
4291f26f4e
nolonger override shell with nixpkgs and blank overlays 2024-08-06 10:17:52 -05:00
5cb8dca3a7
pin copilot-chat, get dailies from copilot. 2024-08-06 06:35:26 -05:00
938b552353
add fractal (matrix), peazip, and solaar (logitech unifying receiver) 2024-08-05 14:14:10 -05:00
bc471dd331
change frequency to nightly as I update my flake lock automation
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 3m13s
Build / nix-build (native-x86_64, gandalf) (push) Failing after 3h5m0s
Build / nix-build (native-x86_64, telchar) (push) Failing after 43m47s
2024-08-05 14:06:30 -05:00
9b66d9cc5f
enable 1pass cli plugins. 2024-08-05 14:04:36 -05:00
285c7b9ec8
Update nixpkgs 24.05/unstable 2024-08-05 13:13:23 -05:00
706867d4e9
update lix/module 2024-08-05 11:51:15 -05:00
54b9dcf422
Add lix, dep it on lix-module. re-target main to allow flake lock to take care of versioning. 2024-08-05 11:22:24 -05:00
d932fdf1ac
Need my minimize button. 2024-08-05 11:21:25 -05:00
84b8c9c6c5
Remove lockfile maint. for mochi. 2024-08-05 08:29:43 -05:00
7191c332ac
debug nix building private repos 2024-08-05 07:20:01 -05:00
ec35a52912
Disable smart on hetzner cax 2024-08-04 06:43:38 -05:00
d7410bcb08
add smartd by default to servers 2024-08-04 06:31:08 -05:00
a487c34a49
sound apparently adds gnome, who knew. 2024-08-04 06:26:25 -05:00
dc79f4da5a
another mistake after refactor 2024-08-03 17:02:44 -05:00
cfa9bb1be3 Merge pull request 'Update dependency goofball222/unifi to v8.3.32' (#39) from renovate/goofball222-unifi-8.x into main
Reviewed-on: #39
2024-08-03 16:56:56 -05:00
d8dcc8bc92
tbsync not for my version, added minimize on close. 2024-08-03 07:16:53 -05:00
1d9bc43f72 Update dependency goofball222/unifi to v8.3.32
All checks were successful
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 7m47s
Build / nix-build (native-x86_64, telchar) (pull_request) Successful in 10m27s
2024-08-03 04:01:47 +00:00
ecc8300e1a
correct depname 2024-08-02 22:33:57 -05:00
e058ad50fa
correct depname 2024-08-02 22:11:57 -05:00
fdceabcf75
Added Thunderbird. 2024-08-02 21:43:48 -05:00
5f0e109107
correct annotation 2024-08-02 21:43:28 -05:00
f0b1b506c1
let renovate handle updates 2024-08-02 11:35:11 -05:00
77d59b9cb3
format and ini format 2024-08-01 09:23:25 -05:00
9ab4604e90
doesn't make much of a difference. 2024-08-01 09:22:09 -05:00
425f783353
add key to server for signing commits generated by forgejo 2024-08-01 09:13:23 -05:00
11625c85c0
update flake lock and add prettier and act. 2024-08-01 09:09:09 -05:00
cc9a943a04
oops 2024-07-30 19:41:21 -05:00
fb545ba987
statix 2024-07-30 18:47:59 -05:00
b6132b689e
consolidate borg programs and add pika-backup's daemon to auto-start instead of the app itself. 2024-07-30 18:02:07 -05:00
1e4e70bfa3
Add Udev rules for the framwork realtek ethernet usb so when it's unplugged the wifi turns on and when it's plugged in the wifi turns off. 2024-07-30 14:38:36 -05:00
7aae607601
reduce 2024-07-29 22:27:16 -05:00
3704b8ed80
I realize now this is a whole command 2024-07-29 18:03:33 -05:00
5ee53ce1c2
super+e home folder 2024-07-29 18:00:54 -05:00
c5751af3e6
cleanup 2024-07-29 16:09:03 -05:00
f43e5e24ec
Fixed Framework 13/16 fingerprint issue. Turns off when lid is closed to allow password entry. Turns on when lid is open. 2024-07-29 16:08:11 -05:00
8a0b92c990
remove warning 2024-07-29 13:35:06 -05:00
41810076a1
update gitleaks 2024-07-29 13:13:38 -05:00
dc8a2322fc
add vim module 2024-07-29 12:53:31 -05:00
e7352f9530
Move non-gui shell features to global. 2024-07-29 11:54:40 -05:00
69f787f991
atuind globally 2024-07-29 11:33:35 -05:00
49d8c553f8 Merge pull request 'Update docker.io/1password/connect-api Docker tag to v1.7.3' (#34) from renovate/docker.io-1password-connect-api-1.x into main
Reviewed-on: #34
2024-07-29 11:10:03 -05:00
1deacbd7dd Merge pull request 'Update docker.io/1password/connect-sync Docker tag to v1.7.3' (#35) from renovate/docker.io-1password-connect-sync-1.x into main
Reviewed-on: #35
2024-07-29 11:09:56 -05:00
ff9111a22c
Some settings adjustments. 2024-07-29 11:05:26 -05:00
65d6b2bd5a
clean up 2024-07-29 11:05:06 -05:00
b3fdd10c71 Update docker.io/1password/connect-sync Docker tag to v1.7.3
All checks were successful
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 1m31s
Build / nix-build (native-x86_64, telchar) (pull_request) Successful in 6m33s
2024-07-29 12:32:05 +00:00
4dd3ca3529 Update docker.io/1password/connect-api Docker tag to v1.7.3
All checks were successful
Build / nix-build (native-aarch64, varda) (pull_request) Successful in 1m41s
Build / nix-build (native-x86_64, telchar) (pull_request) Successful in 5m38s
2024-07-29 12:32:04 +00:00
60776e90c0
Reconfigured 1password as module to integrate with vivaldi browser and moved it to system packages. 2024-07-29 02:32:10 -05:00
3b386222aa
found another way
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m35s
Build / nix-build (native-x86_64, telchar) (push) Successful in 4m36s
2024-07-28 21:38:25 -05:00
903d9fc052
this is it
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 21:37:29 -05:00
c7dcc39138
move along, nothing to see here.
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m30s
Build / nix-build (native-x86_64, telchar) (push) Successful in 15m4s
2024-07-28 20:26:22 -05:00
5418476c30
i'm done
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 1m34s
Build / nix-build (native-x86_64, telchar) (push) Has been cancelled
2024-07-28 20:18:52 -05:00
0b1f22d1e8
get it
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Successful in 1m29s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 19:32:46 -05:00
d5c4587b18
...
Some checks failed
Build / nix-build (native-x86_64, telchar) (push) Failing after 1m3s
Build / nix-build (native-aarch64, varda) (push) Successful in 1m31s
2024-07-28 19:23:15 -05:00
841fcd3b9f
test
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 19:17:58 -05:00
9a3670fea3
one mor etime
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 19:14:20 -05:00
29779716bf
lets try this again
Some checks failed
Build / nix-build (native-x86_64, telchar) (push) Failing after 1m3s
Build / nix-build (native-aarch64, varda) (push) Successful in 1m30s
2024-07-28 19:08:40 -05:00
a5c2693469
What the heck
Some checks failed
Build / nix-build (native-x86_64, telchar) (push) Failing after 1m2s
Build / nix-build (native-aarch64, varda) (push) Successful in 1m31s
2024-07-28 19:05:41 -05:00
bd7ad0aab3
debug file output
Some checks failed
Build / nix-build (native-x86_64, telchar) (push) Failing after 1m22s
Build / nix-build (native-aarch64, varda) (push) Successful in 1m34s
2024-07-28 19:02:00 -05:00
0797ef3404
act workaround 2024-07-28 19:01:49 -05:00
f0139b2306
debugging
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 3s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 18:40:44 -05:00
aeddc80146
more action debugging
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 18:39:56 -05:00
c9a4d7848f
make file pls
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 12:52:47 -05:00
94e2fe736b
make file
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 3s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 12:48:48 -05:00
3cc2d5ce50
No dir?
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 12:45:00 -05:00
6477aa73f9
don't be dumb
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 2s
Build / nix-build (native-x86_64, telchar) (push) Failing after 4s
2024-07-28 12:43:20 -05:00
abcb730fc5
possible fix for ssh-git not downloading private repo from github
Some checks failed
Build / nix-build (native-aarch64, varda) (push) Failing after 3s
Build / nix-build (native-x86_64, telchar) (push) Failing after 3s
2024-07-28 12:40:53 -05:00
81312eed0f
Add the ability ignore messages for servers that have no state to backup that are production. 2024-07-27 16:27:50 -05:00
218d68e1c1
Statix fix 2024-07-27 14:46:16 -05:00
eb76b566f6
disable empty_pattern on statix 2024-07-27 14:45:59 -05:00
43ff961b41
Add statix, reorganize. 2024-07-27 14:36:36 -05:00
b1f0088294
adding editorconfig for consistency 2024-07-27 14:18:48 -05:00
0855f8f133
new regex parser for managing container versions with renovate 2024-07-27 14:18:12 -05:00
cc2e8bb5df
added json5 and editorconfig 2024-07-27 13:46:28 -05:00
17289fb507
nonsense 2024-07-27 13:22:48 -05:00
b31a3c940e
VSCode Extensions merged from all 3 sources. 2024-07-27 11:28:34 -05:00
dc484e3161
shells up front! 2024-07-27 10:43:38 -05:00
25f64ff651
update folders for borg 2024-07-26 23:56:41 -05:00
47dfdfcac0
Fixes for borg 2024-07-26 23:51:45 -05:00
a92b6977ca
fun times 2024-07-26 23:01:01 -05:00
77eb566667
Structure 2024-07-26 22:56:59 -05:00
e982c08023
Update structure 2024-07-26 22:56:00 -05:00
e5ea595228
brackets 2024-07-26 22:25:10 -05:00
59e0545be0
Enable Firewall 2024-07-26 21:56:54 -05:00
b014a8fc77
add secret for borg 2024-07-26 21:52:12 -05:00
fc1de07045
Add ghostty 2024-07-26 20:22:40 -05:00
21b7ca7992
on push
All checks were successful
Build / nix-build (native-aarch64, varda) (push) Successful in 1m37s
Build / nix-build (native-x86_64, telchar) (push) Successful in 6m2s
2024-07-26 20:08:36 -05:00
fe1bf6e654
lets see if this chicken nugget works 2024-07-26 20:07:25 -05:00
6a2d3b3bab
added vs-code community extensions to overlay 2024-07-26 15:24:44 -05:00
c8cd6e5c94
added server name to message with disabled backups 2024-07-26 15:24:18 -05:00
0d109aa671
This could be done better. 2024-07-26 15:24:02 -05:00
fb56d05754
disable backups for now 2024-07-26 15:23:35 -05:00
821ad26026
yeet warp-terminal, can't live without telegram. 2024-07-26 13:43:42 -05:00
220 changed files with 24467 additions and 3159 deletions

36
.archive/flake.nix Normal file
View file

@ -0,0 +1,36 @@
{
"durincore" = mkNixosConfig {
# T470 Thinkpad Intel i7-6600U
# Backup Nix dev laptop
hostname = "durincore";
system = "x86_64-linux";
hardwareModules = [
./nixos/profiles/hw-thinkpad-t470.nix
inputs.nixos-hardware.nixosModules.lenovo-thinkpad-t470s
];
profileModules = [
./nixos/profiles/role-workstation.nix
./nixos/profiles/role-dev.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix;}
];
};
"legiondary" = mkNixosConfig {
# Legion 15arh05h AMD/Nvidia Ryzen 7 4800H
# Nix dev/gaming laptop
hostname = "legiondary";
system = "x86_64-linux";
hardwareModules = [
inputs.nixos-hardware.nixosModules.lenovo-legion-15arh05h
./nixos/profiles/hw-legion-15arh05h.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko-nixos.nix {disks = ["/dev/nvme0n1"];})
];
profileModules = [
./nixos/profiles/role-dev.nix
./nixos/profiles/role-gaming.nix
./nixos/profiles/role-workstation.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix;}
];
};
}

View file

@ -1,4 +1,4 @@
{ ... }: { {...}: {
imports = [ imports = [
./gnome ./gnome
]; ];

View file

@ -0,0 +1,83 @@
# Adjusted manually from generated output of dconf2nix
# https://github.com/gvolpe/dconf2nix
{
lib,
pkgs,
osConfig,
...
}:
with lib.hm.gvariant; {
config = lib.mkIf osConfig.mySystem.de.gnome.enable {
# add user packages
home.packages = with pkgs; [
dconf2nix
];
# worked out from dconf2nix
# `dconf dump / | dconf2nix > dconf.nix`
# can also dconf watch
dconf.settings = {
"org/gnome/mutter" = {
edge-tiling = true;
workspaces-only-on-primary = false;
};
"org/gnome/settings-daemon/plugins/media-keys" = {
home = ["<Super>e"];
};
"org/gnome/desktop/wm/preferences" = {
workspace-names = [
"sys"
"talk"
"web"
"edit"
"run"
];
button-layout = "appmenu:minimize,close";
};
"org/gnome/shell" = {
disabled-extensions = [
"apps-menu@gnome-shell-extensions.gcampax.github.com"
"light-style@gnome-shell-extensions.gcampax.github.com"
"places-menu@gnome-shell-extensions.gcampax.github.com"
"drive-menu@gnome-shell-extensions.gcampax.github.com"
"window-list@gnome-shell-extensions.gcampax.github.com"
"workspace-indicator@gnome-shell-extensions.gcampax.github.com"
];
enabled-extensions = [
"appindicatorsupport@rgcjonas.gmail.com"
"caffeine@patapon.info"
"dash-to-dock@micxgx.gmail.com"
"gsconnect@andyholmes.github.io"
"Vitals@CoreCoding.com"
"sp-tray@sp-tray.esenliyim.github.com"
];
favorite-apps = [
"com.mitchellh.ghostty.desktop"
"vivaldi-stable.desktop"
"obsidian.desktop"
"code.desktop"
"vesktop.desktop"
];
};
"org/gnome/nautilus/preferences" = {
default-folder-viewer = "list-view";
};
"org/gnome/nautilus/icon-view" = {
default-zoom-level = "small";
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
"org/gnome/desktop/peripherals/touchpad" = {
tap-to-click = false;
};
"org/gnome/desktop/interface" = {
clock-format = "12h";
show-battery-percentage = true;
};
"org/gnome/settings-daemon/plugins/power" = {
ambient-enabled = false;
};
};
};
}

View file

@ -0,0 +1,51 @@
{...}: {
config = {
networking.hostId = "ad4380db";
networking.hostName = "durincore";
# Kernel mods
boot = {
initrd = {
availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
];
kernelModules = [];
};
kernelModules = ["kvm-intel"];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "rpool/root";
fsType = "zfs";
};
"/home" = {
device = "rpool/home";
fsType = "zfs";
};
"/boot" = {
device = "/dev/disk/by-uuid/F1B9-CA7C";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
};
swapDevices = [];
# System settings and services.
mySystem = {
system.motd.networkInterfaces = [
"enp0s31f6"
"wlp4s0"
];
};
};
}

View file

@ -0,0 +1,16 @@
[
"/dev/disk/by-id/ata-Seagate_IronWolfPro_ZA240NX10001-2ZH100_7TF002RA"
"/dev/disk/by-id/nvme-Samsung_SSD_960_EVO_250GB_S3ESNX0K308438J"
"/dev/disk/by-id/scsi-350000c0f02f0830c"
"/dev/disk/by-id/scsi-350000c0f01e7d190"
"/dev/disk/by-id/scsi-350000c0f01ea443c"
"/dev/disk/by-id/scsi-350000c0f01f8230c"
"/dev/disk/by-id/scsi-35000c500586e5057"
"/dev/disk/by-id/scsi-35000c500624a0ddb"
"/dev/disk/by-id/scsi-35000c500624a1a8b"
"/dev/disk/by-id/scsi-35000cca046135ad8"
"/dev/disk/by-id/scsi-35000cca04613722c"
"/dev/disk/by-id/scsi-35000cca0461810f8"
"/dev/disk/by-id/scsi-35000cca04618b930"
"/dev/disk/by-id/scsi-35000cca04618cec4"
]

View file

@ -0,0 +1,48 @@
{...}: {
config = {
"core.https_address" = "10.1.1.15:8445"; # Need quotes around key
};
networks = [
{
config = {
"ipv4.address" = "auto"; # Need quotes around key
"ipv6.address" = "auto"; # Need quotes around key
};
description = "";
name = "incusbr0";
type = "";
project = "default";
}
];
storage_pools = [
{
config = {
source = "eru/incus";
};
description = "";
name = "default";
driver = "zfs";
}
];
profiles = [
{
config = {};
description = "";
devices = {
eth0 = {
name = "eth0";
network = "incusbr0";
type = "nic";
};
root = {
path = "/";
pool = "default";
type = "disk";
};
};
name = "default";
}
];
projects = [];
cluster = null;
}

View file

@ -1,4 +1,14 @@
{ ... }: { {...}: {
global = {
"workgroup" = "WORKGROUP";
"server string" = "gandalf";
"netbios name" = "gandalf";
"security" = "user";
# note: localhost is the ipv6 localhost ::1
"hosts allow" = "0.0.0.0/0";
"guest account" = "nobody";
"map to guest" = "bad user";
};
xen = { xen = {
path = "/eru/xen-backups"; path = "/eru/xen-backups";
browseable = "yes"; browseable = "yes";

View file

@ -1,5 +1,4 @@
{ ... }: {...}: {
{
outputs = { outputs = {
# ZFS automated snapshots # ZFS automated snapshots
templates = { templates = {

View file

@ -0,0 +1,185 @@
# Do not modify this file! It was generated by 'nixos-generate-config'
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
inputs,
...
}:
# let
# sanoidConfig = import ./config/sanoid.nix { };
# disks = import ./config/disks.nix;
# smartdDevices = map (device: { inherit device; }) disks;
# in
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
inputs.disko.nixosModules.disko
(import ../../profiles/disko-nixos.nix {disks = ["/dev/sda"];})
];
boot = {
initrd = {
availableKernelModules = [
"ehci_pci"
"ahci"
"mpt3sas"
"isci"
"usbhid"
"usb_storage"
"sd_mod"
];
kernelModules = ["nfs"];
supportedFilesystems = ["nfs"];
};
kernelModules = [
"kvm-intel"
"vfio"
"vfio_iommu_type1"
"vfio_pci"
"vfio_virqfd"
];
extraModulePackages = [];
kernelParams = [
"iommu=pt"
"intel_iommu=on"
"zfs.zfs_arc_max=107374182400"
]; # 100GB
};
swapDevices = [];
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGSFTSVPt43PBpSMSF1dGTzN2JbxztDZUml7g4+PnWe CSI-Driver@talos"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBROTzSefJGJeCNUgNLbE5l4sHHg2fHUO4sCwqvP+zAd root@Gollum"
];
# Network settings
networking = {
hostName = "gandalf";
hostId = "e2fc95cd";
useDHCP = false; # needed for bridge
networkmanager.enable = true;
firewall.enable = false;
nftables.enable = false;
interfaces = {
"enp130s0f0".useDHCP = true;
"eno1".useDHCP = true;
};
};
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# VSCode Compatibility Settings
programs.nix-ld.enable = true;
services.vscode-server = {
enable = true;
};
# Home Manager
home-manager.users.jahanson = {
# Git settings
# TODO: Move to config module.
programs.git = {
enable = true;
userName = "Joseph Hanson";
userEmail = "joe@veri.dev";
extraConfig = {
core.autocrlf = "input";
init.defaultBranch = "main";
pull.rebase = true;
rebase.autoStash = true;
};
};
};
# sops
sops = {
secrets = {
"borg/repository/passphrase" = {
sopsFile = ./secrets.sops.yaml;
};
"syncthing/publicCert" = {
sopsFile = ./secrets.sops.yaml;
owner = "jahanson";
mode = "400";
restartUnits = ["syncthing.service"];
};
"syncthing/privateKey" = {
sopsFile = ./secrets.sops.yaml;
owner = "jahanson";
mode = "400";
restartUnits = ["syncthing.service"];
};
};
};
services = {
# Smart daemon for monitoring disk health.
smartd = {
# devices = smartdDevices;
# Short test every day at 2:00 AM and long test every Sunday at 4:00 AM.
defaults.monitored = "-a -o on -s (S/../.././02|L/../../7/04)";
};
# ZFS Exporter
prometheus.exporters.zfs.enable = true;
# samba = {
# enable = true;
# settings = import ./config/samba-config.nix { };
# openFirewall = true;
# };
};
# System settings and services.
mySystem = {
purpose = "Production";
system = {
motd.networkInterfaces = [
"enp130s0f0"
"eno1"
];
# Incus
# incus = {
# enable = true;
# preseed = import ./config/incus-preseed.nix { };
# webuiport = 8445;
# };
# ZFS
zfs.enable = true;
# zfs.mountPoolsAtBoot = [ "eru" ];
# NFS
nfs.enable = true;
};
services = {
libvirt-qemu.enable = true;
podman.enable = true;
# Syncthing
syncthing = {
enable = true;
user = "jahanson";
publicCertPath = config.sops.secrets."syncthing/publicCert".path;
privateKeyPath = config.sops.secrets."syncthing/privateKey".path;
};
# # Scrutiny
# scrutiny = {
# enable = true;
# devices = disks;
# extraCapabilities = [ "SYS_RAWIO" ];
# containerVolumeLocation = "/eru/containers/volumes/scrutiny";
# port = 8585;
# };
# Sanoid
# sanoid = {
# enable = true;
# inherit (sanoidConfig.outputs) templates datasets;
# };
};
};
}

View file

@ -0,0 +1,65 @@
lego:
dnsimple:
token: ENC[AES256_GCM,data:xWFVA0xhifz+odHKmGaGswT6fZ4G70clfS8AzbWnxc18JF4e75dcG6BhiA==,iv:B4pNvag4nSrw1LwL/OGyXdEcw0gZeBFBBcNzqlimjYc=,tag:ta8l7XqbQqLO+ll8Wr+mug==,type:str]
borg:
repository:
passphrase: ENC[AES256_GCM,data:qyqATupWXH5Gjx7t1660mvC1YUU=,iv:GhEbT8x5+SNXcF3b3ITk+3Dsv5PxzR56JSEufxQUBio=,tag:qWanlk8ox2uoFtyK7aiMcg==,type:str]
syncthing:
publicCert: ENC[AES256_GCM,data:q8EYRAkpwrTF8dodEH84ycDAhADLZ1uJvnArn698bueLgxtP4FHgsAHJXADtLj5/KBVJRNSBMl592wNLF9UVg0OM2b+KnMaLcVH6VHlpTQIzQBjVRjjlfU/uUfvDWXcXvfKdkS3RvDMDtR9vD3MRjdLIqjKY+7swmP2L2+WWyMXsZ3dgFvxpzH/yDekklxj8c0QVb+YJV858nNPvTKc8wkbcovsQiIQICmHhxAVU3Y51pjFXYTDaMGS/RkL47JYjYDpkCdetqe0R1wePlz5t7wbNSlg1u9d4xVtcW3yoqLErBI4ArleA/PPNflSzpx6WVLYXZ9T0BzYvDObt5VfpZ7zhNBTzXD0cvQZKyUWD6yY17JcJ+zQQiQqajSnhg8Iv4E/rwy0pRUM+YCBX2D7SiLpnlqYvHHAT8zMHpq0x/iw0t6h4ypxVVr9MU2LxfFxTbfgabJB94nxr/lk0/ONGq+gCxf3K0NOW5n6IDCB3o75KIqIG631E7F6WK2EmXF4KgS8EQEJVWWj4GKcB5dKGI+/jz3MUB4JXVLhME3X3ReDQbkZjr2OmIs6KbxuxWR5TSEj5G/sTXRxpqdKkE/aVfQMYoj7LCP4+HdM6NGP+irOSMSSC4PoHJPYtVDLluNKE+K/4w1MUK0m6EzdNrfHggY/0oS7UF5VCLrHZCNkI7CAIyVoR0A3kOMYhWjwIxDoQCSA1E/kJqYaB0dChL451xXKjvMkPQajZHK9kU/tRTcaAFgAwdLR8SYDpvN7eb1Zf6Cc4g0qP7BKA4FIqBjS+0bNobgO6oiH4TmsmIseLvevnhT0nRu3t/Lmuf2nFxAOlXyvHEp/6ulMIY+aOVcLRpi/5UjbL4rQTddHS0Y/54ofZcnD/yXiUafJAYzk/vmM3RTCj1qzmT8olw2n092LiQ7SjCIIs5PAIqWsq0O/YnyJlE7t83UcfES23DrLjc7ewcskSqG3GsPVp6qCz7/9nFgS7Sr6yHRMKGTCHSzGVlxXP4bHsDfe+DZc0R9ll67AjfErLDVlrwHOo2dpiXWcZD0Rs86h0dVCYSUE=,iv:0b7Jpbp4AXt7ngAZo5J5Fah8LByfmBRJwXQiGU5E0aY=,tag:he2qKsX5ne7tMRyc1EVFGw==,type:str]
privateKey: ENC[AES256_GCM,data:2BzXadahdEIAyllwmBLYeiNciPaQ0Ds/MJ450hX361SzNOkSsV/Wpbhr1plG6MyTc72BmD8C++5hlSCrD1O3C8mpKFNKV7om7NEJ36DSnpHlKFwmTvoQQw7cscBpZokWlgBlsRbbnrWWaac+k9tQp2pOfPscwKWMkULxR/59TsvLO5b0tZp8G5uL+Ah00x0eVtqqE/o2mQ7YpH80sgv3qHGKImyflMugvd8CKm6R2pYEN6K3Aw+N8ReVSoKXu7oaoxutHzLjuEMYlXJa1UnbE/8uajhIwXy5XcAHHywrPl4vDm9Jer+7fn8qqslBDD13bSiwuh0+LtB6QS72pg70sHPK/uuNcAbMcJ00Bwx1IsuLah3I2r3yZdh+co5qxcG6,iv:HWAhyDTP8cryZusGyemzr11Ax821aEl/a3O/wXMbPNY=,tag:uK3mGe/bvsmmCGjidKp77g==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBla1U3d01iTzIxZE9SNFZL
UTJZVDFhN3FUaGxCQkxQQlRwMzZPbTVZQkVFCm85eXQvZUNQVWtISTFCYVh0ZUxP
ZE9MRnF4aDZoSGtXNUg3by92S2FYNVkKLS0tIHJta016cmNPNFhTSVdrc2dDRmx0
MlNlMHhxQk5wUThFYTZyVjIraXJGYVUKMvTxkSUbaxDj2yy+XpFLyjNeGQkXTLfV
onQ8JwVJ3ZP94O/hBlLsa8/akggDatKVKoDKZI3UrypNA5tWQr4uwQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUUHpzUy9EaCtKRTRMNi8y
bHcvMlhWSDMyRGk5eHhLV1dMMEU2L0MrbFRRCjJnWjZVazdDbmZiaWlLZm95blFa
Um5qZFBXcEg2cTN0aDYxd2FlT1RuVzgKLS0tIDBpZHZ1bDhUWXZKS2prYnlnaVFB
cEVhTnMvTENleDlzRERZc0JnVEtBcmMKSFePvV4GOeD297tSpKy6Xb+XNfNhjSHM
j3X3tA+Q0W1H17RijW1h4dyj5qzQsrSf7DSpIxXqwzamEVV40Z3nHA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXMlVTWFkwcXhBOWJCL0ds
TXUxOHNmclRKczRJYzVOMFdMNG5Qb2sxeDJ3CklNa3MzbXc5ZGZSeHk4d3hmWnNo
dnFVOTB6QUxUTDQya0ZneWZiM0lyUjAKLS0tIFdoVlg0Unl0aDB0VjRQMit0Mmkr
YjVJejg0RVB1U2Rybk1iM1RraXIwbWsKRaqoxEytcx4JhoHFYeL0QBtOhGrqrZjn
z090Ml8zukXq/UVnWlt8GwIf9yKkDSixNywZJZF58/9omOpoHagv7Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBMHNsaTRqb0hkdUFhV1VO
QzBHekV3c1VJTVQ5VUNqWnJFSWJlM1JWTUZRCk55bFVrRUxFV2Vpb0Rvc0pZRGN4
ZThTMWd0SGFoYVZ3cG9TNGZKd1hpd0kKLS0tIEpLTzlBN3FuaXhCQ1ErZG1LaGgx
cDNDdDNteVI1ZHBtZUdtSEVxN3RtaFUKntQ9CvSB8BUrJctW3Rj7dxWwgIPGrdVP
hLsD6xe4LHoG/hChRamhQOnI0AvubkeXWMWhLU11NT5KFspEsmIlXA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwaTM3RzAyUG4zTFk5WFB0
anFsNG9QY1p1NTRObFVQL3pLL0V4cm13RnhJCjh4MGhZaHI0WXVoWHY3M3dwRDYw
QXpIRjlkZEUydThQVXZxSFI0MjMwVFUKLS0tIGFiYmE5UTQ0NnM5dktZbGZPcmE1
REM5NHVzUy9rRkNQL3hjU0lRQklXeFUKhcDEgKFwhoGWPS6JDsgvFeb52H0N6Foh
10hkCG4eftdrfT1r0Fxcr4LD1oHgOZN61Kfvr0t4UqoEOnLMxOPM/Q==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-09T06:33:41Z"
mac: ENC[AES256_GCM,data:Eb/ss98+IxI2RL3Iu7VHIYko7YOiPZhkIUAYF5UNAwyNZsqjiPKtxFejjtuixTzCVuKejSZBkYTCcd5QI9SquQhh9TloTg9lsEI94+vMn7hiJW816rsllx+cvaKM/MVYOaVX1R50QKpzjsjT1hZR8XVQUm1s3pmwaZi9KSesc18=,iv:RtODAtOjuTcWJzCJoHRXj9tp3lC5XYG0+upBPnAas1g=,tag:pOES1vOW7u9tSHkWaPJ1ag==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4

View file

@ -1,41 +1,53 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:
{ {
imports = config,
[ (modulesPath + "/installer/scan/not-detected.nix") lib,
]; modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
networking.hostId = "2132e3bf"; networking.hostId = "2132e3bf";
networking.hostName = "legiondary"; networking.hostName = "legiondary";
boot = { boot = {
initrd.availableKernelModules = [ "xhci_pci" "nvme" "ahci" "usb_storage" "usbhid" "sd_mod" ]; initrd.availableKernelModules = [
initrd.kernelModules = [ ]; "xhci_pci"
kernelModules = [ "kvm-amd" ]; "nvme"
extraModulePackages = [ ]; "ahci"
"usb_storage"
"usbhid"
"sd_mod"
];
initrd.kernelModules = [];
kernelModules = ["kvm-amd"];
extraModulePackages = [];
}; };
fileSystems."/" = fileSystems = {
{ device = "zroot/root"; "/" = {
device = "zroot/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = "/nix" = {
{ device = "zroot/nix"; device = "zroot/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = "/var" = {
{ device = "zroot/var"; device = "zroot/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = "/home" = {
{ device = "zroot/home"; device = "zroot/home";
fsType = "zfs"; fsType = "zfs";
}; };
};
# fileSystems."/boot" = # fileSystems."/boot" =
# { device = "/dev/disk/by-uuid/E532-B74A"; # { device = "/dev/disk/by-uuid/E532-B74A";
@ -43,13 +55,16 @@
# options = [ "fmask=0022" "dmask=0022" ]; # options = [ "fmask=0022" "dmask=0022" ];
# }; # };
swapDevices = [ ]; swapDevices = [];
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# System settings and services. # System settings and services.
mySystem = { mySystem = {
purpose = "Development"; purpose = "Development";
system.motd.networkInterfaces = [ "eno1" "wlp4s0" ]; system.motd.networkInterfaces = [
"eno1"
"wlp4s0"
];
}; };
} }

View file

@ -1,15 +1,17 @@
{ lib, config, ... }: {
with lib; lib,
let config,
...
}:
with lib; let
app = "lego-auto"; app = "lego-auto";
image = "ghcr.io/bjw-s/lego-auto:v0.3.0"; image = "ghcr.io/bjw-s/lego-auto:v0.3.0";
user = "999"; #string user = "999"; # string
group = "102"; #string group = "102"; # string
port = 9898; #int port = 9898; # int
cfg = config.mySystem.services.${app}; cfg = config.mySystem.services.${app};
appFolder = "/eru/containers/volumes/${app}"; appFolder = "/eru/containers/volumes/${app}";
in in {
{
options.mySystem.services.${app} = { options.mySystem.services.${app} = {
enable = mkEnableOption "${app}"; enable = mkEnableOption "${app}";
dnsimpleTokenPath = mkOption { dnsimpleTokenPath = mkOption {
@ -43,20 +45,24 @@ in
extraOptions = [ extraOptions = [
"--dns=1.1.1.1" "--dns=1.1.1.1"
]; ];
environment = { environment =
TZ = "America/Chicago"; {
LA_DATADIR = "/cert"; TZ = "America/Chicago";
LA_CACHEDIR = "/cert/.cache"; LA_DATADIR = "/cert";
LA_EMAIL = cfg.email; LA_CACHEDIR = "/cert/.cache";
LA_DOMAINS = cfg.domains; LA_EMAIL = cfg.email;
LA_PROVIDER = cfg.provider; LA_DOMAINS = cfg.domains;
} // lib.optionalAttrs (cfg.provider == "dnsimple") { LA_PROVIDER = cfg.provider;
DNSIMPLE_OAUTH_TOKEN_FILE = "/config/dnsimple-token"; }
}; // lib.optionalAttrs (cfg.provider == "dnsimple") {
DNSIMPLE_OAUTH_TOKEN_FILE = "/config/dnsimple-token";
};
volumes = [ volumes =
"${appFolder}/cert:/cert" [
] ++ optionals (cfg.provider == "dnsimple") [ "${cfg.dnsimpleTokenPath}:/config/dnsimple-token" ]; "${appFolder}/cert:/cert"
]
++ optionals (cfg.provider == "dnsimple") ["${cfg.dnsimpleTokenPath}:/config/dnsimple-token"];
}; };
}; };
} }

View file

@ -0,0 +1,57 @@
{
lib,
config,
...
}:
with lib; let
app = "unifi";
# renovate: depName=goofball222/unifi datasource=github-releases
version = "8.4.62";
cfg = config.mySystem.services.${app};
appFolder = "/eru/containers/volumes/${app}";
in
# persistentFolder = "${config.mySystem.persistentFolder}/var/lib/${appFolder}";
{
options.mySystem.services.${app} = {
enable = mkEnableOption "${app}";
};
config = mkIf cfg.enable {
networking.firewall.interfaces = {
enp130s0f0 = {
allowedTCPPorts = [8443];
};
podman0 = {
allowedTCPPorts = [
8080
8443
8880
8843
];
allowedUDPPorts = [3478];
};
};
virtualisation.oci-containers.containers.${app} = {
image = "ghcr.io/goofball222/unifi:${version}";
autoStart = true;
ports = [
"3478:3478/udp" # STUN
"8080:8080" # inform controller
"8443:8443" # https
"8880:8880" # HTTP portal redirect
"8843:8843" # HTTPS portal redirect
];
environment = {
TZ = "America/Chicago";
RUNAS_UID0 = "false";
PGID = "102";
PUID = "999";
};
volumes = [
"${appFolder}/cert:/usr/lib/unifi/cert"
"${appFolder}/data:/usr/lib/unifi/data"
"${appFolder}/logs:/usr/lib/unifi/logs"
];
};
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./gnome.nix
./kde.nix
];
}

View file

@ -0,0 +1,115 @@
{
lib,
config,
pkgs,
...
}: let
cfg = config.mySystem.de.gnome;
in {
options = {
mySystem.de.gnome = {
enable =
lib.mkEnableOption "GNOME"
// {
default = false;
};
systrayicons =
lib.mkEnableOption "Enable systray icons"
// {
default = true;
};
gsconnect =
lib.mkEnableOption "Enable gsconnect (KDEConnect for GNOME)"
// {
default = true;
};
};
};
config = lib.mkIf cfg.enable {
# Ref: https://nixos.wiki/wiki/GNOME
# GNOME plz
services = {
displayManager = {
defaultSession = "gnome";
autoLogin = {
enable = false;
user = "jahanson"; # TODO move to config overlay
};
};
xserver = {
enable = true;
xkb.layout = "us"; # `localctl` will give you
displayManager = {
gdm.enable = true;
};
desktopManager = {
# GNOME
gnome.enable = true;
};
};
udev.packages = lib.optionals cfg.systrayicons [pkgs.gnome.gnome-settings-daemon]; # support appindicator
};
# systyray icons
# extra pkgs and extensions
environment = {
systemPackages = with pkgs;
[
wl-clipboard # ls ~/Downloads | wl-copy or wl-paste > clipboard.txt
playerctl # gsconnect play/pause command
pamixer # gcsconnect volume control
gnome.gnome-tweaks
gnome.dconf-editor
# This installs the extension packages, but
# dont forget to enable them per-user in dconf settings -> "org/gnome/shell"
gnomeExtensions.vitals
gnomeExtensions.caffeine
gnomeExtensions.dash-to-dock
]
++ optionals cfg.systrayicons [pkgs.gnomeExtensions.appindicator];
};
# enable gsconnect
# this method also opens the firewall ports required when enable = true
programs.kdeconnect = lib.mkIf cfg.gsconnect {
enable = true;
package = pkgs.gnomeExtensions.gsconnect;
};
# GNOME connection to browsers - requires flag on browser as well
services.gnome.gnome-browser-connector.enable = lib.any (user: user.programs.firefox.enable) (
lib.attrValues config.home-manager.users
);
# And dconf
programs.dconf.enable = true;
# Exclude default GNOME packages that dont interest me.
environment.gnome.excludePackages =
(with pkgs; [
gnome-photos
gnome-tour
gedit # text editor
])
++ (with pkgs.gnome; [
cheese # webcam tool
gnome-music
gnome-terminal
epiphany # web browser
geary # email reader
evince # document viewer
gnome-characters
totem # video player
tali # poker game
iagno # go game
hitori # sudoku game
atomix # puzzle game
]);
};
}

View file

@ -0,0 +1,70 @@
{
lib,
config,
pkgs,
...
}: let
cfg = config.mySystem.de.kde;
flameshotOverride = pkgs.unstable.flameshot.override {enableWlrSupport = true;};
in {
options = {
mySystem.de.kde = {
enable =
lib.mkEnableOption "KDE"
// {
default = false;
};
};
};
config = lib.mkIf cfg.enable {
# Ref: https://wiki.nixos.org/wiki/KDE
# KDE
services = {
displayManager = {
sddm = {
enable = true;
wayland = {
enable = true;
};
};
};
desktopManager.plasma6.enable = true;
};
security = {
# realtime process priority
rtkit.enable = true;
# KDE Wallet PAM integration for unlocking the default wallet on login
pam.services."sddm".kwallet.enable = true;
};
# enable pipewire for sound
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# extra pkgs and extensions
environment = {
systemPackages = with pkgs; [
wl-clipboard # ls ~/Downloads | wl-copy or wl-paste > clipboard.txt
playerctl # gsconnect play/pause command
vorta # Borg backup tool
flameshotOverride # screenshot tool
libsForQt5.qt5.qtbase # for vivaldi compatibility
kdePackages.discover # KDE software center -- mainly for flatpak updates
];
};
# enable kdeconnect
# this method also opens the firewall ports required when enable = true
programs.kdeconnect = {
enable = true;
};
};
}

View file

@ -1,9 +1,12 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.mySystem.services.cockpit;
in
{ {
lib,
config,
pkgs,
...
}:
with lib; let
cfg = config.mySystem.services.cockpit;
in {
options.mySystem.services.cockpit.enable = mkEnableOption "Cockpit"; options.mySystem.services.cockpit.enable = mkEnableOption "Cockpit";
config.services.cockpit = mkIf cfg.enable { config.services.cockpit = mkIf cfg.enable {

View file

@ -0,0 +1,33 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.mySystem.services.vault;
in {
options.mySystem.services.vault = {
enable = lib.mkEnableOption "vault";
address = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1:8200";
description = "Address of the Vault server";
example = "127.0.0.1:8200";
};
};
config = lib.mkIf cfg.enable {
services.vault = {
enable = true;
package = pkgs.unstable.vault;
address = cfg.address;
dev = false;
storageBackend = "raft";
extraConfig = ''
api_addr = "http://127.0.0.1:8200"
cluster_addr = "http://127.0.0.1:8201"
ui = true
'';
};
};
}

View file

@ -0,0 +1,14 @@
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = true
}
storage "raft" {
path = "/var/lib/vault/data"
node_id = "node1"
}
disable_mlock = true
api_addr = "http://localhost:8200"
cluster_addr = "http://localhost:8201"
ui = true

View file

@ -0,0 +1,59 @@
{
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/disk/by-diskseq/1";
content = {
type = "gpt";
partitions = {
ESP = {
priority = 1;
name = "ESP";
start = "1M";
end = "128M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = ["-f"]; # Override existing partition
# Subvolumes must set a mountpoint in order to be mounted,
# unless their parent is mounted
subvolumes = {
# Subvolume name is different from mountpoint
"/rootfs" = {
mountpoint = "/";
};
# Subvolume name is the same as the mountpoint
"/home" = {
mountOptions = ["compress=zstd"];
mountpoint = "/home";
};
# Sub(sub)volume doesn't need a mountpoint as its parent is mounted
"/home/user" = {};
# Parent is not mounted so the mountpoint must be set
"/nix" = {
mountOptions = [
"compress=zstd"
"noatime"
];
mountpoint = "/nix";
};
};
mountpoint = "/partition-root";
};
};
};
};
};
};
};
}

View file

@ -1,5 +1,8 @@
{ lib, pkgs, ... }:
{ {
lib,
pkgs,
...
}: {
# Support windows partition # Support windows partition
mySystem = { mySystem = {
security.wheelNeedsSudoPassword = false; security.wheelNeedsSudoPassword = false;
@ -10,7 +13,10 @@
boot = { boot = {
# for managing/mounting ntfs # for managing/mounting ntfs
supportedFilesystems = [ "ntfs" "nfs" ]; supportedFilesystems = [
"ntfs"
"nfs"
];
loader = { loader = {
grub = { grub = {
@ -18,7 +24,10 @@
zfsSupport = true; zfsSupport = true;
device = "nodev"; device = "nodev";
mirroredBoots = [ mirroredBoots = [
{ devices = [ "nodev" ]; path = "/boot"; } {
devices = ["nodev"];
path = "/boot";
}
]; ];
}; };
}; };

View file

@ -1,5 +1,8 @@
{ config, lib, ... }:
{ {
config,
lib,
...
}: {
boot = { boot = {
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
loader = { loader = {

View file

@ -1,12 +1,15 @@
{ lib, pkgs, ... }:
{ {
lib,
pkgs,
...
}: {
# Enable module for NVIDIA graphics # Enable module for NVIDIA graphics
mySystem = { mySystem = {
hardware.nvidia.enable = true; hardware.nvidia.enable = true;
}; };
# set xserver videodrivers for NVIDIA gpu # set xserver videodrivers for NVIDIA gpu
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = ["nvidia"];
# Install steam systemwide # Install steam systemwide
programs.steam = { programs.steam = {
enable = true; enable = true;
@ -35,5 +38,4 @@
pulse.enable = true; pulse.enable = true;
jack.enable = true; jack.enable = true;
}; };
} }

16
.editorconfig Normal file
View file

@ -0,0 +1,16 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
[*.{yaml,yml,json5}]
indent_style = space
indent_size = 2
[*.md]
indent_size = 4
trim_trailing_whitespace = false

View file

@ -0,0 +1,53 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: "Build"
on:
push:
branches:
- main
paths:
- ".forgejo/workflows/build.yaml"
- "flake.lock"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
nix-build:
if: github.event.pull_request.draft == false
strategy:
fail-fast: false
matrix:
include:
- system: gandalf
os: native-x86_64
- system: telperion
os: native-x86_64
- system: shadowfax
os: native-x86_64
# - system: varda
# os: native-x86_64
runs-on: ${{ matrix.os }}
env:
PATH: ${{ format('{0}:{1}', '/run/current-system/sw/bin', env.PATH) }}
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Cachix
uses: https://github.com/cachix/cachix-action@v16
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
name: hsndev
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: Garbage collect build dependencies
run: nix-collect-garbage
- name: Build new ${{ matrix.system }} system
shell: bash
run: |
nix build ".#top.${{ matrix.system }}" --profile ./profile --fallback -v \
> >(tee stdout.log) 2> >(tee /tmp/nix-build-err.log >&2)

View file

@ -1,50 +0,0 @@
name: "Build"
on:
pull_request:
jobs:
nix-build:
if: github.event.pull_request.draft == false
strategy:
fail-fast: false
matrix:
include:
- system: varda
os: native-aarch64
- system: telchar
os: native-x86_64
runs-on: ${{ matrix.os }}
env:
PATH: ${{ format('{0}:{1}', '/run/current-system/sw/bin', env.PATH) }}
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
with:
fetch-depth: 0
- uses: https://github.com/cachix/cachix-action@v15
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
name: hsndev
# If you chose API tokens for write access OR if you have a private cache
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
# env:
# USER: 'root'
- name: Garbage collect build dependencies
run: nix-collect-garbage
- name: Build new ${{ matrix.system }} system
shell: bash
run: |
set -o pipefail
nix build \
".#top.${{ matrix.system }}" \
--profile ./profile \
--fallback \
-v \
--log-format raw \
> >(tee stdout.log) 2> >(tee /tmp/nix-build-err.log >&2)
- name: Push to Cachix
if: success()
env:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
run: nix build ".#top.${{ matrix.system }}" --json | jq -r .[].drvPath | cachix push hsndev

7
.gitignore vendored
View file

@ -1,6 +1,13 @@
**/*.tmp.sops.yaml **/*.tmp.sops.yaml
**/*.sops.tmp.yaml **/*.sops.tmp.yaml
**/*sync-conflict*
age.key age.key
result* result*
.decrypted~*
.direnv .direnv
.kube .kube
.github
.profile
.idea
.secrets
.op

View file

@ -9,10 +9,12 @@ repos:
- --config-file - --config-file
- .yamllint.yaml - .yamllint.yaml
id: yamllint id: yamllint
exclude: "borgmatic-template.yaml"
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0 rev: v5.0.0
hooks: hooks:
- id: trailing-whitespace - id: trailing-whitespace
exclude: "borgmatic-template.yaml"
- id: end-of-file-fixer - id: end-of-file-fixer
- id: fix-byte-order-marker - id: fix-byte-order-marker
- id: mixed-line-ending - id: mixed-line-ending
@ -25,14 +27,15 @@ repos:
hooks: hooks:
- id: remove-crlf - id: remove-crlf
- id: remove-tabs - id: remove-tabs
exclude: (Makefile) exclude: (Makefile|Caddyfile)
- repo: https://github.com/zricethezav/gitleaks # - repo: https://github.com/zricethezav/gitleaks
rev: v8.18.2 # rev: v8.23.3
hooks: # hooks:
- id: gitleaks # - id: gitleaks
- repo: https://github.com/yuvipanda/pre-commit-hook-ensure-sops # - repo: https://github.com/yuvipanda/pre-commit-hook-ensure-sops
rev: v1.1 # rev: v1.1
hooks: # hooks:
- id: sops-encryption # - id: sops-encryption
# Uncomment to exclude all markdown files from encryption # # Uncomment to exclude all markdown files from encryption
# exclude: *.\.md # # exclude: *.\.md
# files: .*secrets.*

4
.prettierrc Normal file
View file

@ -0,0 +1,4 @@
{
"quoteProps": "preserve",
"trailingComma": "none"
}

View file

@ -10,24 +10,19 @@
keys: keys:
- users: - users:
- &jahanson age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp - &jahanson age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
- hosts: - hosts:
- &durincore age1d9p83j52m2xg0vh9k7q0uwlxwhs3y6tlv68yg9s2h9mdw2fmmsqshddz5m - &shadowfax age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
- &gandalf age1m83ups8xn2jy4ayr8gw0pyn34smr0huqc5v76e4887az4vsl4yzsj0dlhd - &telchar age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
- &legiondary age1lp6rrlvmytp9ka6q89m0e0am26222kwrn7aqd45hu07s3a6jv3gqty86eu - &telperion age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
- &telperion age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl - &varda age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
- &varda age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
- &telchar age1vsqx6kukrfhrwdy4sujnra5gsswzuh0cfcfdh0d9qjrkts8hl5aqnjx32m
creation_rules: creation_rules:
- path_regex: .*\.sops\.yaml$ - path_regex: .*\.sops\.yaml$
key_groups: key_groups:
- age: - age:
- *durincore - *jahanson
- *gandalf - *shadowfax
- *jahanson - *telchar
- *legiondary - *telperion
- *telchar - *varda
- *telperion
- *varda

View file

@ -1,9 +1,6 @@
{ {
"recommendations": [ "recommendations": [
"jnoortheen.nix-ide", "jnoortheen.nix-ide",
"mikestead.dotenv",
"redhat.ansible",
"redhat.vscode-yaml",
"signageos.signageos-vscode-sops", "signageos.signageos-vscode-sops",
"pkief.material-icon-theme", "pkief.material-icon-theme",
"ms-vscode-remote.remote-ssh" "ms-vscode-remote.remote-ssh"

View file

@ -1,32 +0,0 @@
{
"nix-module": {
"prefix": "nm",
"body": [
"{ lib",
", config",
", pkgs",
", ...",
"}:",
"with lib;",
"let",
" cfg = config.mySystem.${1}.${2};",
" app = \"${3}\"",
" appFolder = \"apps/${app}\";",
" persistentFolder = \"${config.mySystem.persistentFolder}/${appFolder}\";",
" user = app;",
" group = app;",
"in",
"{",
" options.mySystem.${1}.${2}.enable = mkEnableOption \"${4}\";",
"",
" config = mkIf cfg.enable {",
"",
" $5",
"",
" };",
"}",
""
],
"description": "nix-module"
}
}

46
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,46 @@
{
"editor.fontFamily": "CaskaydiaMono Nerd Font Mono",
"files.associations": {
"*.json5": "jsonc"
},
"editor.hover.delay": 1500,
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"editor.guides.bracketPairsHorizontal": true,
"editor.guides.highlightActiveBracketPair": true,
"files.trimTrailingWhitespace": true,
"sops.defaults.ageKeyFile": "age.key",
"nix.enableLanguageServer": true,
"nix.serverPath": "nixd",
"nix.formatterPath": "alejandra",
"nix.serverSettings": {
"nixd": {
"formatting": {
"command": ["alejandra"]
},
"options": {
"nixos": {
"expr": "(builtins.getFlake \"/home/jahanson/projects/mochi\").nixosConfigurations.shadowfax.options"
}
}
},
"nix": {
"binary": "nix",
"maxMemoryMB": null,
"flake": {
"autoEvalInputs": true,
"autoArchive": true,
"nixpkgsInputName": "nixpkgs"
}
}
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"sops.binPath": "/run/current-system/sw/bin/sops",
"editor.formatOnSave": true,
"bashIde.explainshellEndpoint": "http://localhost:5000",
"bashIde.shellcheckPath": "/run/current-system/sw/bin/shellcheck",
"bashIde.shfmt.path": "/run/current-system/sw/bin/shfmt",
"mise.binPath": "/etc/profiles/per-user/jahanson/bin/mise"
}

View file

@ -2,23 +2,30 @@
## Goals ## Goals
- [ ] Learn nix - [ ] Learn nix
- [ ] Services I want to separate from my kubernetes cluster I will use Nix. - [ ] Services I want to separate from my kubernetes cluster I will use Nix.
- [ ] Approval-based update automation for flakes. - [ ] Approval-based update automation for flakes.
- [ ] Expand usage to other shell environments such as WSL, etc - [ ] Expand usage to other shell environments such as WSL, etc
- [ ] keep it simple, use trusted boring tools - [ ] keep it simple, use trusted boring tools
## TODO ## TODO
- [x] Forgejo Actions - [x] Forgejo Actions
- [ ] Bring over hosts - [ ] Bring over hosts
- [x] Varda (forgejo) - [x] Varda (forgejo)
- [x] Thinkpad T470 - [x] Thinkpad T470
- [x] Legion 15 AMD/Nvidia - [x] Legion 15 AMD/Nvidia
- [x] Telperion (network services) - [x] Telperion (network services)
- [ ] Gandalf (NixNAS) - [ ] Gandalf (NixNAS)
## Links & References ## Links & References
- [truxnell/dotfiles](https://github.com//truxnell/nix-config/) - [truxnell/dotfiles](https://github.com//truxnell/nix-config/)
- [billimek/dotfiles](https://github.com/billimek/dotfiles/) - [billimek/dotfiles](https://github.com/billimek/dotfiles/)
## Upgrading the borgmatic template for reference
```sh
borgmatic config generate --source nixos/hosts/shadowfax/config/borgmatic/borgmatic-template.yaml --destination nixos/hosts/shadowfax/config/borgmatic/borgmatic-t
emplate.yaml --overwrite
```

1560
flake.lock generated

File diff suppressed because it is too large Load diff

436
flake.nix
View file

@ -1,14 +1,201 @@
{ {
description = "My NixOS flake"; description = "My NixOS flake";
outputs = {
self,
nixpkgs,
nixpkgs-unstable,
sops-nix,
home-manager,
disko,
lix-module,
vscode-server,
nvf,
...
} @ inputs: let
forAllSystems = nixpkgs.lib.genAttrs [
"aarch64-linux"
"x86_64-linux"
];
in rec {
# Use nixpkgs-fmt for 'nix fmt'
formatter = forAllSystems (system: nixpkgs.legacyPackages."${system}".nixfmt-rfc-style);
# setup devshells against shell.nix
# devShells = forAllSystems (pkgs: import ./shell.nix { inherit pkgs; });
# extend lib with my custom functions
lib = nixpkgs.lib.extend (
final: prev: {
inherit inputs;
myLib = import ./nixos/lib {
inherit inputs;
lib = final;
};
}
);
nixosConfigurations = let
inherit inputs;
# Import overlays for building nixosconfig with them.
overlays = import ./nixos/overlays {inherit inputs;};
# generate a base nixos configuration with the specified overlays, hardware modules, and any AerModules applied
mkNixosConfig = {
hostname,
system ? "x86_64-linux",
nixpkgs ? inputs.nixpkgs,
disabledModules ? [],
hardwareModules ? [],
# basemodules is the base of the entire machine building
# here we import all the modules and setup home-manager
baseModules ? [
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
nvf.nixosModules.default
./nixos/profiles/global.nix # all machines get a global profile
./nixos/modules/nixos # all machines get nixos modules
./nixos/hosts/${hostname} # load this host's config folder for machine-specific config
{
inherit disabledModules;
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
extraSpecialArgs = {
inherit inputs hostname system;
};
};
}
],
profileModules ? [],
}: let
pkgs = import nixpkgs {
inherit system;
overlays = builtins.attrValues overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true;
};
};
in
nixpkgs.lib.nixosSystem {
inherit system lib;
modules = baseModules ++ hardwareModules ++ profileModules;
specialArgs = {
inherit self inputs nixpkgs;
myPkgs = lib.myLib.mkMyPkgs pkgs;
};
inherit pkgs;
};
in {
"shadowfax" = mkNixosConfig {
# Pro WS WRX80E-SAGE SE WIFI - AMD Ryzen Threadripper PRO 3955WX 16-Cores
# Workloads server
hostname = "shadowfax";
system = "x86_64-linux";
disabledModules = [
"services/web-servers/minio.nix"
"services/web-servers/caddy/default.nix"
];
hardwareModules = [
lix-module.nixosModules.default
./nixos/profiles/hw-threadripperpro.nix
];
profileModules = [
vscode-server.nixosModules.default
"${nixpkgs-unstable}/nixos/modules/services/web-servers/minio.nix"
"${nixpkgs-unstable}/nixos/modules/services/web-servers/caddy/default.nix"
./nixos/profiles/role-dev.nix
./nixos/profiles/role-server.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix;}
];
};
"telchar" = mkNixosConfig {
# Framework 16 Ryzen 7 7840HS - Radeon 780M Graphics
# Hyprland first, QEMU Windows second
hostname = "telchar";
system = "x86_64-linux";
hardwareModules = [
inputs.nixos-hardware.nixosModules.framework-16-7040-amd
./nixos/profiles/hw-framework-16-7840hs.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko/simple-efi.nix)
lix-module.nixosModules.default
];
profileModules = [
./nixos/profiles/role-dev.nix
./nixos/profiles/role-workstation.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix;}
];
};
"telperion" = mkNixosConfig {
# HP-S01 Intel G5900
# Network services server
hostname = "telperion";
system = "x86_64-linux";
hardwareModules = [
./nixos/profiles/hw-hp-s01.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko-nixos.nix {disks = ["/dev/nvme0n1"];})
];
profileModules = [
./nixos/profiles/role-server.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/server.nix;}
];
};
"varda" = mkNixosConfig {
# Arm64 cax21 @ Hetzner
# forgejo server
hostname = "varda";
system = "aarch64-linux";
hardwareModules = [
./nixos/profiles/hw-hetzner-cax.nix
];
profileModules = [
./nixos/profiles/role-server.nix
{home-manager.users.jahanson = ./nixos/home/jahanson/server.nix;}
];
};
};
# Convenience output that aggregates the outputs for home, nixos.
# Also used in ci to build targets generally.
top = let
nixtop = nixpkgs.lib.genAttrs (builtins.attrNames inputs.self.nixosConfigurations) (
attr: inputs.self.nixosConfigurations.${attr}.config.system.build.toplevel
);
in
nixtop;
};
nixConfig.extra-substituters = [
"https://hsndev.cachix.org"
"https://nix-community.cachix.org"
"https://numtide.cachix.org"
"https://hyprland.cachix.org"
];
nixConfig.extra-trusted-public-keys = [
"hsndev.cachix.org-1:vN1/XGBZtMLnTFYDmTLDrullgZHSUYY3Kqt+Yg/C+tE="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
inputs = { inputs = {
# Nixpkgs and unstable # Nixpkgs and unstable
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-master.url = "github:nixos/nixpkgs/master";
# impermanence # Lix - Substitution of the Nix package manager, focused on correctness, usability, and growth and committed to doing right by its community.
# https://github.com/nix-community/impermanence # https://git.lix.systems/lix-project/lix
impermanence.url = "github:nix-community/impermanence"; lix-module = {
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
# Nix User Repository: User contributed nix packages # Nix User Repository: User contributed nix packages
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
@ -26,7 +213,7 @@
# home-manager - Manage user configuration with nix # home-manager - Manage user configuration with nix
# https://github.com/nix-community/home-manager # https://github.com/nix-community/home-manager
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-24.05"; url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@ -44,13 +231,6 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# nix-index database
# https://github.com/nix-community/nix-index-database
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
# nix-inspect - inspect nix derivations usingn a TUI interface # nix-inspect - inspect nix derivations usingn a TUI interface
# https://github.com/bluskript/nix-inspect # https://github.com/bluskript/nix-inspect
nix-inspect = { nix-inspect = {
@ -59,18 +239,12 @@
}; };
# talhelper - A tool to help creating Talos kubernetes cluster # talhelper - A tool to help creating Talos kubernetes cluster
# https://github.com/budimanjojo/talhelper
talhelper = { talhelper = {
url = "github:budimanjojo/talhelper"; url = "github:budimanjojo/talhelper";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs-unstable";
}; };
# Lix- Substitution of the Nix package manager, focused on correctness, usability, and growth and committed to doing right by its community.
# https://git.lix.systems/lix-project/lix
lix-module = {
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.90.0.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
# NixVirt for qemu & libvirt # NixVirt for qemu & libvirt
# https://github.com/AshleyYakeley/NixVirt # https://github.com/AshleyYakeley/NixVirt
nixvirt-git = { nixvirt-git = {
@ -78,188 +252,48 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
}; # vscode-server - NixOS module for running vscode-server
vscode-server.url = "github:nix-community/nixos-vscode-server";
outputs = # nix-minecraft - Minecraft server management
{ self, nixpkgs, sops-nix, home-manager, nix-vscode-extensions, impermanence, disko, talhelper, lix-module, ... } @ inputs: # https://github.com/infinidoge/nix-minecraft
let nix-minecraft = {
forAllSystems = nixpkgs.lib.genAttrs [ url = "github:Infinidoge/nix-minecraft";
"aarch64-linux" inputs.nixpkgs.follows = "nixpkgs-unstable";
"x86_64-linux"
];
in
rec {
# Use nixpkgs-fmt for 'nix fmt'
formatter = forAllSystems (system: nixpkgs.legacyPackages."${system}".nixpkgs-fmt);
# setup devshells against shell.nix
# devShells = forAllSystems (pkgs: import ./shell.nix { inherit pkgs; });
# extend lib with my custom functions
lib = nixpkgs.lib.extend (
final: prev: {
inherit inputs;
myLib = import ./nixos/lib { inherit inputs; lib = final; };
}
);
nixosConfigurations =
let
inherit inputs;
# Import overlays for building nixosconfig with them.
overlays = import ./nixos/overlays { inherit inputs; };
# generate a base nixos configuration with the specified overlays, hardware modules, and any AerModules applied
mkNixosConfig =
{ hostname
, system ? "x86_64-linux"
, nixpkgs ? inputs.nixpkgs
, hardwareModules ? [ ]
# basemodules is the base of the entire machine building
# here we import all the modules and setup home-manager
, baseModules ? [
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
impermanence.nixosModules.impermanence
./nixos/profiles/global.nix # all machines get a global profile
./nixos/modules/nixos # all machines get nixos modules
./nixos/hosts/${hostname} # load this host's config folder for machine-specific config
{
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
extraSpecialArgs = {
inherit inputs hostname system;
};
};
}
]
, profileModules ? [ ]
}:
nixpkgs.lib.nixosSystem {
inherit system lib;
modules = baseModules ++ hardwareModules ++ profileModules;
specialArgs = { inherit self inputs nixpkgs; };
# Add our overlays
pkgs = import nixpkgs {
inherit system;
overlays = builtins.attrValues overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true;
};
};
};
in
{
"durincore" = mkNixosConfig {
# T470 Thinkpad Intel i7-6600U
# Nix dev laptop
hostname = "durincore";
system = "x86_64-linux";
hardwareModules = [
./nixos/profiles/hw-thinkpad-t470.nix
inputs.nixos-hardware.nixosModules.lenovo-thinkpad-t470s
];
profileModules = [
./nixos/profiles/role-workstation.nix
./nixos/profiles/role-dev.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix; }
];
};
"legiondary" = mkNixosConfig {
# Legion 15arh05h AMD/Nvidia Ryzen 7 4800H
# Nix dev/gaming laptop
hostname = "legiondary";
system = "x86_64-linux";
hardwareModules = [
inputs.nixos-hardware.nixosModules.lenovo-legion-15arh05h
./nixos/profiles/hw-legion-15arh05h.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko-nixos.nix { disks = [ "/dev/nvme0n1" ]; })
];
profileModules = [
./nixos/profiles/role-dev.nix
./nixos/profiles/role-gaming.nix
./nixos/profiles/role-workstation.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix; }
];
};
"telchar" = mkNixosConfig {
# Framework 16 Ryzen 7 7840HS - Radeon 780M Graphics
# Nix dev laptop
hostname = "telchar";
system = "x86_64-linux";
hardwareModules = [
inputs.nixos-hardware.nixosModules.framework-16-7040-amd
./nixos/profiles/hw-framework-16-7840hs.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko-nixos.nix { disks = [ "/dev/nvme0n1" ]; })
lix-module.nixosModules.default
];
profileModules = [
./nixos/profiles/role-dev.nix
./nixos/profiles/role-workstation.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/workstation.nix; }
];
};
"varda" = mkNixosConfig {
# Arm64 cax21 @ Hetzner
# forgejo server
hostname = "varda";
system = "aarch64-linux";
hardwareModules = [
./nixos/profiles/hw-hetzner-cax.nix
];
profileModules = [
./nixos/profiles/role-server.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/server.nix; }
];
};
"telperion" = mkNixosConfig {
# HP-S01 Intel G5900
# Network services server
hostname = "telperion";
system = "x86_64-linux";
hardwareModules = [
./nixos/profiles/hw-hp-s01.nix
disko.nixosModules.disko
(import ./nixos/profiles/disko-nixos.nix { disks = [ "/dev/nvme0n1" ]; })
];
profileModules = [
./nixos/profiles/role-server.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/server.nix; }
];
};
"gandalf" = mkNixosConfig {
# X9DRi-LN4+/X9DR3-LN4+ - Intel(R) Xeon(R) CPU E5-2650 v2
# NAS
hostname = "gandalf";
system = "x86_64-linux";
hardwareModules = [
lix-module.nixosModules.default
./nixos/profiles/hw-supermicro.nix
];
profileModules = [
./nixos/profiles/role-server.nix
{ home-manager.users.jahanson = ./nixos/home/jahanson/server.nix; }
];
};
};
# Convenience output that aggregates the outputs for home, nixos.
# Also used in ci to build targets generally.
top =
let
nixtop = nixpkgs.lib.genAttrs
(builtins.attrNames inputs.self.nixosConfigurations)
(attr: inputs.self.nixosConfigurations.${attr}.config.system.build.toplevel);
in
nixtop;
}; };
# Hyprland
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
# Hyprlock
hyprlock = {
url = "github:hyprwm/hyprlock";
inputs.nixpkgs.follows = "nixpkgs";
};
# Hyprland plugins
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
# Hyprland AGS (Application Grouping System)
ags.url = "github:Aylur/ags/v1";
# nvf - A highly modular, extensible and distro-agnostic Neovim configuration framework for Nix/NixOS.
nvf.url = "github:notashelf/nvf";
# Zen Browser
zen-browser.url = "github:0xc000022070/zen-browser-flake";
# Buildbot for Nix
buildbot-nix = {
url = "github:nix-community/buildbot-nix";
};
# Ghostty 👻 - Awesome terminal that uses GPU acceleration
ghostty = {
url = "github:ghostty-org/ghostty/v1.1.2";
};
};
} }

View file

@ -1,18 +1,34 @@
{ pkgs, config, ... }:
with config;
{ {
pkgs,
config,
...
}: {
imports = [ imports = [
../modules ../modules
]; ];
config = { config = {
myHome.username = "jahanson"; myHome = {
myHome.homeDirectory = "/home/jahanson/"; username = "jahanson";
homeDirectory = "/home/jahanson/";
shell = {
atuind.enable = true;
starship.enable = true;
fish.enable = true;
};
};
systemd.user.sessionVariables = { systemd.user.sessionVariables = {
EDITOR = "vim"; EDITOR = "vim";
}; };
# Home Manager
## Tasks, env, and secrets management.
programs.mise = {
enable = true;
package = pkgs.unstable.mise;
};
home = { home = {
# Install these packages for my user # Install these packages for my user
packages = with pkgs; [ packages = with pkgs; [
@ -33,39 +49,41 @@ with config;
p7zip p7zip
# cli # cli
_1password
bat bat
dbus dbus
direnv direnv
git git
nix-index
python3 python3
pipx
fzf fzf
ripgrep ripgrep
vim
lsd lsd
unstable.atuin unstable.atuin
# terminal file managers # terminal file managers
nnn nnn
ranger ranger
yazi unstable.yazi-unwrapped
# networking tools # networking tools
iperf3 iperf3
dnsutils # `dig` + `nslookup` dnsutils # `dig` + `nslookup`
ldns # replacement of `dig`, it provide the command `drill` ldns # replacement of `dig`, it provide the command `drill`
aria2 # A lightweight multi-protocol & multi-source command-line download utility aria2 # A lightweight multi-protocol & multi-source command-line download utility
socat # replacement of openbsd-netcat socat # replacement of openbsd-netcat
nmap # A utility for network discovery and security auditing nmap # A utility for network discovery and security auditing
ipcalc # it is a calculator for the IPv4/v6 addresses ipcalc # it is a calculator for the IPv4/v6 addresses
# system tools # system tools
sysstat sysstat
lm_sensors # for `sensors` command lm_sensors # for `sensors` command
ethtool ethtool # modify network interface settings or firmware
pciutils # lspci pciutils # lspci
usbutils # lsusb usbutils # lsusb
lshw # lshw
# filesystem tools
gptfdisk # sgdisk
# system call monitoring # system call monitoring
strace # system call monitoring strace # system call monitoring
@ -82,13 +100,11 @@ with config;
# nix tools # nix tools
nvd nvd
# backup tools
unstable.rclone
unstable.restic
]; ];
sessionVariables = {
EDITOR = "vim";
};
}; };
}; };
} }

View file

@ -1,5 +1,4 @@
{ ... }: {...}: {
{
imports = [ imports = [
./global.nix ./global.nix
]; ];

View file

@ -1,52 +1,50 @@
{ pkgs, config, ... }: {pkgs, ...}: {
with config;
{
imports = [ imports = [
./global.nix ./global.nix
]; ];
config = {
myHome.programs.firefox.enable = true; # Custom Home Manager Configuration
myHome = {
myHome.shell = { de.hyprland.enable = true;
starship.enable = true; programs = {
fish.enable = true; firefox.enable = true;
wezterm.enable = true; thunderbird.enable = true;
atuind.enable = true; };
shell = {
git = { git = {
enable = true; enable = true;
username = "Joseph Hanson"; username = "Joseph Hanson";
email = "joe@veri.dev"; email = "joe@veri.dev";
signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIDSAmssproxG+KsVn2DfuteBAemHrmmAFzCtldpKl4J"; signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIDSAmssproxG+KsVn2DfuteBAemHrmmAFzCtldpKl4J";
};
};
}; };
};
home = { # Home Manager Configuration
# Install these packages for my user home = {
packages = with pkgs; # Install these packages for my user
[ packages = with pkgs; [
#apps # apps
_1password-gui # parsec-bin
discord solaar # open source manager for logitech unifying receivers
flameshot unstable.bruno
# unstable.fractal
unstable.obsidian
unstable.httpie
unstable.jetbrains.datagrip
unstable.jetbrains.rust-rover
unstable.seabird
unstable.talosctl # overlay override
unstable.telegram-desktop
unstable.tidal-hifi
# unstable.xpipe
# unstable.vesktop # gpu issues. Using the flatpak version solves this issue.
vlc vlc
warp-terminal yt-dlp
termius
obsidian
jetbrains.datagrip
talosctl
pika-backup
parsec-bin
unstable.nheko
# cli # cli
brightnessctl brightnessctl
# dev utils
pre-commit # Pre-commit tasks for git
minio-client # S3 management
shellcheck # shell script linting
unstable.act
]; ];
};
}; };
} }

View file

@ -0,0 +1,5 @@
{...}: {
imports = [
./hyprland.nix
];
}

View file

@ -0,0 +1,91 @@
{
lib,
config,
pkgs,
inputs,
...
}:
with lib; let
cfg = config.myHome.de.hyprland;
in {
options.myHome.de.hyprland.enable = mkEnableOption "Hyprland";
imports = [inputs.ags.homeManagerModules.default];
config = mkIf cfg.enable {
# Downloads the Theme Resources
home.packages = with pkgs; [
andromeda-gtk-theme
flat-remix-icon-theme
bibata-cursors
];
# 'Installs' (sym-links) the Theme Resources
home.file = {
".themes/Andromeda".source = "${pkgs.andromeda-gtk-theme}/share/themes/Andromeda";
".icons/Flat-Remix-Blue-Dark".source = "${pkgs.flat-remix-icon-theme}/share/icons/Flat-Remix-Blue-Dark";
".icons/Bibata-Modern-Ice".source = "${pkgs.bibata-cursors}/share/icons/Bibata-Modern-Ice";
};
# Theme settings
gtk = {
enable = true;
# Some apps just need the good ol' ini files.
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
gtk-theme-name = "Andromeda";
gtk-icon-theme-name = "Flat-Remix-Blue-Dark";
gtk-font-name = "Fira Code Semi-Bold 14";
gtk-cursor-theme-name = "Bibata-Modern-Ice";
gtk-cursor-theme-size = 24;
gtk-toolbar-style = "GTK_TOOLBAR_ICONS";
gtk-toolbar-icon-size = "GTK_ICON_SIZE_LARGE_TOOLBAR";
gtk-button-images = 1;
gtk-menu-images = 1;
gtk-enable-event-sounds = 1;
gtk-enable-input-feedback-sounds = 0;
gtk-xft-antialias = 1;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintslight";
gtk-xft-rgba = "rgb";
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = "1";
gtk-theme-name = "Andromeda";
gtk-icon-theme-name = "Flat-Remix-Blue-Dark";
gtk-font-name = "Fira Code Semi-Bold 14";
gtk-cursor-theme-name = "Bibata-Modern-Ice";
gtk-cursor-theme-size = 24;
gtk-toolbar-style = "GTK_TOOLBAR_ICONS";
gtk-toolbar-icon-size = "GTK_ICON_SIZE_LARGE_TOOLBAR";
gtk-button-images = 1;
gtk-menu-images = 1;
gtk-enable-event-sounds = 1;
gtk-enable-input-feedback-sounds = 0;
gtk-xft-antialias = 1;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintslight";
gtk-xft-rgba = "rgb";
};
};
# Wayland and apps pull from dconf since we're using the gtk portal.
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
cursor-size = 24;
cursor-theme = "Bibata-Modern-Ice";
gtk-theme = "Andromeda";
icon-theme = "Flat-Remix-Blue-Dark";
};
};
programs.ags = {
enable = true;
# I don't want Home Manager to manage these config files.
# Just setup the programs.
configDir = null;
extraPackages = with pkgs; [
gtksourceview
webkitgtk_6_0
accountsservice
];
};
};
}

View file

@ -1,6 +1,6 @@
{ lib, ... }: { {lib, ...}: {
imports = [ imports = [
./de
./shell ./shell
./programs ./programs
./security ./security
@ -32,5 +32,4 @@
allowUnfree = true; allowUnfree = true;
}; };
}; };
} }

View file

@ -1,4 +1,4 @@
{ ... }: { {...}: {
imports = [ imports = [
./firefox ./firefox
]; ];

View file

@ -1,32 +1,25 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.myHome.programs.firefox;
in
{ {
lib,
config,
pkgs,
...
}:
with lib; let
cfg = config.myHome.programs.firefox;
in {
options.myHome.programs.firefox.enable = mkEnableOption "Firefox"; options.myHome.programs.firefox.enable = mkEnableOption "Firefox";
config = mkIf cfg.enable config = mkIf cfg.enable {
{ programs.firefox = {
programs.firefox = { enable = true;
enable = true; package = pkgs.firefox.override {
package = pkgs.firefox.override extraPolicies = {
{ DontCheckDefaultBrowser = true;
extraPolicies = { DisablePocket = true;
DontCheckDefaultBrowser = true; };
DisablePocket = true;
# See nixpkgs' firefox/wrapper.nix to check which options you can use
nativeMessagingHosts = [
# Gnome shell native connector
pkgs.gnome-browser-connector
# plasma connector
# plasma5Packages.plasma-browser-integration
];
};
};
policies = import ./policies.nix;
profiles.default = import ./profile-default.nix { inherit pkgs; };
}; };
policies = import ./policies.nix;
profiles.default = import ./profile-default.nix {inherit pkgs;};
}; };
};
} }

View file

@ -8,9 +8,9 @@
Fingerprinting = true; Fingerprinting = true;
}; };
DisablePocket = true; DisablePocket = true;
# DisableFirefoxAccounts = true; DisableFirefoxAccounts = true;
# DisableAccounts = true; DisableAccounts = true;
# DisableFirefoxScreenshots = true; DisableFirefoxScreenshots = true;
# OverrideFirstRunPage = ""; # OverrideFirstRunPage = "";
OverridePostUpdatePage = ""; OverridePostUpdatePage = "";
DontCheckDefaultBrowser = true; DontCheckDefaultBrowser = true;

View file

@ -1,5 +1,4 @@
{ pkgs }: {pkgs}: {
{
id = 0; id = 0;
name = "default"; name = "default";
isDefault = true; isDefault = true;
@ -11,22 +10,21 @@
# 2 => the last page viewed in Firefox # 2 => the last page viewed in Firefox
# 3 => previous session windows and tabs # 3 => previous session windows and tabs
"browser.startup.page" = "3"; "browser.startup.page" = "3";
"browser.send_pings" = false; "browser.send_pings" = false;
# Do not track
"privacy.donottrackheader.enabled" = "true";
"privacy.donottrackheader.value" = 1;
"browser.display.use_system_colors" = "true"; "browser.display.use_system_colors" = "true";
"browser.display.use_document_colors" = "false"; "browser.display.use_document_colors" = "false";
"devtools.theme" = "dark"; "devtools.theme" = "dark";
"extensions.pocket.enabled" = false; "extensions.pocket.enabled" = false;
}; };
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin ublock-origin
privacy-badger privacy-badger
link-cleaner
refined-github refined-github
kagi-search
languagetool
onepassword-password-manager
streetpass-for-mastodon
dearrow
sponsorblock
]; ];
} }

View file

@ -1,46 +0,0 @@
# Adjusted manually from generated output of dconf2nix
# https://github.com/gvolpe/dconf2nix
{ lib, pkgs, osConfig, ... }:
with lib.hm.gvariant; {
config = lib.mkIf osConfig.mySystem.de.gnome.enable {
# add user packages
home.packages = with pkgs; [
dconf2nix
];
# worked out from dconf2nix
# dconf dump / | dconf2nix > dconf.nix
# can also dconf watch
dconf.settings = {
"org/gnome/mutter" = {
edge-tiling = true;
workspaces-only-on-primary = false;
};
"org/gnome/desktop/wm/preferences" = {
workspace-names = [ "sys" "talk" "web" "edit" "run" ];
};
"org/gnome/shell" = {
disabled-extensions = [ "apps-menu@gnome-shell-extensions.gcampax.github.com" "light-style@gnome-shell-extensions.gcampax.github.com" "places-menu@gnome-shell-extensions.gcampax.github.com" "drive-menu@gnome-shell-extensions.gcampax.github.com" "window-list@gnome-shell-extensions.gcampax.github.com" "workspace-indicator@gnome-shell-extensions.gcampax.github.com" ];
enabled-extensions = [ "appindicatorsupport@rgcjonas.gmail.com" "caffeine@patapon.info" "dash-to-dock@micxgx.gmail.com" "gsconnect@andyholmes.github.io" "Vitals@CoreCoding.com" "sp-tray@sp-tray.esenliyim.github.com" ];
favorite-apps = [ "org.gnome.Nautilus.desktop" "vivaldi-stable.desktop" "termius-app.desktop" "dev.warp.Warp.desktop" "org.wezfurlong.wezterm.desktop" "obsidian.desktop" "org.gnome.Console.desktop" "code.desktop" "discord.desktop" ];
};
"org/gnome/nautilus/preferences" = {
default-folder-viewer = "list-view";
};
"org/gnome/nautilus/icon-view" = {
default-zoom-level = "small";
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
"org/gnome/desktop/peripherals/touchpad" = {
tap-to-click = false;
};
"org/gnome/desktop/interface" = {
clock-format = "12h";
show-battery-percentage = true;
};
};
};
}

View file

@ -1,6 +1,6 @@
{ ... }: { {...}: {
imports = [ imports = [
./browsers ./browsers
./de ./thunderbird
]; ];
} }

View file

@ -0,0 +1,40 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.myHome.programs.thunderbird;
policies = {
ExtensionSettings = {
"*".installation_mode = "blocked"; # blocks all addons except the ones specified below
"quickmove@mozilla.kewis.ch" = {
# Quick folder move
# https://addons.thunderbird.net/en-US/thunderbird/addon/quick-folder-move/
install_url = "https://addons.thunderbird.net/thunderbird/downloads/latest/quick-folder-move/latest.xpi";
installation_mode = "force_installed";
};
# https://addons.thunderbird.net/user-media/addons/_attachments/987716/minimize_on_close-2.0.1.4-tb.xpi
"minimizeonclose@rsjtdrjgfuzkfg.com" = {
# Minimize on Close
# https://addons.thunderbird.net/en-US/thunderbird/addon/minimize-on-close/
install_url = "https://addons.thunderbird.net/user-media/addons/_attachments/987716/minimize_on_close-2.0.1.4-tb.xpi";
installation_mode = "force_installed";
};
};
};
in {
options.myHome.programs.thunderbird.enable = lib.mkEnableOption "Thunderbird";
config = lib.mkIf cfg.enable {
programs.thunderbird = {
enable = true;
package = pkgs.thunderbird-128.override (old: {
extraPolicies = (old.extrapPolicies or {}) // policies;
});
profiles.default.isDefault = true;
};
};
}

View file

@ -1,4 +1,4 @@
{ ... }: { {...}: {
imports = [ imports = [
./ssh ./ssh
]; ];

View file

@ -1,13 +1,16 @@
{ config, lib, ... }: {
config,
lib,
...
}:
with lib; let with lib; let
cfg = config.myHome.security.ssh; cfg = config.myHome.security.ssh;
in in {
{
options.myHome.security.ssh = { options.myHome.security.ssh = {
enable = mkEnableOption "ssh"; enable = mkEnableOption "ssh";
matchBlocks = mkOption { matchBlocks = mkOption {
type = types.attrs; type = types.attrs;
default = { }; default = {};
}; };
}; };

View file

@ -1,31 +1,33 @@
{ config, pkgs, lib, ... }:
with lib; let
inherit (config.myHome) username homeDirectory;
cfg = config.myHome.shell.atuind;
in
{ {
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.myHome.shell.atuind;
in {
options.myHome.shell.atuind = { options.myHome.shell.atuind = {
enable = mkEnableOption "atuind"; enable = mkEnableOption "atuind";
}; };
config = mkMerge [ config = mkMerge [
(mkIf cfg.enable { (mkIf cfg.enable {
systemd.user.services.atuind = systemd.user.services.atuind = {
{ Install = {
Install = { WantedBy = ["default.target"];
WantedBy = [ "default.target" ];
};
Unit = {
After = [ "network.target" ];
};
Service = {
Environment = "ATUIN_LOG=info";
ExecStart = "${pkgs.unstable.atuin}/bin/atuin daemon";
# Remove the socket file if the daemon is not running.
# Unexpected shutdowns may have left this file here.
ExecStartPre="/run/current-system/sw/bin/bash -c '! pgrep atuin && /run/current-system/sw/bin/rm -f ~/.local/share/atuin/atuin.sock'";
};
}; };
Unit = {
After = ["network.target"];
};
Service = {
Environment = "ATUIN_LOG=info";
ExecStart = "${pkgs.unstable.atuin}/bin/atuin daemon";
# Remove the socket file if the daemon is not running.
# Unexpected shutdowns may have left this file here.
ExecStartPre = "/run/current-system/sw/bin/bash -c '! pgrep atuin && /run/current-system/sw/bin/rm -f ~/.local/share/atuin/atuin.sock'";
};
};
}) })
]; ];
} }

View file

@ -1,4 +1,4 @@
{ ... }: { {...}: {
imports = [ imports = [
./atuind ./atuind
./fish ./fish

View file

@ -1,9 +1,13 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
with lib; let with lib; let
inherit (config.myHome) username homeDirectory; inherit (config.myHome) username homeDirectory;
cfg = config.myHome.shell.fish; cfg = config.myHome.shell.fish;
in in {
{
options.myHome.shell.fish = { options.myHome.shell.fish = {
enable = mkEnableOption "fish"; enable = mkEnableOption "fish";
}; };
@ -21,14 +25,26 @@ in
lt = "${pkgs.lsd}/bin/lsd --tree"; lt = "${pkgs.lsd}/bin/lsd --tree";
lla = "${pkgs.lsd}/bin/lsd -la"; lla = "${pkgs.lsd}/bin/lsd -la";
tm = "tmux attach -t (basename $PWD) || tmux new -s (basename $PWD)"; tm = "tmux attach -t (basename $PWD) || tmux new -s (basename $PWD)";
lsusb = "cyme --headings --tree --hide-buses";
x = "exit"; x = "exit";
ncdu = "ncdu --color dark";
}; };
shellAbbrs = { shellAbbrs = {
nrs = "sudo nixos-rebuild switch --flake ."; nrs = "sudo nixos-rebuild switch --flake . --show-trace --accept-flake-config";
nfc = "nix flake check --show-trace --accept-flake-config";
nvdiff = "nvd diff /run/current-system result"; nvdiff = "nvd diff /run/current-system result";
}; };
functions = {
nix-which = {
body = ''
set -l cmd $argv[1]
nix-locate --whole-name --type x --type s "$cmd"
'';
};
};
interactiveShellInit = '' interactiveShellInit = ''
# Erase fish_mode_prompt function # Erase fish_mode_prompt function
functions -e fish_mode_prompt functions -e fish_mode_prompt
@ -47,10 +63,12 @@ in
end end
end end
# Krew
set -q KREW_ROOT; and set -gx PATH $PATH $KREW_ROOT/.krew/bin; or set -gx PATH $PATH $HOME/.krew/bin
# Paths are in reverse priority order # Paths are in reverse priority order
update_path /opt/homebrew/opt/postgresql@16/bin update_path /opt/homebrew/opt/postgresql@16/bin
update_path /opt/homebrew/bin update_path /opt/homebrew/bin
update_path ${homeDirectory}/.krew/bin
update_path /nix/var/nix/profiles/default/bin update_path /nix/var/nix/profiles/default/bin
update_path /run/current-system/sw/bin update_path /run/current-system/sw/bin
update_path /etc/profiles/per-user/${username}/bin update_path /etc/profiles/per-user/${username}/bin
@ -59,13 +77,41 @@ in
update_path ${homeDirectory}/go/bin update_path ${homeDirectory}/go/bin
update_path ${homeDirectory}/.cargo/bin update_path ${homeDirectory}/.cargo/bin
update_path ${homeDirectory}/.local/bin update_path ${homeDirectory}/.local/bin
update_path ${homeDirectory}/.npm-packages/bin
set -gx EDITOR "vim" set -gx EDITOR "vim"
if test (hostname) = "telchar"
set -gx VISUAL "code"
end
set -gx SSH_ASKPASS_REQUIRE "prefer" # This is for git to use the ssh-askpass
set -gx ATUIN_SYNC_ADDRESS "https://sh.hsn.dev" set -gx ATUIN_SYNC_ADDRESS "https://sh.hsn.dev"
# Mise https://mise.jdx.dev
mise activate fish | source
# One Password cli
if test -e ~/.config/op/plugins.sh
source ~/.config/op/plugins.sh
end
set -gx LSCOLORS "Gxfxcxdxbxegedabagacad" set -gx LSCOLORS "Gxfxcxdxbxegedabagacad"
set -gx LS_COLORS 'di=01;34:ln=01;36:pi=33:so=01;35:bd=01;33:cd=33:or=31:ex=01;32:*.7z=01;31:*.bz2=01;31:*.gz=01;31:*.lz=01;31:*.lzma=01;31:*.lzo=01;31:*.rar=01;31:*.tar=01;31:*.tbz=01;31:*.tgz=01;31:*.xz=01;31:*.zip=01;31:*.zst=01;31:*.zstd=01;31:*.bmp=01;35:*.tiff=01;35:*.tif=01;35:*.TIFF=01;35:*.gif=01;35:*.jpeg=01;35:*.jpg=01;35:*.png=01;35:*.webp=01;35:*.pot=01;35:*.pcb=01;35:*.gbr=01;35:*.scm=01;35:*.xcf=01;35:*.spl=01;35:*.stl=01;35:*.dwg=01;35:*.ply=01;35:*.apk=01;31:*.deb=01;31:*.rpm=01;31:*.jad=01;31:*.jar=01;31:*.crx=01;31:*.xpi=01;31:*.avi=01;35:*.divx=01;35:*.m2v=01;35:*.m4v=01;35:*.mkv=01;35:*.MOV=01;35:*.mov=01;35:*.mp4=01;35:*.mpeg=01;35:*.mpg=01;35:*.sample=01;35:*.wmv=01;35:*.3g2=01;35:*.3gp=01;35:*.gp3=01;35:*.webm=01;35:*.flv=01;35:*.ogv=01;35:*.f4v=01;35:*.3ga=01;35:*.aac=01;35:*.m4a=01;35:*.mp3=01;35:*.mp4a=01;35:*.oga=01;35:*.ogg=01;35:*.opus=01;35:*.s3m=01;35:*.sid=01;35:*.wma=01;35:*.flac=01;35:*.alac=01;35:*.mid=01;35:*.midi=01;35:*.pcm=01;35:*.wav=01;35:*.ass=01;33:*.srt=01;33:*.ssa=01;33:*.sub=01;33:*.git=01;33:*.ass=01;33:*README=33:*README.rst=33:*README.md=33:*LICENSE=33:*COPYING=33:*INSTALL=33:*COPYRIGHT=33:*AUTHORS=33:*HISTORY=33:*CONTRIBUTOS=33:*PATENTS=33:*VERSION=33:*NOTICE=33:*CHANGES=33:*CHANGELOG=33:*log=33:*.txt=33:*.md=33:*.markdown=33:*.nfo=33:*.org=33:*.pod=33:*.rst=33:*.tex=33:*.texttile=33:*.bib=35:*.json=35:*.jsonl=35:*.jsonnet=35:*.libsonnet=35:*.rss=35:*.xml=35:*.fxml=35:*.toml=35:*.yaml=35:*.yml=35:*.dtd=35:*.cbr=35:*.cbz=35:*.chm=35:*.pdf=35:*.PDF=35:*.epub=35:*.awk=35:*.bash=35:*.bat=35:*.BAT=35:*.sed=35:*.sh=35:*.zsh=35:*.vim=35:*.py=35:*.ipynb=35:*.rb=35:*.gemspec=35:*.pl=35:*.PL=35:*.t=35:*.msql=35:*.mysql=35:*.pgsql=35:*.sql=35:*.r=35:*.R=35:*.cljw=35:*.scala=35:*.sc=35:*.dart=35:*.asm=35:*.cl=35:*.lisp=35:*.rkt=35:*.el=35:*.elc=35:*.eln=35:*.lua=35:*.c=35:*.C=35:*.h=35:*.H=35:*.tcc=35:*.c++=35:*.h++=35:*.hpp=35:*.hxx=35:*ii.=35:*.m=35:*.M=35:*.cc=35:*.cs=35:*.cp=35:*.cpp=35:*.cxx=35:*.go=35:*.f=35:*.F=35:*.nim=35:*.nimble=35:*.s=35:*.S=35:*.rs=35:*.scpt=35:*.swift=35:*.vala=35:*.vapi=35:*.hs=35:*.lhs=35:*.zig=35:*.v=35:*.pyc=35:*.tf=35:*.tfstate=35:*.tfvars=35:*.css=35:*.less=35:*.sass=35:*.scss=35:*.htm=35:*.html=35:*.jhtm=35:*.mht=35:*.eml=35:*.coffee=35:*.java=35:*.js=35:*.mjs=35:*.jsm=35:*.jsp=35:*.rasi=35:*.php=35:*.twig=35:*.vb=35:*.vba=35:*.vbs=35:*.Dockerfile=35:*.dockerignore=35:*.Makefile=35:*.MANIFEST=35:*.am=35:*.in=35:*.hin=35:*.scan=35:*.m4=35:*.old=35:*.out=35:*.SKIP=35:*.diff=35:*.patch=35:*.tmpl=35:*.j2=35:*PKGBUILD=35:*config=35:*.conf=35:*.service=31:*.@.service=31:*.socket=31:*.swap=31:*.device=31:*.mount=31:*.automount=31:*.target=31:*.path=31:*.timer=31:*.snapshot=31:*.allow=31:*.swp=31:*.swo=31:*.tmp=31:*.pid=31:*.state=31:*.lock=31:*.lockfile=31:*.pacnew=31:*.un=31:*.orig=31:' set -gx LS_COLORS 'di=01;34:ln=01;36:pi=33:so=01;35:bd=01;33:cd=33:or=31:ex=01;32:*.7z=01;31:*.bz2=01;31:*.gz=01;31:*.lz=01;31:*.lzma=01;31:*.lzo=01;31:*.rar=01;31:*.tar=01;31:*.tbz=01;31:*.tgz=01;31:*.xz=01;31:*.zip=01;31:*.zst=01;31:*.zstd=01;31:*.bmp=01;35:*.tiff=01;35:*.tif=01;35:*.TIFF=01;35:*.gif=01;35:*.jpeg=01;35:*.jpg=01;35:*.png=01;35:*.webp=01;35:*.pot=01;35:*.pcb=01;35:*.gbr=01;35:*.scm=01;35:*.xcf=01;35:*.spl=01;35:*.stl=01;35:*.dwg=01;35:*.ply=01;35:*.apk=01;31:*.deb=01;31:*.rpm=01;31:*.jad=01;31:*.jar=01;31:*.crx=01;31:*.xpi=01;31:*.avi=01;35:*.divx=01;35:*.m2v=01;35:*.m4v=01;35:*.mkv=01;35:*.MOV=01;35:*.mov=01;35:*.mp4=01;35:*.mpeg=01;35:*.mpg=01;35:*.sample=01;35:*.wmv=01;35:*.3g2=01;35:*.3gp=01;35:*.gp3=01;35:*.webm=01;35:*.flv=01;35:*.ogv=01;35:*.f4v=01;35:*.3ga=01;35:*.aac=01;35:*.m4a=01;35:*.mp3=01;35:*.mp4a=01;35:*.oga=01;35:*.ogg=01;35:*.opus=01;35:*.s3m=01;35:*.sid=01;35:*.wma=01;35:*.flac=01;35:*.alac=01;35:*.mid=01;35:*.midi=01;35:*.pcm=01;35:*.wav=01;35:*.ass=01;33:*.srt=01;33:*.ssa=01;33:*.sub=01;33:*.git=01;33:*.ass=01;33:*README=33:*README.rst=33:*README.md=33:*LICENSE=33:*COPYING=33:*INSTALL=33:*COPYRIGHT=33:*AUTHORS=33:*HISTORY=33:*CONTRIBUTOS=33:*PATENTS=33:*VERSION=33:*NOTICE=33:*CHANGES=33:*CHANGELOG=33:*log=33:*.txt=33:*.md=33:*.markdown=33:*.nfo=33:*.org=33:*.pod=33:*.rst=33:*.tex=33:*.texttile=33:*.bib=35:*.json=35:*.jsonl=35:*.jsonnet=35:*.libsonnet=35:*.rss=35:*.xml=35:*.fxml=35:*.toml=35:*.yaml=35:*.yml=35:*.dtd=35:*.cbr=35:*.cbz=35:*.chm=35:*.pdf=35:*.PDF=35:*.epub=35:*.awk=35:*.bash=35:*.bat=35:*.BAT=35:*.sed=35:*.sh=35:*.zsh=35:*.vim=35:*.py=35:*.ipynb=35:*.rb=35:*.gemspec=35:*.pl=35:*.PL=35:*.t=35:*.msql=35:*.mysql=35:*.pgsql=35:*.sql=35:*.r=35:*.R=35:*.cljw=35:*.scala=35:*.sc=35:*.dart=35:*.asm=35:*.cl=35:*.lisp=35:*.rkt=35:*.el=35:*.elc=35:*.eln=35:*.lua=35:*.c=35:*.C=35:*.h=35:*.H=35:*.tcc=35:*.c++=35:*.h++=35:*.hpp=35:*.hxx=35:*ii.=35:*.m=35:*.M=35:*.cc=35:*.cs=35:*.cp=35:*.cpp=35:*.cxx=35:*.go=35:*.f=35:*.F=35:*.nim=35:*.nimble=35:*.s=35:*.S=35:*.rs=35:*.scpt=35:*.swift=35:*.vala=35:*.vapi=35:*.hs=35:*.lhs=35:*.zig=35:*.v=35:*.pyc=35:*.tf=35:*.tfstate=35:*.tfvars=35:*.css=35:*.less=35:*.sass=35:*.scss=35:*.htm=35:*.html=35:*.jhtm=35:*.mht=35:*.eml=35:*.coffee=35:*.java=35:*.js=35:*.mjs=35:*.jsm=35:*.jsp=35:*.rasi=35:*.php=35:*.twig=35:*.vb=35:*.vba=35:*.vbs=35:*.Dockerfile=35:*.dockerignore=35:*.Makefile=35:*.MANIFEST=35:*.am=35:*.in=35:*.hin=35:*.scan=35:*.m4=35:*.old=35:*.out=35:*.SKIP=35:*.diff=35:*.patch=35:*.tmpl=35:*.j2=35:*PKGBUILD=35:*config=35:*.conf=35:*.service=31:*.@.service=31:*.socket=31:*.swap=31:*.device=31:*.mount=31:*.automount=31:*.target=31:*.path=31:*.timer=31:*.snapshot=31:*.allow=31:*.swp=31:*.swo=31:*.tmp=31:*.pid=31:*.state=31:*.lock=31:*.lockfile=31:*.pacnew=31:*.un=31:*.orig=31:'
atuin init fish | source set -l connection_type
# Disable atuin up arrow and ctrl-r keybindings when running in a tty
if test -z "$DISPLAY" && test -z "$WAYLAND_DISPLAY" && test -z "$SSH_CLIENT"
atuin init fish --disable-up-arrow --disable-ctrl-r | source
else
atuin init fish | source
end
# Ghostty shell integration for Bash. This must be at the top of your fish!!!
if set -q GHOSTTY_RESOURCES_DIR
source "$GHOSTTY_RESOURCES_DIR/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish"
end
''; '';
}; };

View file

@ -1,8 +1,11 @@
{ pkgs, config, lib, ... }:
let
cfg = config.myHome.shell.git;
in
{ {
pkgs,
config,
lib,
...
}: let
cfg = config.myHome.shell.git;
in {
options.myHome.shell.git = { options.myHome.shell.git = {
enable = lib.mkEnableOption "git"; enable = lib.mkEnableOption "git";
username = lib.mkOption { username = lib.mkOption {
@ -18,51 +21,54 @@ in
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf cfg.enable { (lib.mkIf cfg.enable {
programs.gh.enable = true; programs = {
programs.gpg.enable = true; gh.enable = true;
gpg.enable = true;
git = {
enable = true;
programs.git = { userName = cfg.username;
enable = true; userEmail = cfg.email;
userName = cfg.username; extraConfig = {
userEmail = cfg.email; core.autocrlf = "input";
init.defaultBranch = "main";
extraConfig = { pull.rebase = true;
core.autocrlf = "input"; rebase.autoStash = true;
init.defaultBranch = "main"; # public key for signing commits
pull.rebase = true; user.signingKey = cfg.signingKey;
rebase.autoStash = true; # ssh instead of gpg
# public key for signing commits gpg.format = "ssh";
user.signingKey = cfg.signingKey; # 1password signing gui git signing
# ssh instead of gpg gpg.ssh.program = "${pkgs._1password-gui}/bin/op-ssh-sign";
gpg.format = "ssh"; # Auto sign commits without -S
# 1password signing gui git signing commit.gpgsign = true;
gpg.ssh.program = "${pkgs._1password-gui}/bin/op-ssh-sign"; };
# Auto sign commits without -S aliases = {
commit.gpgsign = true; co = "checkout";
};
ignores = [
# Mac OS X hidden files
".DS_Store"
# Windows files
"Thumbs.db"
# asdf
".tool-versions"
# Sops
".decrypted~*"
"*.decrypted.*"
# Python virtualenvs
".venv"
# Aider Chat
".aider*"
];
}; };
aliases = {
co = "checkout";
};
ignores = [
# Mac OS X hidden files
".DS_Store"
# Windows files
"Thumbs.db"
# asdf
".tool-versions"
# Sops
".decrypted~*"
"*.decrypted.*"
# Python virtualenvs
".venv"
];
}; };
home.packages = [ home.packages = [
pkgs.git-filter-repo pkgs.git-filter-repo
pkgs.tig pkgs.tig
pkgs.lazygit pkgs.unstable.lazygit
]; ];
}) })
]; ];

View file

@ -1,12 +1,14 @@
{ lib {
, config lib,
, ... config,
...
}: }:
with lib; let with lib; let
cfg = config.myHome.shell.starship; cfg = config.myHome.shell.starship;
in in {
{ options.myHome.shell.starship = {
options.myHome.shell.starship = { enable = mkEnableOption "starship"; }; enable = mkEnableOption "starship";
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.starship = { programs.starship = {

View file

@ -1,8 +1,12 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
with lib; let with lib; let
cfg = config.myHome.shell.wezterm; cfg = config.myHome.shell.wezterm;
in in {
{
options.myHome.shell.wezterm = { options.myHome.shell.wezterm = {
enable = mkEnableOption "wezterm"; enable = mkEnableOption "wezterm";
configPath = mkOption { configPath = mkOption {

View file

@ -1,39 +0,0 @@
{ ... }: {
config = {
networking.hostId = "ad4380db";
networking.hostName = "durincore";
# Kernel mods
boot = {
initrd = {
availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ];
kernelModules = [ ];
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems."/" =
{ device = "rpool/root";
fsType = "zfs";
};
fileSystems."/home" =
{ device = "rpool/home";
fsType = "zfs";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/F1B9-CA7C";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices = [ ];
# System settings and services.
mySystem = {
system.motd.networkInterfaces = [ "enp0s31f6" "wlp4s0" ];
};
};
}

View file

@ -1,11 +0,0 @@
{ ... }:
''
workgroup = WORKGROUP
server string = gandalf
netbios name = gandalf
security = user
# note: localhost is the ipv6 localhost ::1
hosts allow = 0.0.0.0/0
guest account = nobody
map to guest = bad user
''

View file

@ -1,105 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, inputs, ... }:
let
sanoidConfig = import ./config/sanoid.nix { };
in
{
imports =
[
(modulesPath + "/installer/scan/not-detected.nix")
inputs.disko.nixosModules.disko
(import ../../profiles/disko-nixos.nix { disks = [ "/dev/sda" ]; })
];
boot = {
initrd = {
availableKernelModules = [ "ehci_pci" "ahci" "mpt3sas" "isci" "usbhid" "usb_storage" "sd_mod" ];
kernelModules = [ "nfs" ];
supportedFilesystems = [ "nfs" ];
};
kernelModules = [ "kvm-intel" "vfio" "vfio_iommu_type1" "vfio_pci" "vfio_virqfd" ];
extraModulePackages = [ ];
kernelParams = [ "iommu=pt" "intel_iommu=on" "zfs.zfs_arc_max=107374182400" ]; # 100GB
};
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGSFTSVPt43PBpSMSF1dGTzN2JbxztDZUml7g4+PnWe CSI-Driver@talos"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO/W445gX2IINRbE6crIMwgN6Ks8LTzAXR86pS9xp335 root@Sting"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBROTzSefJGJeCNUgNLbE5l4sHHg2fHUO4sCwqvP+zAd root@Gollum"
];
# Network settings
networking = {
hostName = "gandalf";
hostId = "e2fc95cd";
useDHCP = false; # needed for bridge
networkmanager.enable = true;
# TODO: Add ports specifically.
# firewall.enable = false;
interfaces = {
"enp130s0f0".useDHCP = true;
"enp130s0f1".useDHCP = true;
};
# For VMs
bridges = {
"br0" = {
interfaces = [ "enp130s0f1" ];
};
};
};
swapDevices = [ ];
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
sops = {
secrets = {
"lego/dnsimple/token" = {
mode = "0444";
sopsFile = ./secrets.sops.yaml;
};
};
};
# System settings and services.
mySystem = {
purpose = "Production";
system = {
motd.networkInterfaces = [ "enp130s0f0" "enp130s0f1" ];
# ZFS
zfs.enable = true;
zfs.mountPoolsAtBoot = [ "eru" ];
# NFS
nfs.enable = true;
# Samba
samba.enable = true;
samba.shares = import ./config/samba-shares.nix { };
samba.extraConfig = import ./config/samba-config.nix { };
};
services = {
podman.enable = true;
libvirt-qemu.enable = true;
# Sanoid
sanoid = {
enable = true;
inherit (sanoidConfig.outputs) templates datasets;
};
# Unifi & Lego-Auto
unifi.enable = true;
lego-auto = {
enable = true;
dnsimpleTokenPath = "${config.sops.secrets."lego/dnsimple/token".path}";
domains = "gandalf.jahanson.tech";
email = "joe@veri.dev";
provider = "dnsimple";
};
};
};
}

View file

@ -1,77 +0,0 @@
lego:
dnsimple:
token: ENC[AES256_GCM,data:CfRFhGE8AyZfO9RzoXXTfm8kstvx+Fuy53o9ulYNZiufzzSQ4KzwYIoCRw==,iv:HEC8hRpmk7YDI7RHj29ZAeFKyPgsWTHw1sxjdZuhcrw=,tag:7RhEhZ9GkyBE9PJRe+gD+Q==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1d9p83j52m2xg0vh9k7q0uwlxwhs3y6tlv68yg9s2h9mdw2fmmsqshddz5m
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUZVhNdGh2c3dpYWU2TDNJ
M2Vyb29jQ2xHMXBKVk10dkhWVUFmVkpmV2tnCjF5ZnBBcGtkZjFYbU0zQXNNRCti
QzVKOGR2OUQvRXVvOXZlb1I0V00rcWsKLS0tIElHeHhkSmt5UkZhTjk1dkFSbUp0
M1BiUzZkU0pDbHVQNC9yQ3pzSU5INm8KcRB4uY0PHnDfc4bJZwqkK/S7FbEXuxEu
ot9oVR4sZBs7Uhi5Ixz7Kmk9dBJ+E9dWPxDeYhYo3V0Tq77h1vVOyg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1m83ups8xn2jy4ayr8gw0pyn34smr0huqc5v76e4887az4vsl4yzsj0dlhd
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNalVRWXVGN0hqZDdYUDVZ
TVRwVHJsTEJoTVIzenFuY0dnTWs1bnRHZnhzCnNPTnJ1Uk92aVRaMlA4VTRYbXNh
MW5ycEUzUVk0RW1Iby9kWjQ1cTVXWDgKLS0tIDdVaTcvNm9Ca2hTMzBlSGZVUnZN
a2U1ZjIwRWx1bWp6TktablBqMUduUmMKCFT9vPMu/fob5SQG1004925OB1KNhsUm
obph/984DUTQxk6IvnJ7fPrnFwL5yY1azdybjPlwGw6o5SmwKpxWBQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2RjUvSFJqNGxieVZiVE9q
NjB4RHcraXk5TnJtN1RSNXZSMlEwbjgxaUZVCjRxUGUwTjBFSU9nTHpRbWpmVkRQ
cllyei9URXYyRGgrTGdjWXRSZmpRYnMKLS0tIHNQOXpkZnI5b200d0JiSVI2N1BU
MS9MRW5ocGRMWXdBL0E5N00zbGZzVFEKxeMB0/opzFTnlSBK1vEsLqQ0qIDhOuw5
S+g8eYTVXSIs/3TMUnOJxDezAG2l00vyWryPw2sGOnqgZCnF9VB/mw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1lp6rrlvmytp9ka6q89m0e0am26222kwrn7aqd45hu07s3a6jv3gqty86eu
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvbzJDWHhIT2tSekxpWmFR
cVFocEl6N0VWM2FYVC9FeE9zeG0wYUhnazJRCllsdlFVZXR0YTA2T2h0ZUVienpQ
MmhJVTkwd1Q4VjNVaWxkL0lVTEVLemsKLS0tIHVqMHhQaW55MHBsVmc5TjJjT1Jy
RXdOeXk0NFJuL1ZKTUt3dXdkdlpLenMKmlQ0k9CmSWQ7MqueMbmd/TqYyQiDFZ0G
FPtUIFWxxPY79vsEHq3kxyz4CGMUv7tYx00OK6niLgLZUStd/3Bxmw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1vsqx6kukrfhrwdy4sujnra5gsswzuh0cfcfdh0d9qjrkts8hl5aqnjx32m
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzWTk5S2VkQmNnNjIwQ05y
TkR2MjdnY1pGMVZpT2dadE5icjIvRWtnT2pVClRCcTVHa3BaMGRDWTgzNE5zQzBq
MWRWWi83b0k3OUo5WXhHTVRZSmovMWMKLS0tIFF4UlNtNVFkd3phTzd6R2FuY0Js
VWpzZTdXSWpiV2tRbnc5VlVWM3FCak0KQGy+ZWdvEh09y9z1Dj3GTVyeAJ5notCH
ujbOfaly8e9E2g4uOxISxyFe39xlOZd6zEInZ5qiKPrZz37ASChBkA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrZDNFa0U4MWs0dmVkZXhi
V3JjdXIrTTdkamkzRW1jU0wzNnluQ0lJbmpNCkcxNUNwc3ZxMXJreXBxNUlaR0xN
RmFDZ3RIaVU5aCttS3Q5dWo0QUovVDgKLS0tIEVJQm1xWE80OVRyWUxkMzFXRHBp
RlJTZjgzQ3pDVHRPQ2dFbHBqdzA3N0EKGBFnnJMqUrbaIviqpX4CP4Ps45Lk/Yyn
fpVxSlwjOHNDwQ4ojUjv11FRo9WHUTGACFniUtvYc0oaLNygNgf8+Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBodERMdDN4cVRiS0tVck5h
N3RySnRtSXJHZEthRWZNcENrNXY4bHNHa0R3Cm1HL0lzWnpocWhXNDV3RFRxL1ZG
dWlCQWtzMEZlRnNML2NrOUVPSVRTcHMKLS0tIEsrbk5VOUZhbDFRRHRuWW56TjE1
V1d0d1lKb3hyYVQ4elBIZ0hnU3FTbnMKiWERjAwlJRPK+PILCBV03uyNVnNgolA8
PS0vbIDVNiX0pIrRlM2sVivZwqajjTB3XROXMmbIKpQxDMjvpHgqJA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-07-15T23:16:58Z"
mac: ENC[AES256_GCM,data:OQn/8yJX1xRapEUflwUHaHabt8i1EbK27vAM5mJge5n/y2+G7xYfpt2YsRUikogl1q4hqSGLe12WFYdG3TXqD5aBnwnf8if0Cax2wcjcm0ybcuWflXgZbtjWnVKV9w1Y8LCXpMd129VeeqysrY/lThRjXk1ByBcfbZ/RMZOyWOw=,iv:9mn0FH39xgFXisuEZrERhsjXCM7nQhMSoNdNTuGoHXc=,tag:T7AgJ8fYKVLDtRPm794AAg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View file

@ -0,0 +1,14 @@
redeye.hsn.dev {
log {
output file /var/log/caddy/redeye.hsn.dev.log
}
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
reverse_proxy {
transport http {
tls_insecure_skip_verify
}
to http://127.0.0.1:11080
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,12 @@
{lib, ...}:
# Includes all files with .nix suffix in the current directory except default.nix
let
dir = ./.;
files = lib.filterAttrs (
name: type:
type == "regular" && name != "default.nix" && lib.hasSuffix ".nix" name
) (builtins.readDir dir);
imports = map (name: "${dir}/${name}") (builtins.attrNames files);
in {
imports = imports;
}

View file

@ -0,0 +1,40 @@
{
config,
pkgs,
...
}: {
mySystem.services.borgmatic = {
configurations.jellyfin = {
source_directories = [
"/nahar/containers/volumes/jellyfin"
];
repositories = [
{
label = "local";
path = "/eru/borg/jellyfin";
}
{
label = "remote";
path = "ssh://uy5oy4m3@uy5oy4m3.repo.borgbase.com/./repo";
}
];
ssh_command = "${pkgs.openssh}/bin/ssh -i ${config.sops.secrets."borgmatic/jellyfin/append_key".path}";
encryption_passcommand = ''${pkgs.coreutils-full}/bin/cat ${config.sops.secrets."borgmatic/jellyfin/encryption_passphrase".path}'';
# Retention settings
keep_daily = 14;
exclude_patterns = [
"*/Cache/*"
];
zfs = {
zfs_command = "${pkgs.zfs}/bin/zfs";
mount_command = "${pkgs.util-linux}/bin/mount";
umount_command = "${pkgs.util-linux}/bin/umount";
};
};
};
}

View file

@ -0,0 +1,40 @@
{
config,
pkgs,
...
}: {
mySystem.services.borgmatic = {
configurations.plex = {
source_directories = [
"/nahar/containers/volumes/plex"
];
repositories = [
{
label = "local";
path = "/eru/borg/plex";
}
{
label = "remote";
path = "ssh://kvq39z04@kvq39z04.repo.borgbase.com/./repo";
}
];
ssh_command = "${pkgs.openssh}/bin/ssh -i ${config.sops.secrets."borgmatic/plex/append_key".path}";
encryption_passcommand = ''${pkgs.coreutils-full}/bin/cat ${config.sops.secrets."borgmatic/plex/encryption_passphrase".path}'';
# Retention settings
keep_daily = 14;
exclude_patterns = [
"*/Cache/*"
];
zfs = {
zfs_command = "${pkgs.zfs}/bin/zfs";
mount_command = "${pkgs.util-linux}/bin/mount";
umount_command = "${pkgs.util-linux}/bin/umount";
};
};
};
}

View file

@ -0,0 +1,32 @@
[
# zroot
"/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_500GB_S58SNM0W406409E"
# nahar
"/dev/nvme0"
"/dev/nvme1"
"/dev/nvme2"
"/dev/nvme3"
"/dev/nvme4"
"/dev/nvme5"
# moria
"/dev/disk/by-id/scsi-35000cca23bc8a504"
"/dev/disk/by-id/scsi-35000cca23bd29918"
"/dev/disk/by-id/scsi-35000cca23bd29970"
"/dev/disk/by-id/scsi-35000cca2524cc70c"
"/dev/disk/by-id/scsi-35000cca2524e03f4"
"/dev/disk/by-id/scsi-35000cca2525680dc"
"/dev/disk/by-id/scsi-35000cca25256b484"
# eru
"/dev/disk/by-id/scsi-350000c0f02f0830c" # unused
"/dev/disk/by-id/scsi-350000c0f01e7d190" # unused
"/dev/disk/by-id/scsi-350000c0f01ea443c"
"/dev/disk/by-id/scsi-350000c0f01f8230c"
"/dev/disk/by-id/scsi-35000c500586e5057"
"/dev/disk/by-id/scsi-35000c500624a0ddb"
"/dev/disk/by-id/scsi-35000c500624a1a8b"
"/dev/disk/by-id/scsi-35000cca046135ad8"
"/dev/disk/by-id/scsi-35000cca04613722c"
"/dev/disk/by-id/scsi-35000cca0461810f8"
"/dev/disk/by-id/scsi-35000cca04618b930"
"/dev/disk/by-id/scsi-35000cca04618cec4"
]

View file

@ -0,0 +1,48 @@
{...}: {
config = {
"core.https_address" = "10.1.1.61:8443"; # Need quotes around key
};
networks = [
{
config = {
"ipv4.address" = "auto"; # Need quotes around key
"ipv6.address" = "auto"; # Need quotes around key
};
description = "";
name = "incusbr0";
type = "";
project = "default";
}
];
storage_pools = [
{
config = {
source = "nahar/incus";
};
description = "";
name = "default";
driver = "zfs";
}
];
profiles = [
{
config = {};
description = "";
devices = {
eth0 = {
name = "eth0";
network = "incusbr0";
type = "nic";
};
root = {
path = "/";
pool = "default";
type = "disk";
};
};
name = "default";
}
];
projects = [];
cluster = null;
}

View file

@ -0,0 +1,41 @@
{...}: {
outputs = {
# ZFS automated snapshots
templates = {
"production" = {
autoprune = true;
autosnap = true;
hourly = 24;
daily = 7;
monthly = 12;
};
};
datasets = {
"nahar/qbittorrent" = {
useTemplate = ["production"];
recursive = true;
};
"nahar/sabnzbd" = {
useTemplate = ["production"];
recursive = true;
};
"nahar/containers/volumes/jellyfin" = {
useTemplate = ["production"];
recursive = true;
};
"nahar/containers/volumes/plex" = {
useTemplate = ["production"];
recursive = true;
};
"nahar/containers/volumes/scrutiny" = {
useTemplate = ["production"];
recursive = true;
};
"nahar/containers/volumes/scrypted" = {
useTemplate = ["production"];
recursive = true;
};
};
};
}

View file

@ -0,0 +1,46 @@
{...}: {
name = "Soft Serve";
log = {
format = "text";
time_format = "2006-01-02 15:04:05";
};
ssh = {
listen_addr = ":23231";
public_url = "ssh://10.1.1.61:23231";
key_path = "ssh/soft_serve_host_ed25519";
client_key_path = "ssh/soft_serve_client_ed25519";
max_timeout = 0;
idle_timeout = 600;
};
git = {
listen_addr = ":9418";
public_url = "git://10.1.1.61";
max_timeout = 0;
idle_timeout = 3;
max_connections = 32;
};
http = {
listen_addr = ":23232";
tls_key_path = null;
tls_cert_path = null;
public_url = "http://10.1.1.61:23232";
};
stats = {
enabled = false;
listen_addr = "10.1.1.61:23233";
};
db = {
driver = "sqlite";
data_source = "soft-serve.db?_pragma=busy_timeout(5000)&_pragma=foreign_keys(1)";
};
lfs = {
enabled = true;
ssh_enabled = false;
};
jobs = {
mirror_pull = "@every 10m";
};
initial_admin_keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILcLI5qN69BuoLp8p7nTYKoLdsBNmZB31OerZ63Car1g jahanson@telchar"
];
}

View file

@ -0,0 +1,230 @@
{...}: {
secrets = {
# Minio
"minio" = {
sopsFile = ../secrets.sops.yaml;
owner = "minio";
group = "minio";
mode = "400";
restartUnits = ["minio.service"];
};
# Syncthing
"syncthing/publicCert" = {
sopsFile = ../secrets.sops.yaml;
owner = "jahanson";
mode = "400";
restartUnits = ["syncthing.service"];
};
"syncthing/privateKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "jahanson";
mode = "400";
restartUnits = ["syncthing.service"];
};
# Prowlarr
"arr/prowlarr/apiKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "prowlarr";
mode = "400";
restartUnits = ["prowlarr.service"];
};
"arr/prowlarr/postgres/dbName" = {
sopsFile = ../secrets.sops.yaml;
owner = "prowlarr";
mode = "400";
restartUnits = ["prowlarr.service"];
};
"arr/prowlarr/postgres/user" = {
sopsFile = ../secrets.sops.yaml;
owner = "prowlarr";
mode = "400";
restartUnits = ["prowlarr.service"];
};
"arr/prowlarr/postgres/password" = {
sopsFile = ../secrets.sops.yaml;
owner = "prowlarr";
mode = "400";
restartUnits = ["prowlarr.service"];
};
"arr/prowlarr/postgres/host" = {
sopsFile = ../secrets.sops.yaml;
owner = "prowlarr";
mode = "400";
restartUnits = ["prowlarr.service"];
};
# Sonarr
"arr/sonarr/1080p/apiKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/1080p/postgres/dbName" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/1080p/postgres/user" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/1080p/postgres/password" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/1080p/postgres/host" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/1080p/extraEnvVars" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-tv1080p.service"];
};
"arr/sonarr/anime/apiKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
"arr/sonarr/anime/postgres/dbName" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
"arr/sonarr/anime/postgres/user" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
"arr/sonarr/anime/postgres/password" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
"arr/sonarr/anime/postgres/host" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
"arr/sonarr/anime/extraEnvVars" = {
sopsFile = ../secrets.sops.yaml;
owner = "sonarr";
mode = "400";
restartUnits = ["sonarr-anime.service"];
};
# Radarr
"arr/radarr/1080p/apiKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/1080p/postgres/dbName" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/1080p/postgres/user" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/1080p/postgres/password" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/1080p/postgres/host" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/1080p/extraEnvVars" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-movies1080p.service"];
};
"arr/radarr/anime/apiKey" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
"arr/radarr/anime/postgres/dbName" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
"arr/radarr/anime/postgres/user" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
"arr/radarr/anime/postgres/password" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
"arr/radarr/anime/postgres/host" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
"arr/radarr/anime/extraEnvVars" = {
sopsFile = ../secrets.sops.yaml;
owner = "radarr";
mode = "400";
restartUnits = ["radarr-anime.service"];
};
# Unpackerr
"arr/unpackerr/extraEnvVars" = {
sopsFile = ../secrets.sops.yaml;
owner = "unpackerr";
mode = "400";
restartUnits = ["unpackerr.service"];
};
# Borgmatic
"borgmatic/plex/encryption_passphrase" = {
sopsFile = ../secrets.sops.yaml;
mode = "400";
restartUnits = ["borgmatic.service"];
};
"borgmatic/plex/append_key" = {
sopsFile = ../secrets.sops.yaml;
mode = "400";
restartUnits = ["borgmatic.service"];
};
"borgmatic/jellyfin/encryption_passphrase" = {
sopsFile = ../secrets.sops.yaml;
mode = "400";
restartUnits = ["borgmatic.service"];
};
"borgmatic/jellyfin/append_key" = {
sopsFile = ../secrets.sops.yaml;
mode = "400";
restartUnits = ["borgmatic.service"];
};
};
}

View file

@ -0,0 +1,390 @@
{
config,
inputs,
pkgs,
...
}: let
sanoidConfig = import ./config/sanoid.nix {};
disks = import ./config/disks.nix;
smartdDevices = map (device: {inherit device;}) disks;
pushoverNotify = pkgs.writeShellApplication {
name = "pushover-notify";
runtimeInputs = with pkgs; [
curl
jo
jq
];
excludeShellChecks = ["SC2154"];
text = ''
${builtins.readFile ./scripts/pushover-notify.sh}
'';
};
refreshSeries = pkgs.writeShellApplication {
name = "refresh-series";
runtimeInputs = with pkgs; [
curl
jq
];
excludeShellChecks = ["SC2154"];
text = ''
${builtins.readFile ./scripts/refresh-series.sh}
'';
};
in {
imports = [
inputs.disko.nixosModules.disko
(import ../../profiles/disko-nixos.nix {
disks = ["/dev/sda|/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_500GB_S58SNM0W406409E"];
})
./config/borgmatic
inputs.nix-minecraft.nixosModules.minecraft-servers
];
environment = {
sessionVariables = {
# Wayland and Chromium/Electron apps.
NIXOS_OZONE_WL = "1";
};
# System packages
systemPackages = with pkgs; [
inputs.zen-browser.packages."${system}".default # beta
inputs.ghostty.packages."${system}".default # terminal
pavucontrol # Pulseaudio volume control
zulu
# dev
uv
# fun
fastfetch
prismlauncher # Minecraft launcher
# Scripts
pushoverNotify
refreshSeries
];
};
users.users.root.openssh.authorizedKeys.keys = [];
# Network settings
networking = {
hostName = "shadowfax";
hostId = "a885fabe";
};
# Home Manager
home-manager.users.jahanson = {
# Git settings
# TODO: Move to config module.
programs.git = {
enable = true;
userName = "Joseph Hanson";
userEmail = "joe@veri.dev";
extraConfig = {
core.autocrlf = "input";
init.defaultBranch = "main";
pull.rebase = true;
rebase.autoStash = true;
};
};
};
# enable docker socket at /run/docker.sock
virtualisation.podman.dockerSocket.enable = true;
programs = {
# 1Password cli
_1password.enable = true;
_1password-gui.enable = true;
# Mosh
mosh = {
enable = true;
openFirewall = true;
};
# VSCode Compatibility Settings
nix-ld.enable = true;
};
# Open ports in the firewall.
networking.firewall = {
allowedTCPPorts = [
# Caddy
80 # http
443 # https
179 # BGP
2019 # caddy admin api
# Minio
9000 # console web interface
9001 # api interface
# Soft-serve
23231 # SSH
23232 # HTTP
9418 # Git
# scrypted
45005
];
};
services = {
# Minecraft
minecraft-servers = {
enable = true;
eula = true;
openFirewall = true;
dataDir = "/nahar/minecraft";
servers.fabric = {
enable = true;
# Specify the custom minecraft server package
package = pkgs.fabricServers.fabric-1_21_4;
symlinks = {
mods = pkgs.linkFarmFromDrvs "mods" (
builtins.attrValues {
Fabric-API = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/ZNwYCTsk/fabric-api-0.118.0%2B1.21.4.jar";
sha512 = "1e0d31b6663dc2c7be648f3a5a9cf7b698b9a0fd0f7ae16d1d3f32d943d7c5205ff63a4f81b0c4e94a8997482cce026b7ca486e99d9ce35ac069aeb29b02a30d";
};
}
);
};
};
};
# Minio
minio = {
enable = true;
dataDir = ["/eru/minio"];
rootCredentialsFile = config.sops.secrets."minio".path;
};
# Netdata
netdata = {
enable = true;
};
# Prometheus exporters
prometheus.exporters = {
# Node Exporter - port 9100
node.enable = true;
# ZFS Exporter - port 9134
zfs.enable = true;
};
# Smart daemon for monitoring disk health.
smartd = {
devices = smartdDevices;
# Short test every day at 2:00 AM and long test every Sunday at 4:00 AM.
defaults.monitored = "-a -o on -s (S/../.././02|L/../../7/04)";
};
# Soft Serve - SSH git server
soft-serve = {
enable = true;
settings = import ./config/soft-serve.nix {};
package = pkgs.unstable.soft-serve;
};
sunshine = {
enable = true;
autoStart = true;
capSysAdmin = true; # only needed for Wayland
openFirewall = true;
package = pkgs.unstable.sunshine;
};
# Tailscale
tailscale = {
enable = true;
openFirewall = true;
};
# VSCode Compatibility Settings
vscode-server.enable = true;
xserver.videoDrivers = ["nvidia"];
};
# sops
sops = import ./config/sops-secrets.nix {};
# System settings and services.
mySystem = {
## Desktop Environment
# Hyprland
de.hyprland.enable = true;
# VS Code
editor.vscode.enable = true;
# Containers
containers = {
jellyfin.enable = true;
jellyseerr.enable = true;
ollama.enable = true;
plex.enable = true;
scrypted.enable = true;
};
purpose = "Production";
# Services
services = {
borgmatic.enable = true;
# Misc
libvirt-qemu.enable = true;
podman.enable = true;
# Prowlarr
prowlarr = {
enable = true;
package = pkgs.unstable.prowlarr;
dataDir = "/nahar/prowlarr";
port = 9696;
openFirewall = true;
hardening = true;
apiKeyFile = config.sops.secrets."arr/prowlarr/apiKey".path;
};
# Radarr
radarr = {
enable = true;
instances = {
movies1080p = {
enable = true;
package = pkgs.unstable.radarr;
dataDir = "/nahar/radarr/1080p";
extraEnvVarFile = config.sops.secrets."arr/radarr/1080p/extraEnvVars".path;
moviesDir = "/moria/media/Movies";
user = "radarr";
group = "kah";
port = 7878;
openFirewall = true;
hardening = true;
apiKeyFile = config.sops.secrets."arr/radarr/1080p/apiKey".path;
};
moviesAnime = {
enable = true;
package = pkgs.unstable.radarr;
dataDir = "/nahar/radarr/anime";
extraEnvVarFile = config.sops.secrets."arr/radarr/anime/extraEnvVars".path;
moviesDir = "/moria/media/Anime/Movies";
user = "radarr";
group = "kah";
port = 7879;
openFirewall = true;
hardening = true;
apiKeyFile = config.sops.secrets."arr/radarr/anime/apiKey".path;
};
};
};
# Sonarr
sonarr = {
enable = true;
instances = {
tv1080p = {
enable = true;
package = pkgs.unstable.sonarr;
dataDir = "/nahar/sonarr/1080p";
extraEnvVarFile = config.sops.secrets."arr/sonarr/1080p/extraEnvVars".path;
tvDir = "/moria/media/TV";
user = "sonarr";
group = "kah";
port = 8989;
openFirewall = true;
hardening = true;
apiKeyFile = config.sops.secrets."arr/sonarr/1080p/apiKey".path;
};
anime = {
enable = true;
package = pkgs.unstable.sonarr;
dataDir = "/nahar/sonarr/anime";
extraEnvVarFile = config.sops.secrets."arr/sonarr/anime/extraEnvVars".path;
tvDir = "/moria/media/Anime/Shows";
user = "sonarr";
group = "kah";
port = 8990;
openFirewall = true;
hardening = true;
apiKeyFile = config.sops.secrets."arr/sonarr/anime/apiKey".path;
};
};
};
# Sabnzbd
sabnzbd = {
enable = true;
package = pkgs.unstable.sabnzbd;
configFile = "/nahar/sabnzbd/sabnzbd.ini";
port = 8457;
user = "sabnzbd";
group = "kah";
# Security hardening.
dataDir = "/nahar/sabnzbd";
downloadsDir = "/eru/media/sabnzbd";
hardening = true;
openFirewall = true;
};
# Unpackerr
unpackerr = {
enable = true;
package = pkgs.unstable.unpackerr;
configFile = "/tmp/unpackerr/config.yaml";
extraEnvVarsFile = config.sops.secrets."arr/unpackerr/extraEnvVars".path;
user = "unpackerr";
group = "kah";
};
# Sanoid
sanoid = {
enable = true;
inherit (sanoidConfig.outputs) templates datasets;
};
# Scrutiny
scrutiny = {
enable = true;
devices = disks;
extraCapabilities = [
"SYS_RAWIO"
"SYS_ADMIN"
];
containerVolumeLocation = "/nahar/containers/volumes/scrutiny";
port = 8585;
};
# Syncthing
syncthing = {
enable = false;
user = "jahanson";
publicCertPath = config.sops.secrets."syncthing/publicCert".path;
privateKeyPath = config.sops.secrets."syncthing/privateKey".path;
};
# qBittorrent
qbittorrent = {
enable = true;
package = pkgs.unstable.qbittorrent.override {guiSupport = false;};
user = "qbittorrent";
group = "kah";
dataDir = "/nahar/qbittorrent";
downloadsDir = "/eru/media/qb/downloads";
webuiPort = 8456;
openFirewall = true;
hardening = true;
qbittorrentPort = 50413;
};
zfs-nightly-snap.enable = true;
};
# System
system = {
incus = {
enable = true;
preseed = import ./config/incus-preseed.nix {};
};
motd.networkInterfaces = ["bond0"];
nfs.enable = true;
zfs.enable = true;
zfs.mountPoolsAtBoot = [
"eru"
"moria"
"nahar"
];
};
};
}

View file

@ -0,0 +1,89 @@
# shellcheck disable=SC2154,2148
# User defined variables for pushover
PUSHOVER_USER_KEY="${PUSHOVER_USER_KEY:-required}"
PUSHOVER_TOKEN="${PUSHOVER_TOKEN:-required}"
PUSHOVER_PRIORITY="${PUSHOVER_PRIORITY:-"-2"}"
PUSHOVER_TITLE="${sonarr_eventtype} - Title unset"
PUSHOVER_MESSAGE="${sonarr_eventtype} - Message unset"
PUSHOVER_URL="${sonarr_eventtype} - url unset"
PUSHOVER_URL_TITLE="${sonarr_eventtype} - url title unset"
if [[ "${sonarr_eventtype:-}" == "Test" ]]; then
PUSHOVER_PRIORITY="1"
printf -v PUSHOVER_TITLE \
"Test Notification"
printf -v PUSHOVER_MESSAGE \
"Howdy this is a test notification from %s" \
"${sonarr_instancename:-Sonarr}"
printf -v PUSHOVER_URL \
"%s" \
"${sonarr_applicationurl:-localhost}"
printf -v PUSHOVER_URL_TITLE \
"Open %s" \
"${sonarr_instancename:-Sonarr}"
fi
if [[ "${sonarr_eventtype:-}" == "Download" ]]; then
printf -v PUSHOVER_TITLE \
"Episode %s" \
"$([[ "${sonarr_isupgrade}" == "True" ]] && echo "Upgraded" || echo "Downloaded")"
printf -v PUSHOVER_MESSAGE \
"<b>%s (S%02dE%02d)</b><small>\n%s</small><small>\n\n<b>Quality:</b> %s</small><small>\n<b>Client:</b> %s</small>" \
"${sonarr_series_title}" \
"${sonarr_episodefile_seasonnumber}" \
"${sonarr_episodefile_episodenumbers}" \
"${sonarr_episodefile_episodetitles}" \
"${sonarr_episodefile_quality:-Unknown}" \
"${sonarr_download_client:-Unknown}"
printf -v PUSHOVER_URL \
"%s/series/%s" \
"${sonarr_applicationurl:-localhost}" \
"${sonarr_series_titleslug}"
printf -v PUSHOVER_URL_TITLE \
"View series in %s" \
"${sonarr_instancename:-Sonarr}"
fi
if [[ "${sonarr_eventtype:-}" == "ManualInteractionRequired" ]]; then
PUSHOVER_PRIORITY="1"
printf -v PUSHOVER_TITLE \
"Episode import requires intervention"
printf -v PUSHOVER_MESSAGE \
"<b>%s</b><small>\n<b>Client:</b> %s</small>" \
"${sonarr_series_title}" \
"${sonarr_download_client:-Unknown}"
printf -v PUSHOVER_URL \
"%s/activity/queue" \
"${sonarr_applicationurl:-localhost}"
printf -v PUSHOVER_URL_TITLE \
"View queue in %s" \
"${sonarr_instancename:-Sonarr}"
fi
json_data=$(
jo \
token="${PUSHOVER_TOKEN}" \
user="${PUSHOVER_USER_KEY}" \
title="${PUSHOVER_TITLE}" \
message="${PUSHOVER_MESSAGE}" \
url="${PUSHOVER_URL}" \
url_title="${PUSHOVER_URL_TITLE}" \
priority="${PUSHOVER_PRIORITY}" \
html="1"
)
status_code=$(
curl \
--silent \
--write-out "%{http_code}" \
--output /dev/null \
--request POST \
--header "Content-Type: application/json" \
--data-binary "${json_data}" \
"https://api.pushover.net/1/messages.json"
)
printf "pushover notification returned with HTTP status code %s and payload: %s\n" \
"${status_code}" \
"$(echo "${json_data}" | jq --compact-output)" >&2

View file

@ -0,0 +1,19 @@
# shellcheck disable=SC2154,2148
CURL_CMD=(curl -fsSL --header "X-Api-Key: ${SONARR__AUTH__APIKEY:-}")
SONARR_API_URL="http://localhost:${SONARR__SERVER__PORT:-}/api/v3"
if [[ "${sonarr_eventtype:-}" == "Grab" ]]; then
tba=$("${CURL_CMD[@]}" "${SONARR_API_URL}/episode?seriesId=${sonarr_series_id:-}" | jq --raw-output '
[.[] | select((.title == "TBA") or (.title == "TBD"))] | length
')
if ((tba > 0)); then
echo "INFO: Refreshing series ${sonarr_series_id:-} due to TBA/TBD episodes found"
"${CURL_CMD[@]}" \
--request POST \
--header "Content-Type: application/json" \
--data-binary '{"name": "RefreshSeries", "seriesId": '"${sonarr_series_id:-}"'}' \
"${SONARR_API_URL}/command" &>/dev/null
fi
fi

View file

@ -0,0 +1,120 @@
syncthing:
publicCert: ENC[AES256_GCM,data:qPtXFKL8BrUNMmuF4YOKNAmcL3USnTrMMAahnHCaBFyTNNrSa8zktRG0gryBUvsFTYqwcP6r/FFq5bEpjq6mGPJ942LrYSvv5nqRDnvhEJs3X6wiZfriq2Dyps+2MLqcWjU0tsj+M3IfkOGIry0XSP5EkWFgBJxB3HbRlwqA2ZDAnSOT1OWQbFOl4dYQ7gkssMDyVfrfMoiaw33Q9ttHhLswJIbMK/p1wSWPsEY20ZHEa4fSq06Eks0vUYCmDIrSiFr/fNF5veLO8LAnojJkSm87ZDkX+tAMa7/ZI96fZssHbJHU4dHrsbTlpVyG8AOQ7M9D0cMaH7WjJlV3fn5gAM8xgMjj9YcC3zMFSfBMeVyJF36l0G3jhY+1BO7omqqWY3lwEx/clt/HJ+q6K8z4/uyTfBsuMGPakkDXmplV6j23hwz9jzd/tCMh7/jVFyiwdSf9Ykykf0Qh8af4v1RVzcwbcBnpb4pjMic16WvBWpogt4lTu0o0u9NAMZX/Nu99pxDES7+DLKAIDOoIZwxAYWPY+zTlVusMrbuQ+yvnv1koAi0VJl5n2DpKKxPKKxMYcKN3SqMQ7TX8img3OUIsIje43kbLFnpWwdoBwdKov0PZzBHcH/9SgsBD/aepT1iRkg1Fe6c3EiOF3wKwXBpwuPq61s7+d7ESvOL3sVFEuo6fXhN0aGJK77VnZKqYERjlEOkETjSMNP6ZH1A86YQBFWRXHub1KrhNcZUbTdxuT3UD+gNvoD52InsodblYyDtmSqeEVix9m25buWeurmzSBngPr3L8xxlYt1gRrHZ/4yy2EQPWFo/oMTjqnd1YtcRkNtOzSl7zcXmV0KnY3yAyyyTlwe08PY2rRJ4JUqYS5C3fnv0yQgb7MrYH1Ysau14TOX2WTrTpklPL4zwPz/hVL9hVIeByNshQQZm7KsZXjBGzC8XXRu/3HWNXYXLItHwgNgtVkd8WuYe+bF+u86h1UTDABf4w2tfGVVA6/HqwPQcmdbhQZ+mPHSTbuVcMPLN8MNEK/B1JtBlQID9ybMcbON+pik70d3d+blI=,iv:Ut7rbEVIc2p095rzq9Y6ZS6npa0+atBRLrBjN3mQ6zM=,tag:g1krDi5xhOwr9FfXFQ4mMw==,type:str]
privateKey: ENC[AES256_GCM,data:CFW8XMhLaGFHYqo3+v+4Q8hemV44/Pps/0hBaz8eMwbv5GI34dkSmQ8jh2VY+bRhfGX6sWGXlxBKB44qiTP+jCs4rgBu+AA0j3F4b4/hH/Qj8XoflGMHCfBwsTwYm9vb7Ith3H4F5Fbcv1Dva6mOw3CA65lTfKlxF/NVyj9/cAnqjF0T90jaRYpFN9pLrwkAVBeydc+sofnReFOeI7/IFupxtPKkOaR9wGZK82KQj3+7sXEBgL0HekX677ENBqE4fZHUbe9AKbCe1I4k1RtL9DqANnjTED+ktochzuQ1cUeSnBHtbYD6GDVPisIkJc3Y2a6kmTh5YVF/u8zXMN4n0zwTX+QPA4xms0NCa/528YCSY8VfOfvk9mhQbpmdIob6,iv:gaILRQxX/0poYQedDYZXzL9/ojzIY7BQ+M68HMxD4go=,tag:D0X9OA7ohL5Z8zPsXPdybw==,type:str]
restic:
plex:
resticUri: ENC[AES256_GCM,data:INfsXRDS0oTwxmbUeuns2GtguB+OJvE1UC5uKjR9dqY7tZo9gS7Byjf7RrBhcq3SAAV1yPFnT1F5IZXrwgyBp1h4,iv:nsvINjznTn0PYrCO3sLaOMwSJeZV5gvDTefNKksgep4=,tag:KeA4+WW9+dV7XjScbDzCVg==,type:str]
resticPassword: ENC[AES256_GCM,data:+U4xZIzo7HbuF+MmZAJhj6+ekO4=,iv:GznZk8Ga4w7Zqx6QoXq/SUn1uURLxW9fMN89zTq7BNI=,tag:IuBFTTS0awiVILNx7Z3iLA==,type:str]
minio: ENC[AES256_GCM,data:EqFhTRqb5fY7IKZSis71i6aN6Llv2EAQxKjBrmoJKRLKFfQUVzHBgGXse42nd9KD2hirGsBiPgvuXulTw1z+bPmh4EVPaq2uR4fva5g4LA==,iv:4Ru3cHsw2Vyw6mtCoNECMVP/r5toYJ/BBvNNa0m3DK8=,tag:pFtHhgX1WgzRYNe87Zh6dw==,type:str]
postgres:
host: ENC[AES256_GCM,data:NkAc3BN09j4=,iv:M52sslgEY9QXcsG5Z+snGFZ7vt4IWiT6uqowoUUk78I=,tag:n/SXxbBuX2+vZknk/gBs5g==,type:str]
port: ENC[AES256_GCM,data:eVFfWA==,iv:sYcdDt9Vw/M0lM7LCVb8wHbwgQ62OfwM+MahvbcG4vs=,tag:uo63B0+r1GOv52bqzeiMZw==,type:int]
pushover:
userKey: ENC[AES256_GCM,data:efCy551JEtPagnRGHkNCKHT+r0yJ/5bqyGTsdeGOdw==,iv:DDAfy3EDSGHo0r5TapW6yjo7XMpVESYYtnUQLBPMg2I=,tag:9ws7n3hlhM4+++aIxOspYg==,type:str]
borgmatic:
plex:
encryption_passphrase: ENC[AES256_GCM,data:+PVidwqMgGuZJE0a9TyLda75viaodnZtEPA6nQWNp1KMR7zHQVBjtRojLuRh5Sd78Q==,iv:zJFecISN0l4r2QKfqAw3sds+l5eBHp+wapE+TDUgX3E=,tag:cy4HWmoJw0ygRhaAQ45zwQ==,type:str]
append_key: ENC[AES256_GCM,data:ht+OoijAcc8BnuAIoZ0K3kfvzlXYgmi61OHOpaR/H8YpadsMgruym2E2VIAibVhrAt0JamHQ8wEps1/Ur7GPRyQgZmq8dUlEJwVFyD31kOFjJDH3r7hZIMuJopAKYEHxuJ0PANqZO4mHbVd6rnnSvb5oOzACst0oKAoqarmjzVKSfRfRCxSP0df6WhuU4/bMq6u8L4FjMXbrYWbeK77tMdv4eEAHEM6SIuMXOad/AKvgYXIUYmhjohsBXfWQ+gENEVQEpYV48bc/zTC6j4RZI335iZQZq39sg5VWMnSsQtQT+UVzsHBbOYZbzC/FyjUKBNduYoniBQFuswf8IbDgwIcEd8eSRhTGWMOATOdy6MtVstXqZhc9YEHytFrAd6biTt7DHAVUTu9ZqqkyouiuGc8f4kdimGz8kSb3ltKUqN7qTACVHjFXNY5PkdHAy5brKiHp0lPyTiHFQYxabeyPD6VfeDNthK40IzmrIbXJynxNbfOfP3lkmDJ3iD5zM0anU8xcNtRu+1NA9k70GGEvgwTdUbpP+Myicn6u,iv:BAyqOh13D2kRyhKf6qX/gEeRMlmhiR4jD+VrRhKejn8=,tag:GGu1hK8t74cnKbP0dNL6vw==,type:str]
jellyfin:
encryption_passphrase: ENC[AES256_GCM,data:G7xk+FGsjV7BxwvBGozXcj0n00EjBhDw+Yea4Wf8fmXl,iv:goylWvW4OLWxi3rIyQ5FbmnNtHSuP93Mnb/P4dCes7c=,tag:UiVw9Q0iTw0TxG4hFzg4SA==,type:str]
append_key: ENC[AES256_GCM,data:1XPDRh3HtKZbgdXf/YyrIWwvuIsTRADtRea+0G0as5vKfMyrqv60IKvCSDqjlZNhUvtmAMFZS/y5AexLB2qNZNM2qjFvbwr1C2WJw9J1fkpcc2mYRrH2XaghFhwLKuD5PCo4jVztOOMGwXzKcwG5BKr0jm+FiffvoUlB8rlEgIihwmDDf00g4sBAvDpjVQdqxNgc14VALzUiuu4X55xIHW/tQk5R84PDfTR++41EvjDxFQau5TxA3xVeQK/skOSRo4RZRE8vF1I3Dc7njVBMK/PyV0iKLJydfK9Ql33ZwDQmHdt+aw/pPlaPWfMAPzLxbdGuOtUaGQijQmELKQP11101QKHDk2q7LYXfGw62VAqb7W1SJYPczZzdzqyFb4NULykAQOhHGW9I8esRCYn0t4Y5vBEYaPjyBuAJz8ClG4zhxwJPAAQBkntIId0Xjk9NjZDeNKqAXpgs3CDIOJYtGUmtA1Am/B/22/VLl9adheEnTtkYlSTRM8/u5RoiA3utipMFJcdkssmBudH8BvXbJFJChoh3qUDD3Gnz,iv:CZyuBaiKMxNaOlFu/OYFmHOeEVWBNJ3rUIBpV/Oh4GQ=,tag:EX5yoC+KRf6IkVm+7d+Qiw==,type:str]
arr:
prowlarr:
apiKey: ENC[AES256_GCM,data:7NKS0QWc/5MIBbasmHHz/EN8wF4ILmsxBQpfZL3J2fs7,iv:WctX4v9GFkseJ+Vqk3U2l5qrgWCcw1Bv3N6RQuwQ1HY=,tag:7FxfWn5ydXu1Pp/B82TOSQ==,type:str]
postgres:
host: ENC[AES256_GCM,data:++C/D+s30hs=,iv:P0HIuGzVypgxfYmhcNodMXbEufPdrlO/nuQwHZ60kxY=,tag:qHzYYmFaeBXyty6ga6sfQw==,type:str]
dbName: ENC[AES256_GCM,data:8t6Ms7cVgSMzN4Vn4w==,iv:mh1nOUuVllIMlj+lhuvXIQqTZ5VCcaU3jj3nOGxAsGs=,tag:OZVFFM2YMENHN3pf9uF+5Q==,type:str]
user: ENC[AES256_GCM,data:ji+57XLFMus=,iv:xC+EuVBs9wzZG+leFnAIZCKbxFwtMmSwqhJgVl4SRak=,tag:o7SqVcv33zukUOJ31ORAgw==,type:str]
password: ENC[AES256_GCM,data:aSiZR0cTtevhD6s0f6+24qILUmfH5OCBUQ==,iv:xPqiNf9N2Mm6Z7lvcB9xsTjgiJ1tren04pM4rOjRc2A=,tag:NSGr7kedaVgqyM5qwKM40w==,type:str]
sonarr:
1080p:
apiKey: ENC[AES256_GCM,data:h2vPlVVkdOScJg0uvs5yv/WK9NpotcF70bD65gTR8TdY,iv:T6F/u4jFt1k+jaLO0epq5nkTr2c1FvtrEfxadNuQLVU=,tag:GNVgD4oAI1OdBrHlXFlYIA==,type:str]
postgres:
host: ENC[AES256_GCM,data:8DruSnH9MBs=,iv:WBgn1seW8Tgy8CLB7mv+BgojNk20LUqqVyS+o3aFtWQ=,tag:bNqeKmcXb95167YHIZD8Kw==,type:str]
dbName: ENC[AES256_GCM,data:s/XMwlVu648dmAA=,iv:sUtQxqGmpNM7f2Atwm1b5TPj63nynZPIJfHFe2XCjz4=,tag:NTYMuvlBuWDWyUAHPrKlow==,type:str]
user: ENC[AES256_GCM,data:OF1jJTDj,iv:u20mF60SJevMeIQAjnIzCbIIKKFqJ95+mG3f5zfX+iI=,tag:BZK7NhoLWDJss/tnf0ZHtQ==,type:str]
password: ENC[AES256_GCM,data:2IWE6CK9bOQ9Zhjfkw9WOkwElKtLRiJRKQ==,iv:ySSML6PKNq0JbhcSwQ0rxSEAD+h74u0X5ncfIWbh0KY=,tag:R2nnvakD8SEyEn2GjgkgXg==,type:str]
extraEnvVars: ENC[AES256_GCM,data:H6ZGRWsRyZ635t2eELbvz2QvCy47wiN59ViytOxX9SebXC2b4cfvGpGJi1RIOlkcz59BUYUizK58sUNbgMeFn178xVkT24mOXYu5VkO/4n5WuY2zWN9gbnL6RWnrQZw=,iv:RLroNHNseCQeYuNdad9KiFjrKkZI44gP4E/Uj73R3qg=,tag:++t7TZvUEDAiU3Smgffitg==,type:str]
anime:
apiKey: ENC[AES256_GCM,data:/1GRSCBEgm+MFQRoIddchoe1290/A1hvVCNmp1hfsSGS,iv:GOeXBu7uKklK6KE8RvpewzBaySdoKonVo4rApadoIzw=,tag:EinKbUl+X92plkp9p3AXOA==,type:str]
postgres:
host: ENC[AES256_GCM,data:hvZGv3MQ0JU=,iv:HFs62YuhV0uypvBGA2kfAlorwWbjRr6M5/VJwx2LVC0=,tag:c7B6eco64WzvC0Uo44q76g==,type:str]
dbName: ENC[AES256_GCM,data:aT4STqdwfQ/kRlYQ,iv:XUyJPrqkDaLt5TmJl1+u8xZitY7x1wI2BpykmYQivjA=,tag:YSyzENEHcrv0y4GTYdW7QA==,type:str]
user: ENC[AES256_GCM,data:Io5JmxNKuJ33MRgS,iv:DXLRl2ZSRNkdTXRY3UzL0zxM+1m3xpdJgaWZqbl6Vok=,tag:rD/HrAOUF2LJDc13blJyRA==,type:str]
password: ENC[AES256_GCM,data:whbjCtd6TOxPKWwvL7L1lKcxr8tEZEx7YTdJNQUtcw==,iv:n3YBj1HSLo1EJ+XnuRXsn9wWXIAaIe4zwkfFLaKx53M=,tag:gtENwItQT6dgr0fBrEipaQ==,type:str]
extraEnvVars: ENC[AES256_GCM,data:MYQWHBE8bcttmXhh3HDir1zBJq1t1W4Xik7JnyEVmHKdXQu/GPUvbQLctGIXC9psD7x5lk6xMwg2WxSFLHcGFhadDHnm8rla9wFCSh0VlTyWekvKZ+XZPuhcDFxfYVA=,iv:3HzZU/1wJEXizscc7rSLLmJqe/FMiwqu+RiqvCBxBtY=,tag:3OXclcolF4WgW0Hu2FDojg==,type:str]
radarr:
1080p:
apiKey: ENC[AES256_GCM,data:w4VmflaV51T17tp2Zwa+2Ifm1FfPgVRxLmWomhsHe5wa,iv:xYvuQL2u7GwDxAWpohAJTuX5tmvxwxo6xS4Uz/9MXOc=,tag:uVVxdY0QreC1ZA+LWpKTmg==,type:str]
postgres:
host: ENC[AES256_GCM,data:wFG60E/SiJg=,iv:glgvp1UsgO16tXjfSBKaQsMSzekMiWFLG1ptcgS00Gs=,tag:LhA3+kQzMF7IsCZEPaEeGg==,type:str]
dbName: ENC[AES256_GCM,data:/AWMN9BQw7vDvg8=,iv:CwUt1tur+xdrd+egaVs1ETr9ueWyrb4rpiLWTHtkFuo=,tag:EmYEZJw3j4/D98KXzcLpFw==,type:str]
user: ENC[AES256_GCM,data:K4OFAbH9,iv:O2HHLVNC7YUtD/BQWSjUaz/tFdd0O9tYkqTy03/M08c=,tag:Qrwq6x/oxLd/1CjtPXSNJA==,type:str]
password: ENC[AES256_GCM,data:QYHNzqggnZ0v9byc41txTX5FcLPjSLZP+Q==,iv:dbrnn9btZd6b/KhnE3nbpljqkjr75PFrBERuju4wvv0=,tag:6/COq83YDfYkpLwW+S6avw==,type:str]
extraEnvVars: ENC[AES256_GCM,data:IF6EntbTjCs51DjVfWRJQ7JYLat+ade0bVVyDPxBJXzUJAsGIg2wxsMOCBZONs/VJgh+lUmlYuuCj5Vfy37YTOaFRdSEBEYkHL+iwThHV29nAV2GJyn/E6Fau+Hpj6A=,iv:ysLb5Em4hg+RAkqotLhJ0p29yribQjv5SK87HkfWMcI=,tag:zM40WAugV73e2QorCw1eVQ==,type:str]
anime:
apiKey: ENC[AES256_GCM,data:pQsxmcLwAOfPlwJIARgsgqObW0weoNfgeX7xNZ8nRLZ1,iv:IjyJdeONnrzcBQj6VScf5mO6IAGGaxLFn00avZchQ30=,tag:z9xqycT/Y9FnZ+qbXjLW1Q==,type:str]
postgres:
host: ENC[AES256_GCM,data:rmPRKNCDNuY=,iv:+b/NQZS7mPF1t8DlcuI3MXZwX7BcOIb0hiVANXCdfSk=,tag:1YqGTRl0LUz4vqy+SCM1HQ==,type:str]
dbName: ENC[AES256_GCM,data:/y8nkutIioMtH7Q=,iv:AcNHukerGYCxW7i3tvXbK1a3cy88623tF2xE2CQhrsA=,tag:YqllmENzjiKzMyLCMhZu/w==,type:str]
user: ENC[AES256_GCM,data:XUHlPPiaeUEJM/ii,iv:VHL5CoBf9/dnaFUav3EOwoRlBYt7pQ1b9fhpBN+UJDs=,tag:CZNf0Ix10Us4iS//Fth4wg==,type:str]
password: ENC[AES256_GCM,data:Fp13YKpwv9rWhLirbX6k9YG+5w7AWA==,iv:M18dOvzRHt9WXA7ThmOUGTE8o3lTXR6rzwYRbO2x7ns=,tag:alAzOfQCJ8d44S960aT2Bw==,type:str]
extraEnvVars: ENC[AES256_GCM,data:HxYI/7VKvP5jheDHg78SY5WL7R8i9tO2nmmOfJQTyz30tHMFucJJ490AovKXxmnUy8NXv0EFIHt6hP5zCUW8cqGf8rKb/aY6pzpga9uBNStM8yzk1K34qVT2VjAMtLk=,iv:wBZfS8gh8dmKYcB2Uba3Hdak2NRZgqUceumgqf97nCY=,tag:dvQEIHFhdyjYof0a6NHMfw==,type:str]
unpackerr:
extraEnvVars: ENC[AES256_GCM,data:/M7qxzcp5VO1nJfmOg/LKE+o0oqGgx8ohLCBqwsBzAaCcAe+L5PZb9J0Avgf7dFIeYXHXtkPXZNUYo04btsFqCizRrPBa/MxdSp6Wc7vLONaJXx/3PSJI3GgFR4AB0aeGEW4HaodLs6K35JqE7FV9NdX4Sy+O/s4TK5s9EAebVfkTIuaBA685L0JPUUHxdzuyMpMP9C7RoZ7XyoToiVxVJi7cBeXwuevTZJwCY9+p+RjiUcNrHt+HNjSPZMUpYo1d1CAJaAmy10kE3yydjYo+9vZwEpdoKVXlw3pio5rVpGLV5nlk5Mv+XHeZ8h6Ic8LLoDcy616oCmn5Vp0B6spElgSBx1tNjwF902ku+8rteh6931EHdNoD/APhg1h1/u9kBLZfxQ0v6DK3kSYfETW/8X2Y/V7bvSaiYhKjHdOYBxXkmIlpTBR50FPBLQ=,iv:I5jHRJFTZWawfwndvNrjPNLldrZyABynfXKUZMFeZiA=,tag:RnEebZ1LpfJWPiNTxT4ZVA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTbXJYbUNJaEkzQlJqU1Zx
Zzc1M0RxMFdMQXpIekwwMmhlMWo5d3BRZ2pBCjQzdTd4ZklNUTJYa2c0QW56NVQw
UzBja3pRV3MxSGlROURML0VLTVdKTmMKLS0tIDAzTzJacU9UVTJNakRrWWhPeUM3
OStNbWNzS0V3SXIvNEVWZDVPb245OTQKeFrwTJHVxc13tv0LWU3h+8nZiedbC3II
pOJlGu1+iAssnu6p2eEefH7Urwlr7Qsa2G55G+l31hzZsFzuL1yLwA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlSXRDRSs2MDBaNG5SV0ds
cmRKM0FDbHZnQVZ1R256SlZzUHpwZmZGU0VjCnJVWGQ5WTE0Z2MvVHM2Q3VYZDNM
Zm15RkVidlFEWkduYVM0TU12YXdWRDQKLS0tIFF0WHM5UytOY0tZSTZNb3ZTbXAr
S1Z2blBqSWI3cWJOb1JSZUhKcW1GNnMK5EVQb2zVqHdBWQWmmEze7kWSXf7NEt34
PnA0DiGCHnHm+UQg6Hw9/duYo71oQ163AbPBxD5hrCOoPgViVKFEHA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQZ2FpckhNendHNU5yVWRm
OVNqcmZyckdGTmhuU1psTjA1YzZyU0ZLcG5FCjArMjBGT0pOU05xY1V0aVMwc2ND
eUVjdkh4a2o2VGMvakZUMk1GTE1CZGMKLS0tIHpVMmdNN1V4OXpLdVpEUWg1QjAz
L0hmYy9kSktvdmxLcGcvVDlFNGRiYjQKCwUhrXyEWzyFQvmKPnnjQyF/n5SF5yiT
42Vh1REycPIWlegr6/j5bF+tFOPT9Wb/Hnmc6FPKjQt5Hwgt+Buhmg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBESk8vMlpueWVZUW9ndysw
REc1Qm4vRU5QcjVzOVBBTlNjaFNpSjE3eTNRClZjaVJLZkNOZW9zZUdxRGxJQXNO
WjQ0eE9Ua1JPMkNINnVmcXI5SzZSalUKLS0tIEk0emhxdmJjRDJQYVU1cVRSejYz
V25uTVF4Z2RZeEZpMTlxOERaMnRtVG8KHQrPSRD07W0pTH1ynePwXRxXPWn8n9sZ
Gxu327fptOKoKjDXrLduoHFuO0m9WJcXYP6v9rtVmrTDhU/Ntye3UQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6OStleHcyMHlUTW5wN2dl
cHRCMmFmM0tMRzVmYStlUU1mdzYzMkR3Q0JVCjNTeTE2WFZiMzJScWdFMEticHoy
RDd1VVpnU3FVNjdNOWR6L2VqZ25RYnMKLS0tIEdQL2lFS1hINlV2SEZvWkJVQTEx
aHY2Wjl0b1FVbG53elRxNWpqcWRrbE0KjAvjOqSEQF2286Bj2jF25BoKuD4OLoHY
U4pqq52per87pnJs4gBkRS8DNoSbRq9JwyTwzKz2BZgPJvVDGXDTOA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-09T06:33:41Z"
mac: ENC[AES256_GCM,data:MX6qN7VW6B2zR6O2n3znHt8DvB8GuaSjT15OPEc+T4aoXZ6g+OgOCQez8Yyd8B4Nv6joKJrQUKIM4sMSAmQ8bwwvXx1YTUKQxJ05MKGGorZYuZCOvhmsOnhRYJGVt40XZiIMIYDvl+uRjkG4NSBOoYdWF7qldphjTNzXrc5Qcnc=,iv:Xj3cCr6p+cmc41FVhxiiNfjhOKY1rlpT9zUR43hSvGo=,tag:FTVX4awkq5UDXGIAgSbZsA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4

View file

@ -1,51 +1,88 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:
{ {
imports = pkgs,
[ inputs,
(modulesPath + "/installer/scan/not-detected.nix") ...
]; }: {
imports = [];
networking.hostId = "4488bd1a"; swapDevices = [];
networking.hostName = "telchar";
boot = {
initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usbhid" "usb_storage" "sd_mod" ];
initrd.kernelModules = [ ];
kernelModules = [ "kvm-amd" ];
extraModulePackages = [ ];
};
fileSystems."/" = {
device = "zroot/root";
fsType = "zfs";
};
fileSystems."/nix" = {
device = "zroot/nix";
fsType = "zfs";
};
fileSystems."/var" = {
device = "zroot/var";
fsType = "zfs";
};
fileSystems."/home" = {
device = "zroot/home";
fsType = "zfs";
};
swapDevices = [ ];
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; # System packages
environment = {
sessionVariables = {
# Wayland and Chromium/Electron apps.
NIXOS_OZONE_WL = "1";
};
systemPackages = with pkgs; [
# myPkgs.modrinth-app-unwrapped
inputs.zen-browser.packages."${system}".default # beta
inputs.ghostty.packages."${system}".default # terminal
dconf-editor
fastfetch
gtk3
nodejs_22
pavucontrol # Pulseaudio volume control
vesktop # Discord custom client
zulu # Java OpenJDK
];
};
# System settings and services. services = {
# Tailscale
tailscale = {
enable = true;
openFirewall = true;
};
# Pipewire and Pulseaudio
pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
extraConfig.pipewire = {
"10-clock-rate" = {
"context.properties" = {
"default.clock.rate" = 48000;
};
};
"10-clock-quantum" = {
"context.properties" = {
"default.clock.quantum" = 1024;
};
};
};
};
blueman.enable = true;
};
## System settings and services.
mySystem = { mySystem = {
purpose = "Development"; purpose = "Development";
system.motd.networkInterfaces = [ "wlp1s0" ];
#services.syncthing = {
# enable = false;
# user = "jahanson";
# publicCertPath = config.sops.secrets."syncthing/publicCert".path;
# privateKeyPath = config.sops.secrets."syncthing/privateKey".path;
#};
## Desktop Environment
## Gnome
# de.gnome.enable = true;
## KDE
# de.kde.enable = true;
## Hyprland
de.hyprland.enable = true;
## Games
# games.steam.enable = true;
## System config
system = {
motd.networkInterfaces = ["wlp1s0"];
fingerprint-reader-on-laptop-lid.enable = true;
};
framework_wifi_swap.enable = true;
security._1password.enable = true;
}; };
} }

View file

@ -0,0 +1,59 @@
syncthing:
publicCert: ENC[AES256_GCM,data:eqTuzoyuzVC5ZITeipdlHWH+o+xPMPQeiwwGkUdQPIEvjhPWQoHeodwPWOXGDQyFwJfD+77bphWTTVImdTNKJbbtjP/oneQRZPLsQThPNHXcOMDjhzhyBVaOrKhn1eZy849Q4MNBArbQn0470Sn8tkpL2SyiwxKeyel7MFIkZpoCPRt0T4lkF3GW0M+CcR83jqagR4dBX8aEj0VReRPYtoqTfHH9SBWM00unzWzG4XGO+MzoFLyBl9SU9cANv+K21xzsChUxUCGgKCr7Fe7400M+U+G3pepI6SJ/VxuTTC063i0oZVmVMafdGYTbM7lsVGj/53PJzLiQOW9EZt+YiYNvPc49F9EpCYYXIbdTKb71NaP4bpgRKaWHx1cUnqfVo9zPqc9cAxEUEEGajwdCkcLNR7P+6Ws/SEKPcaxjoYeGqRPls8IaXFNqq86okIQ90wtR2BPr60tTR2tW22DAxHHngpGYPyl7D2TsjS3ok/E9kicQD2nl9P9VWZDzWN+3HhCYtMxrgb2qK8KYWRd6yAEmexU9Tc6Mh6gKRRhLBfSsDsE1hbo4TxqROtZwFpq7YAn7vvieQ7Pfz98fLjciInlDwmWTgp7Vkd7YLoMTBlzsNFXpxct5Gx24rNHMp13TUtfg9+mNvMoxIHFq5cR6GZonvPlTC278hiowgjkRTlQ+jgsQjgUeusy49/ytB9SNmSrTbtcOakepH3H1H7usedKbJBXcpGfohqd53xHs2dkno+lCg/kGzgkthbGgmTUsz/84x2ep0mVQC0RUQf3lyDeXko9szk683kR+aPw+UTi1q0X6A1u9A1PIKnB0+WpHQSfAcMjytJx9qYkvJ4drP99Y5olHn+JORKhKE80sHabpST6uVR6Ym6epjJop1MkFfD8Kh/NmsuDgz8kP9j/2sYJuusG5/DhX2vua4D2TCB2yby4uLCnXwazbzq+3A1F2FOPn2ynUZAnrKTNEBl/FfHLoIoHUl5rnlaIfz6VuSUWx6LafX0GZ+XTnGIfEv534/C1zc8b3BupbHNz44kNd8BVb+s6gqw==,iv:A2PVFa4J0JPsBh8LU1Z9KqgQGKWqO4hJ/cRTeznJY3Y=,tag:5gumadR51zYVscNt9SE3Jw==,type:str]
privateKey: ENC[AES256_GCM,data:qHNpyCmJ/2vM3COwzOqI2Wi4TQRHAI672URYPa7y5irtlBJoRy+hlBvHF+0+gAHRtx9cgFkspKBmxiC8M0VBYULBjVlYxlUySluRnZ9P1rv6Qj0Lv1T6kOrdGaL9VjEI4SWfYmA1/sFALxyZpCDm8oHhUPZfs1+Qd5U3nupLIyNsTO5aKT63MfjSTkLrrlnkQGW7B7Eyia+A/OVhAXaGMaXcKnCIUo7H+t2zSTeUQ6hgTkxE/sHxSyspvB9M2MHF0CtwwLlsyTNj9MtDE7NWwFxt2Hd7AXL5Ho5PhOrgwxp9FSFocdR4j6BPTYTMMgwFcMNOBb5ORveijp6qVA+KUNMBwezYp/TQnaC1DPMdcuh567SxRnstICIsSh1l/5RL,iv:z6DuPK51dBnJCyVI5wSqEqSLdqEXVnxlGakBBr07aYw=,tag:rjaVe4SrVghdG1zqiU1o1A==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRNVh6c3BaZHdMLzZ4NE9G
YWQxVTluVE4xWTRwZFdnOHVLZUwxeTBnMWlnCmpRNkVaL1dxSVlvTmExa1B2U1k0
V3ZQTUcvMldFZlhJaW5GNVdPakx0ZFUKLS0tIGVkb1A1TlppZjJ4TU83Q1Vld2V4
U3IzaWFmZC9oc1ZRZitwb3V2UXRFb3MKyViC3mT4RW11E6XmVVztMmJgm2NP9JX9
Bf0jGvYhO7Etg5O05NwTAy1WZLB68hqTHAJ2tMJD2934sJicWfg/kg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBudTg0ZElzdndiSGowNUxk
cmRDTS9ZTW9DVHB1dlNYZU0yOFdqdkRVUzNNCjJaY01ISklDQjc4YkVtSyt2UlFm
cWJGazNwdklDdTJvOE5ZUWl0VVZpV2cKLS0tIFVRQll0d3lKSTNZZk80YlNhQzlE
TXU1WE5wUWdhUnhRemhNYllHK2gyQzAKPuT00v8c2W1iSCx4nAG4XzCz317D3jql
ANYcLgmd47N8Jj+jssAPgoG9Oavj4II2NmXpLGKSDyAPtdrTqowAXg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAreExpaEI4YmxLTE5jcTVT
dkExSlMzQmJVMVpCcklwRjBGWE1ZZWZjOGpBClVSOEtoUTlGVkIrN2J4U0ppSDdY
MmFoNnlzWCtOMDg1NWxQVk1QRzBVazAKLS0tIFdiNFJsWXZLTGpRTVNmRlRJWFQx
dUZVMXhMYWlNdGZBY01ZTGxsK1RIa2MKY5F4BSYaeSo7rFUc8DJ8HUGCkUSHwR+/
XTKp2FkXD38hFOC1jWtityqEF8vCMA/m567nw0adTCFl5S4vegpy1w==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4WHRxYk82ekZpVUtxVVZZ
WFRXR3NZMkt6R2FnSGh3bG96NHRub0EwU3k4CkNmcHdRT3BWTjRVdllGQmtqSHN0
T0wzV0xpWkY1UXNFSWtsTHVZTFdEMDQKLS0tICtpbS8zQTFXbllpOWl0Q3lyVjFR
WHpJNFAyeGtPUG1lRWdKMFdqNkNWeEkK0DcfsEUECFhSXPQvsmKx5gVdHyZMb5lr
XoKOFrrjJ+NtqxfyAuqKmt6TxpPvzgBLdnbmQ0CTG7qb86O3o88tKA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDcHB3RVlyaldnaUJqOVpF
WDd2d2RKUmR0VnU2SEVvZWR0dnVPZklweTFrCmhhb1VYaW5PM2VaamZtWURQOGhH
UlBCV2J5d2xYNjN2RkF2QmxjMHcwNzgKLS0tIGFZY3NhWHhYZzBzVGROZ1ZXckdQ
QnoxZlAwRjQwQ0hQc2xrV2E3ZWJLL1UKwrILkzbDJlUdIN9un0RTGNXPzmlddo7r
ThuBWigFXDscsIHkwbhqfWPJy4YGcVnhYE9bfTV8k3AWAljWl6kL7w==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-09T06:33:41Z"
mac: ENC[AES256_GCM,data:VoNIfkIOFC5EZ7s0Zd4SD0RGLxyGmZ7VDIMz4c19Bp62zsvo2xeXp1z2Q/UFIt3EX8Tr1txRWawDmbImTYNb7Tzk/QvE8NZswDnRGpMloo3aAHT6acalm5z0To7jvsCZnLyR+3cwH9RGuMx76CNbyDrpSbrPawFjj1LAfsiXyvo=,iv:sOU7iOlkHKWRuKSpb6+JVoac/L4lDd2cILV+uoKzOnc=,tag:GTwHnF8X9+TSm7ZjWQI+zQ==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4

View file

@ -0,0 +1,21 @@
telperion.meerkat-dab.ts.net {
log {
output file /var/log/caddy/telperion.meerkat-dab.ts.net.log
}
reverse_proxy {
transport http {
tls_insecure_skip_verify
}
fail_duration 10s
health_interval 5s
health_timeout 2s
health_uri /
lb_policy client_ip_hash
lb_try_duration 5s
lb_try_interval 250ms
max_fails 1
unhealthy_status 5xx
to https://legion.meerkat-dab.ts.net:8006
to https://rosie.meerkat-dab.ts.net:8006
}
}

View file

@ -1,27 +1,26 @@
{config, ...}: {config, ...}: ''
'' include "${config.sops.secrets."bind/rndc-keys/externaldns".path}";
include "${config.sops.secrets."bind/rndc-keys/externaldns".path}";
acl trusted { acl trusted {
10.33.44.0/24; # LAN 10.33.44.0/24; # LAN
10.1.1.0/24; # Servers 10.1.1.0/24; # Servers
10.1.2.0/24; # Trusted 10.1.2.0/24; # Trusted
10.1.3.0/24; # IoT 10.1.3.0/24; # IoT
10.1.4.0/24; # Video 10.1.4.0/24; # Video
}; };
zone "jahanson.tech." { zone "jahanson.tech." {
type master; type master;
file "${config.sops.secrets."bind/zones/jahanson.tech".path}"; file "${config.sops.secrets."bind/zones/jahanson.tech".path}";
journal "${config.services.bind.directory}/db.jahanson.tech.jnl"; journal "${config.services.bind.directory}/db.jahanson.tech.jnl";
allow-transfer { allow-transfer {
key "externaldns"; key "externaldns";
};
update-policy {
grant externaldns zonesub ANY;
};
allow-query {
trusted;
};
}; };
update-policy {
grant externaldns zonesub ANY;
};
allow-query {
trusted;
};
};
'' ''

View file

@ -1,53 +1,38 @@
{ ... }: {...}: ''
'' global
global log /dev/log local0
log /dev/log local0 log /dev/log local1 notice
log /dev/log local1 notice daemon
daemon
defaults
defaults mode http
mode http log global
log global option httplog
option httplog option dontlognull
option dontlognull option http-server-close
option http-server-close option redispatch
option redispatch retries 3
retries 3 timeout http-request 10s
timeout http-request 10s timeout queue 20s
timeout queue 20s timeout connect 10s
timeout connect 10s timeout client 1h
timeout client 1h timeout server 1h
timeout server 1h timeout http-keep-alive 10s
timeout http-keep-alive 10s timeout check 10s
timeout check 10s
frontend k8s_theshire_apiserver
frontend k8s_homelab_apiserver bind *:6443
bind *:6443 mode tcp
mode tcp option tcplog
option tcplog default_backend k8s_theshire_controlplane
default_backend k8s_homelab_controlplane
backend k8s_theshire_controlplane
frontend k8s_erebor_apiserver option httpchk GET /healthz
bind *:6444 http-check expect status 200
mode tcp mode tcp
option tcplog option ssl-hello-chk
default_backend k8s_erebor_controlplane balance roundrobin
server bilbo 10.1.1.62:6443 check
backend k8s_homelab_controlplane server frodo 10.1.1.63:6443 check
option httpchk GET /healthz server sam 10.1.1.64:6443 check
http-check expect status 200
mode tcp
option ssl-hello-chk
balance roundrobin
server shadowfax 10.1.1.61:6443 check
backend k8s_erebor_controlplane
option httpchk GET /healthz
http-check expect status 200
mode tcp
option ssl-hello-chk
balance roundrobin
server nenya 10.1.1.81:6443 check
server vilya 10.1.1.82:6443 check
server narya 10.1.1.83:6443 check
'' ''

View file

@ -1,46 +1,59 @@
# Do not modify this file! It was generated by `nixos-generate-config` # Do not modify this file! It was generated by `nixos-generate-config`
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:
{ {
imports = config,
[ lib,
(modulesPath + "/installer/scan/not-detected.nix") modulesPath,
]; pkgs,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
networking.hostId = "ce196a02"; networking.hostId = "ce196a02";
networking.hostName = "telperion"; networking.hostName = "telperion";
boot = { boot = {
initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; initrd.availableKernelModules = [
initrd.kernelModules = [ ]; "xhci_pci"
kernelModules = [ "kvm-intel" ]; "ahci"
extraModulePackages = [ ]; "nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
initrd.kernelModules = [];
kernelModules = ["kvm-intel"];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "zroot/root";
fsType = "zfs";
};
"/nix" = {
device = "zroot/nix";
fsType = "zfs";
};
"/var" = {
device = "zroot/var";
fsType = "zfs";
};
"/home" = {
device = "zroot/home";
fsType = "zfs";
};
}; };
fileSystems."/" = { swapDevices = [];
device = "zroot/root";
fsType = "zfs";
};
fileSystems."/nix" = {
device = "zroot/nix";
fsType = "zfs";
};
fileSystems."/var" = {
device = "zroot/var";
fsType = "zfs";
};
fileSystems."/home" = {
device = "zroot/home";
fsType = "zfs";
};
swapDevices = [ ];
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# Until I can figure out why the tftp port is not opening, disable the firewall.
networking.firewall.enable = false;
sops = { sops = {
# Mounts unencrypted sops values at /run/secrets/rndc_keys accessible by root only by default. # Mounts unencrypted sops values at /run/secrets/rndc_keys accessible by root only by default.
@ -61,11 +74,37 @@
}; };
}; };
}; };
networking.firewall.allowedTCPPorts = [
80
443
2019
];
services = {
# Caddy
caddy = {
enable = true;
package = pkgs.unstable.caddy;
extraConfig = builtins.readFile ./config/Caddyfile;
logFormat = lib.mkForce "level INFO";
};
# Tailscale
tailscale = {
enable = true;
openFirewall = true;
permitCertUid = builtins.toString config.users.users.caddy.uid;
};
};
# System settings and services. # System settings and services.
mySystem = { mySystem = {
purpose = "Production"; purpose = "Production";
system.motd.networkInterfaces = [ "enp2s0" "wlp3s0" ]; system = {
motd.networkInterfaces = [
"enp2s0"
"wlp3s0"
];
};
services = { services = {
podman.enable = true; podman.enable = true;
@ -77,13 +116,31 @@
bind = { bind = {
enable = true; enable = true;
extraConfig = import ./config/bind.nix { inherit config; }; extraConfig = import ./config/bind.nix {inherit config;};
}; };
haproxy = { haproxy = {
enable = true; enable = true;
config = import ./config/haproxy.nix { inherit config; }; config = import ./config/haproxy.nix {inherit config;};
tcpPorts = [ 6443 6444 50000 ]; tcpPorts = [
6443
6444
50000
];
};
matchbox = {
enable = true;
# /var/lib/matchbox/{profiles,groups,ignition,cloud,generic}
dataPath = "/opt/talbox/data";
# /var/lib/matchbox/assets
assetPath = "/opt/talbox/assets";
};
dnsmasq = {
enable = true;
tftpRoot = "/opt/talbox";
bootAsset = "http://10.1.1.57:8086/boot.ipxe";
}; };
}; };
}; };

View file

@ -1,81 +1,63 @@
1password-credentials.json: ENC[AES256_GCM,data:odK6x2TscY1WNCOaPBSfo2ln7hsa5UopakUpOgB4ci64p4LGIwTTDnSiq8+UXkrDndQ7tSqtr9RUvB+AwwYOuh1KBAwWmlZN7agtxUYc1wvMdQv8WPDfhqe9m0FNP5gyTaohcjBdBddZlv7izScVePUQUdG04dGYqUg6mQ/gmPtJy27hil8GivvxRN6FnFtkgoyfE+ZLfkTuMdeL4cxai4j+UeGc5XgmsrBLrW5udeDw2hktGXEBp2vMC6t+D7uzZ7DeLBDiHRbBZBeo+krnVdPsLxU3yFF/hC8vWVbkT7Wt/UhB0+X8SWvhYOvc3KW+NfyHcU0SONhQCM4iOkk/1qvcaDHy7idqexKxOtfQaZtuHW0vB3icgbxTO9usFxOxUPe63yXHUg+UDKSN4UGCF10eLoZKaV7zO76BkTFXQLl2Q+dytaxEKathhW4fS5lUBpuxXNDXuIxMiUIclXwVWVDpL7qchTJCopWwwDRaeHrUPev+pQptEsDLYpZeuf27hPjCMiOWkxt2kg2eKPjJ8AUtI8N3OlFPCyAurLgLSrFj0Wzm24LJLKsjs1if2y2jb/pR4MPdgnHgNnHS8VQ9JVprVyuw9C/wDhVV7yW+D4tlJ/d7AXaJq/dkO8XnwCEVPyFr9bUMB076z+tleYgvv9rHkdQMaqHr5HCHAtuYfM4f0Zpfr9alJ4wxCsj+MAn/PLGxjNd/hQQY+oYRpzBne2mUoxhRt3ZjnGH8LUBFSlz+e0+PB0anS3oV3XZUt0XuwGpNIxp4LsRFgmDC2qoMKZ2X7/DfTdmb3te0YbYNUUeHxlQ5AImzU6Lj1qw/clD7ViS82Rjc/WCavg9J7U7CdDbzhtv6xCxbyd3j1r8Wi4XLAXy4ZdcdvCEyYDHwJeExY8pp/jvS3CqSrlC/PyBUemloIQ+jSQiRYDv26XpRKbJ9Yd8fJ4ANPCMuvXU21iXtxHIRwopTo87hWqqSaORFcyVOmCxJJpa/TXL5fdd4ISy6CSqZXZCCIfiVxq4fBkqSoya4XMXQQq9Ki5xwLf1bDhaT3v7okP87A9d/j9Vru2RIZtRT71jVKvwDvJhLAfYuXyIUfQh5cvIw4/HlAZzP5vi1w5KlIJGf1uVVhvTl7p23/Gi9LAX3/P75dbK+x4VYOyqjMowER3jxk9m6GyFDl7iuceNh1bIpgPN1s4QOba7N2Tex5oa/aJJKOLYE4GYDtom5auDP6Xqa/Nd4NaDyd5oVuXcP7Lp7tDu9sIW5rhGaVYKU7jhzALN9HjfmAen+cZ50oy8L3IYKlS/91qzGughYDOjK4qeQ2XrMxySnCPja7ElV4gxmB3X73nxN+N0ZLEDhAGIS1FOaOammDjK2Pj/3vA5+S2hO3GYLh9glNgRnIGlNUVtw3My9H1mYIc4eP+LGGXz1KPnQMQWRtXZHH4d4fsOyhk+CE8as7WtyO7M=,iv:RkYdMs72Nq7dwHScKZeXMNSJ53ztTXCb3lkhrr9K2oE=,tag:XDdPfd+Be9nSAbvate52AQ==,type:str] 1password-credentials.json: ENC[AES256_GCM,data:LhPG3XyCRZobdAN77ATiEy+A3d8P+1E0+lS8JXbvY55v/qhXk0xNUMb1KsBjGazsj6jq2j4u0dq55KmTDWckC5C7MIUzI69bbHrEtQ8c/XgBo5ulmsaMgkRNjsXMJ6h318/M5XC5wd/MhWz+80eWvnVu7PI5E0Ar77W+KeoGwCiaZ7oQGoE+e5TJpNlOhtiMNfjtmUzx7L7D2JNB9LhA21Y6LcLToGVm06KguHMPZAK//3fBbJfw7nbY7MHJ5tYCu20pUF2eJWnRcB11QDqPIOszJ/tKZ9JQtXd8DBmXKgrjeOaq0Y8XIgTo0co5gcfriQQ7SC/m0MWE4LkoGOpmbdw+hZhqfIVOl5+IXwXkH2EMn86gJTBxdgtPXz6EPkuPSNamO+uh5L9vjodFcCKZVZnW/QvhzxYaRErB5hbSJ1PrPIRcJsnOkDcIcBtW4b3qvjJtewvX33RDd7qEIoqd71jNOEyxeZgidpUCyfA9bHLVb367DcwbCB5jZ488ZvcjbcEXuvPkQfZ6xR49vuijff03thN+Ob3kQI7ofcasqbRO0eKYEQQapDaTz9IbraRf1z3JgQ+o/Brh8LHxEBgMQA/GwDGz4n/wnMczylH2O/ODsjkI76kYk7qLR9Z+8WT9tazrcPrBs/scuJSHu5Sl6c8K07HN9W0jPnD8dAP4J5Pl+lxpS66SDVfGImYwjuQjfDF+RY7A/UP0iPxdklkfLVQ0Yu4Pa+8Y10YAXY8UG1NQW51REobTGIEF6El6/pzfNElqAdFG4+5JNZF1/4IXWPVJQly1VstUY9D4f+0Z+7X/eAdz7VxWjI8hOSGH+jPbylXe7eNQZdhDZ2PNfoqGNsgLZfT6AcBtLR8eHZlAY9O139YsSzPqae7CRP4TqX0KwUQHiZ1OWh+zG/OFUEPV/IiaGi+aUcfZzzz6mVrXXsyFosDtaqf3HYPcMuhJ8YiTY5g1/OK3EUDR6CBOENJf/iMjC03OBqf5xll5Bzw68pcX2rR8kkTmJx9mWE6SRxqOpVOxNZQaK2O1NrJxBQrR4/b/Vd5Sct+VvT24Kh3eue7+LhKIzJzh499sJ4PgNJ1plbRDzKpfj2qH704xj7YzqsKPcKIq+VHQQakQ3VdAOoMzo7RXchVh2BDTp0I4GljUOoOh9sv2DIrjmpnN5KWwAk7gl1zkcc/DPEqa6UN8z6WVlTIC4pHGm68IyRl0HV34owyLEezGcoidIu7t+AwZZrD4SRHFPFCoFd6ubbcr2/7xZgRaKqGU/82hUEjR/SrxRQpjeN9Vf2PAAGDbVsZGC9f+pthMamlD10oZzfamf9DliYdF2aNH6/IR6IPVBTbUoLuBDbqJH0lPtgLDqmpoS4t5cGvmmlGgjm4I9prrV5Ogz0ct30L1XW+KfxT5alnGZsx46ZaW6hlgmkGqiUUHhUuxW0GT+16UxOQLE/sZVgg=,iv:wPy/dePJ4x0IdPyB7ChN0B2msEAMcAuM69liIOaumZE=,tag:0CA6RZZ8mkDM9gCCDevM5A==,type:str]
bind: bind:
rndc-keys: rndc-keys:
main: ENC[AES256_GCM,data:X0HTyNmqH1epIVNkXMyFlavqAodDw92Gs2sK54USNv0mWIwmk8NEb69x/Od8TAwDZw63k0lEAymyj/hBfkpav9yKT1M1hGxr09xjWsR/DTAM9tFv140cvnMEon0ZbXVXp4ou24jP,iv:7AsoCrxf8CyPiyWYfHZsGE0Qw/wutCVvCEiRdUdmIHA=,tag:oJi4BTDrD3FLEQuYeDR3dA==,type:str] main: ENC[AES256_GCM,data:HETQLs4FDXeZINlCSnGYqF6Mntd7EurCRSyf5NIAz2Qmq87IAj2TbvesC8PnIBXMul5Uj8ggDym4xO6Qcoq6KQNfCtVOI/TaA3JYZbIOmNWZR82LsWwO77hd2kx8U+E9K6kFtBbV,iv:WGmWjcW1RkOWSoBjrbkyQkDbI6yYB7hakOrmXo4Q6eA=,tag:CfAe/x+HOu7tf0ZY4HIB/Q==,type:str]
externaldns: ENC[AES256_GCM,data:WhH4vAR4Q4iTXq2fT+Z8kOXkwnneNV4bXWYytov62DFDSnYwsvWIbol5MvYIwXM+gEbQ/k/uk62MSFx26T34881EGJmH7KXWr7ji273D8oKAp0Fw6jOt2NZT6XkBwhWEIathUOwNdN6E,iv:SepdyBzYga7s03ppSppiBB/wTbTrL/y70aa/B/m02r4=,tag:vWqlZLx+FvstJjgRj4mjWg==,type:str] externaldns: ENC[AES256_GCM,data:5kIBIpRYdGmBZBvwWSIufUzAs2Z+9scgMQOMHtDLFgcQ8OFKYbKlOQ2+G7exo/YfrD8QQfbPjHD/ScQbbs0SyFYhx9ivX2vizyV82uYqZ1hODKBsMHCuEvWMNydopbT5/vobKCnAER2T,iv:AA1uUmyTxfovgRnvktRQxmu2Bj5mStWd7MRrvUaI6LE=,tag:NPGhBf5yBbTPD63QnBA9PA==,type:str]
zones: zones:
jahanson.tech: ENC[AES256_GCM,data:XqOX6lbCubPEi1pXgIEXW0qyD2+iJXNugTPdQOB/yCm4AX1mMiANAV51FBDb9f+QQ+q1EDqGz/83VKggoIvHSZCOW3dkNWR2uy82uO8C59sbsLrR5AzTTnZN2zlaIjW2q42I838mKfO7MfYXutwQbTpepr/Brtbldm+HRjxugJJMDFvBqSlylSnFA+jeWq7RNRP1+ZxGULO8I2BTPqdRVyRHcIWjyQABTctDcDgDLMpPxrMBTtmC2/CFH5pIT3w6gbrYRwYFZh7fNprOYRRPOkGHMZK6ccMCpm2uRR4b5daB1MidqJUsX999ma2TEmsUJSQZr6mS2r/QvwZ2R9QziIkBxh91vCg6HMaHl8/ISlryZVlkWNY1P2jgCMw0jJ58NxeBVAjVWw3iL+i9JU/q51r8J3nZHi5ql90JMaVdYWw8I2GLYWDHQnES9srEXtJwJNLzE69lQuL8ARmey4gt8Q9snen0v3RJVFb466nPKvH51TjIAr3FB2L8NY3RumD4eYl05L5JdNcFVuqmsYdoWQSQdZz23BxRM/QKT2qKjrhxfZuQW1naNDg3qbx5+bLGHlG6m8wRdtkR5SXWQc5a7LG2eURY9T7vy8yxMWzjd5LPMFLd7JlUSjwXw9YBhYTafGuc2TUESs8DCO/hU2zjAn1KM+rmc2T4aF3HexJwt7b7HBmMrDWObdtj09ycV10tp1Z57ZMz18aJdIbaZKopERN25FzIKiTlytiZiWsesLo6mUbsgb7bmjGGjBEDbp9P7ozgZv5H+aR5Y7POl9EG3gfERPsa1nF1qlloOrYT/GX8pUNhXAxH6QfX7WF+ANiMB/L/X4L0/XufV7shCWfQwogZ3t7ARGHr3dIOyx1ABus+M2QUZyI94jHTn+/J6aaxL8qsDGDZ6383Gk/CHa57BklRUrZZYVs9jzDe7+12gDfID/eP+nnKuohwCY1KcHL5QCRUg8KN1ZIyH1FYz489l/qKFG1nO33iJv/l6opWjIv98EM88ckA7zxU1+UgjxNiBo0EGJPw1erwTwUzehTnj303HuTGbtGjgE/vK8M+rCCpL9L0YAFQyXqeuqQs6yM3PHCyKfvThCAnwnTIGn2mZcyu/GGGOO9Hse/islh4cYldxC8psKNfNlf6qT43MOf+gDJ2GKU2kzU5tivlNqXbgAs=,iv:8SWNl65v24W504eG64L65rDmvqrkF5VJhufN3u/wRG4=,tag:oapDfnOAPyPDiJrxGHtiJA==,type:str] jahanson.tech: ENC[AES256_GCM,data:HGvI3MRQHHwFW+ElBQJNuItKP+fi59ZXepjzY4IoRZ3mBDEORBMTreCk6i+HlM2GouVhJo028Ilkl6P/i17O1LchTUcK+NZOkJukIdd/WQknusZOxoQKhRYloyDGa2IYe4YzQDtRd3vrPdHffEkZcRvd7KF7EAYROMmWk6OSfasf1ta3iHQe6xm93Ql8EY1o6oqhjlS31w5XDOMaNvFkJF7pD+C2OQ6pGORYxv0ePH6gDr56FBPI1sZStDQtFFSrJEDKyuR+yrjhpg/fHnxa6XIRASSBSrOIrITE5VACZpuXB3hcUT/4BA+5P0GDayDuZv7ODw6NUPqBxgpgypfaUZjNwJl+MaUPbkFaRECZexbEwvNCl9/xEruBKlbhl2jL4CKLGKaNOSukYq3Gskcqc3qkvQCWEucmMguShSBv7QOq3l1sWOlbHxEQgvdLrZ4cRI0bUQCxk5xO7LRgodf8ACOZVrdHInsARuvX7r2mzGrYA7a6qPXpJOhE7Rai7mg1RQdabJ4i5nd0GSJV9WWrGH9/0yw5uj9f6nwEWuK23gkxK+2B7B+nt703WbDfDmnWNjaxHHz++IBxWiNLUFPGVt9GNx3VpMV70Y9PY5VmL4O8L7Fc+3TcTz+bG0pbWrO6MpwKdieWxmeLLn/blFGzd0acQUtV4UCv3lYjqofCDbfS8S/ADE93bcuxxnsVDwoVVnmWSOsXkERvtrZ9VggeXODZCwPhSbUXXYyF/KNmChbpdJDBbfTPjlWPqy1423SCi6TTX5xCNAbl1JL/2aTVCGOgQ2+QfSKzjbjSsp77ZzCQNWVMOenvSYgb4D98QfDOcukVs0ewa06CxLBEycjq2T6XR8+3/JMPDElmDVfdaOscW6QcpJXJEeWRU0kujHWoaZbmclgnmhPMcoMa5fuC0/p0+/DVOOn4ZINGGdAGy57NVUOOtyLYZn1J1F2EZAXRITRfxHNjHLLsuj8q9iCs7so80LUHejfKjqer8TGLLT948Vs3+Im/iB7dE7k1QmFxVd2lArNFFlPj7QsLtbM7sT6Kj8YRjiSoGer0AQVjkKewSIxnUH+n825Hc0efBFBYDCAN36LwF12FNB5+nTnI0fKIvV/N,iv:GYlqE0pT3vaNufSoM/RZNTW4j5IZHUkKj3KUdmc6ZjU=,tag:89rtkSyISHDzhDtF1VTuzg==,type:str]
sops: sops:
kms: [] kms: []
gcp_kms: [] gcp_kms: []
azure_kv: [] azure_kv: []
hc_vault: [] hc_vault: []
age: age:
- recipient: age1d9p83j52m2xg0vh9k7q0uwlxwhs3y6tlv68yg9s2h9mdw2fmmsqshddz5m
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSSS9JWTZPak52ZFloYTZq
N3Ewa2hrbUZmZ0Y2aVpzaTZjN1hzWTlqRmg0CkdIZk9IMDdWQ2xsYmdHcGM3WmVk
cnVXVkprbXlQeDdzSkEvbW9SSE1aU3cKLS0tIHpuQUY1TmdKbGpZQ3N5Vk5LdzBC
VVp6Q1ZNR3gycSsxU3Q3SGtNUDN4cEUKDXO3QyNQfXqn587meoAZqraGMl4ASeOf
rVJDGWkNhne1YFdAfvbiY6pD7RDxscwiRFqDofH/t0EfN4vwrzIx3Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1m83ups8xn2jy4ayr8gw0pyn34smr0huqc5v76e4887az4vsl4yzsj0dlhd
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrSEZKOUJTTjE4YTRQUnFW
bzhMcjlSVTRNRWNkSmZSbU5ITFFTbURFbGpJCnpndFR1OVJvWnBOMVovdVVGWkZ4
Wk9xa29kekgxRnlqbFg4YzN0OE9ZYUUKLS0tIGsxeUhWdU5NaTE3cHpYNXF2OUlK
eGNyTXdqWFNvZ0NVOCsvaG55dUdaMEkKW9SxqP6Jpn72VAwPhn3laO1OE+gYzLvb
10NfaR+2P0EJZ3nwc0sLKmPmSzcRiE9etGtNGFiLgoUNkQ3lnwXj6A==
-----END AGE ENCRYPTED FILE-----
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp - recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFTTF2TjJ0WGJaTUFIWE9s YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzSzIwRUNKSnczYm1Eaklo
S1NHQmRiQUVjSGJLQXZ2VUUrclorT3dIOXprCnQwOUorNXFzNG1DbG8wRW83QTdC dzlSckxLT1FHc3diSy8rRXBIRTJKUVpkaXdVCkhHSXN3Z0FZLzQ3TFpiUWFZS0FZ
a2ZpZnM5Vit6bk1SaXRSZnZZT1g4ZzQKLS0tIFd4RVR2LzdvVG5nVzBiKzBPL1p2 QnVHTEVKVHNXWkdvRTF2WFJlRUIvNEkKLS0tIHo0OXZMQ0xkUWZyZExEWHhiZnRm
eFJWOGx3Z240clRQN3dNa0Ztb2hrUk0KunfKdWPTZD32KagC+VXmAQDxJAoElHAp SXBpaUNvWFByMis3dFlCLytRdEpIOTQKDBKJ+gvF84j2KOfPniyjJbmrh7GxgF3m
mo8a0GGdeVuJiUneJlZ2KYuLkseCyn0HC5qQMUIT8HZJ2bb+RH0vDg== DLhPHMaRkaQkWZaLTxijyAXv680X2vCFdBjRPA1fQMz55/2m9OdnPQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1lp6rrlvmytp9ka6q89m0e0am26222kwrn7aqd45hu07s3a6jv3gqty86eu - recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3ZHAxMVNsK3U1ZlJnaEJj YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHNmg2R3V2b2ZLWGdWSGRp
eTNhZzRidW9HQ3Jrck0zNmxPYXcvVUtJRTJFClFiMGNuYnEzbVNJNExVSkZ3dVJy bGpuWndqd0twcGdkT0xTWEV4MjR0MllhVG1JCnM2ZnFWcHEvb1U4S2xuRzdhMmFP
MHlRdG1uNHhZb3daNW03bVJrOGZmNmsKLS0tIER3RUg0TDRQT09jdy9xNzF6OUtq b2pickR4ZER6MWZHUExyTUw5c1VXR1EKLS0tIEtndm02blQxUlVEeko2SUxrUG9Y
VHR4NjUxZGpRYzNKaHhlVTdJQXBmTlkKHgqnACFlEusz0/W+I/O2smr/SV2Oiw9Y am1ZWVlFdm5HNWlhWkFQa3JLV0RCUGsKvlCCLWWui9UVDvI5P6qvSHFGWcbLByFC
wCqCyVfB+kGrfgq08e8ki8NXv3PDT637BU3kXFaOTQhzSE0aCpD8qw== nX7x8fWBxaqF3wK32ndmVMBO6jlPVXcv6NsjpdRpbDxx1iMxFqc2+g==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1vsqx6kukrfhrwdy4sujnra5gsswzuh0cfcfdh0d9qjrkts8hl5aqnjx32m - recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvTXJWQThMaDZNajBFOVRT YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrRjhpUXlNUmYvVTE1eklI
NEpJK3RvbzRKUXE0NWpRQVA0aWJSYVNxWkhNCk1nWHVaYmZNQkdQZFJIOTZKTWxC OEx4VWNSMXFuTWxIZWZTZUU2TFBYNEZUa1E0CjRzL1ZWc1VlZ1pxa3gyREUwZE1I
RXpOaHc4dzNBZ0txcFhtbjVVSjhDbXMKLS0tIDkwSnFTTjBZZE5hZTdXeTI1Q2F6 SnBNTVBQZTU3T3hHNEd1TlVYUkZmUVEKLS0tIG1SV3JUM2tlVVh5Z3B3ak5CNnhF
Skw3OUt4SVlrQ0M0d0h3KzNubjZ6SDgKiEvuO+RqygeSSzeUlQJSPuzNY4tbzKso TVhFWnVON3hCVE8xVGRTR2FoNUF6ckEKA3Zy1LJoc+Ij+6nwMyyZ0yVycfpJEtSD
bt/fSCV4ulFTvjybD9lfA9dclHGM/IRA9obCQd8RsCBQuXo9cuWnjA== icqaVJyssOaraf/GjWC03bLWUaIbGg6khBVBvsetS0m83wPeOwkmYQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl - recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVZkQ0NzVGMWJ4Tk9vYnZC YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRVk9jNkx5WGFpZjFvdFVz
dmo5U2FJa0pOUmt1K09MWFdRamNnaUgwbEM0CnhKRmMyN0RYMG5Uc3ArQVZhVFZX VVVwZ2lLU2lxZWp2bWd0cGhJd2kzQUJFWXdRCkFoOTJtRk9OMEtmamdOL2thc2dw
RHQ3SU1TUnQ1SlhvZGp6emFOV1FuVE0KLS0tIE1oQjQ1dUhTMVBaTnZIeVpVNmxp bURQRWNwRzBVVm82b1pKUm9ueTNDMHMKLS0tIHMxdGVQVzhjQ29zYXljUmNoTW1W
cnk3ckEyWkdhWkpkQlhJTHlsaGFTNDAK79D2C2RZql38hBJOBnqhOOdb7Z7EJNgj clJScGVoRU00Z0VxWWtSMmZPU3VwR1UKB7+fV7RD9MoiOzgVmTtWyPG+9G9i/VYk
aWfivACOM//hsPCZK+9YFpXJ08Nb6iBlNKzYsTW7qJ+Ue9M9i9JShA== 4AK2BSXVJuz8Zhh82+xh04vh28/mT61WVWPMWfVryPuPELLo56HNOg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf - recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdHRRVEY1dmR2WjM3YVhk YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1OHBQZDNvSDBVK0dReDZa
dFZ6UmUxUTJKR3RKMUM0UXVaMUJwMzJRTmpnCjJtdjgwNnphOU5EdUxkSUp6UkQy Ykpkd3lEWG9zKzRIaHlNL095V3BaM0hPNm5RCi9pYzN0QVlHeVRtTFdQbjlaTWJp
cS92MGdlTExVbWJIWGlGVVFla001MGcKLS0tIHF6c3MxR1V3N2szeXlNdWhUaGpW MlcyeDlpTGx1bkdJN245Y2xwaXc1TjgKLS0tIFN5U2xXK2RDcWpNRXBQa0hOVE9n
WWRlTHl1MWFmU293NGJyRVNRTE1RWWMKu5nK98591T0Z4rHIHxCY7mqBW/CF6abl cW52OFA2UVR6bnJhcWd2bms4VE8rNlEK8M0dEF85yzzkV1otG0a++a/TDw6n4zcN
3/ygImXkb15Ws4b4mcN67vk3omg9CB6s0SHfFk1GAu6CiN7MufHQ+Q== YGbRLQTRfwmXgvX0cjU2lSU9tEtdSvHFHNcTLLOo+tbGNg2K45moDg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2024-07-15T23:16:58Z" lastmodified: "2025-03-09T06:33:41Z"
mac: ENC[AES256_GCM,data:pmZjxv+vcznnamHNvOL7sr8wrejmcqo6D/NpizVo7TPo6cs59vTQ2fXmM0zlfJs81wZVe8cMcv2LXITSmjpZOsrhYuzMpPsc9HGzdwfOXVTfdVDYWVwNd4LsXMW40rqUbZyVtp8zAOW4eF5iY0H+acPxMcBbogoQKOU94a0NqzU=,iv:vFcpIrA9KRMawLCbMqWbKcGFPBcMp3mQRIgje5dV5S8=,tag:iuEaP9jjhhvjMjChvaoBCQ==,type:str] mac: ENC[AES256_GCM,data:UaQJeAhm6uIBAG6b/3UQvjTUPaOOVipwCxVJS6PqhGU1xcOL+/9jxh1ULpF5rXArhzLgTSCOIAEj5d7eMkDZVaBtvcdRyEWSqc1J4dD4I/kjFZBW6D6pews9YV4guVIDA49Sc6zFAl8NNzZW116FuUpqPfbBr0HjPWDVP665ZJY=,iv:VDoiyZGFrt3GtUqlFCvcQCPb7u7MukcWyzCKJ0rZ0Qo=,tag:FnV0+6DGc4WZ2oyPCQrrpA==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.8.1 version: 3.9.4

View file

@ -1,33 +1,103 @@
{ ... }: { {
imports = [ ]; pkgs,
config,
...
}: {
imports = [./resources/prune-backup.nix];
networking.hostId = "cdab8473"; networking.hostId = "cdab8473";
networking.hostName = "varda"; # Define your hostname. networking.hostName = "varda"; # Define your hostname.
fileSystems."/" = { # Add required CIFS support
device = "rpool/root"; environment.systemPackages = with pkgs; [
fsType = "zfs"; cifs-utils
minio-client
];
fileSystems = {
"/" = {
device = "rpool/root";
fsType = "zfs";
};
"/home" = {
device = "rpool/home";
fsType = "zfs";
};
"/boot" = {
device = "/dev/disk/by-uuid/8091-E7F2";
fsType = "vfat";
};
"/mnt/storagebox" = {
device = "//u370253-sub2.your-storagebox.de/u370253-sub2";
fsType = "cifs";
options = let
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,user,vers=3";
in [
"${automount_opts},credentials=${config.sops.secrets.sambaCredentials.path},uid=994,gid=993" # evaluated and deployed from another machine
];
};
}; };
fileSystems."/home" = { swapDevices = [];
device = "rpool/home";
fsType = "zfs"; # sops
sops = {
secrets = {
"sambaCredentials" = {
sopsFile = ./secrets.sops.yaml;
};
"security/acme/env" = {
sopsFile = ./secrets.sops.yaml;
};
};
}; };
fileSystems."/boot" = { programs = {
device = "/dev/disk/by-uuid/8091-E7F2"; # Mosh
fsType = "vfat"; mosh = {
enable = true;
openFirewall = true;
};
}; };
swapDevices = [ ]; services = {
zfs = {
# This helps a lot when upgrading
expandOnBoot = "all";
autoScrub.enable = true;
trim.enable = true;
};
};
# ACME (Let's Encrypt) Configuration
security.acme = {
acceptTerms = true;
defaults.email = "admin@${config.networking.domain}";
certs.${config.networking.domain} = {
extraDomainNames = [
"${config.networking.domain}"
"*.${config.networking.domain}"
];
dnsProvider = "dnsimple";
dnsResolver = "1.1.1.1:53";
credentialsFile = config.sops.secrets."security/acme/env".path;
};
};
# System settings and services. # System settings and services.
mySystem = { mySystem = {
purpose = "Production"; purpose = "Production";
system.motd.networkInterfaces = [ "enp1s0" ]; system.motd.networkInterfaces = ["enp1s0"];
security.acme.enable = true;
services = { services = {
forgejo.enable = true; forgejo = {
enable = true;
package = pkgs.unstable.forgejo;
};
nginx.enable = true; nginx.enable = true;
}; };
}; };

View file

@ -0,0 +1,23 @@
{pkgs, ...}: let
cleanupScript = pkgs.writeShellScriptBin "cleanup-backups.sh" (
builtins.readFile ./prune-backups.sh
);
in {
systemd.timers.cleanup-backups = {
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "daily";
Persistent = true;
};
};
systemd.services.cleanup-backups = {
script = "${cleanupScript}/bin/cleanup-backups.sh";
serviceConfig = {
Type = "oneshot";
User = "forgejo";
StandardOutput = "journal+console";
StandardError = "journal+console";
};
};
}

View file

@ -0,0 +1,19 @@
# Set the backup directory
BACKUP_DIR="/mnt/storagebox/forgejo/backup"
KEEP_NUM=7
echo "Starting backup cleanup process..."
echo "Keeping the $KEEP_NUM most recent backups in $BACKUP_DIR"
# Find all backup files, sort by modification time (newest first),
# skip the first KEEP_NUM, and delete the rest
find "$BACKUP_DIR" -type f -name "forgejo-dump-*" -print0 |
sort -z -t_ -k2 -r |
tail -z -n +$((KEEP_NUM + 1)) |
while IFS= read -r -d '' file; do
echo "Deleting: $file"
rm -f "$file"
done
echo "Cleanup complete. Deleted all but the $KEEP_NUM most recent backups."

View file

@ -0,0 +1,60 @@
sambaCredentials: ENC[AES256_GCM,data:0caF4cBW5TSn36pZQmcjHbM9nrFGF55HmPVD4HMea1Ul7A3y1HHz0Pgl4rrYzdg=,iv:OCme9i0tHhDbypits5TKfsGXnblYqBPouhwSVeu5q+M=,tag:F9zub18fB0zZh5ssHal+Gw==,type:str]
security:
acme:
env: ENC[AES256_GCM,data:LMrK8IIpx1d5Jl60VHDdwVLm4lyFDSELX1pF9wvFrNY0OJZ1EuHQ7Jgtf1wZ/cNy3XYFRxD9lEuNPJd0UN4vCw==,iv:2WEiipdYcsPX4frAvO7Iyp8zKWtydYlaPPKBd/1SFDM=,tag:G0Va5OcgSEO5E+m8jxsrFA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJZjRIRWd5TnRJekYwNFNU
SVRrYUNRandCbTZuN1FlbTQ3cUJPVmx6L0hvCnN3ZXo4TVVqT3d0ZUVBdHAzNVdx
TmlDZkpxekV0R2ZTejhlMERqeGlpY0kKLS0tIEVjNENWd1FYMyt0YzZDVGRQZGRD
WG9sZWpoVmsrTUdnM1l3R044UUJmVGcKiYd6OSj0vPSGpfWDNBeAYMDp9W7Yvmip
rqqt+Y9/ovF/yd1hDrM8nWru0W299u+ftSvwi/phxkmTBvK20U7Gtw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSRmFJZFV3Qmx5NW96ZW5Z
Ykl4VDN2NGZGVmtJZWxIQXpoTlpqajdvYnd3CmlwWGErTDNBdHhHeTlXQWYrdmNu
U0h6cG9sVXY0S1IvQlFNREV0TVk4U1EKLS0tIGhWT0UrMDNYTmlxSkdHRUYyNmhk
NUphaExURXRsMVRVVTI0cVBxVWNDakkKbUZ1BOpKbi/Qs32bMhKa2YN2YFHaDlug
ywpwdGaa7IGNZbwN1bKJVNDGBOGXxX+rSqueK4c1AXwGtG3HfAVApg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4OVNLRkF2S0RyT3p4a2tT
eURkOGkzTFcxajh5eHRFajlkYmdHQ2xBaVgwCkNqTm1Pem8yVWJUSEYvdnhTbjZN
R2h1RG4vMytUZmlFYzlKSXMva2tnYmsKLS0tIDVlT2dsRDRNQUZ1NklvT2Y1YnR6
Y1JkSXBEN1NhUUxUODhDS2J5eTVac0UKPR1qGMm94p2sKwXmCHygxZt8mfXJ3hCS
El5vgLXuzuE/qNB2g88j7bNOBN9g2Mxs2eLNdUEWj8tyahJ4BOTtWw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByOWQ5WGdrNWpNWEFpa0Zq
UTRRYkJMOWZJcWtxNmRpTWpxOE82bVVaYkFzCnNGWkdaaXhySkk2NlJ1YlpsckFQ
S3dITHhkNDkxb1VIZDNlQkd1enBvSU0KLS0tIDRGMklHTzNHUE8zUUNaK3l4dnF0
MHlIU3c4V0ZxeDlrTHlMeHpHaFRNYWsKmYaSicrgNvozfO6miBqvBr8voQlkOioZ
dzBkLr/0de+WBm85GzhuTDpYb0cvzzxwoUlNyxDMjSSSGzLpc/dqxw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1NU9nSVpRMnNwQWpIekdT
b3R1NFhWYitNRFppT1FudlBNK1NZa0l1RlZBCmd5b0x6YThOTUhHN01pMUQvYm9Q
L0FUdVdRaHczRW1BbDNoYi9NeW4zdE0KLS0tIHJuWHFvSnRoSFZNUTUwaU9DRXJ3
UHdRbDBBeXFwR0Vtc1h1N05mN0pVZzgKxLuY/RNLkhPpPDGDkO3yqbelCGng/qm1
9Yo97TlLq4zyw1cu2z0Fvcid3ZJt107+NN/2DZ4o8eXSnBSVXUcktw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-09T17:15:11Z"
mac: ENC[AES256_GCM,data:8nCX56znsRy2y1NmkCBJ5e/szd8CTJ1BIbNew40hdT50EruedQTmQWrOhql+na3ZDSWOfPHwufgX6hFwA6UHuOYZCswsS0ST2vtV1Y/f7Y0i20q7jAxslDxUt8MT94Z+WunZ7OgZn+3DVCSVkwtc3VqLT/gcATaA3KgbHTsiEFQ=,iv:PSkQC6oIlKAkwyVrwHJBLNVnhGVkSkVhtOyoV0FwPdY=,tag:bszELdBw3HnK9g5rPaocMQ==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4

View file

@ -1,10 +1,20 @@
{ lib, ... }: {lib, ...}:
with lib; rec {
firstOrDefault = first: default:
if first != null
then first
else default;
existsOrDefault = x: set: default:
if builtins.hasAttr x set
then builtins.getAttr x set
else default;
with lib; # Create custom package set
rec { mkMyPkgs = pkgs: {
borgmatic = pkgs.callPackage ../../nixos/packages/borgmatic {};
firstOrDefault = first: default: if first != null then first else default; mods = pkgs.callPackage ../../nixos/packages/charm-mods {};
existsOrDefault = x: set: default: if builtins.hasAttr x set then builtins.getAttr x set else default; # modrinth-app-unwrapped = pkgs.callPackage ../../nixos/packages/modrinth {};
};
# main service builder # main service builder
mkService = options: ( mkService = options: (
@ -12,32 +22,50 @@ rec {
user = existsOrDefault "user" options "568"; user = existsOrDefault "user" options "568";
group = existsOrDefault "group" options "568"; group = existsOrDefault "group" options "568";
enableBackups = (lib.attrsets.hasAttrByPath [ "persistence" "folder" ] options) # enableBackups =
&& (lib.attrsets.attrByPath [ "persistence" "enable" ] true options); # (lib.attrsets.hasAttrByPath ["persistence" "folder"] options)
# && (lib.attrsets.attrByPath ["persistence" "enable"] true options);
# Security options for containers # Security options for containers
containerExtraOptions = lib.optionals (lib.attrsets.attrByPath [ "container" "caps" "privileged" ] false options) [ "--privileged" ] containerExtraOptions =
++ lib.optionals (lib.attrsets.attrByPath [ "container" "caps" "readOnly" ] false options) [ "--read-only" ] lib.optionals (lib.attrsets.attrByPath ["container" "caps" "privileged"] false options) [
++ lib.optionals (lib.attrsets.attrByPath [ "container" "caps" "tmpfs" ] false options) [ (map (folders: "--tmpfs=${folders}") tmpfsFolders) ] "--privileged"
++ lib.optionals (lib.attrsets.attrByPath [ "container" "caps" "noNewPrivileges" ] false options) [ "--security-opt=no-new-privileges" ] ]
++ lib.optionals (lib.attrsets.attrByPath [ "container" "caps" "dropAll" ] false options) [ "--cap-drop=ALL" ] ++ lib.optionals (lib.attrsets.attrByPath ["container" "caps" "readOnly"] false options) [
; "--read-only"
in ]
{ ++ lib.optionals (lib.attrsets.attrByPath ["container" "caps" "tmpfs"] false options) [
(map (folders: "--tmpfs=${folders}") tmpfsFolders)
]
++ lib.optionals (lib.attrsets.attrByPath ["container" "caps" "noNewPrivileges"] false options) [
"--security-opt=no-new-privileges"
]
++ lib.optionals (lib.attrsets.attrByPath ["container" "caps" "dropAll"] false options) [
"--cap-drop=ALL"
];
in {
virtualisation.oci-containers.containers.${options.app} = mkIf options.container.enable { virtualisation.oci-containers.containers.${options.app} = mkIf options.container.enable {
image = "${options.container.image}"; image = "${options.container.image}";
user = "${user}:${group}"; user = "${user}:${group}";
environment = { environment =
TZ = options.timeZone; {
} // options.container.env; TZ = options.timeZone;
environmentFiles = lib.attrsets.attrByPath [ "container" "envFiles" ] [ ] options; }
volumes = [ "/etc/localtime:/etc/localtime:ro" ] ++ // options.container.env;
lib.optionals (lib.attrsets.hasAttrByPath [ "container" "persistentFolderMount" ] options) [ environmentFiles = lib.attrsets.attrByPath ["container" "envFiles"] [] options;
volumes =
["/etc/localtime:/etc/localtime:ro"]
++ lib.optionals (lib.attrsets.hasAttrByPath ["container" "persistentFolderMount"] options) [
"${options.persistence.folder}:${options.container.persistentFolderMount}:rw" "${options.persistence.folder}:${options.container.persistentFolderMount}:rw"
] ++ lib.attrsets.attrByPath [ "container" "volumes" ] [ ] options; ]
++ lib.attrsets.attrByPath ["container" "volumes"] [] options;
extraOptions = containerExtraOptions; extraOptions = containerExtraOptions;
}; };
systemd.tmpfiles.rules = lib.optionals (lib.attrsets.hasAttrByPath [ "persistence" "folder" ] options) [ "d ${options.persistence.folder} 0750 ${user} ${group} -" ]; systemd.tmpfiles.rules = lib.optionals (lib.attrsets.hasAttrByPath [
"persistence"
"folder"
]
options) ["d ${options.persistence.folder} 0750 ${user} ${group} -"];
} }
); );
} }

View file

@ -1,56 +0,0 @@
{ lib, config, ... }:
with lib;
let
app = "backrest";
image = "garethgeorge/backrest:v1.1.0";
user = "568"; #string
group = "568"; #string
port = 9898; #int
cfg = config.mySystem.services.${app};
appFolder = "/var/lib/${app}";
# persistentFolder = "${config.mySystem.persistentFolder}/var/lib/${appFolder}";
in
{
options.mySystem.services.${app} =
{
enable = mkEnableOption "${app}";
addToHomepage = mkEnableOption "Add ${app} to homepage" // { default = true; };
};
config = mkIf cfg.enable {
# ensure folder exist and has correct owner/group
systemd.tmpfiles.rules = [
"d ${appFolder}/config 0750 ${user} ${group} -"
"d ${appFolder}/data 0750 ${user} ${group} -"
"d ${appFolder}/cache 0750 ${user} ${group} -"
];
virtualisation.oci-containers.containers.${app} = {
image = "${image}";
user = "${user}:${group}";
environment = {
BACKREST_PORT = "9898";
BACKREST_DATA = "/data";
BACKREST_CONFIG = "/config/config.json";
XDG_CACHE_HOME = "/cache";
};
volumes = [
"${appFolder}/nixos/config:/config:rw"
"${appFolder}/nixos/data:/data:rw"
"${appFolder}/nixos/cache:/cache:rw"
"${config.mySystem.nasFolder}/backup/nixos/nixos:/repos:rw"
"/etc/localtime:/etc/localtime:ro"
];
};
services.nginx.virtualHosts."${app}.${config.networking.domain}" = {
useACMEHost = config.networking.domain;
forceSSL = true;
locations."^~ /" = {
proxyPass = "http://${app}:${builtins.toString port}";
extraConfig = "resolver 10.88.0.1;";
};
};
};
}

View file

@ -1,7 +1,10 @@
{ {
imports = [ imports = [
./backrest ./jellyfin
./lego-auto ./jellyseerr
./unifi ./ollama
./plex
./scrutiny
./scrypted
]; ];
} }

View file

@ -0,0 +1,136 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
app = "jellyfin";
cfg = config.mySystem.containers.${app};
group = "kah";
image = "ghcr.io/jellyfin/jellyfin:${version}";
user = "kah";
# renovate: depName=ghcr.io/jellyfin/jellyfin datasource=docker
version = "10.10.6";
volumeLocation = "/nahar/containers/volumes/jellyfin";
in {
# Options
options.mySystem.containers.${app} = {
enable = mkEnableOption "${app}";
openFirewall =
mkEnableOption "Open firewall for ${app}"
// {
default = true;
};
};
# Implementation
config = mkIf cfg.enable {
# Systemd service for container
systemd.services.${app} = {
description = "Jellyfin Media Server";
wantedBy = ["multi-user.target"];
after = ["network.target"];
serviceConfig = {
ExecStartPre = "${pkgs.writeShellScript "jellyfin-start-pre" ''
set -o errexit
set -o nounset
set -o pipefail
${pkgs.podman}/bin/podman rm -f ${app} || true
rm -f /run/${app}.ctr-id
''}";
ExecStart = ''
${pkgs.podman}/bin/podman run \
--rm \
--name=${app} \
--user="${toString config.users.users."${user}".uid}:${
toString config.users.groups."${group}".gid
}" \
--device='nvidia.com/gpu=all' \
--log-driver=journald \
--cidfile=/run/${app}.ctr-id \
--cgroups=no-conmon \
--sdnotify=conmon \
--volume="${volumeLocation}:/config:rw" \
--volume="/moria/media:/media:rw" \
--volume="tmpfs:/cache:rw" \
--volume="tmpfs:/transcode:rw" \
--volume="tmpfs:/tmp:rw" \
--env=TZ=America/Chicago \
--env=DOTNET_SYSTEM_IO_DISABLEFILELOCKING=true \
--env=JELLYFIN_FFmpeg__probesize=50000000 \
--env=JELLYFIN_FFmpeg__analyzeduration=50000000 \
--env=JELLYFIN_PublishedServerUrl=http://10.1.1.61:8096 \
-p 8096:8096 \
-p 8920:8920 \
-p 1900:1900/udp \
-p 7359:7359/udp \
${image}
'';
ExecStop = "${pkgs.podman}/bin/podman stop --ignore --cidfile=/run/${app}.ctr-id";
ExecStopPost = "${pkgs.podman}/bin/podman rm --force --ignore --cidfile=/run/${app}.ctr-id";
Type = "simple";
Restart = "always";
};
};
# Firewall
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [
8096 # HTTP web interface
8920 # HTTPS web interface
];
allowedUDPPorts = [
1900 # DLNA discovery
7359 # Jellyfin auto-discovery
];
};
# TODO add nginx proxy
# services.nginx.virtualHosts."${app}.${config.networking.domain}" = {
# useACMEHost = config.networking.domain;
# forceSSL = true;
# locations."^~ /" = {
# proxyPass = "http://${app}:${builtins.toString port}";
# extraConfig = "resolver 10.88.0.1;";
# };
# };
## TODO add to homepage
# mySystem.services.homepage.media = mkIf cfg.addToHomepage [
# {
# Plex = {
# icon = "${app}.svg";
# href = "https://${app}.${config.mySystem.domain}";
# description = "Media streaming service";
# container = "${app}";
# widget = {
# type = "tautulli";
# url = "https://tautulli.${config.mySystem.domain}";
# key = "{{HOMEPAGE_VAR_TAUTULLI__API_KEY}}";
# };
# };
# }
# ];
# TODO add gatus monitor
# mySystem.services.gatus.monitors = [
# {
# name = app;
# group = "media";
# url = "https://${app}.${config.mySystem.domain}/web/";
# interval = "1m";
# conditions = [
# "[CONNECTED] == true"
# "[STATUS] == 200"
# "[RESPONSE_TIME] < 50"
# ];
# }
# ];
};
}

View file

@ -0,0 +1,61 @@
restic:
jellyfin:
env: ENC[AES256_GCM,data:aau+5TFpye6u/e6Xnlg=,iv:ooDueH38Xukvvh+XORfW4giR+TaeVZEwK+EQnxFMKE8=,tag:u5JaeiGFi4e7gk3Bb1JLsw==,type:str]
password: ENC[AES256_GCM,data:0tkviPFQsP9wAVcbxspwOdN7eT352pibr/gjSoVmmL77xw==,iv:H2R8HofrrUkTqPuGDkt4xkOhvi16/kdT2/GjvSY5HQg=,tag:atT5aBQgmxBeUsMd5IYXIQ==,type:str]
template: ENC[AES256_GCM,data:9P8G2rwOTMAj0PkHVGEouSLd9h2FrUxakYWQa4BMt6LiHxgwzlAVe9QSJFOr1di+HmfK+3Y2dG27pz/WW1J5OArD,iv:smq5UTpzJJ2GlfCkwjA0q4jl3XJo0M8KhBecXIqipx0=,tag:RA0UpqoBSLgwlHK5Lz9VEA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhZ0hkNVA5TXN4UmpZdG1z
dGEwUExxcnc4M01TV2hYTHprRTBDek1iMmpFCjhOT01lblB2aVpuRVZXZEJxeGJY
cGNqWEVUMmlmVzlScng3TCtqSkxUL3MKLS0tIG9wWlVIYnRjOU1ZZ0pEdTFWWE4x
SFh5Tzc5SytvU0ZYbENDT2E4Y1doNHMKT5qjHInpLf8qEc+6FRM2hpQcbOJPFR15
65UbBv00T6K8s8/ltNzwDUtjufIbtyOXjY+QrPGVm1lhFOXRYEBLWw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e4sd6jjd4uxxsh9xmhdsnu6mqd5h8c4zz4gwme7lkw9ee949fc9q4px9df
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSSDJNYnd6NTFOaXJ0QUpU
M1BCeHo0QmczQXN2ZEc1cXhsbTVaZzlkNDBFCjcwVnhvaC9KRjVzRjVTY3E0Q0RR
QUxRRGdPcEkxWmVPVVNxcXFBNVFDWW8KLS0tIGFBUlh1ZVJvd1dXc2NEM25sd0Fa
YWwyUS9LZnJyMEY4VzB0czFoWURSZEUKBg5zxFww39sHfH78p9WnkIcXyvq6VyIQ
f1/zFRkuM8X3iuqOpNjjqThey1HKkvTzH18st5YLciDC6SV299JqZQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nkpq8lr09vamgvf8cvzemqjyr3ex8w7azfupdr2gverz9j5zgemsv99t0z
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dStpS3Uyb21NWFBJa2hV
VTJnSk9iV1ZMNkZnc3JId3hhbE1sSk5LSzJVCnZSeUJBTjNGVkhTYkpGZGZudDUz
RXc2VFVJNkM3bGpGMUlxc0s1Q2J4Mk0KLS0tIFFsMkdOWnQzeFlmYStaWWlYSHEz
SUdtQTc5OVB5eklpVWFxRTNBUFhsVXcKX5xNh9jnOllbRaMyzjh/70ohLcO8BeU5
hTWmdnTgclbVaFBOPTPY6CCXNnBuvqjdi+ok9QULDE9cvtLUpstbWQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nwnqxjuaxlt5g7fe8rnspvn2c36uuef4hzwuwa6cfjfalz2lrd4q4n5fpl
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaaTlQaWt5QTFHVE9yS3lH
MVd5RmI2TVZaVGpodEFvOUhDLzg2Qjl3dDE0CllGWHhGTExVbDJydlhMclQ3RFBz
V2V1a3NTMG80Ykt2eHUwUW9aMXFMYzgKLS0tIHpJeFR3ZEJxWkg5Y2RQR0NUNUND
RERQbjlZNDJEUWVTd3d6YytVbUt5TzgKksgSnaMHY/wBVZyXBgrxsfxZABNDyuA3
8kgYBqd8p3g0OyW5h2UzDh7F7oweHhbljdL4CNlGDJ713ZlBggfsaQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a8z3p24v32l9yxm5z2l8h7rpc3nhacyfv4jvetk2lenrvsdstd3sdu2kaf
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYY0VXRm5SRTZYQ0JWK3JM
TW9POGhRVGZ2b0t4SGVEaUczaFBlaDlsc2p3CkhEb2JBTnNFdzl0RHM3aW5jaHFN
dzl6ellHY2prNk1xeUUwMVE4WVdiYmMKLS0tIDM4YVdMeFpyb0kzRmdLUXduWXdI
KyswMHA3VDNkV1g1bEhhcUlNdHlFVW8K8fuwy7OtIoybFpaBBsZlxO40XUhDaxDR
W9xy0wVJplCNWDDN0Ff93hEXaYVcF/B3V3EdouzAbdycVTrtXhiO2g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-09T06:33:40Z"
mac: ENC[AES256_GCM,data:MZx07lkc3i1nJicWlUofCr4gq05g/BYGx3949DSILeAWegrsTQXh8zqBWpultONgABPdYgIb/JwJClMmKQ+p37u+6aTklwZfW+su3tOYwknkPogHSxTFaLW0Yxzy4CvM2VNiFDNuvZT8LjCminBKpjJebYq+HCjNQn6Y9/dPyXI=,iv:LXwamgr7uE0dfKoRJC9IGvzZ+HmRXw8cdVoXG2DuuxM=,tag:tsJo/PFZLGcEoa02nXNbXg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4

View file

@ -0,0 +1,86 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
app = "jellyseerr";
cfg = config.mySystem.containers.${app};
group = "kah";
image = "ghcr.io/fallenbagel/jellyseerr:${version}";
user = "jellyseerr";
# renovate: depName=ghcr.io/fallenbagel/jellyseerr datasource=docker
version = "2.5.0";
volumeLocation = "/nahar/containers/volumes/jellyseerr";
in {
# Options
options.mySystem.containers.${app} = {
enable = mkEnableOption "${app}";
openFirewall =
mkEnableOption "Open firewall for ${app}"
// {
default = true;
};
};
# Implementation
config = mkIf cfg.enable {
# User configuration
users = mkIf (user == "jellyseerr") {
users.jellyseerr = {
inherit group;
isSystemUser = true;
};
};
# Systemd service for container
systemd.services.${app} = {
description = "Jellyseerr media request and discovery manager for Jellyfin";
wantedBy = ["multi-user.target"];
after = ["network.target"];
serviceConfig = {
ExecStartPre = "${pkgs.writeShellScript "jellyseerr-start-pre" ''
set -o errexit
set -o nounset
set -o pipefail
${pkgs.podman}/bin/podman rm -f ${app} || true
rm -f /run/${app}.ctr-id
''}";
ExecStart = ''
${pkgs.podman}/bin/podman run \
--rm \
--name=${app} \
--user="${toString config.users.users."${user}".uid}:${
toString config.users.groups."${group}".gid
}" \
--log-driver=journald \
--cidfile=/run/${app}.ctr-id \
--cgroups=no-conmon \
--sdnotify=conmon \
--volume="${volumeLocation}:/app/config:rw" \
--volume="/moria/media:/media:rw" \
--volume="tmpfs:/cache:rw" \
--volume="tmpfs:/transcode:rw" \
--volume="tmpfs:/tmp:rw" \
--env=TZ=America/Chicago \
-p 5055:5055 \
${image}
'';
ExecStop = "${pkgs.podman}/bin/podman stop --ignore --cidfile=/run/${app}.ctr-id";
ExecStopPost = "${pkgs.podman}/bin/podman rm --force --ignore --cidfile=/run/${app}.ctr-id";
Type = "simple";
Restart = "always";
};
};
# Firewall
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [
5055 # HTTP web interface
];
};
};
}

View file

@ -0,0 +1,135 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
app = "ollama";
# renovate: depName=docker.io/ollama/ollama datasource=docker
version = "0.6.1";
image = "docker.io/ollama/ollama:${version}";
cfg = config.mySystem.containers.${app};
in {
# Options
options.mySystem.containers.${app} = {
enable = mkEnableOption "${app}";
# TODO add to homepage
# addToHomepage = mkEnableOption "Add ${app} to homepage" // {
# default = true;
# };
openFirewall =
mkEnableOption "Open firewall for ${app}"
// {
default = true;
};
};
# Implementation
config = mkIf cfg.enable {
# Systemd service for container
systemd.services.${app} = {
description = "Ollama";
wantedBy = ["multi-user.target"];
after = ["network.target"];
serviceConfig = {
ExecStartPre = "${pkgs.writeShellScript "ollama-start-pre" ''
set -o errexit
set -o nounset
set -o pipefail
${pkgs.podman}/bin/podman rm -f ${app} || true
rm -f /run/${app}.ctr-id
''}";
ExecStart = ''
${pkgs.podman}/bin/podman run \
--rm \
--name=${app} \
--user=568:568 \
--device='nvidia.com/gpu=all' \
--log-driver=journald \
--cidfile=/run/${app}.ctr-id \
--cgroups=no-conmon \
--sdnotify=conmon \
--volume="/nahar/containers/volumes/ollama:/.ollama:rw" \
--volume="/nahar/ollama/models:/models:rw" \
--volume="tmpfs:/cache:rw" \
--volume="tmpfs:/tmp:rw" \
--env=TZ=America/Chicago \
--env=OLLAMA_HOST=0.0.0.0 \
--env=OLLAMA_ORIGINS=* \
--env=OLLAMA_MODELS=/models \
--env=OLLAMA_KEEP_ALIVE=24h \
-p 11434:11434 \
${image}
'';
ExecStop = "${pkgs.podman}/bin/podman stop --ignore --cidfile=/run/${app}.ctr-id";
ExecStopPost = "${pkgs.podman}/bin/podman rm --force --ignore --cidfile=/run/${app}.ctr-id";
Type = "simple";
Restart = "always";
};
};
# Firewall
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [
11434 # HTTP web interface
];
allowedUDPPorts = [];
};
# TODO add nginx proxy
# services.nginx.virtualHosts."${app}.${config.networking.domain}" = {
# useACMEHost = config.networking.domain;
# forceSSL = true;
# locations."^~ /" = {
# proxyPass = "http://${app}:${builtins.toString port}";
# extraConfig = "resolver 10.88.0.1;";
# };
# };
## TODO add to homepage
# mySystem.services.homepage.media = mkIf cfg.addToHomepage [
# {
# Plex = {
# icon = "${app}.svg";
# href = "https://${app}.${config.mySystem.domain}";
# description = "Media streaming service";
# container = "${app}";
# widget = {
# type = "tautulli";
# url = "https://tautulli.${config.mySystem.domain}";
# key = "{{HOMEPAGE_VAR_TAUTULLI__API_KEY}}";
# };
# };
# }
# ];
# TODO add gatus monitor
# mySystem.services.gatus.monitors = [
# {
# name = app;
# group = "media";
# url = "https://${app}.${config.mySystem.domain}/web/";
# interval = "1m";
# conditions = [
# "[CONNECTED] == true"
# "[STATUS] == 200"
# "[RESPONSE_TIME] < 50"
# ];
# }
# ];
# TODO add restic backup
# services.restic.backups = config.lib.mySystem.mkRestic {
# inherit app user;
# excludePaths = [ "Backups" ];
# paths = [ appFolder ];
# inherit appFolder;
# };
};
}

View file

@ -0,0 +1,127 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
app = "plex";
cfg = config.mySystem.containers.${app};
group = "kah";
image = "ghcr.io/onedr0p/plex:${version}";
user = "kah";
# renovate: depName=ghcr.io/onedr0p/plex datasource=docker versioning=loose
version = "1.41.5.9522-a96edc606";
volumeLocation = "/nahar/containers/volumes/plex";
in {
# Options
options.mySystem.containers.${app} = {
enable = mkEnableOption "${app}";
openFirewall =
mkEnableOption "Open firewall for ${app}"
// {
default = true;
};
};
# Implementation
config = mkIf cfg.enable {
# Systemd service for container
systemd.services.${app} = {
description = "Plex Media Server";
wantedBy = ["multi-user.target"];
after = ["network.target"];
serviceConfig = {
ExecStartPre = "${pkgs.writeShellScript "plex-start-pre" ''
set -o errexit
set -o nounset
set -o pipefail
${pkgs.podman}/bin/podman rm -f ${app} || true
rm -f /run/${app}.ctr-id
''}";
ExecStart = ''
${pkgs.podman}/bin/podman run \
--rm \
--name=${app} \
--device='nvidia.com/gpu=all' \
--log-driver=journald \
--cidfile=/run/${app}.ctr-id \
--cgroups=no-conmon \
--sdnotify=conmon \
--user="${toString config.users.users."${user}".uid}:${
toString config.users.groups."${group}".gid
}" \
--volume="${volumeLocation}:/config:rw" \
--volume="/moria/media:/media:rw" \
--volume="tmpfs:/config/Library/Application Support/Plex Media Server/Logs:rw" \
--volume="tmpfs:/tmp:rw" \
--volume="tmpfs:/transcode:rw" \
--env=TZ=America/Chicago \
--env=PLEX_ADVERTISE_URL=https://10.1.1.61:32400 \
--env=PLEX_NO_AUTH_NETWORKS=10.1.1.0/24 \
# nvidia-container-runtime mounts the nvidia libraries here.
--env=LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64 \
-p 32400:32400 \
${image}
'';
ExecStop = "${pkgs.podman}/bin/podman stop --ignore --cidfile=/run/${app}.ctr-id";
ExecStopPost = "${pkgs.podman}/bin/podman rm --force --ignore --cidfile=/run/${app}.ctr-id";
Type = "simple";
Restart = "always";
};
};
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [
32400 # Primary Plex port
];
};
# TODO add nginx proxy
# services.nginx.virtualHosts."${app}.${config.networking.domain}" = {
# useACMEHost = config.networking.domain;
# forceSSL = true;
# locations."^~ /" = {
# proxyPass = "http://${app}:${builtins.toString port}";
# extraConfig = "resolver 10.88.0.1;";
# };
# };
## TODO add to homepage
# mySystem.services.homepage.media = mkIf cfg.addToHomepage [
# {
# Plex = {
# icon = "${app}.svg";
# href = "https://${app}.${config.mySystem.domain}";
# description = "Media streaming service";
# container = "${app}";
# widget = {
# type = "tautulli";
# url = "https://tautulli.${config.mySystem.domain}";
# key = "{{HOMEPAGE_VAR_TAUTULLI__API_KEY}}";
# };
# };
# }
# ];
# TODO add gatus monitor
# mySystem.services.gatus.monitors = [
# {
# name = app;
# group = "media";
# url = "https://${app}.${config.mySystem.domain}/web/";
# interval = "1m";
# conditions = [
# "[CONNECTED] == true"
# "[STATUS] == 200"
# "[RESPONSE_TIME] < 50"
# ];
# }
# ];
};
}

View file

@ -0,0 +1,93 @@
{
lib,
config,
...
}:
with lib; let
app = "scrutiny";
# renovate: depName=AnalogJ/scrutiny datasource=github-releases
version = "v0.8.1";
cfg = config.mySystem.services.${app};
in {
options.mySystem.services.${app} = {
enable = mkEnableOption "${app}";
# Port to expose the web ui on.
port = mkOption {
type = types.int;
default = 8080;
description = ''
Port to expose the web ui on.
'';
example = 8080;
};
# Location where the container will store its data.
containerVolumeLocation = mkOption {
type = types.str;
default = "/mnt/data/containers/${app}";
description = ''
The location where the container will store its data.
'';
example = "/mnt/data/containers/${app}";
};
# podman equivalent:
# --device /dev/disk/by-id/nvme-XXXXXXXXXXXXXXXXXXXXXXXXXXXX
devices = mkOption {
type = types.listOf types.str;
default = [];
description = ''
Devices to monitor on Scrutiny.
'';
example = [
"/dev/disk/by-id/nvme-XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
];
};
# podman equivalent:
# --cap-add SYS_RAWIO
extraCapabilities = mkOption {
type = types.listOf types.str;
default = [
"SYS_RAWIO"
];
description = ''
Extra capabilities to add to the container.
'';
example = [
"SYS_RAWIO"
];
};
};
config = mkIf cfg.enable {
# TODO: Add automatic restarting of the container when disks.nix changes.
# - https://github.com/nix-community/home-manager/issues/3865#issuecomment-1631998032
# - https://github.com/NixOS/nixpkgs/blob/6f6c45b5134a8ee2e465164811e451dcb5ad86e3/nixos/modules/virtualisation/oci-containers.nix
virtualisation.oci-containers.containers.${app} = {
image = "ghcr.io/analogj/scrutiny:${version}-omnibus";
autoStart = true;
ports = [
"${toString cfg.port}:8080" # web ui
"8086:8086" # influxdb2
];
environment = {
TZ = "America/Chicago";
};
volumes = [
"${cfg.containerVolumeLocation}:/opt/scrutiny/config"
"${cfg.containerVolumeLocation}/influxdb2:/opt/scrutiny/influxdb"
"/run/udev:/run/udev:ro"
];
# Merge the devices and extraCapabilities into the extraOptions property
# using the --device and --cap-add flags
extraOptions =
(map (disk: "--device=${toString disk}") cfg.devices)
++ (map (cap: "--cap-add=${cap}") cfg.extraCapabilities);
};
};
}

View file

@ -0,0 +1,139 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
app = "scrypted";
# renovate: depName=ghcr.io/koush/scrypted datasource=docker versioning=docker
version = "v0.138.15-noble-nvidia";
image = "ghcr.io/koush/scrypted:${version}";
cfg = config.mySystem.containers.${app};
in {
# Options
options.mySystem.containers.${app} = {
enable = mkEnableOption "${app}";
# TODO add to homepage
# addToHomepage = mkEnableOption "Add ${app} to homepage" // {
# default = true;
# };
openFirewall =
mkEnableOption "Open firewall for ${app}"
// {
default = true;
};
};
# Implementation
config = mkIf cfg.enable {
# Systemd service for container
systemd.services.${app} = {
description = "Scrypted Home Security";
wantedBy = ["multi-user.target"];
after = ["network.target"];
serviceConfig = {
ExecStartPre = "${pkgs.writeShellScript "scrypted-start-pre" ''
set -o errexit
set -o nounset
set -o pipefail
${pkgs.podman}/bin/podman rm -f ${app} || true
rm -f /run/${app}.ctr-id
''}";
ExecStart = ''
${pkgs.podman}/bin/podman run \
--rm \
--name=${app} \
--device=/dev/bus/usb \
--device='nvidia.com/gpu=all' \
--log-driver=journald \
--cidfile=/run/${app}.ctr-id \
--cgroups=no-conmon \
--sdnotify=conmon \
--volume="/nahar/containers/volumes/scrypted:/server/volume:rw" \
--volume="/nahar/scrypted/:/recordings:rw" \
--volume="tmpfs:/.cache:rw" \
--volume="tmpfs:/.npm:rw" \
--volume="tmpfs:/tmp:rw" \
--env=TZ=America/Chicago \
--env=LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64 \
--network=host \
${image}
'';
ExecStop = "${pkgs.podman}/bin/podman stop --ignore --cidfile=/run/${app}.ctr-id";
ExecStopPost = "${pkgs.podman}/bin/podman rm --force --ignore --cidfile=/run/${app}.ctr-id";
Type = "simple";
Restart = "always";
};
};
# Firewall
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [
11080 # Main Scrypted interface
10443 # HTTPS interface
8554 # RTSP server
33961 # Homekit
];
allowedUDPPorts = [
10443 # HTTPS interface
8554 # RTSP server
];
};
# TODO add nginx proxy
# services.nginx.virtualHosts."${app}.${config.networking.domain}" = {
# useACMEHost = config.networking.domain;
# forceSSL = true;
# locations."^~ /" = {
# proxyPass = "http://${app}:${builtins.toString port}";
# extraConfig = "resolver 10.88.0.1;";
# };
# };
## TODO add to homepage
# mySystem.services.homepage.media = mkIf cfg.addToHomepage [
# {
# Plex = {
# icon = "${app}.svg";
# href = "https://${app}.${config.mySystem.domain}";
# description = "Media streaming service";
# container = "${app}";
# widget = {
# type = "tautulli";
# url = "https://tautulli.${config.mySystem.domain}";
# key = "{{HOMEPAGE_VAR_TAUTULLI__API_KEY}}";
# };
# };
# }
# ];
# TODO add gatus monitor
# mySystem.services.gatus.monitors = [
# {
# name = app;
# group = "media";
# url = "https://${app}.${config.mySystem.domain}/web/";
# interval = "1m";
# conditions = [
# "[CONNECTED] == true"
# "[STATUS] == 200"
# "[RESPONSE_TIME] < 50"
# ];
# }
# ];
# TODO add restic backup
# services.restic.backups = config.lib.mySystem.mkRestic {
# inherit app user;
# excludePaths = [ "Backups" ];
# paths = [ appFolder ];
# inherit appFolder;
# };
};
}

View file

@ -1,46 +0,0 @@
{ lib, config, ... }:
with lib;
let
app = "unifi";
image = "ghcr.io/goofball222/unifi:8.2.93";
user = "999"; #string
group = "102"; #string
port = 9898; #int
cfg = config.mySystem.services.${app};
appFolder = "/eru/containers/volumes/${app}";
# persistentFolder = "${config.mySystem.persistentFolder}/var/lib/${appFolder}";
in
{
options.mySystem.services.${app} = {
enable = mkEnableOption "${app}";
};
config = mkIf cfg.enable {
networking.firewall.interfaces.podman0 = {
allowedTCPPorts = [ 8080 8443 8880 8843 ];
allowedUDPPorts = [ 3478 ];
};
virtualisation.oci-containers.containers.${app} = {
image = "${image}";
autoStart = true;
ports = [
"3478:3478/udp" # STUN
"8080:8080" # inform controller
"8443:8443" # https
"8880:8880" # HTTP portal redirect
"8843:8843" # HTTPS portal redirect
];
environment = {
TZ = "America/Chicago";
RUNAS_UID0 = "false";
PGID = "102";
PUID = "999";
};
volumes = [
"${appFolder}/cert:/usr/lib/unifi/cert"
"${appFolder}/data:/usr/lib/unifi/data"
"${appFolder}/logs:/usr/lib/unifi/logs"
];
};
};
}

View file

@ -1,5 +1,7 @@
{ {
imports = [ imports = [
./gnome.nix ./gnome.nix
./hyprland.nix
./kde.nix
]; ];
} }

View file

@ -1,18 +1,34 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.mySystem.de.gnome;
in
{ {
options.mySystem.de.gnome.enable = mkEnableOption "GNOME"; lib,
options.mySystem.de.gnome.systrayicons = mkEnableOption "Enable systray icons" // { default = true; }; config,
options.mySystem.de.gnome.gsconnect = mkEnableOption "Enable gsconnect (KDEConnect for GNOME)" // { default = true; }; pkgs,
...
config = mkIf cfg.enable { }: let
cfg = config.mySystem.de.gnome;
in {
options = {
mySystem.de.gnome = {
enable =
lib.mkEnableOption "GNOME"
// {
default = false;
};
systrayicons =
lib.mkEnableOption "Enable systray icons"
// {
default = true;
};
gsconnect =
lib.mkEnableOption "Enable gsconnect (KDEConnect for GNOME)"
// {
default = true;
};
};
};
config = lib.mkIf cfg.enable {
# Ref: https://nixos.wiki/wiki/GNOME # Ref: https://nixos.wiki/wiki/GNOME
# GNOME plz
services = { services = {
displayManager = { displayManager = {
defaultSession = "gnome"; defaultSession = "gnome";
@ -35,41 +51,40 @@ in
}; };
}; };
udev.packages = optionals cfg.systrayicons [ pkgs.gnome.gnome-settings-daemon ]; # support appindicator udev.packages = lib.optionals cfg.systrayicons [pkgs.gnome.gnome-settings-daemon]; # support appindicator
}; };
# systyray icons # systyray icons
# extra pkgs and extensions # extra pkgs and extensions
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs;
wl-clipboard # ls ~/Downloads | wl-copy or wl-paste > clipboard.txt [
playerctl # gsconnect play/pause command wl-clipboard # ls ~/Downloads | wl-copy or wl-paste > clipboard.txt
pamixer # gcsconnect volume control playerctl # gsconnect play/pause command
gnome.gnome-tweaks pamixer # gcsconnect volume control
gnome.dconf-editor gnome.gnome-tweaks
gnome.dconf-editor
# This installs the extension packages, but # This installs the extension packages, but
# dont forget to enable them per-user in dconf settings -> "org/gnome/shell" # dont forget to enable them per-user in dconf settings -> "org/gnome/shell"
gnomeExtensions.vitals gnomeExtensions.vitals
gnomeExtensions.caffeine gnomeExtensions.caffeine
gnomeExtensions.dash-to-dock gnomeExtensions.dash-to-dock
] ]
++ optionals cfg.systrayicons [ pkgs.gnomeExtensions.appindicator ]; ++ optionals cfg.systrayicons [pkgs.gnomeExtensions.appindicator];
}; };
# enable gsconnect # enable gsconnect
# this method also opens the firewall ports required when enable = true # this method also opens the firewall ports required when enable = true
programs.kdeconnect = mkIf programs.kdeconnect = lib.mkIf cfg.gsconnect {
cfg.gsconnect enable = true;
{ package = pkgs.gnomeExtensions.gsconnect;
enable = true; };
package = pkgs.gnomeExtensions.gsconnect;
};
# GNOME connection to browsers - requires flag on browser as well # GNOME connection to browsers - requires flag on browser as well
services.gnome.gnome-browser-connector.enable = lib.any services.gnome.gnome-browser-connector.enable = lib.any (user: user.programs.firefox.enable) (
(user: user.programs.firefox.enable) lib.attrValues config.home-manager.users
(lib.attrValues config.home-manager.users); );
# And dconf # And dconf
programs.dconf.enable = true; programs.dconf.enable = true;
@ -96,6 +111,4 @@ in
atomix # puzzle game atomix # puzzle game
]); ]);
}; };
} }

View file

@ -0,0 +1,146 @@
{
lib,
config,
pkgs,
inputs,
...
}: let
cfg = config.mySystem.de.hyprland;
hypr-pkgs = inputs.hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in {
options = {
mySystem.de.hyprland = {
enable =
lib.mkEnableOption "Hyprland"
// {
default = false;
};
};
};
config = lib.mkIf cfg.enable {
# We need all hyprland packages to follow the same MESA version
hardware = {
graphics = {
package = hypr-pkgs.mesa.drivers;
};
};
# Hyprland nixpkgs system packages
environment.systemPackages = with pkgs; [
# Hyprland
cava # Audio visualizer
cliphist # Clipboard history
duf # du tui - Disk Usage
greetd.tuigreet # TUI login manager
grim # Screenshot tool
hypridle # Hyprland idle daemon
inputs.ags.packages.${pkgs.stdenv.hostPlatform.system}.ags # AGS
inxi # System information tool
libva-utils # to view graphics capabilities
loupe # Screenshot tool
nvtopPackages.full # Video card monitoring
nwg-displays # Display manager for Hyprland
nwg-look # GTK settings editor, designed for Wayland.
pamixer # Volume control
pyprland # Python bindings for Hyprland
rofi-wayland # Window switcher and run dialog
slurp # Select a region in Wayland
swappy # Snapshot editor, designed for Wayland.
swaynotificationcenter
swww # Wallpaper daemon for wayland
wallust # Generate and change colors schemes on the fly.
waybar # Wayland top bar
wl-clipboard # Pipe to and from the clipboard
wlogout
wlr-randr # Wayland screen management
wofi # Rofi for Wayland
yad # Display dialog boxes from shell scripts
(mpv.override {scripts = [mpvScripts.mpris];})
# XDG things
xdg-user-dirs
xdg-utils
# GTK things
gnome-system-monitor
bc
baobab
glib
# Qt things
gsettings-qt
libsForQt5.qtstyleplugin-kvantum # Kvantum theme engine
# bar
libappindicator
libnotify
busybox
];
# Enabling Hyprlock to unlock the system
security = {
pam.services.hyprlock = {};
polkit.enable = true;
};
# Hyprland nixpkgs program modules
programs = {
# Hyprland DE
hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
withUWSM = true;
};
dconf.enable = true;
seahorse.enable = true;
ssh = {
enableAskPassword = true;
askPassword = "${pkgs.seahorse}/libexec/seahorse/ssh-askpass";
};
fuse.userAllowOther = true;
## Additional programs for the overall Hyprland experience
hyprlock = {
enable = true;
package = inputs.hyprlock.packages.${pkgs.stdenv.hostPlatform.system}.hyprlock;
};
nm-applet.indicator = true; # Compatability; Application indicator for NetworkManager
thunar.enable = true;
thunar.plugins = with pkgs.xfce; [
exo
mousepad
thunar-archive-plugin
thunar-volman
tumbler
];
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
};
# Hyprland nixpkgs service modules
services = {
greetd = {
enable = true;
vt = 3;
settings = {
default_session = {
user = "jahanson";
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd='uwsm start select'"; # start Hyprland with a TUI login manager
};
};
};
gnome.gnome-keyring.enable = true;
};
# Fonts
fonts.packages = with pkgs; [
fira-code
font-awesome
jetbrains-mono
noto-fonts
noto-fonts-cjk-sans
terminus_font
victor-mono
unstable.nerd-fonts.jetbrains-mono
unstable.nerd-fonts.fira-code
unstable.nerd-fonts.fantasque-sans-mono
];
};
}

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