Compare commits

...
Sign in to create a new pull request.

364 commits

Author SHA1 Message Date
c0004409d7
alyssum/samba: bind music
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-19 09:12:52 +10:00
004832fc06
containers/emerald: bind music directory
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-19 09:03:39 +10:00
83371117d4
containers/emerald: change mounts
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-19 08:57:22 +10:00
e1c02d7a91
containers/emerald: move to alyssum
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-19 08:01:17 +10:00
4dfc898140
user/neovim: switch to nixd 2026-06-19 07:36:13 +10:00
21dc584199
alyssum/home.syncthing: don't override devices and folders
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-17 21:22:03 +10:00
6c80606b7e
alyssum/home.syncthing: fixup conf
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 21:15:22 +10:00
907f2cabca
alyssum/home.syncthing: set proper defaults
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 21:14:47 +10:00
5c13051b4b
alyssum/samba: bind some directories 2026-06-17 21:05:38 +10:00
bc3269a814
alyssum/home.syncthing: create another instance
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 20:29:22 +10:00
63d9d6b004
alyssum/home.syncthing: add host to gui address
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 19:58:03 +10:00
9a821fda94
alyssum/home.syncthing: fixup hm config
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 19:50:02 +10:00
8157d0d561
alyssum/home.syncthing: init
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 19:49:10 +10:00
024a6bdbe2
alyssum/samba: relax hosts
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 18:47:15 +10:00
4bb20124a7
alyssum/samba: use full package for discovery
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 18:34:34 +10:00
509684d0bd
alyssum/samba: use proper smbpasswd path
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 18:28:39 +10:00
c782bd5e53
hosts/alyssum: add passwd age
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 18:23:10 +10:00
4f8249b780
alyssum/samba: use proper credentials
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-17 18:16:21 +10:00
d1a8e7222f
alyssum/samba: init 2026-06-17 18:11:09 +10:00
402c847f3c
dandelion/filesystem: reduce rootfs from 12G to 6G 2026-06-14 20:32:32 +10:00
2a9e8e6c03
containers/garnet: extend token expiration
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-13 23:44:29 +10:00
e98a71cd1e
containers/garnet: config nginx to avoid errors
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-13 22:12:32 +10:00
6fc74bd778
hosts/hyacinth: add docker 2026-06-13 22:10:19 +10:00
37f271bed8
containers/citrine: enable push to create
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-10 16:05:24 +10:00
2990972989
user/git: set default branch name 2026-06-10 16:01:23 +10:00
b705a21478
system/tailscale: fix syntax
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-10 15:06:38 +10:00
75f9cc9d2b
system/tailscale: open port 123 on headless
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-10 15:05:05 +10:00
ea17ef30c6
system/input: map esc to capslock 2026-06-10 15:03:24 +10:00
8a85e25d72
system/input: don't overload capslock
input delay :p
2026-06-10 15:03:24 +10:00
9a6a29831b
system/security: reenable doas persist 2026-06-10 15:03:24 +10:00
8ca9e393ea
system/input: swap esc using keyd 2026-06-10 15:03:24 +10:00
9a87dc63c3
rin/packages: move prism back to shared gui 2026-06-10 15:03:19 +10:00
1ad05857b7
services/syncthing: setup correct guiAddress
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-06 20:35:10 +10:00
72078aad6c
services/syncthing: listen on all ports for headless
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-06 20:33:19 +10:00
abe0027e5d
hosts/alyssum: add syncthing
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-06 20:23:56 +10:00
ee3e0868a8
system/tailscale: loosen firewall for tailnet 2026-06-06 20:14:37 +10:00
91abcbed19
services/banksia: redirect to lab
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-06-02 19:54:09 +10:00
93354e6419
containers/citrine: garden -> lab
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-06-02 19:50:01 +10:00
cc2e9d1a90
user/eww: use iwd tools instead of nmcli
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-05-31 02:15:37 +10:00
e7588e0be0
{system,rin}/packages: cleanup
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-30 21:24:30 +10:00
4851369098
containers/garnet: add hosts and correct bind mounts
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-29 00:44:13 +10:00
34e649e621
alyssum/filesystem: add myosotis 2026-05-29 00:43:32 +10:00
f622d5f577
containers/garnet: try removing host header 2026-05-28 23:43:07 +10:00
c4bedfd86e
containers/garnet: move back to listen addrs 2026-05-28 23:34:25 +10:00
011ceee498
containers/garnet: use ipv4 for proxy 2026-05-28 23:27:19 +10:00
0735ffdb69
containers/garnet: remove stray sv and set address to local ip 2026-05-28 23:22:19 +10:00
a25d214b82
hosts/alyssum: enable nginx 2026-05-28 23:10:40 +10:00
27e9546327
containers/garnet: better ip filtering 2026-05-28 23:04:35 +10:00
140b12fa5d
hosts/alyssum: enable garnet 2026-05-28 23:02:40 +10:00
babc27c8be
containers/garnet: init 2026-05-28 23:01:43 +10:00
939d0cc861
system/tailscale: persist tailscale state
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-30 20:37:42 +10:00
0edeac9f4c
user/neovim: remove lsp.with 2026-05-30 19:38:31 +10:00
10fbeac140
user/eww: manually set configDir
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
why was this changed???
2026-05-30 01:57:08 +10:00
github-actions[bot]
1d9f9f4927
packages/linux-lava: bump to 7.0.10 2026-05-30 01:51:28 +10:00
github-actions[bot]
1941deb004
flake: bump inputs 2026-05-30 01:51:28 +10:00
4a82035d82
hosts/hyacinth: enable tailscale 2026-05-30 01:45:45 +10:00
604983800f
hyacinth/packages: add discord 2026-05-30 01:27:12 +10:00
81c17720eb
containers/{d,e,f}: listen on tailscale
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-05-28 22:40:19 +10:00
b8a7dfa8a8
system/tailscale: enable routing features
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-28 22:19:54 +10:00
d0e090bb68
hosts/alyssum: enable tailscale
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-28 22:10:44 +10:00
e5e608c580
services/unbound: allow access from tailscale
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-05-28 21:56:34 +10:00
69717ef92b
hosts/dandelion: enable tailscale
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-05-28 21:33:57 +10:00
d13f18a189
user/neovim{,-minimal}: set defaults to suppress warning 2026-05-28 21:21:49 +10:00
de857dcfbf
services/nginx: credentialsFile -> environmentFile 2026-05-28 21:20:27 +10:00
5680e29cd2
services/unbound: add google to dns 2026-05-28 21:17:50 +10:00
4a91f8a165
system/wireguard: also forward udp 2026-05-28 21:17:50 +10:00
52e53ba5b3
containers/amethyst: use ipv4 proxy 2026-05-28 21:17:49 +10:00
218da08936
containers/beryllium: use ipv4 2026-05-28 21:17:49 +10:00
724d30a092
containers/fluorite: change slskd env 2026-05-28 21:17:46 +10:00
c8c6fb1b5e
system/tailscale: init 2026-05-28 20:55:11 +10:00
59f5913b68
hosts/alyssum: disable insecure ssh 2026-05-28 20:19:04 +10:00
0d99bd6015
alyssum/networking: point to wpa_conf correctly, attempt 3 2026-05-28 20:16:59 +10:00
865b473df7
alyssum/networking: point to wpa_conf correctly, attempt 2
why was this changed?????
2026-05-28 20:13:54 +10:00
c323f004f1
alyssum/networking: point to wpa_conf correctly 2026-05-28 20:06:36 +10:00
220af6cf15
alyssum/networking: enable wpa_supplicant 2026-05-28 18:59:38 +10:00
ae707d33ea
alyssum/networking: use wpa_conf 2026-05-28 18:55:41 +10:00
880316173f
hosts/alyssum: (temporarily) allow password login 2026-05-28 18:43:52 +10:00
0638cf6f5f
alyssum/kernel: update 2026-05-28 18:19:13 +10:00
0f7393714f
hosts/alyssum: init 2026-05-28 18:08:15 +10:00
cc43450dd1
system/security: enable pam_u2f 2026-05-28 17:43:08 +10:00
4c28a3eecb
overlays/openldap: skip failing checks for 32-bit 2026-05-11 01:05:27 +10:00
575a0e9610
treewide: remove nodePackages 2026-05-10 22:44:46 +10:00
github-actions[bot]
58d4b60f5b
packages/linux-lava: bump to 7.0.5 2026-05-10 22:35:04 +10:00
github-actions[bot]
75e0c8f6ac
flake: bump inputs 2026-05-10 22:35:00 +10:00
27ba1aaede
anemone/networking: switch to iwd 2026-04-26 15:47:39 +10:00
087ed1c323
user/neovim: fix logs opening on tex save 2026-04-18 15:10:44 +10:00
e303fee58d
system/wireguard: change port to 51801
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-04-06 23:16:57 +10:00
d11d080c94
system/packages-gui: move light to brightnessctl in home
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-03-24 13:53:28 +11:00
github-actions[bot]
2239c1cc64
packages/linux-lava: bump to 6.19.9 2026-03-24 13:53:27 +11:00
github-actions[bot]
576fd7604f
flake: bump inputs 2026-03-24 13:53:27 +11:00
9fd117c50c
rin/packages: add temurin-25 to prismlauncher 2026-03-24 13:52:02 +11:00
d8c016e933
containers/fluorite: move desc and pic to secrets
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-03-23 02:38:48 +11:00
f8312bc6f2
user/neovim-minimal: fix treesitter errors
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-03-19 20:42:32 +11:00
2d15fb3a5e
containers/fluorite: use jpg picture
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 22:09:04 +11:00
b06c782850
containers/fluorite: use png picture
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 22:08:23 +11:00
6c7393228e
containers/fluorite: add description and picture
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 21:54:43 +11:00
36a161d1df
containers/fluorite: store all data 2026-03-18 21:39:02 +11:00
3e56c780dd
services/website: redirect cdn.lava.moe to sh.lava.moe
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 20:43:04 +11:00
c9c6ef4a16
rin/packages: add feishin 2026-03-18 20:21:33 +11:00
3a612d3e90
containers/diamond: remove stray templates
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 20:11:21 +11:00
3381630a7a
containers/emerald: bind music media dir
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 03:45:26 +11:00
5eef477e0b
containers/fluorite: forward ports 2026-03-18 03:43:35 +11:00
de7402576d
secrets/slskd_env: update
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 03:25:06 +11:00
ecdd594a1b
containers/{emerald,fluorite}: fix dns
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 03:14:59 +11:00
465ec6f2fc
hosts/dandelion: add fluorite
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 03:10:34 +11:00
7d479007d9
containers/emerald: add navidrome env for lastfm and spotify
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-18 03:08:18 +11:00
48db46051d
containers/emerald: enable ipv4 and provide internet access 2026-03-18 02:59:12 +11:00
b3ffc41b76
containers/fluorite: provide internet access 2026-03-18 02:25:27 +11:00
215e017cd3
containers/fluorite: use correct share directory config name
oops tehee
2026-03-18 02:20:08 +11:00
4932dad23f
containers/fluorite: ensure music folder exists 2026-03-18 02:12:41 +11:00
dd076fab3c
containers/fluorite: setup env file 2026-03-18 02:09:54 +11:00
3419ab4b77
containers/fluorite: set domain to null 2026-03-18 01:55:53 +11:00
d3ab001222
containers/fluorite: init 2026-03-18 01:52:34 +11:00
68ae736c2c
containers/emerald: return 404 on / 2026-03-18 01:22:07 +11:00
52fbdfe8cf
containers/emerald: only allow urls under /share 2026-03-18 01:11:20 +11:00
ccafbd8ae0
containers/emerald: use correct shareurl format
navidrome always add /share at the end :(
2026-03-18 00:07:52 +11:00
4aaeefa97a
containers/emerald: use alternative share fqdn
insane, ssl cert extra domains' wildcard only goes one level deep
2026-03-17 23:43:23 +11:00
75c7e7b193
hosts/dandelion: add emerald 2026-03-17 18:58:49 +11:00
8cf7c1815e
containers/emerald: enable sharing 2026-03-17 18:57:18 +11:00
0567313fa2
containers/emerald: init 2026-03-17 18:13:53 +11:00
b7665d9bd5
containers/diamond: only listen on local addresses
TIL nginx will only route via amethyst if it's on local address, even if
hostname doesn't match
2026-03-17 17:25:35 +11:00
55e0d25251
containers/diamond: listen on ipv6 2026-03-17 17:06:49 +11:00
518c718a5d
containers: clean up domain names 2026-03-17 17:01:15 +11:00
66332a980a
containers/diamond: init 2026-03-17 14:37:36 +11:00
3a45f85c37
dandelion/networking: disable dhcp on enp2s0
Some checks are pending
CI / Build linux-lava for x86_64-linux (push) Waiting to run
2026-03-17 02:10:11 +11:00
c4bd8d3fa1
containers/citrine: use pq kex algorithms for ssh
Some checks failed
CI / Build linux-lava for x86_64-linux (push) Has been cancelled
2026-03-16 16:36:46 +11:00
7226266c30
containers/citrine: enable ipv4
bc ipv6 is broken and i cba 😭
2026-03-16 16:31:58 +11:00
1936294ea4
containers/citrine: oops 2026-03-16 16:25:25 +11:00
a7afbda109
containers/citrine: refactor networking and use proper nameservers 2026-03-16 16:24:12 +11:00
ffcd5c93d2
containers/citrine: enable nat 2026-03-16 16:18:41 +11:00
27cf526c47
containers/citrine: fix forwarding 2026-03-16 16:07:08 +11:00
49c161e8ab
hosts/anemone: remove citrine 2026-03-16 03:43:07 +11:00
fa3872647d
containers/citrine: forward ssh 2026-03-16 03:40:35 +11:00
15c4e4fc51
containers/citrine: catppuccin theming 2026-03-16 02:49:08 +11:00
d577030892
containers/citrine: customise homepage and disable registrations 2026-03-16 02:04:31 +11:00
2a27838974
hosts/dandelion: move citrine from anemone 2026-03-16 01:13:36 +11:00
fd3e877d3d
containers/citrine: simplify networking 2026-03-16 01:12:40 +11:00
18c6cb6773
containers/citrine: add cli to packages 2026-03-16 01:02:28 +11:00
36f214f2a4
containers/citrine: init 2026-03-16 00:48:51 +11:00
249942280d
containers: don't use wildcard nat interfaces 2026-03-16 00:45:05 +11:00
5722249dd2
services/unbound: open firewall for dns from containers 2026-03-15 23:34:58 +11:00
a2f82bc7d5
containers/beryllium: don't use host resolvconf 2026-03-15 23:31:20 +11:00
a06d0d86fc
containers/beryllium: properly set dns resolver 2026-03-15 23:23:16 +11:00
3bbaf8785c
containers/beryllium: add missing semicolon 2026-03-15 23:01:21 +11:00
a2337566da
containers/beryllium: redirect root to website 2026-03-15 22:57:49 +11:00
d02d1dbb33
containers/beryllium: listen on all addresses 2026-03-15 22:54:24 +11:00
1486058b90
containers/beryllium: configure proper delegation 2026-03-15 22:48:04 +11:00
16703bade1
containers/beryllium: open firewall 2026-03-15 22:38:53 +11:00
c42fdb7940
containers/beryllium: add nginx configuration 2026-03-15 22:33:23 +11:00
52a3e8557e
containers/amethyst: use ipv6 for proxy 2026-03-15 22:27:47 +11:00
2a4a4c5d47
containers/amethyst: enable ssl 2026-03-15 21:38:10 +11:00
d4768ea7bf
users/hana: add nh flake path 2026-03-15 21:34:04 +11:00
f8d4e05080
containers/amethyst: fix nginx ipv6 listenaddr 2026-03-15 21:31:54 +11:00
42eeba3a9f
system/nix-stable: use latest nix 2026-03-15 21:18:24 +11:00
e0f1482511
containers/amethyst: fix nginx listen address 2026-03-15 21:17:35 +11:00
2f4cbd382c
user/comma: init 2026-03-15 21:06:20 +11:00
54fd3373d0
system/nix-stable: enable nh 2026-03-15 20:53:08 +11:00
a9e9ae41ac
containers/amethyst: expose under local nginx 2026-03-15 20:52:24 +11:00
dfd00aad38
hosts/dandelion: use new containers 2026-03-15 20:03:07 +11:00
c0679f7e79
hosts/dandelion: remove postgres
not sure why it's still there, hopefully nothing breaks :)
2026-03-15 19:53:38 +11:00
e78c666635
system/home-manager-stable: remove 2026-03-15 19:50:47 +11:00
1a8e042be5
flake: lock 2026-03-15 19:48:37 +11:00
f84e8c1013
hosts/hazel: decommission 2026-03-15 19:48:08 +11:00
5c55793134
hosts/dandelion: follow unstable nixpkgs 2026-03-15 19:47:08 +11:00
6bea391858
hosts/dandelion: pull changes 2026-03-15 19:41:44 +11:00
5a24bf690f
containers/amethyst: refactor 2026-03-15 19:32:34 +11:00
acc4d31f46
containers/beryllium: init 2026-03-15 19:27:29 +11:00
e2832de968
containers/amethyst: init 2026-03-15 15:53:14 +11:00
12681f2087
system/docker: disable rootless 2026-03-09 00:39:07 +11:00
2baffcb7a5
hosts/anemone: enable kde connect 2026-03-08 23:58:32 +11:00
2f1ca64025
user/zsh: update nix abbrs 2026-03-08 18:12:59 +11:00
12a1843587
system/docker: init 2026-03-08 18:12:28 +11:00
09aceb18f4
user/eww: display multiple bluetooth devices in one line 2026-03-06 21:07:12 +11:00
e73f9d612c
rin/packages: use dotnet10 2026-03-03 13:37:03 +11:00
1fd2ebedb0
anemone/networking: disable wpa_supplicant hardening 2026-03-02 13:17:36 +11:00
cf47ffc526
workflow: remove check job
SHUTUPSHUTUPSHUTUPSHOUSHTOSHTOUSTHSROUTSHJSBUJFSBHIDh
2026-02-24 17:26:26 +11:00
3b73bd8f14
overlays/jetbrains: init 2026-02-16 16:00:25 +11:00
4e49291a40
rin/packages: add jetbrains gateway 2026-02-16 15:43:23 +11:00
github-actions[bot]
4c933a598c packages/linux-lava: bump to 6.19 2026-02-12 02:40:17 +00:00
github-actions[bot]
83b68d3034 flake: bump inputs 2026-02-12 02:40:14 +00:00
bada516463
user/neovim: update nvim-treesitter import 2026-02-09 21:56:30 +11:00
85f53fbc85
rin/packages: remove wine-osu 2026-02-06 22:31:16 +11:00
0772dca431
system/packages: remove ecryptfs 2026-02-06 21:25:40 +11:00
adea95e039
hyacinth/packages: use new idea package name 2026-02-06 21:22:10 +11:00
2b9a772959
rin/packages: remove tetrio plus (marked as broken) 2026-02-06 21:20:48 +11:00
c76de11041
user/mpv: update config after breaking change 2026-02-06 21:19:54 +11:00
0245b680ef
system: remove deleted options 2026-02-06 21:16:56 +11:00
github-actions[bot]
0c882eb783
packages/linux-lava: bump to 6.18.8 2026-02-06 21:16:19 +11:00
github-actions[bot]
bcbebb0d46
flake: bump inputs 2026-02-06 21:16:19 +11:00
3af1ad12fd
system/nix: add nh 2026-02-06 21:08:21 +11:00
58efa5527c
user/git: update git email 2026-02-03 23:18:45 +11:00
57afed24ed
anemone/kernel: disable swapfile and hibernation 2026-01-29 00:37:01 +11:00
4bd188cc64
workflows/cachix: bump cachix action
fixes a bug where the latest store path doesn't get pushed (so all the
kernel builds never gets pushed)
2025-11-21 23:15:01 +11:00
c5dd3e4f5e
treewide: change deprecated and renamed option and package names 2025-11-21 23:14:31 +11:00
8ae384686c
packages/linux-lava: bump to 6.17.8 2025-11-21 22:43:53 +11:00
b4e6a9bc04
flake: bump inputs 2025-11-21 22:43:52 +11:00
45a8eadeda
user/neovim: migrate to new lsp config syntax 2025-11-03 13:43:06 +11:00
892f9bfe73
hosts/hazel: hardware.opengl -> hardware.graphics 2025-10-25 18:54:03 +11:00
6d356be1f0
services/nginx: acme.email -> acme.defaults.email 2025-10-25 18:53:12 +11:00
03bfa7da93
system/greed: greetd.tuigreet -> tuigreet 2025-10-25 18:50:34 +11:00
84ddc3b6ec
user/rofi: switch to upstream rofi from wayland fork 2025-10-25 18:50:01 +11:00
github-actions[bot]
a9f5d4da4d packages/linux-lava: bump to 6.17.5 2025-10-25 01:45:00 +00:00
github-actions[bot]
c85d5d2150 flake: bump inputs 2025-10-25 01:44:58 +00:00
480208b718
user/neovim: autosave tex, and autosave while in insert 2025-09-05 23:53:39 +10:00
870fc4e2d7
hyacinth/networking: enable wakeonlan 2025-09-05 23:47:39 +10:00
c17c9873b9
user/catppuccin: fix theme script
it just kept reusing old generations because nix/profiles/home-manager
isn't.. consistently updated? idk how long this has been happening or if
they changed something ughhhhhh
2025-09-02 14:39:38 +10:00
6a3e5c147b
user/neovim: add clangd 2025-09-02 14:30:50 +10:00
c4bf653e14
user/neovim: add texlab 2025-08-27 17:28:29 +10:00
2d85d6635b
overlays/linux-lava: get rid of --target warning 2025-08-18 17:46:13 +10:00
e7d5efd169
packages/linux-lava: bump to 6.16.1 2025-08-18 17:26:33 +10:00
c9520a5bc8
packages/linux-lava: add bluetooth patch 2025-08-18 17:25:21 +10:00
d0fdbe8822
hyacinth/filesystem: increase tmpfs size to 24G 2025-08-18 17:23:37 +10:00
f8dc09565f
user/neovim: use virtual color highlight 2025-08-18 01:36:36 +10:00
6fabeecd1d
user/neovim: add auto-save.nvim 2025-08-18 00:11:28 +10:00
5989fc4e70
user/neovim: add bindings for commenting 2025-08-17 23:50:52 +10:00
240ff86538
user/neovim: add nvim-ts-autotag 2025-08-17 23:32:23 +10:00
b06bb7009c
user/neovim: add autoclose-nvim and update lualine config 2025-08-17 23:25:30 +10:00
d9df212560
user/neovim: add nvim-highlight-colors 2025-08-17 23:09:58 +10:00
633d781a25
user/neovim: add astro and tailwind 2025-08-17 23:06:33 +10:00
1cfcd112e8
hosts/hyacinth: remove jenkins, and enable bluetooth 2025-08-17 22:24:54 +10:00
1c2f3eb1c6
system/wireguard: add local-only peer 2025-08-14 11:18:11 +10:00
f140929d9c
packages/linux-lava: bump to 6.16 2025-08-12 12:17:43 +10:00
e94d04ab1f
flake: bump inputs 2025-08-12 12:17:36 +10:00
c0b9ed6b00
user/git: change name 2025-08-08 22:35:28 +10:00
3ef987f8d9
system/wireguard: use port 123 2025-08-08 22:34:56 +10:00
fdf6a3ce62
packages/linux-lava: bump to 6.15.7 2025-07-19 21:34:30 +10:00
cc066cd0f0
flake: bump inputs 2025-07-19 21:33:30 +10:00
ed43feb5b6
overlays/android-studio: remove 2025-07-17 19:53:39 +10:00
92a7023ba0
overlays/oci-cli: remove, patch merged 2025-07-17 18:06:16 +10:00
843aacb6d3
hosts/anemone: remove cisco packet tracer
uses an old insecure library. also cpt is cursed
2025-07-17 17:49:13 +10:00
09830a0aa8
user/neovim: setup tex 2025-07-17 17:42:43 +10:00
c556f63ebe
user/spicetify: remove skipStats extension 2025-07-17 17:41:55 +10:00
github-actions[bot]
b05012d8c9
packages/linux-lava: bump to 6.15.6 2025-07-17 17:41:03 +10:00
github-actions[bot]
0b138f3148
flake: bump inputs 2025-07-17 17:41:00 +10:00
ea07a839ae
packages/spotify-adblock: update cargo hash 2025-06-29 14:13:35 +10:00
718de94655
system/base: fix locale 2025-06-29 14:13:35 +10:00
72eca4fb05
packages/linux-lava: remove deleted patch, and switch to bore 2025-06-29 14:13:35 +10:00
github-actions[bot]
38e624851b packages/linux-lava: bump to 6.15.4 2025-06-29 02:07:17 +00:00
github-actions[bot]
b04c649e53 flake: bump inputs 2025-06-29 02:07:15 +00:00
e801f91435
workflows/cachix: fix run command 2025-05-31 23:29:36 +10:00
83ac77b864
workflows/cachix: cd out and in, to hopefully fix git-crypt problem 2025-05-26 17:36:16 +10:00
3ead5d12c5
hosts/hyacinth: enable wireguard 2025-05-26 17:22:24 +10:00
071fad3bcb
hosts/hyacinth: remove virtualisation and binfmt 2025-05-26 15:30:52 +10:00
c66e8d7307
rin/packages: move cisco packet tracer to anemone 2025-05-26 15:22:29 +10:00
a0053fe9ee
hyacinth/networking: enable wakeOnLan 2025-05-26 14:34:48 +10:00
0f1271badb
hyacinth/networking: update ip address 2025-05-24 20:22:32 +10:00
18b66630d0
workflows/cachix: wait after nix is installed 2025-05-23 01:35:59 +10:00
efb2a24118
workflows/cachix: fix syntax again 2025-05-23 01:35:10 +10:00
c2cf093a72
workflows/cachix: fix syntax 2025-05-23 01:33:29 +10:00
fe8d26a860
workflows/cachix: some more advanced waiting
i hope this works i have no idea why git-crypt does this it also happens
on local computers sometimes jalsdfjasoigrjoi
2025-05-23 01:31:42 +10:00
3f52fc1e81
workflows/cachix: lengthen sleep 2025-05-23 01:15:55 +10:00
8cb9905098
hosts/hazel: add wg_hazel secret
aaaaaaaaaaaa
2025-05-23 01:09:46 +10:00
74e7f5435f
system/wireguard: use new keys for hazel 2025-05-23 01:08:14 +10:00
adf5409e32
workflows/cachix: fix script, again.. 2025-05-23 01:06:18 +10:00
1fadd257f3
workflows/cachix: fix script 2025-05-23 01:04:57 +10:00
0253d64b96
hosts/hazel: use wireguard 2025-05-23 01:03:32 +10:00
3061733e46
workflows/cachix: try to make secret unlocking more consistent 2025-05-23 01:03:12 +10:00
9512dd2e41
system/wireguard: actually fix it this time.. 2025-05-23 00:48:36 +10:00
5ef6a68587
system/wireguard: fix dandelion again 2025-05-23 00:47:27 +10:00
93c91d5a6b
system/wireguard: fix dandelion config 2025-05-23 00:30:41 +10:00
817371bf01
workflows/cachix: unlock git crypt secrets 2025-05-23 00:21:09 +10:00
b8ad7638ef
hazel/networking: move address to secrets 2025-05-23 00:13:30 +10:00
bd4affdea0
system/wireguard: use local dns for hazel 2025-05-23 00:07:28 +10:00
616db33773
hosts/hazel: add unbound 2025-05-23 00:06:27 +10:00
7aa3a988fe
system/wireguard: refactor, and add hazel 2025-05-23 00:03:52 +10:00
718437153f
hosts/hyacinth: fix wg filepath 2025-05-22 23:43:56 +10:00
93279eb6e6
services/website: init 2025-05-22 23:42:08 +10:00
f35d104f84
services/unbound: allow wireguard clients 2025-05-22 23:38:50 +10:00
a6348c833e
system/wireguard: cleanup, create local ipv6 subnet, and use unbound dns 2025-05-22 23:38:13 +10:00
945eb34e60
hazel/networking: add ipv6 address 2025-05-22 23:27:40 +10:00
19ed50cc9d
users/hana: add hibiscus to authorized keys 2025-05-22 23:27:40 +10:00
69c13bc50e
users/hana: add dandelion to authorized keys 2025-05-22 23:27:40 +10:00
5f5aa86ce2
hosts/hazel: move services data to /flower 2025-05-22 23:27:39 +10:00
e7a7b39d41
hosts/hazel: init immich 2025-05-22 23:27:17 +10:00
e90ebf6220
hosts/hazel: enable https 2025-05-22 23:27:17 +10:00
cc76cdf00d
hosts/hazel: add acme_dns secret 2025-05-22 23:27:16 +10:00
5f5412f433
services/nginx: remove hosts 2025-05-22 23:27:13 +10:00
1db10b5b9d
services/unbound: fix subnet ip 2025-05-22 23:11:05 +10:00
44a3d4473f
services/unbound: fix syntax error 2025-05-22 23:09:50 +10:00
f87dfa314e
system/unbound: remove first line of stevenblack hosts 2025-05-22 23:03:17 +10:00
17164b05b9
services/unbound: bring back 2025-05-22 22:57:47 +10:00
1ecec11727
system/wireguard: add and default to an ipv6-only tunnel 2025-05-22 22:10:52 +10:00
bdbb5fe0de
dandelion/transmission-container: fix systemd container issues 2025-05-20 14:11:47 +10:00
203bc2ab53
system/wireguard: use cloudflare dns 2025-05-20 12:50:02 +10:00
3ebd082be2
system/wireguard: use wg-quick for clients 2025-05-20 12:50:02 +10:00
0fe62078fa
system/wireguard: use new anemone key 2025-05-20 12:50:02 +10:00
eb91ab1540
hosts/anemone: wg 2025-05-20 12:50:02 +10:00
d86285cdf9
secrets: fix wireguard json 2025-05-20 12:50:02 +10:00
ffa71a694a
hosts/dandelion: add wg secret 2025-05-20 12:50:02 +10:00
9217ce6e91
system/wireguard: bring back, with ipv6 support 2025-05-20 12:50:01 +10:00
8b0dfd5661
system/packages: add oci-cli 2025-05-20 01:17:17 +10:00
a915e57d34
overlays/oci-cli: init 2025-05-20 01:16:15 +10:00
315d480601
system/packages: add git-crypt, and move fd and rg from rin/packages 2025-05-19 23:04:39 +10:00
b1f4fcc223
system/base: use extraLocales 2025-05-19 20:46:50 +10:00
9787ed2636
system/base: fix locale name 2025-05-19 20:43:18 +10:00
37f2453f17
system/base: add en_GB to locales for postgres 2025-05-19 20:41:41 +10:00
4bc19ed87e
dandelion/kernel: remove duplicate sysctl 2025-05-19 20:24:01 +10:00
b2ae6493d9
dandelion/transmission-container: force config 2025-05-19 20:22:39 +10:00
a3bb553f14
system/transmission: move to services 2025-05-19 20:21:16 +10:00
7f4d9a5e69
flake: re-add website input for dandelion 2025-05-19 20:20:09 +10:00
ccf3fa2f4a
flake: bump stable to 25.05
required because of home-manager zsh changes
2025-05-19 20:17:58 +10:00
d0895da153
secrets: rekey for dandelion 2025-05-19 20:04:38 +10:00
3bacc817a2
hosts/dandelion: re-init 2025-05-19 19:43:57 +10:00
ee0a768c03
flake: bump stable nixpkgs and hm 2025-05-19 19:51:05 +10:00
5ea27ceb6b
Merge branch 'dev/server' 2025-05-19 19:45:44 +10:00
03859cf8c7
git-crypt: init 2025-05-19 18:41:33 +10:00
ba2c4f9f33
rin/packages,system/packages-gui: remove bitwarden
couldn't get polkit working, remove for now
2025-05-19 13:21:01 +10:00
23693d7268
overlays/steam: remove openssl 1.1.1 2025-05-19 13:19:42 +10:00
2b6b616dbf
overlays/rofi: remove 2025-05-19 13:18:06 +10:00
github-actions[bot]
88b4fca28a
packages/linux-lava: bump to 6.14.7 2025-05-19 13:08:45 +10:00
github-actions[bot]
e82fcc0c4c
flake: bump inputs 2025-05-19 13:08:45 +10:00
631d340887
anemone: add syncthing 2025-05-13 10:00:22 +10:00
f85f39f7fa
rin/packages: switch to gimp3 2025-05-10 14:59:25 +10:00
cc2adb3aa8
services/syncthing: use tmpfile rules to create data directories 2025-05-05 17:26:44 +10:00
f957be17d0
user/zsh: switch to new initcontent 2025-04-29 20:28:32 +10:00
dfdb1afe39
rin/packages: use latest nodejs, 18 is eol 2025-04-29 20:23:13 +10:00
github-actions[bot]
cc57b59ff2
packages/linux-lava: bump to 6.14.4 2025-04-29 01:49:46 +00:00
github-actions[bot]
ed5e0e405d
flake: bump inputs 2025-04-29 01:49:45 +00:00
16a8c3e186
services/syncthing: init 2025-04-24 22:40:09 +10:00
95b3116fa8
user/neovim: add ts-groovy 2025-04-25 00:02:55 +10:00
5a834de1dd
hosts/hyacinth: enable jenkins 2025-04-24 23:49:37 +10:00
a224191007
hyacinth/packages: remove android-studio 2025-04-10 23:27:40 +10:00
27edd08727
hosts/hazel: fix nginx module 2025-04-05 14:11:08 +11:00
28cca81e69
hazel: add nextcloud 2025-04-05 14:10:13 +11:00
7a6aa37647
secrets: rekey 2025-04-05 14:09:28 +11:00
dbbd96c274
hazel/filesystem: remove noauto 2025-04-05 13:42:08 +11:00
a411469b2b
system/packages: add kitty.terminfo 2025-04-05 13:39:00 +11:00
7f3df40afe
system/base: remove nixpkgs registry 2025-04-05 13:24:31 +11:00
7d50fa4b75
hazel/filesystem: fix empty option 2025-04-05 13:22:12 +11:00
9212de3ab2
hosts/hazel: set env to headless 2025-04-05 13:21:09 +11:00
e6f0a356af
hosts/hazel: use hm-stable 2025-04-05 13:19:34 +11:00
f535775b77
hazel/filesystem: fix syntax 2025-04-05 13:18:05 +11:00
548c2f868f
hosts/hazel: remove packages module 2025-04-05 13:16:08 +11:00
5be539a686
flake: lock inputs 2025-04-05 13:14:43 +11:00
4d751d72b3
hosts/hazel: init 2025-04-05 13:05:59 +11:00
3502a31065
user/neovim-minimal: further minimise 2025-04-05 12:13:19 +11:00
a4a38b4a8b
system/nix: use nixVersions.latest 2025-04-03 22:20:16 +11:00
github-actions[bot]
1e2850dd38 flake: bump inputs 2025-04-03 01:44:45 +00:00
21b7184b65
user/neovim: remove prisma 2025-03-29 13:09:33 +11:00
cffbc858f7
packages/linux-lava: remove ntsync patch
now upstreamed as part of 6.14
2025-03-28 00:42:19 +11:00
github-actions[bot]
74501e3c39 packages/linux-lava: bump to 6.14 2025-03-27 13:15:47 +00:00
github-actions[bot]
ba15ebcf4c flake: bump inputs 2025-03-27 13:15:46 +00:00
fd14625074
packages/linux-lava: use alternative logic to fix error 2025-03-28 00:13:47 +11:00
04d695c77a
packages/linux-lava: ignore patch when it's a new release 2025-03-28 00:06:56 +11:00
b9681ed925
overlays/wpa-supplicant: init, makes it not spam journal 2025-03-25 22:17:23 +11:00
c8f4410d94
user/eww: use lighter text for shadow 2025-03-25 21:59:14 +11:00
cdae556af4
user/hyprlock: scale based on new hidpi option 2025-03-23 19:15:35 +11:00
78c578b7ca
hosts/hyacinth: remove postgres 2025-03-23 19:11:58 +11:00
c3368f7ec5
system/nix: try out nixos-rebuild-ng 2025-04-24 01:32:02 +10:00
a6b826f089
system/packages-gui: add bitwarden for polkit actions 2025-04-23 18:15:18 +10:00
b310b4e691
rin/packages: add bitwarden messaginghost to firefox 2025-04-23 17:56:28 +10:00
c54fa3c517
rin/packages: add bitwarden-desktop 2025-04-23 17:56:28 +10:00
9f525a8756
anemone/kernel: fix hibernation not shutting down 2025-04-21 00:49:22 +10:00
ffb3659357
rin/packages: add cisco packet tracer 2025-04-21 00:48:09 +10:00
e7724c0212
anemone/kernel: disable suspend-then-hibernate
really buggy, couldn't ever get it working properly

system goes to sleep, but never wakes up to hibernate

when waking up from sleep after the specified time, only then will it
start to hibernate, which takes like a minute that I have to wait for

not to mention it has a bug where after hibernation the machine stays
on, so i have to force it off and restart it..... bruh
2025-04-15 21:15:16 +10:00
90febfba6e
user/neovim: add ts-java, kotlin, swift, xml 2025-04-15 12:51:55 +10:00
c0a054c937
overlays/android-studio: unpatch 2025-04-08 16:37:23 +10:00
f724467c76
hosts/anemone: add android-studio 2025-04-08 16:35:29 +10:00
github-actions[bot]
fd45845bdf
packages/linux-lava: bump to 6.14.1 2025-04-08 16:35:29 +10:00
github-actions[bot]
2421602b88
flake: bump inputs 2025-04-08 16:35:29 +10:00
7284f81fd4
users/rin: add to dialout group 2025-04-08 16:04:19 +10:00
ae26fd9a09
user/catppuccin: use pink accent for both schemes 2025-03-23 16:58:28 +11:00
0ae63f2c72
user/eww: add box-shadow around widgets 2025-03-23 16:53:26 +11:00
7c36f87860
user/catppuccin: use pink accent for latte 2025-03-23 14:47:35 +11:00
129 changed files with 2767 additions and 862 deletions

4
.git-crypt/.gitattributes vendored Normal file
View file

@ -0,0 +1,4 @@
# Do not edit this file. To specify the files to encrypt, create your own
# .gitattributes file in the directory where your files are.
* !filter !diff
*.gpg binary

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
secrets.gcrypt/** filter=git-crypt diff=git-crypt

View file

@ -5,20 +5,6 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
check:
name: Check flake
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: cachix/install-nix-action@v31
- uses: cachix/cachix-action@v14
with:
name: lava
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: nix flake check --keep-going --verbose
build: build:
name: Build linux-lava for x86_64-linux name: Build linux-lava for x86_64-linux
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -35,7 +21,7 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: cachix/install-nix-action@v31 - uses: cachix/install-nix-action@v31
- uses: cachix/cachix-action@v14 - uses: cachix/cachix-action@v16
with: with:
name: lava name: lava
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

View file

@ -0,0 +1,47 @@
{ lib, pkgs, ... }: {
system.stateVersion = "23.11";
systemd.tmpfiles.rules = [
"d /persist/transmission 755 transmission transmission"
"d /persist/transmission/.config/transmission-daemon 750 transmission transmission"
"d /persist/transmission/.incomplete 750 transmission transmission"
"d /persist/transmission/Downloads 755 transmission transmission"
"d /persist/transmission/watchdir 755 transmission transmission"
];
networking.wg-quick.interfaces.wg0 = {
configFile = "/persist/vpn.conf";
preUp = ''
# Try to access the DNS for up to 300s
for i in {1..60}; do
${pkgs.iputils}/bin/ping -c1 'google.com' && break
echo "Attempt $i: DNS still not available"
sleep 5s
done
'';
};
# https://github.com/NixOS/nixpkgs/issues/258793
systemd.services.transmission.serviceConfig = {
BindReadOnlyPaths = lib.mkForce [ builtins.storeDir "/etc" ];
RootDirectoryStartOnly = lib.mkForce false;
RootDirectory = lib.mkForce "";
PrivateMounts = lib.mkForce false;
PrivateUsers = lib.mkForce false;
};
networking.firewall.allowedTCPPorts = [ 9091 ];
services.transmission = {
enable = true;
package = pkgs.transmission_4;
downloadDirPermissions = "775";
openFirewall = true;
home = "/persist/transmission";
settings = {
ratio-limit-enabled = true;
rpc-bind-address = "0.0.0.0";
rpc-enabled = true;
rpc-port = 9091;
rpc-host-whitelist-enabled = false;
rpc-whitelist-enabled = false;
};
};
}

27
containers/amethyst/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,51 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }: {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
modules = [ ./configuration.nix ];
};
nixosModule = { ... }:
let
name = "amethyst";
fqdn = "amethyst.lava.moe";
subnet = "1";
in {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
#locations."/".proxyPass = "http://[fd0d:1::${subnet}:2]:9091";
locations."/".proxyPass = "http://10.30.${subnet}.2:9091";
listenAddresses = [ "10.0.0.1" "[fd0d::1]" ];
};
systemd.tmpfiles.rules = [ "d /persist/containers/${name} 755 root users" ];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = "10.30.${subnet}.1";
localAddress = "10.30.${subnet}.2";
hostAddress6 = "fd0d:1::${subnet}:1";
localAddress6 = "fd0d:1::${subnet}:2";
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = [ ./configuration.nix ]; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
# flake = "path:" + ./.;
};
};
};
}

View file

@ -0,0 +1,23 @@
{ ... }: {
system.stateVersion = "25.11";
fileSystems."/var/lib/private" = {
device = "/persist";
fsType = "none";
options = [ "bind" ];
};
networking.firewall.allowedTCPPorts = [ 6167 ];
networking.firewall.allowedUDPPorts = [ 6167 ];
# TODO: this should be generically set
networking.useHostResolvConf = false;
networking.nameservers = [ "8.8.8.8" ];
services.matrix-continuwuity = {
enable = true;
settings.global = {
# TODO: link this with outer container's address
address = [ "10.30.2.2" ];
server_name = "lava.moe";
rocksdb_recovery_mode = 2;
};
};
}

27
containers/beryllium/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,69 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }: {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
modules = [ ./configuration.nix ];
};
nixosModule = { ... }:
let
name = "beryllium";
fqdn = "beryllium.lava.moe";
subnet = "2";
in {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".extraConfig = "return 302 'https://lava.moe';";
locations."/_matrix".proxyPass = "http://10.30.${subnet}.2:6167";
locations."/_conduwuit".proxyPass = "http://10.30.${subnet}.2:6167";
locations."/_continuwuity".proxyPass = "http://10.30.${subnet}.2:6167";
};
services.nginx.virtualHosts."lava.moe" = {
locations."= /.well-known/matrix/server".extraConfig =
let
server = { "m.server" = "${fqdn}:443"; };
in ''
add_header Content-Type application/json;
return 200 '${builtins.toJSON server}';
'';
locations."= /.well-known/matrix/client".extraConfig =
let
client = {
"m.homeserver" = { "base_url" = "https://${fqdn}"; };
# "m.identity_server" = { "base_url" = "https://vector.im"; };
};
in ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON client}';
'';
};
systemd.tmpfiles.rules = [ "d /persist/containers/${name} 755 root users" ];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = "10.30.${subnet}.1";
localAddress = "10.30.${subnet}.2";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = [ ./configuration.nix ]; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
};
};
};
}

View file

@ -0,0 +1,53 @@
{ config, fqdn, lib, ... }: {
system.stateVersion = "25.11";
networking.firewall.allowedTCPPorts = [ 22 3000 ];
networking.firewall.allowedUDPPorts = [ 22 3000 ];
systemd.tmpfiles.rules = [
"L+ /persist/forgejo/custom/templates - - - - ${./templates}"
];
services.forgejo = {
enable = true;
lfs.enable = true;
settings = {
DEFAULT.APP_NAME = "cilly's botanical laboratory";
server = {
DOMAIN = fqdn;
ROOT_URL = "https://${fqdn}/";
HTTP_PORT = 3000;
START_SSH_SERVER = true;
BUILTIN_SSH_SERVER_USER = "git";
SSH_DOMAIN = "git.lava.moe";
SSH_SERVER_KEY_EXCHANGES = "mlkem768x25519-sha256,sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256";
};
ui = lib.mkForce {
DEFAULT_THEME = "catppuccin-maroon-auto";
THEMES = lib.strings.concatMapStringsSep "," (x: "${x}-auto") [
"catppuccin-pink"
"catppuccin-maroon"
"catppuccin-flamingo"
"catppuccin-rosewater"
"forgejo"
"gitea"
];
};
api.ENABLE_SWAGGER = false;
other.SHOW_FOOTER_TEMPLATE_LOAD_TIME = false;
repository.ENABLE_PUSH_CREATE_USER = true;
repository.ENABLE_PUSH_CREATE_ORG = true;
service.DISABLE_REGISTRATION = true;
};
stateDir = "/persist/forgejo";
};
systemd.services.forgejo.serviceConfig = {
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
PrivateUsers = lib.mkForce false;
};
catppuccin.forgejo.enable = true;
environment.systemPackages = [ config.services.forgejo.package ];
}

62
containers/citrine/flake.lock generated Normal file
View file

@ -0,0 +1,62 @@
{
"nodes": {
"catppuccin": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1773403535,
"narHash": "sha256-47MZaFrHxNO8tVUAmtVnerXUw2WWVluBOiU9MulN/yM=",
"owner": "catppuccin",
"repo": "nix",
"rev": "d45b5665cc638bad1b794350de02f4dd41b0bb47",
"type": "github"
},
"original": {
"owner": "catppuccin",
"repo": "nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1773122722,
"narHash": "sha256-FIqHByVqxCprNjor1NqF80F2QQoiiyqanNNefdlvOg4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "62dc67aa6a52b4364dd75994ec00b51fbf474e50",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"catppuccin": "catppuccin",
"nixpkgs": "nixpkgs_2"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,68 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
catppuccin.url = "github:catppuccin/nix";
};
outputs = { nixpkgs, catppuccin, ... }:
let
name = "citrine";
fqdn = "lab.lava.moe";
subnetId = "3";
subnet = x: "fd0d:1::${subnetId}:${toString x}";
host = subnet 1;
client = subnet 2;
subnet4 = x: "10.30.${subnetId}.${toString x}";
host4 = subnet4 1;
client4 = subnet4 2;
modules = [
./configuration.nix
catppuccin.nixosModules.catppuccin
{
networking.useHostResolvConf = false;
networking.nameservers = [ host ];
}
];
in {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
inherit modules;
};
nixosModule = { ... }: {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".proxyPass = "http://[${client}]:3000";
};
systemd.tmpfiles.rules = [ "d /persist/containers/${name} 755 root users" ];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = host4;
localAddress = client4;
hostAddress6 = host;
localAddress6 = client;
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = modules; };
specialArgs = { inherit fqdn; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
# flake = "path:" + ./.;
};
};
};
}

View file

@ -0,0 +1,31 @@
<footer class="page-footer" role="group" aria-label="{{ctx.Locale.Tr "aria.footer"}}">
<div class="left-links" role="contentinfo" aria-label="{{ctx.Locale.Tr "aria.footer.software"}}">
{{if ShowFooterPoweredBy}}
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org">Forgejo</a>
{{end}}
{{if (or .ShowFooterVersion .PageIsAdmin)}}
{{if .IsAdmin}}
<a href="{{AppSubUrl}}/admin/config">{{AppVerNoMetadata}}</a>
{{else}}
{{AppVerNoMetadata}}
{{end}}
{{end}}
{{if and .TemplateLoadTimes ShowFooterTemplateLoadTime}}
{{ctx.Locale.Tr "page"}}: <strong>{{LoadTimes .PageStartTime}}</strong>
{{ctx.Locale.Tr "template"}}{{if .TemplateName}} {{.TemplateName}}{{end}}: <strong>{{call .TemplateLoadTimes}}</strong>
{{end}}
</div>
<div class="right-links" role="group" aria-label="{{ctx.Locale.Tr "aria.footer.links"}}">
<div class="ui dropdown upward language">
<span class="flex-text-inline">{{svg "octicon-globe" 14}} {{ctx.Locale.LangName}}</span>
<div class="menu language-menu">
{{range .AllLangs}}
<a lang="{{.Lang}}" data-url="{{AppSubUrl}}/?lang={{.Lang}}" class="item {{if eq ctx.Locale.Lang .Lang}}active selected{{end}}">{{.Name}}</a>
{{end}}
</div>
</div>
<a href="{{AssetUrlPrefix}}/licenses.txt">{{ctx.Locale.Tr "licenses"}}</a>
{{if .EnableSwagger}}<a href="{{AppSubUrl}}/api/swagger">API</a>{{end}}
{{template "custom/extra_links_footer" .}}
</div>
</footer>

View file

@ -0,0 +1,19 @@
{{template "base/head" .}}
{{if not .IsSigned}}
<script>window.location.href = "/explore/repos";</script>
{{end}}
<div role="main" aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home"}}{{end}}" class="page-content home">
<div class="tw-mb-8 tw-px-8">
<div class="center">
<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<div class="hero">
<h1 class="ui icon header title">
{{AppDisplayName}}
</h1>
<h2>{{ctx.Locale.Tr "startpage.app_desc"}}</h2>
</div>
</div>
</div>
{{template "home_forgejo" .}}
</div>
{{template "base/footer" .}}

View file

@ -0,0 +1,22 @@
{ fqdn, ... }: {
system.stateVersion = "25.11";
systemd.tmpfiles.rules = [
"d /persist/vaultwarden 755 vaultwarden vaultwarden"
];
fileSystems."/var/lib/vaultwarden" = {
device = "/persist/vaultwarden";
fsType = "none";
options = [ "bind" ];
};
networking.firewall.allowedTCPPorts = [ 8000 ];
networking.firewall.allowedUDPPorts = [ 8000 ];
services.vaultwarden = {
enable = true;
domain = fqdn;
config = {
DOMAIN = "https://${fqdn}";
ROCKET_ADDRESS = "::";
};
};
}

27
containers/diamond/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,51 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }:
let
name = "diamond";
fqdn = "astransia.lava.moe";
subnetId = "4";
subnet = x: "fd0d:1::${subnetId}:${toString x}";
host = subnet 1;
client = subnet 2;
modules = [
./configuration.nix
];
in {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
inherit modules;
};
nixosModule = { ... }: {
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".proxyPass = "http://[${client}]:8000";
listenAddresses = [ "10.0.0.1" "[fd0d::1]" "100.67.1.1" ];
};
systemd.tmpfiles.rules = [ "d /persist/containers/${name} 755 root users" ];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress6 = host;
localAddress6 = client;
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = modules; };
specialArgs = { inherit fqdn; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
# flake = "path:" + ./.;
};
};
};
}

View file

@ -0,0 +1,23 @@
{ fqdn, shareFqdn, ... }: {
system.stateVersion = "25.11";
systemd.tmpfiles.rules = [
"d /persist/navidrome 755 navidrome navidrome"
];
networking.firewall.allowedTCPPorts = [ 4533 ];
networking.firewall.allowedUDPPorts = [ 4533 ];
services.navidrome = {
enable = true;
environmentFile = "/binds/navidrome_env";
settings = {
Port = 4533;
Address = "[::]";
BaseUrl = "https://${fqdn}/";
ShareURL = "https://${shareFqdn}";
EnableSharing = true;
DataFolder = "/persist/navidrome";
MusicFolder = "/binds/music/main";
};
};
systemd.services.navidrome.serviceConfig.BindReadOnlyPaths = ["/binds/music"];
}

27
containers/emerald/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,78 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }:
let
name = "emerald";
fqdn = "navia.lava.moe";
shareFqdn = "muse.lava.moe";
subnetId = "5";
subnet = x: "fd0d:2::${subnetId}:${toString x}";
host = subnet 1;
client = subnet 2;
subnet4 = x: "10.32.${subnetId}.${toString x}";
host4 = subnet4 1;
client4 = subnet4 2;
modules = [
./configuration.nix
{
networking.useHostResolvConf = false;
networking.nameservers = [ host ];
}
];
in {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
inherit modules;
};
nixosModule = { config, ... }: {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".proxyPass = "http://[${client}]:4533";
listenAddresses = [ "100.67.2.1" ];
};
systemd.tmpfiles.rules = [ "d /persist/containers/${name} 755 root users" ];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = host4;
localAddress = client4;
hostAddress6 = host;
localAddress6 = client;
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = modules; };
specialArgs = { inherit fqdn shareFqdn; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
bindMounts."music" = {
hostPath = "/flower/media/music";
mountPoint = "/binds/music";
isReadOnly = true;
};
bindMounts."navidrome_env" = {
hostPath = config.age.secrets.navidrome_env.path;
mountPoint = "/binds/navidrome_env";
isReadOnly = true;
};
# flake = "path:" + ./.;
};
};
};
}

View file

@ -0,0 +1,22 @@
{ ... }: {
system.stateVersion = "25.11";
systemd.tmpfiles.rules = [
"d /persist/slskd/Downloads 755 slskd slskd"
];
fileSystems."/var/lib/slskd" = {
device = "/persist/slskd";
fsType = "none";
options = [ "bind" ];
};
networking.firewall.allowedTCPPorts = [ 5030 50300 ];
networking.firewall.allowedUDPPorts = [ 5030 50300 ];
services.slskd = {
enable = true;
domain = null;
environmentFile = "/binds/slskd_env";
settings = {
shares.directories = [ "/binds/music/" ];
};
};
}

27
containers/fluorite/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1773282481,
"narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe416aaedd397cacb33a610b33d60ff2b431b127",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,89 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }:
let
name = "fluorite";
fqdn = "fluorite.lava.moe";
subnetId = "6";
subnet = x: "fd0d:1::${subnetId}:${toString x}";
host = subnet 1;
client = subnet 2;
subnet4 = x: "10.30.${subnetId}.${toString x}";
host4 = subnet4 1;
client4 = subnet4 2;
modules = [
./configuration.nix
{
networking.useHostResolvConf = false;
networking.nameservers = [ host ];
}
];
in {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
inherit modules;
};
nixosModule = { config, ... }: {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
networking.firewall.allowedTCPPorts = [ 50300 ];
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".proxyPass = "http://[${client}]:5030";
listenAddresses = [ "10.0.0.1" "[fd0d::1]" "100.67.1.1" ];
};
systemd.tmpfiles.rules = [
"d /persist/containers/${name} 755 root users"
"d /persist/media/music 075 nobody users"
];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = host4;
localAddress = client4;
hostAddress6 = host;
localAddress6 = client;
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = modules; };
specialArgs = { inherit fqdn; };
forwardPorts = [
{
containerPort = 50300;
hostPort = 50300;
protocol = "tcp";
}
];
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
bindMounts."music" = {
hostPath = "/persist/media/music";
mountPoint = "/binds/music";
isReadOnly = true;
};
bindMounts."slskd_env" = {
hostPath = config.age.secrets.slskd_env.path;
mountPoint = "/binds/slskd_env";
isReadOnly = true;
};
# flake = "path:" + ./.;
};
};
};
}

View file

@ -0,0 +1,36 @@
{ ... }: {
system.stateVersion = "25.11";
fileSystems."/var/lib/opencloud" = {
device = "/flower/data";
fsType = "none";
options = [ "bind" ];
};
fileSystems."/etc/opencloud" = {
device = "/persist/cfg";
fsType = "none";
options = [ "bind" ];
};
# TODO: hardcoded address
networking.extraHosts = ''
100.67.2.1 cloud.lava.moe
'';
networking.firewall.allowedTCPPorts = [ 9200 ];
networking.firewall.allowedUDPPorts = [ 9200 ];
environment.etc."opencloud-admin-pass".text = ''
IDM_ADMIN_PASSWORD=supersillysecure
'';
services.opencloud = {
enable = true;
url = "https://cloud.lava.moe";
address = "10.30.7.2";
port = 9200;
environment = {
PROXY_TLS = "false";
IDP_ACCESS_TOKEN_EXPIRATION = "2592000";
IDP_ID_TOKEN_EXPIRATION = "2592000";
};
environmentFile = "/etc/opencloud-admin-pass";
};
}

27
containers/garnet/flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1779560665,
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,84 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { nixpkgs, ... }:
let
name = "garnet";
fqdn = "cloud.lava.moe";
subnetId = "7";
subnet = x: "fd0d:1::${subnetId}:${toString x}";
host = subnet 1;
client = subnet 2;
subnet4 = x: "10.30.${subnetId}.${toString x}";
host4 = subnet4 1;
client4 = subnet4 2;
modules = [
./configuration.nix
{
networking.useHostResolvConf = false;
networking.nameservers = [ host ];
}
];
in {
nixosConfigurations.container = nixpkgs.lib.nixosSystem {
inherit modules;
};
nixosModule = { config, ... }: {
networking.nat = {
enable = true;
enableIPv6 = true;
internalInterfaces = [ "ve-${name}" ];
};
services.nginx.virtualHosts."${fqdn}" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/" = {
proxyPass = "http://${client4}:9200";
proxyWebsockets = true;
};
extraConfig = ''
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
keepalive_requests 100000;
keepalive_timeout 5m;
http2_max_concurrent_streams 512;
'';
# TODO: hardcoded address
listenAddresses = [ "100.67.2.1" ];
};
systemd.tmpfiles.rules = [
"d /persist/containers/${name} 755 root users"
];
containers.${name} = {
autoStart = true;
privateNetwork = true;
hostAddress = host4;
localAddress = client4;
hostAddress6 = host;
localAddress6 = client;
# privateUsers = "pick";
nixpkgs = nixpkgs;
ephemeral = true;
config = { imports = modules; };
specialArgs = { inherit fqdn; };
bindMounts."persist" = {
hostPath = "/persist/containers/${name}";
mountPoint = "/persist";
isReadOnly = false;
};
bindMounts."content" = {
hostPath = "/flower/opencloud";
mountPoint = "/flower";
isReadOnly = false;
};
};
};
};
}

745
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -2,24 +2,27 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager"; home-manager.url = "github:nix-community/home-manager";
neovim-nightly.url = "github:nix-community/neovim-nightly-overlay"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
agenix.url = "github:ryantm/agenix";
aagl.url = "github:ezKEa/aagl-gtk-on-nix"; agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.inputs.nixpkgs.follows = "nixpkgs";
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
catppuccin.url = "github:catppuccin/nix/8eada392fd6571a747e1c5fc358dd61c14c8704e"; catppuccin.url = "github:catppuccin/nix/8eada392fd6571a747e1c5fc358dd61c14c8704e";
catppuccin.inputs.nixpkgs.follows = "nixpkgs"; catppuccin.inputs.nixpkgs.follows = "nixpkgs";
catppuccin-palette = { url = "github:catppuccin/palette"; flake = false; }; catppuccin-palette = { url = "github:catppuccin/palette"; flake = false; };
home-manager.inputs.nixpkgs.follows = "nixpkgs"; neovim-nightly.url = "github:nix-community/neovim-nightly-overlay";
neovim-nightly.inputs.nixpkgs.follows = "nixpkgs"; neovim-nightly.inputs.nixpkgs.follows = "nixpkgs";
nix-gaming.url = "github:fufexan/nix-gaming"; nix-gaming.url = "github:fufexan/nix-gaming";
nix-index-database.url = "github:nix-community/nix-index-database";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
spicetify-nix.url = "github:Gerg-L/spicetify-nix"; spicetify-nix.url = "github:Gerg-L/spicetify-nix";
spicetify-nix.inputs.nixpkgs.follows = "nixpkgs"; spicetify-nix.inputs.nixpkgs.follows = "nixpkgs";
# services # services
# hosts-blocklists = { url = "github:notracking/hosts-blocklists"; flake = false; }; pastel.url = "github:cillynder/pastel";
# website = { url = "github:LavaDesu/lavadesu.github.io/master"; flake = false; }; stevenblack-hosts = { url = "github:StevenBlack/hosts"; flake = false; };
website = { url = "github:cillynder/lavadesu.github.io/master"; flake = false; };
# zsh plugins # zsh plugins
zsh-abbr = { url = "git+https://github.com/olets/zsh-abbr?submodules=1"; flake = false; }; zsh-abbr = { url = "git+https://github.com/olets/zsh-abbr?submodules=1"; flake = false; };
@ -33,6 +36,15 @@
spotify-adblock = { url = "github:abba23/spotify-adblock"; flake = false; }; spotify-adblock = { url = "github:abba23/spotify-adblock"; flake = false; };
tree-sitter-jsonc = { url = "gitlab:WhyNotHugo/tree-sitter-jsonc"; flake = false; }; tree-sitter-jsonc = { url = "gitlab:WhyNotHugo/tree-sitter-jsonc"; flake = false; };
wine-discord-ipc-bridge = { url = "github:0e4ef622/wine-discord-ipc-bridge"; flake = false; }; wine-discord-ipc-bridge = { url = "github:0e4ef622/wine-discord-ipc-bridge"; flake = false; };
# containers
c-amethyst.url = "path:./containers/amethyst";
c-beryllium.url = "path:./containers/beryllium";
c-citrine.url = "path:./containers/citrine";
c-diamond.url = "path:./containers/diamond";
c-emerald.url = "path:./containers/emerald";
c-fluorite.url = "path:./containers/fluorite";
c-garnet.url = "path:./containers/garnet";
}; };
outputs = { self, agenix, catppuccin, nixpkgs, ... } @ inputs: outputs = { self, agenix, catppuccin, nixpkgs, ... } @ inputs:
@ -64,11 +76,14 @@
specialArgs = { specialArgs = {
inherit inputs; inherit inputs;
modules = import ./modules { lib = nixpkgs.lib; }; modules = import ./modules { lib = nixpkgs.lib; };
gcSecrets = builtins.fromJSON (builtins.readFile "${self}/secrets.gcrypt/shared.json");
}; };
}; };
in in
{ {
nixosConfigurations."alyssum" = mkSystem nixpkgs "alyssum" "x86_64-linux" [];
nixosConfigurations."anemone" = mkSystem nixpkgs "anemone" "x86_64-linux" []; nixosConfigurations."anemone" = mkSystem nixpkgs "anemone" "x86_64-linux" [];
nixosConfigurations."dandelion" = mkSystem nixpkgs "dandelion" "aarch64-linux" [];
nixosConfigurations."hyacinth" = mkSystem nixpkgs "hyacinth" "x86_64-linux" []; nixosConfigurations."hyacinth" = mkSystem nixpkgs "hyacinth" "x86_64-linux" [];
packages."x86_64-linux" = packages."x86_64-linux" =

45
hosts/alyssum/default.nix Normal file
View file

@ -0,0 +1,45 @@
{ inputs, lib, modules, modulesPath, ... }: {
networking.hostName = "alyssum";
system.stateVersion = "25.11";
time.timeZone = "Australia/Melbourne";
age.secrets = {
acme_dns.file = ../../secrets/acme_dns.age;
passwd.file = ../../secrets/passwd.age;
navidrome_env.file = ../../secrets/navidrome_env.age;
wpa_conf = {
file = ../../secrets/wpa_conf.age;
path = "/etc/wpa_supplicant/imperative.conf";
symlink = false;
};
};
imports = with modules.system; [
(modulesPath + "/profiles/qemu-guest.nix")
home-manager
base
kernel
nix-stable
packages
security
tailscale
modules.services.nginx
modules.services.syncthing
inputs.c-emerald.nixosModule
inputs.c-garnet.nixosModule
./filesystem.nix
./kernel.nix
./networking.nix
./home.syncthing.nix
./samba.nix
../../users/hana
];
me.environment = "headless";
services.syncthing.user = lib.mkForce "hana";
}

View file

@ -0,0 +1,35 @@
{ ... }:
let
bind = src: {
depends = [ "/nix" ];
device = src;
fsType = "none";
neededForBoot = true;
options = [ "bind" ];
};
mkLabelMount = label: type: {
device = "/dev/disk/by-label/${label}";
fsType = type;
options = [ "defaults" "relatime" ];
};
mkBtrfsMount = name: subvol: atime: mkLabelMount name "btrfs" // {
options = [ "autodefrag" "compress=zstd:3" "defaults" "discard=async" "space_cache=v2" "ssd" "subvol=${subvol}" (if atime then "relatime" else "noatime") ];
};
submount = mkBtrfsMount "alyssum";
in {
fileSystems = {
"/" = {
device = "rootfs";
fsType = "tmpfs";
options = [ "defaults" "size=8G" "mode=755" ];
};
"/boot" = mkLabelMount "stem" "vfat";
"/flower" = mkBtrfsMount "myosotis" "/@" true;
"/nix" = submount "/@/nix" false;
"/persist" = (submount "/@/persist" true) // { neededForBoot = true; };
"/persist/.snapshots" = submount "/snap/persist" false;
"/var/log/journal" = bind "/persist/journal";
};
}

View file

@ -0,0 +1,39 @@
{ config, lib, ... }:
let
configOn = user: port: {
me.binds."/home/${user}/.config/syncthing" = "${user}/syncthing/config";
me.binds."/home/${user}/.local/state/syncthing" = "${user}/syncthing/state";
systemd.tmpfiles.rules = [ "d /flower/syncthing/${user} 700 ${user} users" ];
users.users.${user} = {
hashedPasswordFile = config.age.secrets.passwd.path;
isNormalUser = true;
linger = true;
};
home-manager.users.${user} = { ... }: {
home = {
username = "${user}";
homeDirectory = "/home/${user}";
stateVersion = "26.05";
};
services.syncthing = {
enable = true;
guiAddress = "[::]:${toString port}";
overrideDevices = false;
overrideFolders = false;
settings = {
options.listenAddresses = [
"tcp://0.0.0.0:2${toString port}"
"quic://0.0.0.0:2${toString port}"
"dynamic+https://relays.syncthing.net/endpoint"
];
defaults.folder.path = "/flower/syncthing/${user}";
};
};
};
};
in lib.mkMerge [
(configOn "kujira" 8385)
(configOn "cilly" 8386)
]

12
hosts/alyssum/kernel.nix Normal file
View file

@ -0,0 +1,12 @@
{ config, lib, ... }: {
boot = {
loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
};
initrd.availableKernelModules = [ "nvme" "xhci_pci" "usb_storage" "sd_mod" "rtsx_usb_sdmmc" ];
initrd.kernelModules = [ ];
kernelModules = [ "kvm-amd" ];
};
hardware.cpu.amd.updateMicrocode = true;
}

View file

@ -0,0 +1,15 @@
{ config, ... }: {
networking = {
useDHCP = true;
wireless.enable = true;
interfaces.wlp1s0.useDHCP = false;
interfaces.wlp1s0.ipv4.addresses = [{
address = "192.168.1.167";
prefixLength = 24;
}];
defaultGateway = "192.168.1.1";
nameservers = [ "8.8.8.8" "8.8.4.4" ];
};
}

View file

@ -0,0 +1,14 @@
{ pkgs, ... }: {
environment.systemPackages = with pkgs; [
git
htop
jq
neovim
rsync
sshfs
wget
kitty.terminfo
];
environment.variables.EDITOR = "nvim";
}

84
hosts/alyssum/samba.nix Normal file
View file

@ -0,0 +1,84 @@
{ config, lib, pkgs, ... }:
let
configOn = user: let
passwd_fname = "passwd_smb${user}";
in {
age.secrets.${passwd_fname}.file = ../../secrets/${passwd_fname}.age;
me.binds."/flower/smb/${user}/music" = "/flower/media/music/${user}";
me.binds."/flower/smb/${user}/syncthing" = "/flower/syncthing/${user}";
users.users.${user} = {
hashedPasswordFile = config.age.secrets.passwd.path;
isNormalUser = true;
};
system.activationScripts = {
init_smbpasswd.text = let
smbpasswd = "${config.services.samba.package}/bin/smbpasswd";
in ''
printf "$(cat ${config.age.secrets.${passwd_fname}.path})\n$(cat ${config.age.secrets.${passwd_fname}.path})\n" | ${smbpasswd} -sa ${user}
'';
};
services.samba.settings."${user}" = {
"path" = "/flower/smb/${user}";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
"force user" = user;
"force group" = "users";
"valid users" = user;
};
};
in lib.mkMerge [
(configOn "cilly")
(configOn "kujira")
{
me.binds."/flower/smb/kujira/opencloud" = "/flower/opencloud/data/storage/users/users/a8e29fc0-673c-4c67-be00-2442904acb43";
networking.firewall.allowPing = true;
services.samba = {
enable = true;
package = pkgs.samba4Full;
openFirewall = true;
settings = {
global = {
"server smb encrypt" = "required";
"workgroup" = "WORKGROUP";
"server string" = "smbnix";
"netbios name" = "smbnix";
"security" = "user";
"hosts allow" = "100.64.0.0/10 127.0.0.1 alyssum localhost";
"hosts deny" = "0.0.0.0/0";
"guest account" = "nobody";
"map to guest" = "bad user";
};
"public" = {
"path" = "/flower/smb/public";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "yes";
"create mask" = "0644";
"directory mask" = "0755";
"force user" = "hana";
"force group" = "users";
};
};
};
services.samba-wsdd = {
enable = true;
openFirewall = true;
};
services.avahi = {
enable = true;
openFirewall = true;
nssmdns4 = true;
publish.enable = true;
publish.userServices = true;
};
}
]

View file

@ -5,6 +5,7 @@
nixpkgs.overlays = [ inputs.neovim-nightly.overlays.default ]; nixpkgs.overlays = [ inputs.neovim-nightly.overlays.default ];
age.secrets = { age.secrets = {
wg_anemone.file = ../../secrets/wg_anemone.age;
passwd.file = ../../secrets/passwd.age; passwd.file = ../../secrets/passwd.age;
}; };
@ -16,6 +17,7 @@
bluetooth bluetooth
ccache ccache
corectrl corectrl
docker
flatpak flatpak
greetd greetd
gui gui
@ -26,12 +28,16 @@
printing printing
security security
snapper snapper
tailscale
wireguard
./filesystem.nix ./filesystem.nix
./kernel.nix ./kernel.nix
./networking.nix ./networking.nix
../../users/rin ../../users/rin
modules.services.syncthing
]; ];
me = { me = {
@ -39,13 +45,9 @@
batteryDevice = "BATT"; batteryDevice = "BATT";
kbBacklightDevice = "asus::kbd_backlight"; kbBacklightDevice = "asus::kbd_backlight";
hasFingerprint = true; hasFingerprint = true;
hidpi = true;
}; };
# For steam fhs-env
nixpkgs.config.permittedInsecurePackages = [
"openssl-1.1.1w"
];
programs.wireshark = { programs.wireshark = {
enable = true; enable = true;
package = pkgs.wireshark; package = pkgs.wireshark;
@ -53,4 +55,6 @@
services.fprintd.enable = true; services.fprintd.enable = true;
services.tlp.enable = true; services.tlp.enable = true;
programs.kdeconnect.enable = true;
} }

View file

@ -23,17 +23,22 @@
]; ];
}; };
swapDevices = [{ # swapDevices = [{
device = "/persist/swapfile"; # device = "/persist/swapfile";
size = 16 * 1024; # size = 16 * 1024;
}]; # }];
#
# systemd.sleep.extraConfig = ''
# HibernateMode=shutdown
# '';
/*
services.logind.lidSwitch = "suspend-then-hibernate"; services.logind.lidSwitch = "suspend-then-hibernate";
systemd.sleep.extraConfig = '' systemd.sleep.extraConfig = ''
HibernateDelaySec=14400 HibernateDelaySec=14400
SuspendEstimationSec=3600 SuspendEstimationSec=3600
HibernateOnACPower=true HibernateOnACPower=true
''; '';
*/
powerManagement.cpufreq.min = 400000; powerManagement.cpufreq.min = 400000;

View file

@ -1,18 +1,4 @@
{ config, ... }: { { config, ... }: {
networking = { networking.wireless.iwd.enable = true;
#nameservers = [ "8.8.8.8" "8.8.4.4" ];
#wg-quick.interfaces.wg0.configFile = "/persist/vpn.conf";
networkmanager = {
enable = true;
#dns = "none";
};
extraHosts = ''
192.168.100.16 hyacinth
'';
};
environment.etc."NetworkManager/system-connections".source = "/persist/nm_system-connections"; environment.etc."NetworkManager/system-connections".source = "/persist/nm_system-connections";
} }

View file

@ -0,0 +1,44 @@
{ inputs, modules, modulesPath, ... }: {
networking.hostName = "dandelion";
system.stateVersion = "23.11";
time.timeZone = "Australia/Melbourne";
age.secrets = {
acme_dns.file = ../../secrets/acme_dns.age;
slskd_env.file = ../../secrets/slskd_env.age;
wg_dandelion.file = ../../secrets/wg_dandelion.age;
};
imports = with modules.system; [
(modulesPath + "/profiles/qemu-guest.nix")
home-manager
base
kernel
nix-stable
packages
security
tailscale
wireguard
modules.services.banksia
modules.services.nginx
modules.services.unbound
modules.services.website
inputs.c-amethyst.nixosModule
inputs.c-beryllium.nixosModule
inputs.c-citrine.nixosModule
inputs.c-diamond.nixosModule
inputs.c-fluorite.nixosModule
./filesystem.nix
./kernel.nix
./networking.nix
./nginx.nix
../../users/hana
];
me.environment = "headless";
}

View file

@ -0,0 +1,34 @@
{ ... }:
let
bind = src: {
depends = [ "/nix" ];
device = src;
fsType = "none";
neededForBoot = true;
options = [ "bind" ];
};
mkLabelMount = label: type: {
device = "/dev/disk/by-label/${label}";
fsType = type;
options = [ "defaults" "relatime" ];
};
mkBtrfsMount = name: subvol: atime: mkLabelMount name "btrfs" // {
options = [ "autodefrag" "compress=zstd:3" "defaults" "discard=async" "space_cache=v2" "ssd" "subvol=${subvol}" (if atime then "relatime" else "noatime") ];
};
submount = mkBtrfsMount "DANDELION";
in {
fileSystems = {
"/" = {
device = "rootfs";
fsType = "tmpfs";
options = [ "defaults" "size=6G" "mode=755" ];
};
"/boot" = mkLabelMount "UEFI" "vfat";
"/nix" = submount "/@/nix" false;
"/persist" = (submount "/@/persist" true) // { neededForBoot = true; };
"/persist/.snapshots" = submount "/snap/persist" false;
"/var/log/journal" = bind "/persist/journal";
};
}

View file

@ -0,0 +1,10 @@
{ ... }: {
boot = {
loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
};
initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "xen_blkfront" ];
initrd.kernelModules = [ "nvme" ];
};
}

View file

@ -0,0 +1,4 @@
{ ... }: {
networking.useDHCP = true;
networking.interfaces.enp2s0.useDHCP = false;
}

View file

@ -0,0 +1,8 @@
{ ... }: {
services.nginx.virtualHosts."muse.lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".return = "404";
locations."/share/".proxyPass = "http://[fd0d:2::5:2]:4533";
};
}

View file

@ -0,0 +1,14 @@
{ pkgs, ... }: {
environment.systemPackages = with pkgs; [
git
htop
jq
neovim
rsync
sshfs
wget
kitty.terminfo
];
environment.variables.EDITOR = "nvim";
}

View file

@ -3,11 +3,10 @@
system.stateVersion = "21.11"; system.stateVersion = "21.11";
time.timeZone = "Australia/Melbourne"; time.timeZone = "Australia/Melbourne";
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
nixpkgs.overlays = [ inputs.neovim-nightly.overlays.default ]; nixpkgs.overlays = [ inputs.neovim-nightly.overlays.default ];
age.secrets = { age.secrets = {
passwd.file = ../../secrets/passwd.age; passwd.file = ../../secrets/passwd.age;
wg_hyacinth.file = ../../secrets/wg_blossom.age; wg_hyacinth.file = ../../secrets/wg_hyacinth.age;
wpa_conf.file = ../../secrets/wpa_conf.age; wpa_conf.file = ../../secrets/wpa_conf.age;
}; };
imports = with modules.system; [ imports = with modules.system; [
@ -19,6 +18,7 @@
bluetooth bluetooth
ccache ccache
corectrl corectrl
docker
flatpak flatpak
greetd greetd
gui gui
@ -29,9 +29,10 @@
printing printing
security security
snapper snapper
virtualisation tailscale
wireguard
modules.services.postgres modules.services.syncthing
./filesystem.nix ./filesystem.nix
./kernel.nix ./kernel.nix
@ -40,11 +41,7 @@
../../users/rin ../../users/rin
]; ];
services.postgresql.ensureDatabases = [ "barista" "barista-dev" ];
systemd.services.nix-daemon.environment.TMPDIR = "/nix/tmp"; systemd.services.nix-daemon.environment.TMPDIR = "/nix/tmp";
# For steam fhs-env me.hasBluetooth = true;
nixpkgs.config.permittedInsecurePackages = [
"openssl-1.1.1w"
];
} }

View file

@ -15,7 +15,7 @@ in
"/" = { "/" = {
device = "rootfs"; device = "rootfs";
fsType = "tmpfs"; fsType = "tmpfs";
options = [ "defaults" "size=8G" "mode=755" ]; options = [ "defaults" "size=24G" "mode=755" ];
}; };
"/boot" = mkLabelMount "CUP" "vfat"; "/boot" = mkLabelMount "CUP" "vfat";

View file

@ -13,4 +13,8 @@
]; ];
kernelPackages = lib.mkForce (pkgs.linuxPackagesFor pkgs.me.linux-lava); kernelPackages = lib.mkForce (pkgs.linuxPackagesFor pkgs.me.linux-lava);
}; };
hardware.amdgpu.overdrive = {
enable = true;
ppfeaturemask = "0xffffffff";
};
} }

View file

@ -3,12 +3,13 @@
networking = { networking = {
useDHCP = true; useDHCP = true;
interfaces.enp5s0.useDHCP = false; interfaces.enp5s0.useDHCP = false;
interfaces.enp5s0.wakeOnLan.enable = true;
interfaces.enp5s0.ipv4.addresses = [{ interfaces.enp5s0.ipv4.addresses = [{
address = "192.168.0.151"; address = "192.168.1.201";
prefixLength = 24; prefixLength = 24;
}]; }];
defaultGateway = "192.168.0.1"; defaultGateway = "192.168.1.1";
nameservers = [ "8.8.8.8" "8.8.4.4" ]; nameservers = [ "8.8.8.8" "8.8.4.4" ];
extraHosts = '' extraHosts = ''

View file

@ -1,7 +1,7 @@
{ pkgs, ... }: { { pkgs, ... }: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
android-studio discord
jetbrains.idea-community-bin jetbrains.idea
texliveFull texliveFull
]; ];
} }

13
modules/binds.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, lib, ...}: {
imports = [ ./options.nix ];
fileSystems = lib.mapAttrs (dest: key: let
target = if (lib.strings.hasPrefix "/" key)
then key
else "/persist/binds/${key}";
in {
depends = [ "/persist" ];
device = target;
fsType = "none";
options = [ "bind" ];
}) config.me.binds;
}

View file

@ -14,16 +14,21 @@ let
}) paths }) paths
); );
in { in {
binds = ./binds.nix;
options = ./options.nix; options = ./options.nix;
services = mkAttrsFromPaths [ services = mkAttrsFromPaths [
./services/banksia.nix
./services/jellyfin.nix ./services/jellyfin.nix
./services/nginx.nix ./services/nginx.nix
./services/postgres.nix ./services/postgres.nix
./services/sonarr.nix ./services/sonarr.nix
./services/synapse.nix ./services/synapse.nix
./services/syncthing.nix
./services/tmptsync.nix ./services/tmptsync.nix
./services/transmission.nix
./services/unbound.nix ./services/unbound.nix
./services/vaultwarden.nix ./services/vaultwarden.nix
./services/website.nix
]; ];
system = mkAttrsFromPaths [ system = mkAttrsFromPaths [
./system/aagl.nix ./system/aagl.nix
@ -32,6 +37,7 @@ in {
./system/bluetooth.nix ./system/bluetooth.nix
./system/ccache.nix ./system/ccache.nix
./system/corectrl.nix ./system/corectrl.nix
./system/docker.nix
./system/flatpak.nix ./system/flatpak.nix
./system/greetd.nix ./system/greetd.nix
./system/gui.nix ./system/gui.nix
@ -44,12 +50,13 @@ in {
./system/printing.nix ./system/printing.nix
./system/security.nix ./system/security.nix
./system/snapper.nix ./system/snapper.nix
./system/transmission.nix ./system/tailscale.nix
./system/virtualisation.nix ./system/virtualisation.nix
./system/wireguard.nix ./system/wireguard.nix
]; ];
user = mkAttrsFromPaths [ user = mkAttrsFromPaths [
./user/catppuccin.nix ./user/catppuccin.nix
./user/comma.nix
./user/direnv.nix ./user/direnv.nix
./user/dunst.nix ./user/dunst.nix
./user/eww.nix ./user/eww.nix

View file

@ -39,5 +39,15 @@ in {
type = types.bool; type = types.bool;
default = config.me.environment == "laptop"; default = config.me.environment == "laptop";
}; };
hidpi = mkOption {
type = types.bool;
default = false;
};
binds = lib.mkOption {
type = with lib.types; attrsOf str;
default = {};
};
}; };
} }

View file

@ -0,0 +1,11 @@
# TODO ^^
{ ... }: {
services.nginx.virtualHosts = {
"banksia.lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
locations."/".return = "302 https://lab.lava.moe/cilly/Banksia";
locations."/api".proxyPass = "http://localhost:8080/";
};
};
}

View file

@ -1,18 +1,21 @@
{ config, inputs, ... }: { { config, ... }: {
networking.firewall.allowedTCPPorts = [ 80 443 ]; networking.firewall.allowedTCPPorts = [ 80 443 ];
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
email = "me@lava.moe"; defaults = {
certs."lava.moe" = { email = "me@lava.moe";
group = "nginx"; group = "nginx";
domain = "lava.moe"; dnsProvider = "cloudflare";
environmentFile = config.age.secrets."acme_dns".path;
};
certs."lava.moe" = {
extraDomainNames = [ extraDomainNames = [
"*.lava.moe" "*.lava.moe"
"*.local.lava.moe" "*.local.lava.moe"
]; ];
dnsProvider = "cloudflare";
credentialsFile = config.age.secrets."acme_dns".path;
}; };
certs."cilly.moe" = {};
certs."cilly.dev" = {};
}; };
services.nginx = { services.nginx = {
@ -21,28 +24,5 @@
recommendedOptimisation = true; recommendedOptimisation = true;
recommendedGzipSettings = true; recommendedGzipSettings = true;
recommendedProxySettings = true; recommendedProxySettings = true;
virtualHosts = {
"lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
root = inputs.website.outPath;
};
"cdn.lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
root = "/persist/cdn";
};
"_" = {
default = true;
addSSL = true;
# TODO generate this somewhere
sslCertificate = "/persist/fakeCerts/fake.crt";
sslCertificateKey = "/persist/fakeCerts/fake.key";
extraConfig = ''
return 444;
'';
};
};
}; };
} }

View file

@ -8,6 +8,7 @@ in {
services.postgresql = { services.postgresql = {
enable = true; enable = true;
dataDir = dir; dataDir = dir;
# TODO: broken :3
package = pkgs.postgresql_13; package = pkgs.postgresql_13;
authentication = lib.mkOverride 10 '' authentication = lib.mkOverride 10 ''
#type database DBuser origin-address auth-method #type database DBuser origin-address auth-method

View file

@ -0,0 +1,23 @@
{ config, ... }:
let
dir = "/persist/shared/.syncthing";
user = if config.me.gui then "rin" else "hana";
uid = toString config.users.users."${user}".uid;
gid = toString config.users.groups.users.gid;
in
{
systemd.tmpfiles.rules = [
"d ${dir}/config 700 ${uid} ${gid}"
"d ${dir}/data 700 ${uid} ${gid}"
];
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
services.syncthing = {
enable = true;
openDefaultPorts = true;
user = user;
group = "users";
dataDir = "/persist/shared/.syncthing/data";
configDir = "/persist/shared/.syncthing/config";
guiAddress = if config.me.gui then "127.0.0.1:8384" else ":8384";
};
}

View file

@ -5,13 +5,6 @@
downloadDirPermissions = "775"; downloadDirPermissions = "775";
openFirewall = true; openFirewall = true;
settings = { settings = {
alt-speed-down = 512;
alt-speed-enabled = true;
alt-speed-time-begin = 360;
alt-speed-time-day = 127;
alt-speed-time-enabled = true;
alt-speed-time-end = 1380;
alt-speed-up = 256;
download-dir = "/persist/transmission/Downloads"; download-dir = "/persist/transmission/Downloads";
incomplete-dir = "/persist/transmission/.incomplete"; incomplete-dir = "/persist/transmission/.incomplete";
ratio-limit-enabled = true; ratio-limit-enabled = true;

View file

@ -1,8 +1,17 @@
{ inputs, ... }: { inputs, pkgs, gcSecrets, ... }:
let let
dir = "/persist/unbound"; dir = "/persist/unbound";
converted = pkgs.runCommand "stevenblack-hosts-unbound" {} ''
echo "server:" > "$out"
grep '^0\.0\.0\.0' "${inputs.stevenblack-hosts}/hosts" | awk '{print "local-zone: \""$2"\" always_refuse"}' | tail -n +2 >> "$out"
'';
in { in {
networking.firewall.interfaces.wlan0 = { networking.firewall.interfaces."ve-+" = {
allowedUDPPorts = [ 53 853 ];
allowedTCPPorts = [ 53 853 ];
};
networking.firewall.interfaces.wg0 = {
allowedUDPPorts = [ 53 853 ]; allowedUDPPorts = [ 53 853 ];
allowedTCPPorts = [ 53 853 ]; allowedTCPPorts = [ 53 853 ];
}; };
@ -16,17 +25,27 @@ in {
name = "."; name = ".";
forward-tls-upstream = true; forward-tls-upstream = true;
forward-addr = [ forward-addr = [
"2606:4700:4700::1111@853#cloudflare-dns.com"
"2606:4700:4700::1001@853#cloudflare-dns.com"
"2001:4860:4860::8888@853#dns.google"
"2001:4860:4860::8844@853#dns.google"
"1.1.1.1@853#cloudflare-dns.com" "1.1.1.1@853#cloudflare-dns.com"
"1.0.0.1@853#cloudflare-dns.com" "1.0.0.1@853#cloudflare-dns.com"
"8.8.8.8@853#dns.google"
"8.8.4.4@853#dns.google"
]; ];
}]; }];
server = { server = {
interface = [ "0.0.0.0" ]; interface = [ "0.0.0.0" "::0" ];
access-control = [ access-control = [
"127.0.0.1/8 allow" "127.0.0.1/8 allow"
"10.0.0.0/8 allow" "10.0.0.0/8 allow"
"100.64.0.0/10 allow"
"192.168.100.0/24 allow" "192.168.100.0/24 allow"
"fd0d::/16 allow"
"fd7a:115c:a1e0::/48 allow"
"${gcSecrets.wireguard.ipv6Subnet}:/80 allow"
]; ];
domain-insecure = [ "\"local.lava.moe\"" ]; domain-insecure = [ "\"local.lava.moe\"" ];
local-zone = [ "\"warden.local.lava.moe.\" redirect" ]; local-zone = [ "\"warden.local.lava.moe.\" redirect" ];
@ -35,7 +54,7 @@ in {
]; ];
}; };
include = "${inputs.hosts-blocklists}/unbound/unbound.blacklist.conf"; include = "${converted}";
}; };
}; };

View file

@ -0,0 +1,43 @@
{ inputs, pkgs, ... }: let
pastel = inputs.pastel.packages.${pkgs.system}.default;
in {
services.nginx.virtualHosts = {
"cilly.moe" = {
useACMEHost = "cilly.moe";
forceSSL = true;
root = pastel.outPath;
};
"cilly.dev" = {
useACMEHost = "cilly.dev";
forceSSL = true;
root = pastel.outPath;
};
"lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
root = inputs.website.outPath;
};
"cdn.lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
extraConfig = ''
return 301 https://sh.lava.moe$request_uri;
'';
};
"sh.lava.moe" = {
useACMEHost = "lava.moe";
forceSSL = true;
root = "/persist/cdn";
};
"_" = {
default = true;
addSSL = true;
# TODO generate this somewhere
sslCertificate = "/persist/fakeCerts/fake.crt";
sslCertificateKey = "/persist/fakeCerts/fake.key";
extraConfig = ''
return 444;
'';
};
};
}

View file

@ -1,5 +1,5 @@
{ config, inputs, modules, ... }: { { config, inputs, modules, ... }: {
imports = [ modules.options ]; imports = [ modules.binds modules.options ];
environment.etc = { environment.etc = {
"machine-id".source = "/persist/machine-id"; "machine-id".source = "/persist/machine-id";
@ -11,6 +11,8 @@
environment.pathsToLink = [ "/share/zsh" ]; environment.pathsToLink = [ "/share/zsh" ];
i18n.defaultLocale = "en_AU.UTF-8"; i18n.defaultLocale = "en_AU.UTF-8";
i18n.extraLocales = [ "en_GB.UTF-8/UTF-8" ];
users.mutableUsers = false; users.mutableUsers = false;
system = { system = {
@ -21,6 +23,5 @@
}; };
}; };
nix.registry.config.flake = inputs.self; nix.registry.config.flake = inputs.self;
nix.registry.nixpkgs.flake = inputs.nixpkgs;
nix.registry.shells.flake = inputs.self; nix.registry.shells.flake = inputs.self;
} }

View file

@ -1,9 +1,5 @@
{ ... }: { { ... }: {
programs.corectrl = { programs.corectrl = {
enable = true; enable = true;
gpuOverclock = {
enable = true;
ppfeaturemask = "0xffffffff";
};
}; };
} }

13
modules/system/docker.nix Normal file
View file

@ -0,0 +1,13 @@
{ pkgs, ... }: {
virtualisation.docker = {
enable = true;
storageDriver = "btrfs";
# rootless = {
# enable = true;
# setSocketVariable = true;
# };
};
environment.systemPackages = [
pkgs.docker-compose
];
}

View file

@ -3,7 +3,7 @@
enable = true; enable = true;
settings = { settings = {
default_session = { default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --asterisks --time --cmd 'zsh -c \"source $HOME/.config/zsh/.zshrc && Hyprland > $XDG_RUNTIME_DIR/Hyprland.out\"'"; command = "${pkgs.tuigreet}/bin/tuigreet --remember --asterisks --time --cmd 'zsh -c \"source $HOME/.config/zsh/.zshrc && Hyprland > $XDG_RUNTIME_DIR/Hyprland.out\"'";
user = "greeter"; user = "greeter";
}; };

View file

@ -15,7 +15,6 @@
hanazono hanazono
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-extra
open-sans open-sans
twemoji-color-font twemoji-color-font
unifont unifont

View file

@ -6,7 +6,19 @@
"-arinterval 15" "-arinterval 15"
]; ];
}; };
xkb.options = "caps:escape";
}; };
console.useXkbConfig = true; services.keyd = {
enable = true;
keyboards = {
default = {
ids = [ "*" ];
settings = {
main = {
capslock = "esc";
esc = "capslock";
};
};
};
};
};
} }

View file

@ -1,5 +1,7 @@
{ config, lib, pkgs, ... }: { { config, lib, pkgs, ... }: {
nix = { nix = {
package = pkgs.nixVersions.latest;
settings = rec { settings = rec {
substituters = [ substituters = [
"https://cache.nixos.org?priority=10" "https://cache.nixos.org?priority=10"
@ -17,4 +19,5 @@
''; '';
}; };
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
programs.nh.enable = true;
} }

View file

@ -1,6 +1,7 @@
{ config, lib, pkgs, ... }: { { config, inputs, pkgs, ... }: {
nix = { nix = {
package = pkgs.nixVersions.git; nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
package = pkgs.nixVersions.latest;
settings = rec { settings = rec {
extra-sandbox-paths = [ config.programs.ccache.cacheDir ]; extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
@ -23,4 +24,5 @@
''; '';
}; };
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
programs.nh.enable = true;
} }

View file

@ -1,16 +1,15 @@
{ config, lib, pkgs, ... }: { { config, lib, pkgs, ... }: {
config = lib.mkIf config.me.gui { config = lib.mkIf config.me.gui {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
android-tools
gparted gparted
nautilus nautilus
]; ];
programs.adb.enable = true;
hardware.graphics.extraPackages = with pkgs; [ hardware.graphics.extraPackages = with pkgs; [
vaapiIntel intel-vaapi-driver
vaapiVdpau libva-vdpau-driver
libvdpau-va-gl libvdpau-va-gl
]; ];
programs.light.enable = true;
hardware.opentabletdriver.enable = true; hardware.opentabletdriver.enable = true;
hardware.keyboard.qmk.enable = true; hardware.keyboard.qmk.enable = true;
programs.steam = { programs.steam = {

View file

@ -1,12 +1,14 @@
{ pkgs, ... }: { { pkgs, ... }: {
imports = [ ./packages-gui.nix ]; imports = [ ./packages-gui.nix ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
comma # ecryptfs
ecryptfs
efibootmgr efibootmgr
fd
git git
git-crypt
htop htop
jq jq
kitty.terminfo
libarchive libarchive
lf lf
msr-tools msr-tools
@ -14,8 +16,9 @@
neovim neovim
nfs-utils nfs-utils
ntfs3g ntfs3g
sshfs ripgrep
rsync rsync
sshfs
wget wget
]; ];
environment.variables.EDITOR = "nvim"; environment.variables.EDITOR = "nvim";

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }: { { config, lib, pkgs, ... }: {
networking.firewall = networking.firewall =
let let
iptables = "${pkgs.iptables}/bin/iptables"; iptables = "${pkgs.iptables}/bin/iptables";
@ -53,5 +53,33 @@
} }
]; ];
}; };
pam = lib.mkIf (config.me.environment != "headless") {
u2f = {
enable = true;
settings = {
cue = true;
pinverification = 1;
};
};
services.doas.rules.auth = {
u2f.settings.pinverification = lib.mkForce 0;
u2f_int = lib.mkMerge [
{
enable = true;
order = config.security.pam.services.doas.rules.auth.u2f.order + 1;
control = "sufficient";
modulePath = "${pkgs.pam_u2f}/lib/security/pam_u2f.so";
inherit (config.security.pam.u2f) settings;
}
{
settings = lib.mkForce {
interactive = true;
pinverification = 0;
userpresence = 0;
};
}
];
};
};
}; };
} }

View file

@ -0,0 +1,13 @@
{ config, lib, ... }: {
age.secrets.tailscale_auth.file = ../../secrets/tailscale_auth.age;
me.binds."/var/lib/tailscale" = "tailscale";
networking.firewall.trustedInterfaces = [ "tailscale0" ];
networking.firewall.allowedUDPPorts = lib.mkIf (config.me.environment == "headless") [ 123 ];
services.tailscale = {
enable = true;
authKeyFile = config.age.secrets.tailscale_auth.path;
openFirewall = true;
useRoutingFeatures = if config.me.environment == "headless" then "both" else "client";
};
}

View file

@ -1,13 +1,11 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, gcSecrets, ... }:
let let
port = 51820; port = 51801;
serverName = "sugarcane"; serverName = "dandelion";
serverInterface = "ens3"; serverInterface = "enp0s6";
serverIp = "51.79.240.130"; serverIp = gcSecrets.wireguard.gateway;
forwarding = { forwarding = {
"80" = [ "10.100.0.2" "80" ];
"443" = [ "10.100.0.2" "443" ];
"22727" = [ "10.100.0.3" "7777" ]; "22727" = [ "10.100.0.3" "7777" ];
}; };
@ -20,52 +18,61 @@ let
in '' in ''
${pkgs.iptables}/bin/iptables -${type} PREROUTING -t nat -i ${serverInterface} -p tcp --dport ${sport} -j DNAT --to ${dest}:${dport} ${pkgs.iptables}/bin/iptables -${type} PREROUTING -t nat -i ${serverInterface} -p tcp --dport ${sport} -j DNAT --to ${dest}:${dport}
${pkgs.iptables}/bin/iptables -${type} FORWARD -p tcp -d ${dest} --dport ${dport} -j ACCEPT ${pkgs.iptables}/bin/iptables -${type} FORWARD -p tcp -d ${dest} --dport ${dport} -j ACCEPT
${pkgs.iptables}/bin/iptables -${type} PREROUTING -t nat -i ${serverInterface} -p udp --dport ${sport} -j DNAT --to ${dest}:${dport}
${pkgs.iptables}/bin/iptables -${type} FORWARD -p udp -d ${dest} --dport ${dport} -j ACCEPT
'') forwarding '') forwarding
); );
routeBypass = {
caramel = {
gateway = "192.168.100.1";
interface = "wlan0";
routes = [
serverIp
];
};
hyacinth = {
gateway = "192.168.100.1";
interface = "enp5s0";
routes = [
serverIp
];
};
};
clients = { clients = {
caramel = {
publicKey = "VDqcpS0lJzFgwikj61MJ1xc9P8Cuq0NXa+Hc+etn2iA=";
allowedIPs = [ "10.100.0.2/32" ];
};
hyacinth = { hyacinth = {
publicKey = "6nVhazYdmC15A/nke9VrqIg3sOBVOmqj4GEsyBq7MVo="; publicKey = "6nVhazYdmC15A/nke9VrqIg3sOBVOmqj4GEsyBq7MVo=";
allowedIPs = [ "10.100.0.3/32" ]; allowedIPs = [ "10.100.0.3/32" "${gcSecrets.wireguard.ipv6Subnet}:3" "fd0d::3" ];
interfaces = {
wg0 = { peers = [ server6OnlyPeer ]; };
wg1 = { peers = [ serverPeer ]; autostart = false; };
wg2 = { peers = [ serverLocalOnlyPeer ]; autostart = false; };
};
}; };
strawberry = { anemone = {
publicKey = "Fkcp/VSN4Dkhly8V4hskF4lnDviA7VZHCnWf7OliFCg="; publicKey = "px5+JNdAmqBvUC++DhiJrUBRAr+BYP6iYVt4sbhPTWY=";
allowedIPs = [ "10.100.0.4/32" ]; allowedIPs = [ "10.100.0.4/32" "${gcSecrets.wireguard.ipv6Subnet}:4" "fd0d::4" ];
interfaces = {
wg0 = { peers = [ server6OnlyPeer ]; };
wg1 = { peers = [ serverPeer ]; autostart = false; };
wg2 = { peers = [ serverLocalOnlyPeer ]; autostart = false; };
};
}; };
maple = { hibiscus = {
publicKey = "kPw8hpANygfz83Oi/l+iCVYalV2zfs7fhkccjoGG2Do="; publicKey = "vQ5a2KMrwi7RCRsD0yvog+n35vQYFuvwiPn+W4lbRBw=";
allowedIPs = [ "10.100.0.5/32" ]; allowedIPs = [ "10.100.0.5/32" "${gcSecrets.wireguard.ipv6Subnet}:5" "fd0d::5" ];
interfaces = {
wg0 = { peers = [ server6OnlyPeer ]; };
wg1 = { peers = [ serverPeer ]; autostart = false; };
wg2 = { peers = [ serverLocalOnlyPeer ]; autostart = false; };
};
};
hazel = {
publicKey = "0zruTndObzHo+b1rbOuTsxCU97epygZycxXS/lgUHUc=";
allowedIPs = [ "10.100.0.21/32" "${gcSecrets.wireguard.ipv6Subnet}:21" "fd0d::21" ];
interfaces = {
wg0 = {
dns = [ "::1" "127.0.0.1" ];
peers = [ serverLocalOnlyPeer ];
};
};
}; };
}; };
clientPeers = builtins.attrValues clients; clientPeers = builtins.map (client: builtins.removeAttrs client [ "interfaces" ]) (builtins.attrValues clients);
serverPeer = { serverPeerWith = ips: {
publicKey = "3ugIk2tQZXjAH9/95s63ld2WNUHQrd4Mz5jzbln6oj0="; publicKey = "3ugIk2tQZXjAH9/95s63ld2WNUHQrd4Mz5jzbln6oj0=";
allowedIPs = [ "0.0.0.0/0" ]; allowedIPs = ips;
endpoint = "${serverIp}:${toString port}"; endpoint = "${serverIp}:${toString port}";
persistentKeepalive = 25; persistentKeepalive = 25;
}; };
serverPeer = serverPeerWith [ "0.0.0.0/0" "::/0" ];
server6OnlyPeer = serverPeerWith [ "10.100.0.0/24" "::/0" ];
serverLocalOnlyPeer = serverPeerWith [ "10.100.0.0/24" "fd0d::/16" ];
serverConfig = { serverConfig = {
nat = { nat = {
@ -79,7 +86,7 @@ let
}; };
wireguard.interfaces.wg0 = { wireguard.interfaces.wg0 = {
ips = [ "10.100.0.1/24" ]; ips = [ "10.100.0.1/24" "${gcSecrets.wireguard.ipv6Subnet}:1" "fd0d::1" ];
listenPort = port; listenPort = port;
postSetup = '' postSetup = ''
@ -97,33 +104,24 @@ let
}; };
clientConfig = { clientConfig = {
wireguard.interfaces.wg0 = wg-quick.interfaces =
let let
client = clients."${config.networking.hostName}"; client = clients."${config.networking.hostName}";
routes = routeBypass."${config.networking.hostName}"; in
mapRoutes = type: lib.concatMapStringsSep "\n" (r: "${pkgs.iproute2}/bin/ip route ${type} ${r} via ${routes.gateway} dev ${routes.interface}") routes.routes; builtins.mapAttrs (interface: conf: {
in { address = client.allowedIPs;
ips = client.allowedIPs; dns = [ "fd0d::1" "10.100.0.1" ];
listenPort = port; privateKeyFile = config.age.secrets."wg_${config.networking.hostName}".path;
} // conf) client.interfaces;
postSetup = ''
${mapRoutes "add"}
${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o ${serverInterface} -j MASQUERADE
'';
postShutdown = ''
${mapRoutes "del"}
${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o ${serverInterface} -j MASQUERADE
'';
privateKeyFile = config.age.secrets."wg_${config.networking.hostName}".path;
peers = [ serverPeer ];
};
}; };
in { in {
boot.kernel.sysctl = lib.mkIf (config.networking.hostName == serverName) ({
"net.ipv6.conf.all.forwarding" = true;
"net.ipv6.conf.default.forwarding" = true;
});
networking = networking =
lib.mkMerge [ lib.mkMerge [
(lib.mkIf (config.networking.hostName == serverName) serverConfig) (lib.mkIf (config.networking.hostName == serverName) serverConfig)
(lib.mkIf (builtins.hasAttr config.networking.hostName clients) clientConfig) (lib.mkIf (config.networking.hostName != serverName) clientConfig)
]; ];
} }

View file

@ -14,7 +14,7 @@
config = { config = {
catppuccin = { catppuccin = {
accent = "maroon"; accent = lib.mkDefault "pink";
flavor = lib.mkDefault "mocha"; flavor = lib.mkDefault "mocha";
kitty.enable = true; kitty.enable = true;
gtk.enable = true; gtk.enable = true;
@ -53,7 +53,7 @@
echo "invalid theme, valid values: [dark, light, restore]" echo "invalid theme, valid values: [dark, light, restore]"
exit 1 exit 1
fi fi
current="$HOME/.local/state/nix/profiles/home-manager" current="$HOME/.local/state/home-manager/gcroots/current-home/"
cached="$HOME/.local/state/last-parent-specialisation" cached="$HOME/.local/state/last-parent-specialisation"
if [ -d "$current/specialisation" ]; then if [ -d "$current/specialisation" ]; then
if [ -d "$cached" ]; then if [ -d "$cached" ]; then

7
modules/user/comma.nix Normal file
View file

@ -0,0 +1,7 @@
{ inputs, ... }: {
imports = [
inputs.nix-index-database.homeModules.default
];
programs.nix-index.enable = true;
programs.nix-index-database.comma.enable = true;
}

View file

@ -5,7 +5,7 @@
enable = true; enable = true;
}; };
}; };
programs.git.extraConfig.core.excludesFile = ".envrc"; programs.git.settings.core.excludesFile = ".envrc";
# We can't use .source since hm manages this file too # We can't use .source since hm manages this file too
xdg.configFile."direnv/direnvrc".text = builtins.readFile ../../res/direnvrc; xdg.configFile."direnv/direnvrc".text = builtins.readFile ../../res/direnvrc;
home.activation = { home.activation = {

View file

@ -21,9 +21,9 @@ let
''; '';
}; };
in { in {
home.packages = with pkgs; [ socat ]; home.packages = with pkgs; [ iw socat ];
programs.eww = { programs.eww = {
enable = true; enable = true;
configDir = res;
}; };
xdg.configFile."eww".source = res;
} }

View file

@ -1,15 +1,16 @@
{ ... }: { { ... }: {
programs.git = { programs.git = {
enable = true; enable = true;
userName = "LavaDesu";
userEmail = "me@lava.moe";
signing = { signing = {
key = "059F098EBF0E9A13E10A46BF6500251E087653C9"; key = "059F098EBF0E9A13E10A46BF6500251E087653C9";
signByDefault = true; signByDefault = true;
}; };
extraConfig = { settings = {
user.name = "Cilly Leang";
user.email = "mini@cilly.moe";
core.abbrev = 11; core.abbrev = 11;
safe.directory = "/home/rin/Projects/flakes"; safe.directory = "/home/rin/Projects/flakes";
init.defaultBranch = "master";
}; };
}; };
} }

View file

@ -5,6 +5,6 @@
}; };
services.gpg-agent = { services.gpg-agent = {
enable = true; enable = true;
pinentryPackage = pkgs.pinentry-gnome3; pinentry.package = pkgs.pinentry-gnome3;
}; };
} }

View file

@ -1,6 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
kblight = "light -s sysfs/leds/${config.me.kbBacklightDevice}"; kblight = "brightnessctl -d ${config.me.kbBacklightDevice}";
in in
{ {
home.packages = [ config.services.hypridle.package ]; home.packages = [ config.services.hypridle.package ];
@ -16,18 +16,18 @@ in
listener = lib.optionals (config.me.kbBacklightDevice != null) [ listener = lib.optionals (config.me.kbBacklightDevice != null) [
{ {
timeout = 120; timeout = 120;
on-timeout = "${kblight} -O && ${kblight} -S 0"; on-timeout = "${kblight} -s && ${kblight} 0";
on-resume = "${kblight} -I"; on-resume = "${kblight} -r";
} }
] ++ [ ] ++ [
{ {
timeout = 150; timeout = 150;
on-timeout = "light -O && light -T 0.5"; on-timeout = "brightnessctl -s && brightnessctl 50%-";
on-resume = "light -I"; on-resume = "brightnessctl -r";
} }
{ {
timeout = 180; timeout = 180;
on-timeout = "light -I && loginctl lock-session"; on-timeout = "brightnessctl -r && loginctl lock-session";
} }
{ {
timeout = 195; timeout = 195;

View file

@ -1,4 +1,17 @@
{ config, lib, ... }: { { config, lib, ... }:
let
scaling = if config.me.hidpi then 1 else 0.5;
s = value: if builtins.isInt value || builtins.isFloat value
then
builtins.floor (value * scaling)
else if builtins.isList value
then
lib.strings.concatMapStringsSep "," (v: builtins.toString (scaling * v)) value
else
builtins.throw "invalid scaled value type ${builtins.typeOf value} for ${value}";
sn = value: s (builtins.map (v: (-v)) value);
in
{
programs.hyprlock = { programs.hyprlock = {
enable = true; enable = true;
settings = { settings = {
@ -16,26 +29,27 @@
monitor = ""; monitor = "";
color = "$base"; color = "$base";
}; };
shape = [ shape = lib.optionals (config.me.batteryDevice != null) [
# Battery pill # Battery pill
{ {
monitor = ""; monitor = "";
size = "165, 65"; size = s [165 65];
color = "$crust"; color = "$crust";
rounding = -1; rounding = -1;
halign = "right"; halign = "right";
valign = "top"; valign = "top";
position = "-595,-10"; position = sn [595 10];
} }
] ++ [
# Time pill # Time pill
{ {
monitor = ""; monitor = "";
size = "545, 65"; size = s [545 65];
color = "$crust"; color = "$crust";
rounding = -1; rounding = -1;
halign = "right"; halign = "right";
valign = "top"; valign = "top";
position = "-40,-10"; position = sn [40 10];
} }
]; ];
label = lib.optionals config.me.hasFingerprint [ label = lib.optionals config.me.hasFingerprint [
@ -44,10 +58,10 @@
monitor = ""; monitor = "";
color = "$text"; color = "$text";
font_family = "Material Symbols Outlined"; font_family = "Material Symbols Outlined";
font_size = 64; font_size = s 64;
halign = "center"; halign = "center";
valign = "top"; valign = "top";
position = "0, -100"; position = sn [0 100];
text = ""; text = "";
} }
# Fingerprint text # Fingerprint text
@ -55,9 +69,9 @@
monitor = ""; monitor = "";
color = "$text"; color = "$text";
text = "$FPRINTPROMPT"; text = "$FPRINTPROMPT";
font_size = 25; font_size = s 25;
font_family = "Open Sans"; font_family = "Open Sans";
position = "0, -235"; position = sn [0 235];
halign = "center"; halign = "center";
valign = "top"; valign = "top";
} }
@ -68,8 +82,8 @@
text = ""; text = "";
color = "$accent"; color = "$accent";
font_family = "Material Symbols Outlined"; font_family = "Material Symbols Outlined";
font_size = 27; font_size = s 27;
position = "-695, -20"; position = sn [695 20];
halign = "right"; halign = "right";
valign = "top"; valign = "top";
} }
@ -78,9 +92,9 @@
monitor = ""; monitor = "";
text = ''cmd[update:60000] echo "<span weight='700'>$(cat /sys/class/power_supply/${config.me.batteryDevice}/capacity)%</span>"''; text = ''cmd[update:60000] echo "<span weight='700'>$(cat /sys/class/power_supply/${config.me.batteryDevice}/capacity)%</span>"'';
color = "$text"; color = "$text";
font_size = 23; font_size = s 23;
font_family = "Open Sans"; font_family = "Open Sans";
position = "-625, -20"; position = sn [625 20];
halign = "right"; halign = "right";
valign = "top"; valign = "top";
} }
@ -90,10 +104,10 @@
monitor = ""; monitor = "";
color = "$text"; color = "$text";
font_family = "Open Sans"; font_family = "Open Sans";
font_size = 23; font_size = s 23;
halign = "right"; halign = "right";
valign = "top"; valign = "top";
position = "-70, -20"; position = sn [70 20];
text = ''cmd[update:1000] echo "<span alpha='70%' weight='550'>$(date '+%A, %d %B %Y')</span> <span weight='700'>$(date +%H:%M)</span><span alpha='70%' weight='550'>$(date +:%S)</span>"''; text = ''cmd[update:1000] echo "<span alpha='70%' weight='550'>$(date '+%A, %d %B %Y')</span> <span weight='700'>$(date +%H:%M)</span><span alpha='70%' weight='550'>$(date +:%S)</span>"'';
} }
@ -102,17 +116,17 @@
monitor = ""; monitor = "";
color = "$red"; color = "$red";
font_family = "Open Sans"; font_family = "Open Sans";
font_size = 25; font_size = s 25;
text = "$FAIL $ATTEMPTS[]"; text = "$FAIL $ATTEMPTS[]";
position = "0, -200"; position = sn [0 200];
halign = "center"; halign = "center";
valign = "center"; valign = "center";
} }
]; ];
input-field = { input-field = {
monitor = ""; monitor = "";
size = "600, 120"; size = s [600 120];
outline_thickness = 4; outline_thickness = s 4;
check_color = "$peach"; check_color = "$peach";
dots_size = 0.2; dots_size = 0.2;
dots_spacing = 0.2; dots_spacing = 0.2;
@ -125,7 +139,7 @@
fade_on_empty = false; fade_on_empty = false;
hide_input = false; hide_input = false;
capslock_color = "$yellow"; capslock_color = "$yellow";
position = "0, -47"; position = sn [0 47];
halign = "center"; halign = "center";
valign = "center"; valign = "center";
}; };

View file

@ -1,8 +1,7 @@
{ config, pkgs, ... }: { { pkgs, ... }: {
programs.mpv = { programs.mpv = {
enable = true; enable = true;
package = pkgs.mpv-unwrapped.wrapper { package = pkgs.mpv.override {
mpv = pkgs.mpv-unwrapped;
youtubeSupport = true; youtubeSupport = true;
scripts = [ pkgs.mpvScripts.mpris ]; scripts = [ pkgs.mpvScripts.mpris ];
}; };

View file

@ -9,11 +9,12 @@
vimAlias = true; vimAlias = true;
vimdiffAlias = true; vimdiffAlias = true;
withNodeJs = false; withNodeJs = false;
withPython3 = false;
withRuby = false;
plugins = with pkgs.vimPlugins; [ plugins = with pkgs.vimPlugins; [
ctrlp-vim fzf-vim
lualine-nvim lualine-nvim
nerdtree
tokyonight-nvim tokyonight-nvim
vim-fugitive vim-fugitive
vim-nix vim-nix
@ -21,14 +22,7 @@
vim-signify vim-signify
vim-surround vim-surround
nvim-cmp
nvim-lspconfig
cmp-nvim-lsp
cmp_luasnip
luasnip
(nvim-treesitter.withPlugins (p: with p; [ (nvim-treesitter.withPlugins (p: with p; [
tree-sitter-comment
tree-sitter-json tree-sitter-json
tree-sitter-lua tree-sitter-lua
tree-sitter-nix tree-sitter-nix

View file

@ -1,9 +1,9 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, sysConfig, ... }:
let let
luaconf = pkgs.writeText "config.lua" luaconf = pkgs.writeText "config.lua"
(lib.replaceStrings (lib.replaceStrings
["{{OMNISHARP_PATH}}" "{{DART_PATH}}" "{{CATPPUCCIN_FLAVOUR}}"] ["{{OMNISHARP_PATH}}" "{{DART_PATH}}" "{{CATPPUCCIN_FLAVOUR}}" "{{USERNAME}}" "{{HOSTNAME}}"]
["${pkgs.omnisharp-roslyn}/bin/OmniSharp" "${pkgs.dart}/bin/dart" config.catppuccin.nvim.flavor] ["${pkgs.omnisharp-roslyn}/bin/OmniSharp" "${pkgs.dart}/bin/dart" config.catppuccin.nvim.flavor config.home.username sysConfig.networking.hostName]
(builtins.readFile ../../res/config.lua)); (builtins.readFile ../../res/config.lua));
in { in {
systemd.user.tmpfiles.rules = [ systemd.user.tmpfiles.rules = [
@ -17,25 +17,35 @@ in {
vimdiffAlias = true; vimdiffAlias = true;
#package = pkgs.neovim-nightly; #package = pkgs.neovim-nightly;
withNodeJs = true; withNodeJs = true;
withPython3 = true;
withRuby = false;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
nixd
rust-analyzer rust-analyzer
nodePackages."@prisma/language-server" texlab
nodePackages.diagnostic-languageserver astro-language-server
nodePackages.eslint_d tailwindcss-language-server
nodePackages.typescript-language-server diagnostic-languageserver
nodePackages.vscode-langservers-extracted eslint_d
nodePackages.yaml-language-server typescript-language-server
vscode-langservers-extracted
yaml-language-server
]; ];
plugins = with pkgs.vimPlugins; [ plugins = with pkgs.vimPlugins; [
autoclose-nvim
auto-save-nvim
flutter-tools-nvim flutter-tools-nvim
fzf-vim fzf-vim
fzf-lsp-nvim fzf-lsp-nvim
lualine-nvim lualine-nvim
nvim-ts-autotag
nvim-web-devicons
plenary-nvim plenary-nvim
tokyonight-nvim tokyonight-nvim
vim-fugitive vim-fugitive
vim-latex-live-preview
vim-nix vim-nix
vim-repeat vim-repeat
vim-signify vim-signify
@ -45,6 +55,7 @@ in {
nvim-cmp nvim-cmp
nvim-dap nvim-dap
nvim-highlight-colors
nvim-lspconfig nvim-lspconfig
cmp-nvim-lsp cmp-nvim-lsp
cmp_luasnip cmp_luasnip
@ -52,27 +63,33 @@ in {
#(pkgs.me.nvim-treesitter-nightly.withPlugins (p: with p; [ #(pkgs.me.nvim-treesitter-nightly.withPlugins (p: with p; [
(nvim-treesitter.withPlugins (p: with p; [ (nvim-treesitter.withPlugins (p: with p; [
tree-sitter-astro
tree-sitter-bash tree-sitter-bash
tree-sitter-c tree-sitter-c
tree-sitter-c-sharp tree-sitter-c-sharp
tree-sitter-cpp tree-sitter-cpp
tree-sitter-groovy
tree-sitter-html tree-sitter-html
tree-sitter-java
tree-sitter-javascript tree-sitter-javascript
tree-sitter-json tree-sitter-json
tree-sitter-kotlin
tree-sitter-latex
tree-sitter-lua tree-sitter-lua
tree-sitter-markdown tree-sitter-markdown
tree-sitter-nix tree-sitter-nix
tree-sitter-php tree-sitter-php
tree-sitter-prisma
tree-sitter-python tree-sitter-python
tree-sitter-query tree-sitter-query
tree-sitter-regex tree-sitter-regex
tree-sitter-rust tree-sitter-rust
tree-sitter-swift
tree-sitter-toml tree-sitter-toml
tree-sitter-tsx tree-sitter-tsx
tree-sitter-typescript tree-sitter-typescript
tree-sitter-vim tree-sitter-vim
tree-sitter-vimdoc tree-sitter-vimdoc
tree-sitter-xml
tree-sitter-yaml tree-sitter-yaml
])) ]))
]; ];

View file

@ -16,7 +16,6 @@ let
in { in {
programs.rofi = { programs.rofi = {
enable = true; enable = true;
package = pkgs.rofi-wayland;
theme = "theme"; theme = "theme";
}; };
xdg.configFile."rofi/theme.rasi".source = theme; xdg.configFile."rofi/theme.rasi".source = theme;

View file

@ -40,7 +40,6 @@ in
shuffle shuffle
hidePodcasts hidePodcasts
skipStats
songStats songStats
history history
volumePercentage volumePercentage

View file

@ -38,7 +38,8 @@ let
jf = "doas journalctl -f"; jf = "doas journalctl -f";
fl = "cd ~/Projects/flakes"; fl = "cd ~/Projects/flakes";
nr = "doas nixos-rebuild switch --flake .#${sysConfig.networking.hostName} -v -L"; nr = "nh os switch";
nb = "nh os boot";
gs = "git status"; gs = "git status";
ga = "git add"; ga = "git add";
@ -101,10 +102,9 @@ let
bindkey -a -r ':' bindkey -a -r ':'
''; '';
in { in {
programs.command-not-found.enable = true;
programs.zsh = { programs.zsh = {
enable = true; enable = true;
dotDir = ".config/zsh"; dotDir = "${config.xdg.configHome}/zsh";
autocd = true; autocd = true;
defaultKeymap = "viins"; defaultKeymap = "viins";
@ -117,14 +117,6 @@ in {
}; };
enableCompletion = true; enableCompletion = true;
initExtraBeforeCompInit = ''
fpath+=(/run/current-system/sw/share/zsh/site-functions)
zstyle ':completion:*' completer _complete
zstyle ':completion:*' matcher-list "" 'm:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' '+l:|=* r:|=*'
zstyle ':completion:*' menu select
_comp_options+=(globdots)
zmodload zsh/complist
'';
localVariables = { localVariables = {
KEYTIMEOUT = "1"; KEYTIMEOUT = "1";
@ -138,16 +130,26 @@ in {
ls = "ls --color=auto --group-directories-first -v"; ls = "ls --color=auto --group-directories-first -v";
diff = "diff -Naur --color=auto"; diff = "diff -Naur --color=auto";
}; };
initExtraFirst = '' initContent = lib.mkMerge [
autoload -U colors && colors (lib.mkBefore ''
''; autoload -U colors && colors
initExtra = lib.concatStringsSep "\n" [ '')
pure (lib.mkOrder 550 ''
cursorShape fpath+=(/run/current-system/sw/share/zsh/site-functions)
direnv zstyle ':completion:*' completer _complete
genAbbrs zstyle ':completion:*' matcher-list "" 'm:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' '+l:|=* r:|=*'
viExtraNav zstyle ':completion:*' menu select
disableExecute _comp_options+=(globdots)
zmodload zsh/complist
'')
(lib.concatStringsSep "\n" [
pure
cursorShape
direnv
genAbbrs
viExtraNav
disableExecute
])
]; ];
plugins = builtins.map (e: pluginFromInput e) [ plugins = builtins.map (e: pluginFromInput e) [

View file

@ -1,27 +0,0 @@
self: { bash, buildFHSEnv, cacert, ncurses5, runCommand, ... } @ super:
let
drvName = super.android-studio.name;
fhsEnv = buildFHSEnv {
name = "${drvName}-fhs-env";
# google's analytics calls jdk's getOperatingSystemMXBean which tries to parse cgroups and ultimately fails for whatever reason with an npe
unshareCgroup = false;
multiPkgs = pkgs: [
ncurses5
(runCommand "fedoracert" {}
''
mkdir -p $out/etc/pki/tls/
ln -s ${cacert}/etc/ssl/certs $out/etc/pki/tls/certs
'')
];
};
startScript = ''
#!${bash}/bin/bash
${fhsEnv}/bin/${drvName}-fhs-env ${super.android-studio.passthru.unwrapped}/bin/studio.sh "$@"
'';
in {
android-studio = super.android-studio.overrideAttrs(_: {
inherit startScript;
});
}

View file

@ -0,0 +1,19 @@
# https://github.com/NixOS/nixpkgs/pull/374068
self: super: {
bitwarden-desktop = super.bitwarden-desktop.overrideAttrs (o: {
preBuild = o.preBuild + ''
pushd apps/desktop/desktop_native/proxy
cargo build --offline --bin desktop_proxy --release
popd
'';
installPhase = builtins.replaceStrings ["runHook preInstall"] [''
runHook preInstall
install -Dm755 -t $out/bin apps/desktop/desktop_native/target/release/desktop_proxy
mkdir -p $out/lib/mozilla/native-messaging-hosts
substituteAll ${./patches/firefox-native-messaging-host.json} $out/lib/mozilla/native-messaging-hosts/com.8bit.bitwarden.json
''] o.installPhase;
});
}

View file

@ -1,10 +1,12 @@
builtins.map (path: import path) [ builtins.map (path: import path) [
./android-studio.nix ./bitwarden-desktop.nix
./cascadia-code.nix ./cascadia-code.nix
./ccache.nix ./ccache.nix
./eww.nix ./eww.nix
./jetbrains.nix
./material-icons.nix ./material-icons.nix
./rofi.nix ./openldap.nix
./steam.nix ./steam.nix
./utillinux.nix ./utillinux.nix
./wpa-supplicant.nix
] ]

22
overlays/jetbrains.nix Normal file
View file

@ -0,0 +1,22 @@
# https://github.com/NixOS/nixpkgs/issues/375254
self: super: {
jetbrains = super.jetbrains // {
gateway = let
unwrapped = super.jetbrains.gateway;
in super.buildFHSEnv {
name = "gateway";
inherit (unwrapped) version;
runScript = super.writeScript "gateway-wrapper" ''
unset JETBRAINS_CLIENT_JDK
exec ${unwrapped}/bin/gateway "$@"
'';
meta = unwrapped.meta;
passthru = {
inherit unwrapped;
};
};
};
}

View file

@ -1,12 +1,16 @@
self: super: let self: super: let
llvmPackages = super.llvmPackages_19; llvmPackages = super.llvmPackages_19;
clangVersion = super.lib.versions.major llvmPackages.libclang.version; clangVersion = super.lib.versions.major llvmPackages.libclang.version;
addFlagsScript = "$out/nix-support/add-local-cc-cflags-before.sh";
cc = llvmPackages.stdenv.cc.override { cc = llvmPackages.stdenv.cc.override {
# :sob: see https://github.com/NixOS/nixpkgs/issues/142901 # :sob: see https://github.com/NixOS/nixpkgs/issues/142901
bintools = llvmPackages.bintools; bintools = llvmPackages.bintools;
# https://github.com/NixOS/nixpkgs/issues/368850
extraBuildCommands = '' extraBuildCommands = ''
cat <(echo "NIX_CC_WRAPPER_SUPPRESS_TARGET_WARNING=1") "${addFlagsScript}" > "${addFlagsScript}.new"
mv "${addFlagsScript}.new" "${addFlagsScript}"
substituteInPlace "$out/nix-support/cc-cflags" --replace " -nostdlibinc" "" substituteInPlace "$out/nix-support/cc-cflags" --replace " -nostdlibinc" ""
substituteInPlace "$out/nix-support/add-local-cc-cflags-before.sh" --replace 'echo "Warning: supplying the --target argument to a nix-wrapped compiler may not work correctly - cc-wrapper is currently not designed with multi-target compilers in mind. You may want to use an un-wrapped compiler instead." >&2' ""
echo " -resource-dir=${llvmPackages.libclang.lib}/lib/clang/${clangVersion}" >> $out/nix-support/cc-cflags echo " -resource-dir=${llvmPackages.libclang.lib}/lib/clang/${clangVersion}" >> $out/nix-support/cc-cflags
''; '';
}; };

9
overlays/openldap.nix Normal file
View file

@ -0,0 +1,9 @@
self: super: {
# openldap i686 fails checks
# issue: https://github.com/NixOS/nixpkgs/issues/514113
# workaround: https://github.com/NixOS/nixpkgs/issues/513245#issuecomment-4320293674
# fix: https://github.com/NixOS/nixpkgs/pull/515956
openldap = super.openldap.overrideAttrs {
doCheck = !self.stdenv.hostPlatform.isi686;
};
}

View file

@ -0,0 +1,7 @@
{
"name": "com.8bit.bitwarden",
"description": "Bitwarden desktop <-> browser bridge",
"path": "@out@/bin/desktop_proxy",
"type": "stdio",
"allowed_extensions": ["{446900e4-71c2-419f-a6a7-df9c091e268b}"]
}

View file

@ -0,0 +1,13 @@
diff --git a/wpa_supplicant/systemd/wpa_supplicant.service.in b/wpa_supplicant/systemd/wpa_supplicant.service.in
index 58a6228..fbe7de3 100644
--- a/wpa_supplicant/systemd/wpa_supplicant.service.in
+++ b/wpa_supplicant/systemd/wpa_supplicant.service.in
@@ -7,7 +7,7 @@ Wants=network.target
[Service]
Type=dbus
BusName=fi.w1.wpa_supplicant1
-ExecStart=@BINDIR@/wpa_supplicant -u
+ExecStart=@BINDIR@/wpa_supplicant -u -q
[Install]
WantedBy=multi-user.target

View file

@ -1,13 +0,0 @@
self: super: {
rofi-unwrapped = super.rofi-unwrapped.overrideAttrs (_: rec {
version = "1.7.2";
src = super.fetchFromGitHub {
owner = "davatorium";
repo = "rofi";
rev = version;
fetchSubmodules = true;
sha256 = "0yarkzhn7vxqxafmz196kvklzwdxygbhd0d29gxm7lrfba8brdxy";
};
});
}

View file

@ -5,9 +5,5 @@ self: super: {
keyutils keyutils
gamescope gamescope
]; ];
extraLibraries = pkgs: with pkgs; [
openssl_1_1
];
}; };
} }

View file

@ -0,0 +1,6 @@
self: super: {
# Thanks https://discourse.nixos.org/t/journal-logs-spammed-with-ctrl-event-scan-failed/56316/5
wpa_supplicant = super.wpa_supplicant.overrideAttrs(o: {
patches = o.patches ++ [ ./patches/wpa-supplicant.patch ];
});
}

View file

@ -0,0 +1,13 @@
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index ef9689f8776..aabbc031b5f 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -759,6 +759,8 @@ static const struct usb_device_id quirks_table[] = {
BTUSB_WIDEBAND_SPEECH },
{ USB_DEVICE(0x2b89, 0x8761), .driver_info = BTUSB_REALTEK |
BTUSB_WIDEBAND_SPEECH },
+ { USB_DEVICE(0x2c4e, 0x0115), .driver_info = BTUSB_REALTEK |
+ BTUSB_WIDEBAND_SPEECH },
/* Additional Realtek 8821AE Bluetooth devices */
{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },

View file

@ -56,6 +56,10 @@ let
INIT_STACK_ALL_ZERO = yes; INIT_STACK_ALL_ZERO = yes;
INIT_STACK_NONE = no; INIT_STACK_NONE = no;
# bore
SCHED_BORE = yes;
MIN_BASE_SLICE_NS = freeform "2000000";
# tickless timers # tickless timers
HZ_PERIODIC = no; HZ_PERIODIC = no;
NO_HZ = yes; NO_HZ = yes;

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