Compare commits

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

1675 commits

Author SHA1 Message Date
3e3ffcac74 update flake.lock 2025-11-08 14:47:15 +03:00
e86c579c93 Revert "add to firefox"
This reverts commit a9c081c0c7.
2025-11-07 10:35:22 +03:00
6cc7853d1d deadnix 2025-11-07 10:21:58 +03:00
dcf2aeeee1 group systemd 2025-11-07 10:18:46 +03:00
0c67559965 cleaner systemd 2025-11-07 10:18:33 +03:00
4adc8da597 will statix ever be happy 2025-11-07 10:18:22 +03:00
01e9729a35 group this 2025-11-07 10:18:05 +03:00
c880d48b71 group initrd zfs 2025-11-07 10:17:55 +03:00
30d3041576 group plasma 2025-11-07 10:17:24 +03:00
ddd7b729df group gnome 2025-11-07 10:17:06 +03:00
cef8b3ee81 group i18n 2025-11-07 10:16:40 +03:00
224beca86f group ymir 2025-11-07 10:16:27 +03:00
ed558593c0 group wallfacer 2025-11-07 10:16:18 +03:00
5671c7997d group tartarus 2025-11-07 10:16:08 +03:00
642ca932b7 group pochita 2025-11-07 10:15:58 +03:00
9f1f3c2614 cleaner 2025-11-07 09:25:03 +03:00
f157a26c25 reduction 2025-11-07 09:06:52 +03:00
e7676fe824 cleaner 2025-11-07 09:06:41 +03:00
505f960a53 inherit hell yeah 2025-11-07 09:06:37 +03:00
9531572ca6 formatting 2025-11-07 08:51:19 +03:00
8d24cb9103 cleaner 2025-11-07 08:49:59 +03:00
fccf1a0609 inherit is nice 2025-11-07 08:49:51 +03:00
05042e578d cleaner 2025-11-07 08:49:39 +03:00
7cf40592d7 lets see if this is causing mass rebuilds 2025-11-07 08:47:39 +03:00
5ea5fbba3d fix 2025-11-07 08:47:23 +03:00
4d1c3b848d formatting 2025-11-07 08:41:25 +03:00
d43a4d0461 no need 2025-11-07 08:23:45 +03:00
570a3f106a cleaner 2025-11-07 08:23:40 +03:00
e5849f79d6 deadnix suggestions 2025-11-07 08:20:53 +03:00
9de4a36981 contents 2025-11-07 08:19:45 +03:00
f2d662d035 formatting 2025-11-07 08:18:59 +03:00
039de96dfa define type at prometheus 2025-11-07 08:17:49 +03:00
a9c081c0c7 add to firefox 2025-11-06 16:50:39 +03:00
c53ad0decd fix firefox sync 2025-11-06 16:28:52 +03:00
08b1b46674 fix 2025-11-06 16:00:03 +03:00
f29fab6357 fix firefox sync 2025-11-06 15:59:33 +03:00
3bc692f5cc fix 2025-11-06 15:44:35 +03:00
7a2ff22c36 enable 2025-11-06 15:42:46 +03:00
610b580437 no need for extra file 2025-11-06 15:38:14 +03:00
62c56fb242 this should be fixed 2025-11-06 15:06:21 +03:00
a93f497b32 init 2025-11-06 15:06:10 +03:00
68572a1362 formatting 2025-11-06 15:06:05 +03:00
a2ba53b574 change port 2025-11-06 13:07:49 +03:00
53ac5bba69 fix 2025-11-06 12:00:52 +03:00
1f54efabf8 enable actual 2025-11-06 11:56:06 +03:00
9e348f4bbb add actual 2025-11-06 11:51:03 +03:00
c0173e7920 fix syntax errors 2025-11-06 08:50:02 +03:00
aa6bbc2b48 lean 2025-11-06 08:48:01 +03:00
a80eeb2a16 folders 2025-11-05 20:18:51 +03:00
bbae79fd0d dovecot enable 2025-11-05 19:45:44 +03:00
eeb92b85bd add comment 2025-11-05 17:01:01 +03:00
93c243b0d3 add global shell aliases 2025-11-05 14:51:36 +03:00
892b368c3a show me group 2025-11-05 14:38:03 +03:00
df13519296 reenable the services 2025-11-05 14:28:03 +03:00
e9b8c04893 use the configuration options 2025-11-05 14:26:55 +03:00
7137c32889 stop nginx for a sec 2025-11-05 14:10:57 +03:00
356142e385 i am so sick of this shit 2025-11-05 14:06:27 +03:00
714cfb9c0e fix 2025-11-05 14:02:00 +03:00
a75dc9f0d2 lets encrypt my ass 2025-11-05 13:58:18 +03:00
649b84782e will this fix the error? 2025-11-05 11:18:03 +03:00
ed03174ce8 default option 2025-11-05 10:44:45 +03:00
55e476540d fix clock 2025-11-05 10:44:34 +03:00
e381437b73 update flake.lock 2025-11-05 09:32:01 +03:00
14cd08a66a imma do sum about it 2025-11-05 09:28:12 +03:00
fbc2d08de8 dont need with statement for this one func 2025-11-05 09:27:56 +03:00
91d1fae83a fucking how many folders does this service use 2025-11-05 09:22:17 +03:00
8648149a62 fix the folder name 2025-11-04 15:24:22 +03:00
6881587960 fix 2025-11-04 15:20:32 +03:00
ac8edd6665 nginx should take care of the acme folder 2025-11-04 15:19:33 +03:00
366b298239 fuck the /etc/shadow file 2025-11-04 15:19:18 +03:00
32800638a1 persist mail folders 2025-11-04 15:19:00 +03:00
490b63c7aa immich uses postgresql 2025-11-04 15:18:50 +03:00
22f0a83c22 this is a file 2025-11-04 14:42:38 +03:00
08769690e9 also persist this shadow file 2025-11-04 14:24:39 +03:00
c0ec7a82fa add explainers 2025-11-04 14:24:28 +03:00
6cf06efd6d formatting 2025-11-03 14:41:59 +03:00
d5b6b8c335 seafile is removed 2025-11-02 20:32:07 +03:00
65091d8d4c Revert "add seafile"
This reverts commit 56449b8b7d.
2025-11-02 19:16:27 +03:00
31cb45c063 enable apollo 2025-11-02 19:12:27 +03:00
56449b8b7d add seafile 2025-11-02 19:11:17 +03:00
a19dbe018e add immich 2025-11-02 19:11:05 +03:00
bb1ab6be91 formatting 2025-11-02 19:10:44 +03:00
2a78278295 i dont use this project anymore 2025-11-02 17:19:33 +03:00
b919ce744b add bitwarden 2025-11-02 17:11:05 +03:00
8590a67273 add firefox-syncserver 2025-11-02 17:06:28 +03:00
59d246a23c i hope this was the issue 2025-11-02 12:49:37 +03:00
6e4208291c cuda terrorizes nixpkgs community 2025-11-01 18:09:12 +03:00
09e38c66d6 update flake.lock 2025-11-01 15:20:32 +03:00
31ec7dd416 i dont want jellyfin rightnow 2025-10-31 22:34:11 +03:00
d5331ddd7f will this make it faster? 2025-10-31 22:26:25 +03:00
09bd0051f9 find out why these packages are used 2025-10-31 22:13:10 +03:00
c777f9ff4d i think this addition is very good 2025-10-31 22:12:47 +03:00
c52418ea46 update flake.lock 2025-10-31 21:13:22 +03:00
36d114a84b add thunderbird 2025-10-31 21:08:42 +03:00
043f554179 Revert "symlink"
This reverts commit de54699ce7.
2025-10-31 14:38:57 +03:00
de54699ce7 symlink 2025-10-31 14:37:22 +03:00
900d5ad44e todo 2025-10-31 14:32:45 +03:00
2cedf1a717 update backup dir 2025-10-31 14:32:40 +03:00
a97962e2a6 i will kill myself in a gruesome manner 2025-10-31 14:27:45 +03:00
bae69545cd formatting 2025-10-31 14:14:57 +03:00
58e40e58e8 mention vaultwarden in here too 2025-10-31 14:07:30 +03:00
4b9c8b3e80 update correct path 2025-10-31 14:05:30 +03:00
c755b31329 create vaultwarden secret 2025-10-31 14:04:59 +03:00
62d6a5c0df mention the file 2025-10-31 14:02:40 +03:00
26227941fa use vaultwarden secret 2025-10-31 14:00:09 +03:00
6f96405869 fix persist folder 2025-10-31 11:55:58 +03:00
19aff29d30 mkif 2025-10-31 11:43:25 +03:00
9205530921 update flake.lock 2025-10-31 11:40:42 +03:00
05ab0df0b0 enable mailserver 2025-10-31 11:38:22 +03:00
3647d12ed3 add mailserver 2025-10-31 11:27:55 +03:00
35a2a758e1 add simple-nixos-mailserver 2025-10-31 10:46:21 +03:00
503663c7c0 enable vaultwarden on apollo 2025-10-31 10:24:23 +03:00
1ee40bc188 disable on pochita 2025-10-31 10:24:14 +03:00
dbf0ba48b7 add curl 2025-10-31 10:17:28 +03:00
7c961c988f update flake.lock 2025-10-31 10:08:02 +03:00
osman - オスマン
dea1a8e3ad
Merge pull request #11 from osbm/dependabot/github_actions/actions/upload-artifact-5
Bump actions/upload-artifact from 4 to 5
2025-10-31 10:03:15 +03:00
osman - オスマン
426a1b2092
Merge pull request #12 from osbm/dependabot/github_actions/actions/checkout-5
Bump actions/checkout from 4 to 5
2025-10-31 10:03:06 +03:00
dependabot[bot]
c5bbfc287d
Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 06:15:37 +00:00
dependabot[bot]
c63afcf1a9
Bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 06:15:33 +00:00
7255df2d92 purge nextcloud 2025-10-30 00:10:24 +03:00
18627c078b purge caddy 2025-10-30 00:09:20 +03:00
12bdc4c793 update flake.lock 2025-10-30 00:03:39 +03:00
54965b05bf update vaultwarden 2025-10-29 23:49:19 +03:00
b33a5f5925 fix alacritty 2025-10-29 22:54:55 +03:00
6a5f2d6e52 formatting 2025-10-29 22:54:47 +03:00
48c6315748 formatting 2025-10-29 22:54:42 +03:00
84fee06732 remove these from pochita 2025-10-29 20:58:04 +03:00
c47d185e68 update flake.lock 2025-10-29 20:55:04 +03:00
c3b7f82a81 fix 2025-10-29 20:53:24 +03:00
2d16ab4615 add glance nginx 2025-10-29 20:50:18 +03:00
8f5256b7d6 add steam 2025-10-29 20:49:56 +03:00
11edcaae2f lame ass mistage 2025-10-29 18:10:57 +03:00
6a51147c4f add nginx 2025-10-29 18:08:06 +03:00
bcdafff55d enable apollo 2025-10-29 17:57:29 +03:00
6ede350132 disable for a sec 2025-10-29 17:56:23 +03:00
6093ee87aa keep dealing with this 2025-10-29 17:54:56 +03:00
9379160436 lets see 2025-10-29 17:44:37 +03:00
2e9173d447 set folder permissions 2025-10-29 17:33:33 +03:00
aff9e19acf enable forgejo again 2025-10-29 17:21:56 +03:00
b1827652b0 first disable these 2025-10-29 17:20:55 +03:00
b823d5d8fc set the folder with correct owner 2025-10-29 17:19:34 +03:00
d5d5af7715 set proper initialPasswords 2025-10-29 00:51:21 +03:00
21e9275e5a ssl 2025-10-29 00:23:33 +03:00
7c40bc3fc4 enable forgejo there too 2025-10-29 00:14:54 +03:00
b3e07df279 set extra options 2025-10-28 19:59:39 +03:00
4067cac4ba formatting 2025-10-28 19:59:21 +03:00
bd25936bed formatting 2025-10-28 19:59:15 +03:00
229a15eaf1 formatting 2025-10-28 19:59:05 +03:00
02e2a72085 enable nginx in apollo 2025-10-28 19:21:09 +03:00
cadcdf7415 init nginx 2025-10-28 19:20:40 +03:00
05da6e9cec fix anubis empty module 2025-10-28 19:20:26 +03:00
9025b9d5ec enable anubis on apollo 2025-10-28 18:54:36 +03:00
b87a58c1cf add anubis 2025-10-28 18:54:14 +03:00
83411ed26d add glance 2025-10-28 18:53:33 +03:00
8c09304d45 useless ass option 2025-10-28 18:53:17 +03:00
632beb9f82 dont set the option with default value 2025-10-28 18:53:00 +03:00
04a58e2687 planning to move this to apollo 2025-10-28 18:14:18 +03:00
5bf8653f9f change the spelling to match with nixos config spelling 2025-10-28 18:10:14 +03:00
b26f6894c7 remove unused option 2025-10-28 18:09:01 +03:00
072b3cb6da add docker 2025-10-28 18:03:25 +03:00
3063145a28 cleaner 2025-10-28 17:59:10 +03:00
6064048f49 add dysk 2025-10-28 17:51:16 +03:00
0da060f14c group these options 2025-10-28 17:51:08 +03:00
87817a5ba0 formatting 2025-10-28 17:09:27 +03:00
7cc5c7b38e clean 2025-10-28 17:09:19 +03:00
d7be077d23 nvidia options update 2025-10-28 17:09:12 +03:00
1362926664 im a grown ass man 2025-10-28 17:08:43 +03:00
7b31987e01 disable krunner 2025-10-28 16:53:50 +03:00
f645f628af add sweep 2025-10-24 10:23:07 +03:00
9d8b0a8e5a formatting 2025-10-24 08:37:55 +03:00
0fdc1b1c9c add impermanent folders for tailscale 2025-10-24 08:37:36 +03:00
64f58e8b5f enable module system for artemis 2025-10-23 22:14:43 +03:00
b808e9e6e7 these are working 2025-10-23 22:02:41 +03:00
a6eb2ef366 Revert "artemis config"
This reverts commit d7b69e36c3.
2025-10-23 21:59:38 +03:00
3337820bd7 Revert "mb"
This reverts commit 8c5a06346f.
2025-10-23 21:59:36 +03:00
d03ef4a8f4 Revert "this is super awesome that the nix gives error about this"
This reverts commit bfeb05e5e3.
2025-10-23 21:59:35 +03:00
bfeb05e5e3 this is super awesome that the nix gives error about this 2025-10-23 21:40:45 +03:00
8c5a06346f mb 2025-10-23 21:31:59 +03:00
d7b69e36c3 artemis config 2025-10-23 21:31:17 +03:00
19a0a6dff6 de config 2025-10-23 21:31:09 +03:00
f9a6bccf42 add bluetooth option 2025-10-23 21:30:19 +03:00
1a0615304d add apollo recipe 2025-10-23 10:09:37 +03:00
546bb7bdaa disable yakuake 2025-10-23 09:12:10 +03:00
1f1f8f3229 enable home manager backup 2025-10-23 09:05:20 +03:00
408d64d321 add apollo and rekey 2025-10-22 22:03:31 +03:00
3ff2d4d797 setting substituters like this is bad 2025-10-22 21:55:35 +03:00
eef919ed3a clean 2025-10-22 21:25:35 +03:00
d411e9739e clena 2025-10-22 21:25:31 +03:00
ec2587216c fix artemis config 2025-10-22 21:20:19 +03:00
533b197825 set home manager options properly 2025-10-22 21:20:10 +03:00
181fa36037 clean 2025-10-22 21:19:39 +03:00
23cb1166c9 formatting 2025-10-22 13:31:27 +03:00
e4743a30e7 update flake.lock 2025-10-22 13:19:27 +03:00
450b3766a0 fix 2025-10-22 13:17:51 +03:00
573c0b3fc2 automatic domain variable value 2025-10-22 13:13:37 +03:00
705996899d seperate out options 2025-10-22 13:13:07 +03:00
53c234ec3c clean 2025-10-22 13:12:55 +03:00
87606e3080 use current hostName 2025-10-22 13:12:51 +03:00
32d69d9537 just use the default package 2025-10-22 13:12:32 +03:00
c7a1e9613f use my module options 2025-10-22 13:12:15 +03:00
11fc735d23 fix atticd 2025-10-22 13:02:36 +03:00
e33509491c delete deploy-rs 2025-10-22 11:33:17 +03:00
35a471825c clean 2025-10-22 11:32:57 +03:00
8a3d3c882d add mobile-nixos machine artemis 2025-10-22 11:30:15 +03:00
993f4347ae formatting 2025-10-21 22:04:41 +03:00
71cca80272 formatting 2025-10-21 22:04:25 +03:00
2cf520a384 fix fonts 2025-10-21 22:03:59 +03:00
43e6317a35 formatting 2025-10-21 22:03:49 +03:00
228605fd02 fix i18n 2025-10-21 22:03:43 +03:00
5afa8b4381 this was japanese 2025-10-21 21:54:09 +03:00
fc741d19fd set defaults 2025-10-21 21:47:34 +03:00
978368f361 much better 2025-10-21 21:47:03 +03:00
a60f7bbbb8 enable agenix by default 2025-10-21 21:29:21 +03:00
5788098c17 fix agenix 2025-10-21 21:29:13 +03:00
b42c5670c7 rpi dont use the systemd-boot 2025-10-21 21:26:09 +03:00
28323f2088 wtf 2025-10-21 21:25:28 +03:00
22e1851bc5 warnings 2025-10-21 21:23:04 +03:00
d693e7571f clean 2025-10-21 21:20:42 +03:00
d8e7f36073 fonts are default now 2025-10-21 21:20:32 +03:00
f1bdccd263 group 2025-10-21 21:20:05 +03:00
8dc67f7992 set machine types 2025-10-21 21:19:54 +03:00
e6e57d8a41 dont set default values 2025-10-21 21:18:36 +03:00
67c1238cd5 dont enable bayram in userfacing machines 2025-10-21 21:17:34 +03:00
352e81c1b7 fix warning 2025-10-21 21:13:53 +03:00
296cc209bd only enable fonts based on desktop environment 2025-10-21 21:12:48 +03:00
a39c31658f fix warning 2025-10-21 21:12:06 +03:00
42209ddb6a systemd-boot is default now 2025-10-21 21:02:44 +03:00
b431744859 automatically enable graphic apps by default 2025-10-21 20:51:32 +03:00
be65eb3b88 firefox 2025-10-21 20:47:21 +03:00
1b7b0b620c fix 2025-10-21 16:55:01 +03:00
d970da1972 formatting 2025-10-21 16:54:59 +03:00
59378f866e enable home manager by default 2025-10-21 16:40:37 +03:00
157453cd8d fuck 2025-10-21 16:37:10 +03:00
06a4200ca5 suggestion 2025-10-21 16:34:37 +03:00
a8e7aebcde how about this 2025-10-21 16:33:25 +03:00
e486a9f9cd add important stuff 2025-10-21 16:33:14 +03:00
fa1f59047c enable neovim 2025-10-21 16:30:10 +03:00
7d6c5c08ab move options 2025-10-21 16:29:58 +03:00
9907dc8066 fix warning 2025-10-21 16:25:26 +03:00
805508b5ff formatting 2025-10-21 16:21:12 +03:00
bc3f697cff fix home manager config 2025-10-21 16:21:07 +03:00
926314380b wtf am i doing 2025-10-21 16:11:47 +03:00
f43bc4b899 fuck 2025-10-21 16:11:16 +03:00
8e1030645e i hate darwin 2025-10-21 16:10:40 +03:00
a52511fc0f fix path 2025-10-21 16:09:47 +03:00
3c9eb038ff update path 2025-10-21 16:09:18 +03:00
d4b2c24d78 enable i18n 2025-10-21 16:01:02 +03:00
d09cca58aa apollo 2025-10-21 15:55:02 +03:00
87a14d619d silence first sudo (because every sudo is first sudo) 2025-10-21 15:54:57 +03:00
5b24a1a0f3 update flake.lock 2025-10-21 15:52:37 +03:00
5101d47e2d fix vscode 2025-10-21 15:29:38 +03:00
d98a5734fc no machineid 2025-10-21 15:22:48 +03:00
5fb91cde2f impermanence 2025-10-21 15:18:29 +03:00
06ca85ed52 dont shorten 2025-10-21 15:14:58 +03:00
6fd92bdb5a allow fuse if impermanent 2025-10-21 10:36:00 +03:00
0bf1c48bd4 todo kinda 2025-10-21 10:23:43 +03:00
e7bb5b4245 is it working 2025-10-21 10:23:38 +03:00
7d261138d9 add home manager and tailscale 2025-10-21 09:23:37 +03:00
88f7974e6a home manager impermanence things 2025-10-21 08:38:19 +03:00
c35ad8e623 instructions 2025-10-20 14:46:45 +03:00
d54c6750df wait a sec 2025-10-20 14:46:39 +03:00
6639d45b94 remove deployrs 2025-10-20 14:46:28 +03:00
8d77d07661 delete deploy 2025-10-20 14:40:34 +03:00
1105425785 add flake outputs 2025-10-20 10:59:20 +03:00
d664253d15 formatting 2025-10-20 10:43:18 +03:00
1ebe022f03 no services as of now 2025-10-20 10:42:50 +03:00
bd4c2e64bb add dns nameservers 2025-10-20 10:10:00 +03:00
e5f9e69675 fucking hell 2025-10-20 09:49:20 +03:00
c9d16bd973 random bullshit go 2025-10-20 09:49:07 +03:00
9ea28ef218 formatting 2025-10-19 22:46:17 +03:00
20e99d234d cleaner 2025-10-19 22:46:02 +03:00
f7f7dee190 fix 2025-10-19 21:31:09 +03:00
316187dd31 fix 2025-10-19 21:01:47 +03:00
95c05ba9e4 no flake error 2025-10-19 21:01:08 +03:00
c48f9a1fd5 nvim 2025-10-19 20:49:11 +03:00
ddd2d05c43 nix index 2025-10-19 20:49:04 +03:00
ecabe3fca5 no default shell 2025-10-19 20:48:46 +03:00
8b6046e64c remote builds 2025-10-19 20:48:39 +03:00
055f0b0661 fix 2025-10-19 20:48:26 +03:00
7417258623 fix module name 2025-10-19 18:39:17 +03:00
77b362b48e fix disko 2025-10-19 18:39:10 +03:00
7dfddb9fee fix 2025-10-19 18:39:05 +03:00
852a363b04 simpler 2025-10-19 18:39:02 +03:00
c42c5e3363 simpler 2025-10-19 18:38:56 +03:00
477b1c03ad wake 2025-10-19 16:53:56 +03:00
ac473d06bc u 2025-10-19 16:53:50 +03:00
adc642f3ca u 2025-10-19 16:53:48 +03:00
f5d6d62278 u 2025-10-19 16:53:45 +03:00
f1db3fcdfd update 2025-10-19 16:53:34 +03:00
3501857f2a fuck it 2025-10-19 16:13:59 +03:00
b1cce6ca82 update gitignore 2025-10-19 16:12:11 +03:00
feb53bc5fc move services 2025-10-19 14:49:27 +03:00
128005e354 move arduino 2025-10-19 14:42:00 +03:00
d05e6e0863 beautifuru 2025-10-18 19:11:45 +03:00
677c85e171 please god 2025-10-17 16:24:01 +03:00
b0bac9ee92 fix 2025-10-17 13:55:53 +03:00
5f3df4e60b fix 2025-10-17 13:54:38 +03:00
99ee97ac9d more 2025-10-17 13:47:55 +03:00
d36d34c2df set hostid 2025-10-17 13:45:06 +03:00
cd66c88886 networking issue 2025-10-17 11:38:59 +03:00
9d132640fc apollo is coming 2025-10-16 16:42:46 +03:00
ac0fd85d8d fuckass ssh error 2025-10-16 16:42:37 +03:00
89ebb0eb01 fuck off 2025-10-16 15:55:10 +03:00
7a13d344d9 update flake lock 2025-10-16 15:54:54 +03:00
1f30fc968b lets see ts 2025-10-14 14:25:11 +03:00
eb4407ae57 i am a stupid fuck 2025-10-14 14:24:55 +03:00
12ba1f1f75 how about this 2025-10-14 14:07:00 +03:00
beb67f3b29 add apollo 2025-10-09 13:50:44 +03:00
f3707e6f99 update flake.lock 2025-10-08 09:30:02 +03:00
a0aed74020 add disko 2025-10-06 20:37:39 +03:00
b6cbc17a3f clean 2025-10-06 20:37:27 +03:00
a4fad917e8 clean 2025-10-06 20:37:17 +03:00
8305867683 update flake.lock 2025-10-05 13:02:05 +03:00
c7fb4080d0 will this fix awful ui 2025-09-25 20:56:35 +03:00
b703bd4fe7 my entire config is in shambles 2025-09-25 11:22:16 +03:00
80cc1969f6 fix ts 2025-09-25 11:12:43 +03:00
f2fb81a286 enable 2025-09-24 11:49:15 +03:00
9d5acd1b87 fuck it 2025-09-24 11:48:01 +03:00
7157271163 try 2025-09-24 11:28:45 +03:00
f2a1a1b9f6 fix registry 2025-09-24 11:11:39 +03:00
49e871345c add nvim 2025-09-24 10:34:15 +03:00
8fd83a60c4 update flake.lock 2025-09-24 09:50:09 +03:00
d5dbfbff23 update flake.lock 2025-09-20 19:45:44 +03:00
246eb461a3 i love these tools 2025-09-17 14:47:32 +03:00
5dba867c4f this should fix 2025-09-17 14:43:46 +03:00
ba87d72dd0 was this the issue? 2025-09-17 11:19:55 +03:00
9fa9b6b8b1 Revert "accept"
This reverts commit 5eae31ff8e.
2025-09-17 10:43:29 +03:00
5eae31ff8e accept 2025-09-17 10:24:17 +03:00
291dba3854 fix 2025-09-17 10:22:58 +03:00
d770dc5365 fix syntax error 2025-09-17 10:09:53 +03:00
8c91fce942 add nixConfig 2025-09-16 13:36:06 +03:00
66a890bab5 formatting 2025-09-16 11:08:21 +03:00
afbaee8e3d my god 2025-09-16 10:59:10 +03:00
b0317d7d4a try this 2025-09-16 10:41:38 +03:00
3cd00b8791 nano come save me 2025-09-16 10:30:46 +03:00
49931bb6e5 hope i can compile this pos sometime 2025-09-16 10:24:55 +03:00
7197a864cc new just recipe 2025-09-16 10:21:21 +03:00
bd6a1fa46d update flake.lock 2025-09-16 10:21:00 +03:00
aae4bf7da7 add ollama 2025-09-16 10:16:10 +03:00
f346fefe02 add nix 2025-09-16 10:01:39 +03:00
11bc022d97 update attic port 2025-09-15 13:21:23 +03:00
f8d835fddc what if 2025-09-15 13:05:40 +03:00
77a72d0027 update prometheus 2025-09-15 13:05:10 +03:00
fe652c74a9 use relative path 2025-09-15 13:03:01 +03:00
98f4d6d162 update atticd 2025-09-15 13:02:22 +03:00
930ae6b5b0 no mac username 2025-09-15 12:59:24 +03:00
e137e787b5 updated the username 2025-09-15 12:59:09 +03:00
107b2cfe4b add nixpkgs path correctly 2025-09-15 12:58:31 +03:00
4756c73e19 add prometheus 2025-09-14 22:35:43 +03:00
7e276e489b update flake.lock 2025-09-13 14:50:04 +03:00
d392e22b7f why did i do this 2025-09-13 14:48:51 +03:00
50b38ef33c no minegrub 2025-09-13 14:36:52 +03:00
02ad52f6c2 ugh 2025-09-09 15:09:29 +03:00
3af8260167 nothing is working 2025-09-09 15:08:32 +03:00
5cd87bd6dd really? 2025-09-09 15:07:42 +03:00
91b4862c59 no ghostty 2025-09-09 15:06:55 +03:00
66e52b0d01 nothing fucking works 2025-09-09 15:03:15 +03:00
9be9b3f69b not available on darwin 2025-09-09 14:58:12 +03:00
5c7171540d gtk config 2025-09-09 14:51:42 +03:00
0a2c94924d fuck 2025-09-09 14:48:39 +03:00
1851a3265a fix 2025-09-09 14:44:32 +03:00
d11ceedf31 gtk 2025-09-09 14:43:44 +03:00
3d41974731 add fish 2025-09-09 14:37:49 +03:00
8884622628 fix the username 2025-09-09 14:36:41 +03:00
7812b3ea07 mention inputs 2025-09-09 14:36:36 +03:00
6e073687a5 home configuration shenanigans 2025-09-09 14:20:23 +03:00
2309315a00 please i beg you 2025-09-09 14:11:54 +03:00
55b5383308 insane 2025-09-09 14:10:44 +03:00
0c4e775678 fuck it 2025-09-09 14:09:25 +03:00
412493fd38 dummy module i am gonna lose it 2025-09-09 14:08:34 +03:00
c21690ccbb am i stupid 2025-09-09 12:05:15 +03:00
2a0b5ffed2 how about this 2025-09-09 12:04:36 +03:00
31bf7e0949 mention lib 2025-09-09 12:03:11 +03:00
46cea4bf62 how about this 2025-09-09 12:02:14 +03:00
849bccd66c add virtualisation 2025-09-09 12:00:34 +03:00
b28022c796 add config 2025-09-09 11:58:10 +03:00
cb69251e9d it should work 2025-09-09 11:57:14 +03:00
fd9cc6fbbb mention 2025-09-09 11:49:15 +03:00
b6341d7943 move openssh 2025-09-09 11:48:59 +03:00
86c6c706a5 nix index things 2025-09-09 11:41:32 +03:00
7aee282c36 i hate mac 2025-09-09 11:36:47 +03:00
e191248f3d no user definitions 2025-09-09 11:33:50 +03:00
ffee719886 no i18n 2025-09-09 11:33:18 +03:00
f1aa15495d try 2025-09-09 11:32:33 +03:00
a9510fba29 dont mention 2025-09-09 11:26:40 +03:00
bef248bacc no minegrub 2025-09-09 11:25:42 +03:00
394664b517 ignore apple vomit 2025-09-09 11:21:44 +03:00
9305e0d08a update flake.lock 2025-09-09 11:21:30 +03:00
e6911401c7 how about this 2025-09-09 11:21:01 +03:00
09320fb298 hotfix 2025-09-09 11:08:01 +03:00
e2056f1dac more things 2025-09-09 11:04:59 +03:00
a19ecfbd3e set users 2025-09-09 11:00:23 +03:00
9ec0ca47d8 add prometheus configuration 2025-09-09 10:43:21 +03:00
33fa2a5847 no aliases 2025-09-08 20:57:29 +03:00
02ee8fd4e1 update flake.lock 2025-09-08 20:15:12 +03:00
44dd1f774e no vbox 2025-09-08 10:27:02 +03:00
024b8ed6d8 only allow pochita to do ts 2025-09-07 21:12:56 +03:00
b21a3724fb its fucking enough 2025-09-07 18:37:23 +03:00
e4271e43db update 2025-09-07 18:34:25 +03:00
89ba26bea7 make it an iframe 2025-09-07 18:29:40 +03:00
5e5246da95 same as other 2025-09-07 18:12:08 +03:00
5aced6327e fix 2025-09-07 18:07:50 +03:00
4081757a67 add plotly disabled tests 2025-09-07 17:43:51 +03:00
3a46d089eb update test name 2025-09-07 17:11:04 +03:00
b990ca7009 disable test 2025-09-07 17:08:51 +03:00
1f5820c557 update flake.lock 2025-09-07 13:56:37 +03:00
a2f5aaffa5 fix 2025-09-07 13:54:34 +03:00
f32504ed7e use python 313 2025-09-07 13:51:30 +03:00
018f4da4ad update remote builds 2025-09-07 10:57:51 +03:00
79fdf11ecb Revert "lets disable ts"
This reverts commit 0bdf89f1d1.
2025-09-06 16:29:09 +03:00
473fa43b59 Reapply "lets disable ts"
This reverts commit 4db674cbb9.
2025-09-06 16:17:04 +03:00
879d5f4358 change machine name 2025-09-06 16:16:48 +03:00
4db674cbb9 Revert "lets disable ts"
This reverts commit 0bdf89f1d1.
2025-09-06 16:03:23 +03:00
4175049269 fix 2025-09-06 16:00:18 +03:00
bfbddcf275 enable remote builds 2025-09-06 15:59:33 +03:00
0bdf89f1d1 lets disable ts 2025-09-06 15:55:27 +03:00
a7565ae4be update flake.lock 2025-09-06 11:39:03 +03:00
4ecdf2c723 update to plotly 2025-09-05 08:33:00 +03:00
3bc937a813 update flake.lock 2025-09-05 08:15:16 +03:00
3136677e0e add apprentice 2025-09-04 22:11:12 +03:00
3190f38b21 move these 2025-09-04 22:05:05 +03:00
4d0ce0f089 deprecated error 2025-08-31 23:20:50 +03:00
fd8e6215ec disable open-webui for now 2025-08-31 23:15:51 +03:00
3659bcb2d1 update flake.lock 2025-08-31 14:07:49 +03:00
1e377d5f59 update flake.lock 2025-08-28 15:29:49 +03:00
9645d70061 update flake.lock 2025-08-25 00:53:45 +03:00
02a0717915 update flake.lock 2025-08-22 22:56:08 +03:00
497e4090c0 disable wayland in wezterm 2025-08-19 21:39:08 +03:00
5081595ed1 update flake.lock 2025-08-19 14:52:43 +03:00
a0eb07545b no need for these models 2025-08-19 14:52:11 +03:00
527c565462 use the same formatter in ci 2025-08-19 03:29:45 +03:00
184dd72cc6 update flake.lock 2025-08-18 23:30:10 +03:00
663d6f7eea update flake.lock 2025-08-18 21:29:21 +03:00
4d8dcee86c update flake.lock 2025-08-18 17:24:36 +03:00
4033d30539 update flake.lock 2025-08-17 21:44:35 +03:00
f4cb1f6f8e update flake.lock 2025-08-10 22:27:17 +03:00
1773120f7b update flake.lock 2025-08-08 01:44:13 +03:00
d7754ee1f4 update tmux 2025-08-07 18:25:37 +03:00
e0ef46a853 update flake.lock 2025-08-07 17:43:44 +03:00
0c09874a48 update command 2025-08-07 17:08:53 +03:00
3d1a0466e8 update ghostty 2025-08-07 17:04:53 +03:00
031a1a1080 no fetch data on ymir 2025-08-06 23:35:36 +03:00
3db78006d6 update flake.lock 2025-08-06 23:35:10 +03:00
a51faa2ffb no warning 2025-08-06 02:26:22 +03:00
e4b52b1257 formatting 2025-08-06 02:20:54 +03:00
e7df7f3578 no need for wanikani progression here 2025-08-06 00:17:29 +03:00
1f7351914b update flake.lock 2025-08-05 23:57:30 +03:00
f9f9219f0d add ymir data 2025-08-05 01:39:47 +03:00
2b7e577936 update flake.lock 2025-08-03 14:06:01 +03:00
697bf2b3db formatting python 2025-08-02 16:30:25 +03:00
304219e840 formatting 2025-08-02 16:30:05 +03:00
cd345dcd41 add progressions 2025-08-02 16:10:17 +03:00
1aeab9a288 seperate out 2025-08-02 02:46:13 +03:00
528a273329 set title 2025-08-01 00:20:28 +03:00
24852402e8 these timers neat 2025-08-01 00:16:42 +03:00
5fd87319e2 just set margin 2025-08-01 00:09:32 +03:00
e7f2f6c99e add border and padding 2025-08-01 00:06:49 +03:00
42a61a30a7 border radius 2025-08-01 00:00:22 +03:00
aa2dfde673 plot color 2025-07-31 23:58:09 +03:00
745e513290 i am not sure at allllll 2025-07-31 23:51:55 +03:00
2e888a183c no clipping 2025-07-31 23:42:34 +03:00
5e4224fcd8 lets add the header 2025-07-31 23:35:34 +03:00
9a81594f4b allow html 2025-07-31 23:23:27 +03:00
de067652f3 fix path 2025-07-31 23:20:21 +03:00
41154bbe4e add missing modules 2025-07-31 23:18:35 +03:00
7d28799fb9 update script 2025-07-31 23:16:18 +03:00
e383a1a3bc hotfix 2025-07-31 21:48:13 +03:00
20ee7a9ede add wanikani 2025-07-31 21:44:33 +03:00
8ac80a6d24 update script 2025-07-31 21:38:08 +03:00
6d22445254 update nix script 2025-07-31 21:37:53 +03:00
7a987bdc39 add new page 2025-07-31 21:37:19 +03:00
9e22e1a027 disable telemetry 2025-07-31 21:08:21 +03:00
8420594456 how is speed now? 2025-07-31 21:02:11 +03:00
7388c1b0dc print files 2025-07-31 20:54:23 +03:00
bfaad76553 remove debug line 2025-07-31 20:21:11 +03:00
da7ce676f0 add missing deps 2025-07-31 18:47:00 +03:00
b72b02b5c1 make the directory a state directory 2025-07-31 18:41:15 +03:00
a1b010369b add wanted by 2025-07-31 18:36:02 +03:00
bd3185260e allow port 2025-07-31 18:28:05 +03:00
63129b076f set port 2025-07-31 18:27:45 +03:00
7603dfccb4 add debug layer 2025-07-31 18:22:52 +03:00
01cd5f0978 will this work 2025-07-31 18:05:29 +03:00
8881c46831 will this work 2025-07-31 17:24:31 +03:00
48279ca657 init the service 2025-07-31 17:22:11 +03:00
d6fd5c5e13 i am sick of this actually 2025-07-31 16:43:02 +03:00
3b85743ace shellcheck suggestions 2025-07-31 16:11:51 +03:00
a3dddf25e5 cap the reviews
This reverts commit 0a7c41a3e4.
2025-07-31 16:00:27 +03:00
0a7c41a3e4 Revert "update flake.lock"
This reverts commit 15a40b93fd.
2025-07-31 16:00:04 +03:00
15a40b93fd update flake.lock 2025-07-31 15:59:30 +03:00
10a6483cc5 error out here 2025-07-31 15:56:56 +03:00
d865c96158 hotfix 2025-07-30 18:14:08 +03:00
e19cc41087 will this work 2025-07-30 18:11:22 +03:00
8ef65267ac specify hosts 2025-07-30 18:11:11 +03:00
e5a41e1992 unset path 2025-07-30 18:04:01 +03:00
f9d72d6c1a enable nextcloud and disable caddy 2025-07-30 17:05:19 +03:00
8f70e53c61 enable paperless 2025-07-30 17:04:54 +03:00
4566fbb887 add syncthing 2025-07-30 00:46:11 +03:00
1b4810e72a gives error :( 2025-07-30 00:21:57 +03:00
cc3e6a941a enabl nextcloud for ymir 2025-07-30 00:17:05 +03:00
11a6aaa028 update flake.lock 2025-07-30 00:13:41 +03:00
3e39a2c1f9 add custom cute ass footer 2025-07-29 02:36:11 +03:00
c8384ecee4 add more links 2025-07-29 02:34:03 +03:00
11998e1765 add search 2025-07-29 02:31:29 +03:00
dfac42ff0d add new glance bookmarks 2025-07-29 02:25:01 +03:00
dbb8efeec2 formatting 2025-07-29 00:51:32 +03:00
29c782efb2 update flake.lock 2025-07-29 00:35:52 +03:00
a48910b046 fix port in glance 2025-07-28 22:31:46 +03:00
7e18c35912 update flake.lock 2025-07-28 22:30:29 +03:00
2b617ae4a4 add attix nix cache to glance 2025-07-28 22:27:49 +03:00
a29ad67bd5 enable cloudflared 2025-07-28 22:22:49 +03:00
e2048ff4f2 add cloudflare tunnel for attix 2025-07-28 22:20:09 +03:00
89e82e910e move the glance tunnel 2025-07-28 22:15:35 +03:00
0ce31f137b move glance away 2025-07-28 22:14:53 +03:00
0721bb4166 move forgejo tunnel config 2025-07-28 22:12:58 +03:00
87200aa518 fix 2025-07-28 18:57:52 +03:00
52507e1786 will this work 2025-07-28 18:56:16 +03:00
c7f63271fa add attic 2025-07-28 18:06:52 +03:00
26bc49f469 open port 2025-07-28 18:00:23 +03:00
27e0f06ac4 add attic environment 2025-07-28 17:52:25 +03:00
bc879dafff add attic 2025-07-28 17:47:24 +03:00
1fc43f9526 add forgejo 2025-07-28 17:23:00 +03:00
6fba29969c add hydra 2025-07-28 17:18:48 +03:00
1f00455017 add wallfacer 2025-07-28 17:14:20 +03:00
42ed3bbee1 am i stupid 2025-07-28 16:53:55 +03:00
ad336e0f26 forgot the semicolon 2025-07-28 16:42:48 +03:00
e64d78eb26 update services 2025-07-28 16:41:59 +03:00
6a78b183a7 now it seems sane 2025-07-27 21:25:30 +03:00
0024bd9c91 create token 2025-07-27 21:19:09 +03:00
b475086cb7 add tunnel 2025-07-27 21:13:54 +03:00
fc6d1e38ae update links 2025-07-27 21:04:33 +03:00
47e3d7a07c update 2025-07-27 20:57:09 +03:00
c5e1a8d83c add glance 2025-07-27 20:26:48 +03:00
f47f8cdb16 fucking halucination 2025-07-27 19:58:17 +03:00
ac6f9657f8 what if there was no tls 2025-07-27 19:15:42 +03:00
b34deeabfb hmm 2025-07-27 18:20:45 +03:00
cebc4cecec fix command 2025-07-27 17:58:47 +03:00
c81adb5f86 update hash 2025-07-27 17:38:48 +03:00
87bf4ff298 use set version 2025-07-27 17:37:06 +03:00
4d63dc3439 this is the stupitest shit ever 2025-07-27 17:29:28 +03:00
8cd61e7bcb add caddy to walfacer 2025-07-27 17:19:25 +03:00
a349b7a389 fix hydra url 2025-07-27 17:16:20 +03:00
f3534b5516 fix url 2025-07-27 17:11:14 +03:00
1432200cc6 use correct port 2025-07-27 16:42:39 +03:00
47de86956e disable paperless for now 2025-07-27 16:39:40 +03:00
73f111f11c move acme stuff and remove sudo clause 2025-07-27 16:38:26 +03:00
e9483582df testjust hydra 2025-07-27 16:34:23 +03:00
6762091282 nextcloud shenanigans 2025-07-27 16:25:47 +03:00
9f5256b2ad accept acme 2025-07-27 16:01:40 +03:00
db6910de7d update flake.lock 2025-07-27 16:01:34 +03:00
6b9a322f62 hydra is added to wallfacer 2025-07-27 15:49:30 +03:00
71fe24c189 no hydra in ymir 2025-07-27 15:49:15 +03:00
85bfa6bf88 no hosts defined in modules 2025-07-27 15:48:56 +03:00
9464f20626 update email 2025-07-27 15:48:40 +03:00
e60af4626e add hydra module 2025-07-27 15:48:31 +03:00
f8b4880b0c increase sudo grace period 2025-07-27 03:16:53 +03:00
967b5f45e3 migrate hydra to ymir 2025-07-27 03:12:40 +03:00
1c6384e576 convert it to string 2025-07-27 03:01:00 +03:00
03525546d5 fix hydra port 2025-07-27 02:59:35 +03:00
fc5b4d614e add paperless to the pochita 2025-07-27 02:51:25 +03:00
0b551af8ef add hydra to wallfacer 2025-07-27 02:51:16 +03:00
feea5f45b8 with system override 2025-07-26 23:49:02 +03:00
9906399f0e ts is fucking hard 2025-07-26 23:19:58 +03:00
ac9e25b2d2 shorter 2025-07-26 20:01:08 +03:00
e62c09fe24 add new apple system 2025-07-26 20:00:55 +03:00
43faec87e8 fix warnings 2025-07-26 20:00:43 +03:00
9e7a252e8a write it programmatically 2025-07-26 19:48:03 +03:00
2d7a917bcb update flake.lock 2025-07-26 16:38:27 +03:00
054d346c97 update flake.lock 2025-07-26 16:37:33 +03:00
efa2aa8751 formatting 2025-07-26 16:24:09 +03:00
bce761ca09
another atomic signed commit attempt 2025-07-26 16:12:18 +03:00
5ab1a86bd2 update email 2025-07-26 16:08:20 +03:00
208ea40c93 typo 2025-07-26 15:56:33 +03:00
d35dbcd645 test commit 2025-07-26 15:55:28 +03:00
6930d8bb59 add signing 2025-07-26 15:49:42 +03:00
5dee47dc23 try this why this shit doesnt work 2025-07-26 12:30:53 +03:00
00999ad6cd am i stupid 2025-07-26 12:24:43 +03:00
e94952fb79 cursor? 2025-07-26 12:22:40 +03:00
21c2dd24c5 update gpg home 2025-07-26 11:47:07 +03:00
cf2a78de39 add gpg 2025-07-26 01:39:08 +03:00
1901802cb3 doesnt fucking work 2025-07-26 01:32:40 +03:00
87ecf173ac no pcscd 2025-07-26 01:15:09 +03:00
463f37ee73 gnupg sucks asss 2025-07-26 01:08:05 +03:00
3959e0a19d fix number 80 2025-07-26 01:01:57 +03:00
1f3179e6c1 fix 2025-07-26 01:01:07 +03:00
144ac7d721 Revert "add pinentry for gpg"
This reverts commit c6d3ff2c1a.
2025-07-26 01:00:07 +03:00
63cdf71b31 add gnupg 2025-07-26 00:59:53 +03:00
771f583e8e sign using openpgp 2025-07-26 00:42:12 +03:00
c6d3ff2c1a add pinentry for gpg 2025-07-26 00:41:50 +03:00
e07ebe14ad add gpg 2025-07-26 00:18:15 +03:00
48c4f52343 update flake.lock 2025-07-24 12:39:24 +03:00
95f489b005 update flake.lock 2025-07-20 22:22:34 +03:00
78ecf9c3e7 undo nixpkgs 2025-07-17 21:15:12 +03:00
e6cf00bdb0 add this to readme to fix it later 2025-07-17 18:42:12 +03:00
d0138ece72 update flake.lock 2025-07-17 18:40:35 +03:00
c678959f8f better this way 2025-07-12 22:37:00 +03:00
59b5a9dc85 fix 2025-07-12 21:47:52 +03:00
0d82200766 i hope 2025-07-12 21:47:37 +03:00
415715a4f9 formatting 2025-07-12 21:36:18 +03:00
7ce780986b add lib 2025-07-12 21:35:19 +03:00
ecee9286b1 add formatter 2025-07-12 12:47:26 +03:00
ca3c15e172 fix 2025-07-12 12:46:55 +03:00
3b73b1d7ca end of file 2025-07-12 10:42:51 +03:00
0fc50992c8 mention 2025-07-12 10:25:04 +03:00
53cc916be5 add system-logger 2025-07-12 10:19:04 +03:00
6d09b2d6f4 update flake.lock 2025-07-11 01:09:06 +03:00
13efa96418 undo 2025-07-11 01:08:30 +03:00
a8db53cc1d update flake.lock 2025-07-09 16:29:05 +03:00
5e74d654e9 update flake.lock 2025-07-09 03:00:18 +03:00
90c0673b32 i hate this goddamn 2025-07-05 22:31:47 +03:00
ad9bf61d9d allow cursor 2025-07-05 18:10:21 +03:00
1318b11f47 add these 2025-07-05 18:09:19 +03:00
7e1667f5a8 update flake.lock 2025-07-04 20:22:27 +03:00
14b478eac0 add devshells to the nix registry 2025-07-04 20:22:11 +03:00
da284218b6 workaround #1 2025-07-02 19:16:34 +03:00
d9fcce1a89 update flake.lock 2025-07-02 19:05:11 +03:00
d20010f3b7 add repl 2025-07-02 13:47:55 +03:00
7e327c63e2 i suspect 2025-07-02 04:33:42 +03:00
a505f3603a i am sick of thir 2025-07-02 04:20:42 +03:00
0bfec6d0a7 no droid 2025-07-02 04:13:13 +03:00
fcbcb56ac2 i am really just shooting at the dark here 2025-07-02 04:07:03 +03:00
a8e11a3d93 Revert "how about i dont mess with thir"
This reverts commit cf6f0b7fc2.
2025-07-02 04:03:32 +03:00
cf6f0b7fc2 how about i dont mess with thir 2025-07-02 03:47:58 +03:00
26c9f0f7e8 i will kill myself over this 2025-07-02 03:40:49 +03:00
460c5e4b33 idk why this shit is not working 2025-07-02 03:33:56 +03:00
82e3113f11 problem is the monospace 2025-07-02 03:29:34 +03:00
c3ac7b1bb3 hotfix 2025-07-02 03:14:31 +03:00
c3aaffbad3 add new fonts and set some settings 2025-07-02 03:13:47 +03:00
1ad875773b add missing font 2025-07-02 03:07:55 +03:00
035f6d79ac Revert "i hate fonts"
This reverts commit dd967a4f04.
2025-07-02 03:07:29 +03:00
d24233b716 Revert "i dont even know at this point"
This reverts commit b83fee22ae.
2025-07-02 03:07:27 +03:00
c1b7915152 Revert "fonts are killing me"
This reverts commit adce20d648.
2025-07-02 03:07:23 +03:00
adce20d648 fonts are killing me 2025-07-02 03:01:35 +03:00
b83fee22ae i dont even know at this point 2025-07-02 02:47:36 +03:00
dd967a4f04 i hate fonts 2025-07-02 02:42:07 +03:00
ee15c989a6 update flake.lock 2025-07-02 01:37:38 +03:00
a65e58e162 lets see if this solves firefox emoji issue 2025-07-01 22:24:54 +03:00
ca91a98db4 add getty configuration 2025-06-30 18:46:51 +03:00
881c0009b4 update flake.lock 2025-06-30 00:17:56 +03:00
ab3c2c7690 update aliases 2025-06-26 22:21:30 +03:00
4dd8224991 update flake.lock 2025-06-26 22:17:58 +03:00
57412647d6 update flake.lock 2025-06-25 15:05:00 +03:00
706e9d2665 update flake.lock 2025-06-25 09:36:14 +03:00
6be2123a4f update flake.lock 2025-06-23 16:06:14 +03:00
0d5cca9838 hide tabs 2025-06-23 15:56:45 +03:00
a083a92fe5 try fullscreen 2025-06-23 00:30:45 +03:00
19fe1e7c61 remove window decorations 2025-06-23 00:26:02 +03:00
aa62fb72ca dont use other configuration 2025-06-23 00:20:08 +03:00
6c14140afa dont even 2025-06-22 12:13:11 +03:00
5742dc12da what the hell is going on with me this morning
I cant believe i make these stupid blunders all the time. I am
embarressed that the git history is public and the ai overlords will
think that i am a subpar programmer and will disintigrate me to save
space for the new generation of highly advanced half human half robot
workers.
2025-06-22 12:08:19 +03:00
fbca0b44a6 add wezterm 2025-06-22 12:01:13 +03:00
6546441400 try new config 2025-06-22 11:58:12 +03:00
3c8fc5ff76 formatting 2025-06-22 11:55:20 +03:00
5cf729d7c2 dont deal with the nixvim dependencies from here 2025-06-22 11:40:22 +03:00
8f9a4b0020 update flake.lock 2025-06-22 11:37:20 +03:00
db1f97f6ef add this 2025-06-21 21:26:19 +03:00
8ba4e982a6 add extra config 2025-06-21 17:05:34 +03:00
0e753a5d5c hotfix 2025-06-21 17:01:33 +03:00
4adcff16f8 add wezterm 2025-06-21 17:00:43 +03:00
0af11823ae Revert "update flake.lock"
This reverts commit 2851a8e920.
2025-06-21 16:21:54 +03:00
2851a8e920 update flake.lock 2025-06-21 13:57:00 +03:00
c41d93c374 try this to show terminal images 2025-06-19 14:22:06 +03:00
b2923b06c5 update flake.lock 2025-06-19 12:39:34 +03:00
9fd05e81bb fuck redhat (not working in aarch64) 2025-06-16 19:42:41 +03:00
ddcbce28e9 i remember this 2025-06-16 18:39:07 +03:00
d849375f7e lets do this 2025-06-16 18:34:20 +03:00
056428487b update flake.lock 2025-06-16 18:32:47 +03:00
83c3165409 formatting 2025-06-15 23:53:52 +03:00
83f405f876 update flake.lock 2025-06-15 19:13:15 +03:00
02e6151421 dont like it for now but great idea 2025-06-15 19:12:37 +03:00
8af6f78727 awesome tool tbh 2025-06-15 18:56:35 +03:00
47afe1db23 update flake.lock 2025-06-15 13:28:04 +03:00
4a5ed43fa7 add minecraft port 2025-06-14 12:27:41 +03:00
601139d522 update flake.lock 2025-06-14 02:11:05 +03:00
505ca7ee45 hotfix? 2025-06-13 21:55:01 +03:00
40574b2334 update flake.lock 2025-06-13 21:54:31 +03:00
5e4c7b27af add new disks 2025-06-13 21:51:57 +03:00
c7eaa0e778 enable ext 2025-06-13 19:12:49 +03:00
e34bb27341 update hardware config of wallfacer 2025-06-13 18:16:30 +03:00
65467a4b11 update flake.lock 2025-06-13 18:01:35 +03:00
947c666c8b update flake.lock 2025-06-11 11:12:33 +03:00
001975af3d disable remote-ssh 2025-06-10 23:11:43 +03:00
71230f576e fuck pylance 2025-06-10 23:10:02 +03:00
06ef1a6371 allow spotify 2025-06-10 23:08:46 +03:00
4b119fb547 allow copilot 2025-06-10 23:08:26 +03:00
913c53574d vscode with proper extensions 2025-06-10 23:02:25 +03:00
508ea51a8f add group 2025-06-10 23:01:19 +03:00
400f95bf77 add cookie blocker 2025-06-10 22:13:19 +03:00
d882cbeb8f add vimium 2025-06-10 22:13:01 +03:00
371921fabb smaller font 2025-06-10 21:58:04 +03:00
029b86dbd3 update flake.lock 2025-06-10 21:56:01 +03:00
e6124151a6 formatting 2025-06-10 13:27:27 +03:00
ab5e25e869 update flake.lock 2025-06-10 11:21:01 +03:00
dbe4e2a0a2 add onefetch alias 2025-06-08 01:01:39 +03:00
c6fffae20e add mailmap to make the git tools happier 2025-06-08 00:56:28 +03:00
390e36c834 this looks a bit smart ngl 2025-06-07 21:08:28 +03:00
9393d21041 Revert "test if allowing udp allows the connection"
This reverts commit 96af36018a.
2025-06-07 21:08:05 +03:00
96af36018a test if allowing udp allows the connection 2025-06-07 21:02:52 +03:00
242800a5ae update the user to see if i can use my own files with this 2025-06-07 20:31:23 +03:00
e221828bba enable the vscode port 2025-06-07 20:29:31 +03:00
d9f97813ce use other vscode server 2025-06-07 19:51:52 +03:00
85f603b600 update flake.lock 2025-06-07 18:35:39 +03:00
10dc94d520 formatting 2025-06-07 16:19:00 +03:00
214bdeda84 update flake.lock 2025-06-05 18:24:35 +03:00
9a1e134a7f update flake.lock 2025-06-04 14:31:37 +03:00
9fefaeacc1 add some graphical tools 2025-06-04 14:30:14 +03:00
e0793b3fc4 update flake.lock 2025-06-02 23:53:01 +03:00
bb4781f23d update flake.lock 2025-06-02 11:32:42 +03:00
07902bba6e formatting 2025-06-01 20:51:29 +03:00
e657ee33bb add mpv 2025-06-01 12:33:09 +03:00
e7b1cef950 update flake.lock 2025-06-01 12:26:50 +03:00
e4855393b7 update flake.lock 2025-05-30 18:03:33 +03:00
1ddc62322b formatting 2025-05-29 12:35:39 +03:00
8cf567fdc4 this is a stupid way to do this shit 2025-05-29 10:54:05 +03:00
68b6fec533 update flake.lock 2025-05-29 09:53:35 +03:00
d7cf13e8c0 disable youtube 2025-05-28 01:25:10 +03:00
2590959e21 Revert "update flake.lock"
This reverts commit ebd85f69f1.
2025-05-28 01:23:49 +03:00
ebd85f69f1 update flake.lock 2025-05-27 12:41:47 +03:00
b3d8b0841c hotfix 2025-05-25 23:50:20 +03:00
30d8f6d107 add ghostty to flake 2025-05-25 23:49:37 +03:00
13148a680e feat: add fd and du-dust to system packages 2025-05-25 13:26:35 +03:00
a7c152448a fix: correct alias for listing files from 'exa' to 'eza' 2025-05-25 13:26:26 +03:00
f9b4b013f6 update flake.lock 2025-05-25 02:29:35 +03:00
90cf0e7256 update flake.lock 2025-05-23 04:25:58 +03:00
fc838446d9 add open-webui to the allowed list 2025-05-21 16:11:05 +03:00
87ae5b1bef update flake.lock 2025-05-21 16:09:08 +03:00
5950b6979a update flake.lock 2025-05-21 00:00:43 +03:00
7907385128 update flake.lock 2025-05-19 17:25:43 +03:00
e33a90b3ff update flake.lock 2025-05-19 16:52:05 +03:00
b91f9db4d2 update flake.lock 2025-05-18 15:10:26 +03:00
98d2b5732e formatting 2025-05-17 00:38:33 +03:00
1b3ccd811d disable ymir 2025-05-17 00:17:33 +03:00
05e0332aa4 update flake.lock 2025-05-17 00:17:03 +03:00
25e5942843 ultimate bash scripting 2025-05-17 00:16:58 +03:00
bcdd2df1a9 try this for size 2025-05-16 23:47:12 +03:00
071c987625 add missing dep 2025-05-16 21:23:43 +03:00
570b41e50b try this shit 2025-05-16 21:16:29 +03:00
138bc8ef6c update jq command 5th time 2025-05-16 21:12:42 +03:00
ea89dd98f9 jq leave me alone 2025-05-16 20:33:40 +03:00
d938242a7d super weird bug 2025-05-16 19:50:57 +03:00
e7fb48d0a5 UUOC my ass 2025-05-16 19:12:47 +03:00
05c8db2703 formatting remove unused 2025-05-16 19:08:23 +03:00
c14ae6cad9 formatting 2 2025-05-16 19:07:37 +03:00
cf6295b090 formatting 2025-05-16 19:06:24 +03:00
ddd57bfbd9 enable this in ymir for debugging 2025-05-16 19:04:48 +03:00
834330aebc update flake.lock 2025-05-16 18:56:31 +03:00
0cd6a3400c try this 2025-05-16 18:56:06 +03:00
54f6e83fb2 enable service 2025-05-16 18:07:58 +03:00
9c96c13842 add service 2025-05-16 18:07:53 +03:00
8a8b43d6a4 update flake.lock 2025-05-16 05:34:13 +03:00
c9c057bd68 disable more of this shit 2025-05-16 05:34:02 +03:00
715beb859d formatting 2025-05-15 17:01:30 +03:00
e09f8b3236 update flake.lock 2025-05-15 14:10:24 +03:00
5946aa1696 update flake.lock 2025-05-14 23:12:00 +03:00
9c2ca21c84 update flake 2025-05-14 13:40:37 +03:00
e0720d60ca add waydroid to ymir 2025-05-13 23:05:18 +03:00
28f012375c update flake.lock 2025-05-13 22:45:55 +03:00
232f064a92 update flake.lock 2025-05-13 22:45:17 +03:00
fa373cffca update flake.lock 2025-05-12 21:51:49 +03:00
1b5e09291c idk but yes 2025-05-12 21:51:17 +03:00
64f0c23b25 try this 2025-05-11 23:44:46 +03:00
c8dc18ad3a add tailscale domain 2025-05-11 23:25:49 +03:00
0798df5c69 set longer passwd 😭🙏 2025-05-11 22:57:02 +03:00
6a75514c7b dont use ts in ymir 2025-05-11 22:56:43 +03:00
82718ae87f disable password 2025-05-11 22:52:03 +03:00
b1fed5be32 add new option 2025-05-11 22:43:32 +03:00
5568fc7853 add nextcloud for now 2025-05-11 22:41:53 +03:00
665740d644 add nextcloud to wallfacer 2025-05-11 22:38:37 +03:00
2b397fa413 add nextcloud 2025-05-11 22:37:36 +03:00
e73b94eb2c add nextcloud 2025-05-11 22:36:32 +03:00
6e43b1a0a0 update flake.lock 2025-05-11 03:47:24 +03:00
d2ce325eca dont restart this service for another 3600 seconds 2025-05-10 19:59:48 +03:00
fe14fa1c22 move this service to the pochita 2025-05-10 19:58:16 +03:00
8c4a79e763 update flake.lock 2025-05-10 19:53:07 +03:00
0139351199 update flake.lock 2025-05-09 20:00:22 +03:00
87255c5793 update flake.lock 2025-05-09 05:14:30 +03:00
5406163655 SYBAU direnv 2025-05-09 01:25:40 +03:00
6c04528e7f use bluetooth in all graphic environments 2025-05-09 01:16:50 +03:00
7ff630ac81 update flake.lock 2025-05-09 01:14:49 +03:00
37887343c6 update flake.lock 2025-05-08 12:22:13 +03:00
a8741f7e72 add an if clause 2025-05-06 21:24:53 +03:00
050ce0c6b7 default was false 2025-05-06 21:23:33 +03:00
644286a9b1 formatting 2025-05-06 21:21:26 +03:00
2badf04a0f formatting 2025-05-06 21:21:11 +03:00
094e882793 add just recipe for the stupid thing 2025-05-06 21:20:08 +03:00
f455ddf3b2 dont block youtube for a while 2025-05-06 21:13:57 +03:00
85265f4137 update flake.lock 2025-05-06 21:13:47 +03:00
8c79526253 just give reviews 2025-05-06 10:00:56 +03:00
5717b3a38f update the time 2025-05-06 03:09:41 +03:00
3455830c0e lets see this in action 2025-05-06 02:57:41 +03:00
e17bccf748 i suspect this 2025-05-06 02:46:31 +03:00
2d748f972f remove unused var 2025-05-06 02:44:35 +03:00
c68e9523ea update the new command 2025-05-06 02:43:19 +03:00
459e06864f use the executable 2025-05-06 02:34:47 +03:00
f04a32bc16 lets seeeeeeeeee 2025-05-06 02:32:12 +03:00
c3a415ad31 lets see 2025-05-06 02:29:38 +03:00
a16512f599 shell shocked me to my core 2025-05-06 02:26:31 +03:00
22e3ee3dd7 nice catch man 2025-05-06 02:24:32 +03:00
d9cc8dd227 use writeshellapplication 2025-05-06 02:23:51 +03:00
540dbd25d5 hotfix 2025-05-06 02:13:33 +03:00
651768dce1 enable this in ymir 2025-05-06 02:11:40 +03:00
cd15d508c5 add wanikani custom systemd service 2025-05-06 02:10:17 +03:00
0bc9d744de update flake.lock 2025-05-06 01:30:24 +03:00
f79a7f2fc1 update flake.lock 2025-05-05 12:46:04 +03:00
cf4258003c SYBAU 2025-05-04 14:11:31 +03:00
76400f87a0 dont login automatically 2025-05-03 18:42:40 +03:00
f27b26ec1c add wallfacer to ssh 2025-05-02 00:14:31 +03:00
d81d346a13 typo 2025-05-02 00:10:42 +03:00
84dabdc550 add exa 2025-05-02 00:09:39 +03:00
1cbf3ddf74 add pfetch 2025-05-02 00:03:32 +03:00
9752702176 dont forget to add boot options 2025-05-01 23:46:35 +03:00
8e7f771ee9 rekey for our beloved new server 2025-05-01 23:43:12 +03:00
8b38230a5d welcome wallfacer Luo Ji 2025-05-01 23:40:09 +03:00
d1231e41ad update flake.lock 2025-05-01 20:20:35 +03:00
099bc07dbd update flake.lock 2025-04-30 05:07:07 +03:00
a45d24deb7 seperate vscode-server out 2025-04-30 04:59:14 +03:00
57905fe0c6 update flake.lock 2025-04-29 17:50:56 +03:00
0eb3894419 bind the options to the config 2025-04-29 02:25:55 +03:00
1cbae3f1fb use options in home managers 2025-04-29 02:18:37 +03:00
fb41722020 i wonder 2025-04-28 19:35:13 +03:00
17d2b1a1eb wil this fix home manager 2025-04-28 19:31:03 +03:00
14e4b32e23 update flake.lock 2025-04-28 19:17:48 +03:00
345d7a5c0a update flake.lock 2025-04-27 12:11:23 +03:00
3a6811cff0 add pointer cursor thingy 2025-04-25 03:59:26 +03:00
5d680a90c8 add gtk config 2025-04-25 03:47:38 +03:00
6feb65635d use nvim 2025-04-25 02:27:40 +03:00
b62aafcfad update flake.lock 2025-04-25 00:03:09 +03:00
68fe79641b dont forget to import home manager 2025-04-24 22:06:06 +03:00
cad918d014 update flake.lock 2025-04-24 22:03:15 +03:00
098675c2a3 formatting 2025-04-24 22:03:09 +03:00
88f7cd6ec0 centralize home manager 2025-04-24 21:59:07 +03:00
ea887fb764 collect vscode imports 2025-04-24 21:51:17 +03:00
3154dcc1e7 update flake.lock 2025-04-22 20:43:38 +03:00
8064a9af05 update flake.lock 2025-04-22 15:05:47 +03:00
81d4889253 hotfix 2025-04-21 22:47:29 +03:00
66cfbe9a21 formatting 2025-04-21 22:43:17 +03:00
3fd2ab8d0a add osbm.dev registry 2025-04-21 22:42:37 +03:00
3977191203 add my nixpkgs fork 2025-04-21 22:33:42 +03:00
2936e07d29 update flake.lock 2025-04-21 21:55:19 +03:00
b5e4da55d7 hotfix 2025-04-21 14:54:00 +03:00
9db6ed05b0 lets not use nixPath 2025-04-21 14:11:41 +03:00
b39608ca80 update flake.lock 2025-04-21 14:04:42 +03:00
7ed7eaa602 use the nix registries 2025-04-21 14:04:17 +03:00
97df4cd65c update flake.lock 2025-04-21 13:07:32 +03:00
36fea9600c add screenkey 2025-04-21 13:07:18 +03:00
e4e7fbf7a6 update flake.lock 2025-04-20 16:01:46 +03:00
603e84d7ed update flake.lock 2025-04-20 15:30:15 +03:00
9bfcee3f87 update flake.lock 2025-04-20 01:15:22 +03:00
5fd3fba8d3 gitu add discord 2025-04-19 20:43:21 +03:00
95d103767a update flake.lock 2025-04-19 12:38:34 +03:00
55f08c4168 update flake.lock 2025-04-18 23:38:43 +03:00
345e6e597c update flake.lock 2025-04-16 18:22:22 +03:00
f571699b93 disable yt 2025-04-15 22:48:51 +03:00
a2948ac477 update flake.lock 2025-04-15 18:36:54 +03:00
dee4f36091 i forgor 💀 2025-04-15 00:39:23 +03:00
2d5222587d i dont want to compile my own index 2025-04-15 00:38:32 +03:00
e8653bf178 update flake.lock 2025-04-15 00:31:29 +03:00
3d84220146 hotfix 2025-04-15 00:14:03 +03:00
3adaf4048d enable vaultwarden in pochita 2025-04-14 23:57:04 +03:00
237f1fa1b3 update flake.lock 2025-04-14 18:15:47 +03:00
70b77c8fc9 weird syntax 2025-04-14 18:13:59 +03:00
3c7832a1ac try this 2025-04-14 18:08:57 +03:00
6d3f95e6a8 set app name 2025-04-14 17:56:26 +03:00
b1f2915ba8 add lazygit shortcut 2025-04-14 16:26:48 +03:00
f892d59217 specify more commands 2025-04-14 16:22:36 +03:00
1f7c0fe779 maybe this will work 2025-04-14 14:24:00 +03:00
4b73049ff0 update flake.lock 2025-04-14 13:38:19 +03:00
0260148512 enable dump and lfs in forgejo 2025-04-14 13:37:33 +03:00
7a5a41be18 disable registration 2025-04-13 19:12:18 +03:00
94bbf7718c revert 2025-04-13 18:39:30 +03:00
305f432722 e 2025-04-13 18:37:57 +03:00
b6c03cb2ff update flake.lock 2025-04-13 18:29:38 +03:00
da14c704ea i wanna die 2025-04-13 18:09:00 +03:00
26fc6ce4b4 move file 2025-04-13 17:55:30 +03:00
43012935d0 add option 2025-04-13 17:48:02 +03:00
32ad681995 add creds 2025-04-13 17:39:57 +03:00
3a2b3126bf try this 2025-04-13 17:31:04 +03:00
0c67c49a6a try 2025-04-13 16:57:33 +03:00
1de45dbbd9 add cloudflared 2025-04-13 16:53:58 +03:00
9b30ae2216 add dig 2025-04-13 16:24:42 +03:00
4f21ff9456 cant believe this 2025-04-13 16:05:46 +03:00
d09cdbb40c typo 2025-04-13 15:53:08 +03:00
ea8c4447bb i feel like i have tried this before 2025-04-13 15:46:33 +03:00
f19a6ac795 typo 2025-04-13 15:37:46 +03:00
e59dbbc74f i just wanna die 2025-04-13 15:37:12 +03:00
c782101e96 i wanna sleep 2025-04-13 07:36:22 +03:00
6d1d1389d8 i wanna cry i hate dns 2025-04-13 07:32:20 +03:00
d1332d562f if this was the problem i will kill myself 2025-04-13 07:27:10 +03:00
a04bab34be why this happens 2025-04-13 07:23:03 +03:00
c45d3bc321 try this 2025-04-13 07:19:16 +03:00
e9bf3e10ee update the url 2025-04-13 06:34:00 +03:00
517f9186d9 just try this also 2025-04-13 06:25:14 +03:00
a47f80f875 use cloudflare token 2025-04-13 06:11:08 +03:00
f02baedfb3 disable dyndns for now 2025-04-13 05:55:22 +03:00
9fe7530c16 move the services to pochita 2025-04-13 04:04:00 +03:00
c88d3c2d66 make this option default 2025-04-12 22:00:04 +03:00
a9ed8406da add sensors 2025-04-12 18:41:09 +03:00
3fd154d993 lets try this permissions 2025-04-11 21:30:21 +03:00
e6a70e657e disable ddns in pochita 2025-04-11 21:21:38 +03:00
1d2696fa41 rekey for the new pochita key 2025-04-11 21:06:12 +03:00
4e9493f5c2 update flake.lock 2025-04-11 20:13:54 +03:00
2bd898efac update flake.lock 2025-04-10 22:09:26 +03:00
8fcdeb4082 daily gc 2025-04-09 01:32:47 +03:00
56389b4337 decrease this to 7 days 2025-04-08 23:22:29 +03:00
01a4d94cc4 update flake.lock 2025-04-08 23:17:56 +03:00
2e890bf611 update flake.lock 2025-04-08 22:08:09 +03:00
ff196ad39e update flake.lock 2025-04-08 16:04:05 +03:00
b5cbb971ba update flake.lock 2025-04-07 04:16:43 +03:00
f2818f3115 disable proxy 2025-04-06 14:16:08 +03:00
4661fa86b4 enable caddy for my machine 2025-04-06 14:08:09 +03:00
3aaf3d11e8 open up 8000 port 2025-04-06 13:49:04 +03:00
6ae1273a17 enable dyndns on ymir 2025-04-06 13:40:27 +03:00
2eda013300 update flake.lock 2025-04-06 13:40:20 +03:00
38f1e07a97 update flake.lock 2025-04-05 23:24:20 +03:00
6734d153c5 update flake.lock 2025-04-05 01:59:18 +03:00
20f6be5409 lets use this generalized case 2025-04-03 23:05:37 +03:00
2a819fa984 formatting 2025-04-03 22:55:14 +03:00
26b6e975e9 add inputs arg 2025-04-03 22:54:03 +03:00
568455f496 enable nvim everywhere 2025-04-03 22:50:25 +03:00
26880c8539 try overridePythonAttrs for some fucking reason 2025-04-03 22:27:25 +03:00
82cb10cecf i actually wrote some nix code i am so proud of myself i am going to cry just like natsuki subaru i cant believe the lenght of this commit message is getting too long i dont even know if this sentence makes grammatical sense anymore 2025-04-03 21:57:15 +03:00
d9bb81e2af lets override this shit 2025-04-03 21:37:08 +03:00
e46fadeb35 add eeprom software to pochita 2025-04-03 15:24:21 +03:00
049941aa26 update flake.lock 2025-04-03 13:28:17 +03:00
d32ec7c702 specify domains 2025-04-03 01:16:03 +03:00
13fcdbb413 set the token path 2025-04-03 00:44:33 +03:00
1be0bd4857 update flake.lock 2025-04-03 00:44:24 +03:00
319f2b6562 update flake.lock 2025-04-01 08:16:49 +03:00
3225b5e94d add new modules 2025-04-01 07:50:10 +03:00
4339490e5f update flake.lock 2025-03-30 22:19:06 +03:00
be13c81a08 update flake.lock 2025-03-30 00:39:34 +03:00
b2ec857881 update flake.lock 2025-03-29 19:16:21 +03:00
e9bbcb6c92 import agenix at the module 2025-03-29 19:10:17 +03:00
2df92f7a3d update flake.lock 2025-03-29 16:53:13 +03:00
705236a26f enable cloudflare dynamic dns on the pochita 2025-03-29 16:51:17 +03:00
b9289d9c31 add cloudflare service 2025-03-29 16:47:02 +03:00
528f6af517 ok it should see it now 2025-03-27 21:27:16 +03:00
f3783c600b typo fix 2025-03-27 21:14:48 +03:00
1f496ff252 update flake.lock 2025-03-27 21:14:00 +03:00
4ab8147bd7 move services 2025-03-27 21:11:10 +03:00
8788bafd01 stupid alejandro 2025-03-27 16:32:48 +03:00
7e60e9f24a fix the int to string issue 2025-03-27 16:32:27 +03:00
545e3d17a9 add vaultwarden option 2025-03-27 16:32:12 +03:00
8d54f3f5db lets see if this works 2025-03-27 15:50:44 +03:00
e7f9560f6d remove unnecessary argument 2025-03-27 15:50:30 +03:00
76e84be989 update flake.lock 2025-03-26 19:14:58 +03:00
c6d4281f7f update flake.lock 2025-03-25 21:25:49 +03:00
cc030ddcd0 no need for allowing discord 2025-03-25 13:20:36 +03:00
33c6f2492c add just recipe for listing generations 2025-03-25 10:39:47 +03:00
13ca93f2c1 update flake.lock 2025-03-25 10:35:26 +03:00
aff6c75e3b update flake.lock 2025-03-23 02:24:50 +03:00
9b0b4f8627 update flake.lock 2025-03-23 01:20:43 +03:00
075dc867f6 what even is this 2025-03-22 23:59:48 +03:00
58e560b527 update flake.lock 2025-03-22 23:30:31 +03:00
203f0bbc6f try this instead 2025-03-22 21:40:34 +03:00
7b05e7a156 update flake.lock 2025-03-22 02:01:08 +03:00
7c033b9f70 formatting 2025-03-22 01:17:52 +03:00
19a4952658 update flake.lock 2025-03-22 01:07:13 +03:00
9d3c03f849 add minegrub theme 2025-03-22 00:56:18 +03:00
4fd01b1d27 update flake.lock 2025-03-21 23:00:33 +03:00
61312a5928 update flake.lock 2025-03-21 22:49:52 +03:00
f002c5ee37 update flake.lock 2025-03-21 16:38:33 +03:00
b81ca86a8f update flake.lock 2025-03-21 13:35:36 +03:00
6a4fb6d647 update flake.lock 2025-03-21 12:27:56 +03:00
9a1a5bcd45 update flake.lock 2025-03-21 00:01:02 +03:00
09015d1c82 update flake.lock 2025-03-20 04:19:20 +03:00
04f6c53eb7 update flake.lock 2025-03-19 20:02:06 +03:00
2cca8ffeea formatting 2025-03-18 23:23:23 +03:00
97b1e705b2 add lfs support 2025-03-18 19:11:35 +03:00
056e1777fd update flake.lock 2025-03-18 18:30:41 +03:00
37546a037c use lib more 2025-03-18 18:29:21 +03:00
8c783ea14d update flake.lock 2025-03-18 02:23:59 +03:00
1ad9ffebd4 add 8889 port 2025-03-17 15:08:39 +03:00
a7e2a2fe3c set emoji font to fix alacritty 2025-03-17 00:30:05 +03:00
85294fd79d dont need node globally 2025-03-17 00:06:23 +03:00
535652fb84 update flake.lock 2025-03-16 21:29:00 +03:00
d677361fa1 update flake.lock 2025-03-16 21:21:41 +03:00
016ff419f1 update flake.lock 2025-03-16 16:48:07 +03:00
8d073338e6 update flake.lock 2025-03-16 03:41:43 +03:00
0efec3709a update caddy hash
This is a stupid way to update a package. It gives me an build error to
let me know of an update
2025-03-16 00:33:30 +03:00
5b0319154e bigger font on alacritty 2025-03-15 12:07:24 +03:00
32ec8827f5 enable youtube 2025-03-14 23:32:41 +03:00
b6428a680e update flake.lock 2025-03-14 19:05:26 +03:00
dd12ae5359 update flake.lock 2025-03-14 15:57:39 +03:00
6291d3bb2a finally fix the damn issue 2025-03-14 01:57:53 +03:00
c0c9537257 lets just sit on this for now 2025-03-14 01:54:29 +03:00
341f24f211 formatting 2025-03-13 20:29:00 +03:00
c6927a28e2 add starship settings 2025-03-13 20:21:44 +03:00
9f636334b1 use fish functions and add lazygit 2025-03-13 20:01:32 +03:00
dcbe2406c9 i hate the universe in its entirety 2025-03-13 19:47:45 +03:00
b38eb8c956 select font 2025-03-13 19:45:12 +03:00
b76b116bce weird decision 2025-03-13 19:11:52 +03:00
9bf2adcd61 mention the fish 2025-03-13 19:06:53 +03:00
006daba313 lets do this then 2025-03-13 19:04:24 +03:00
fb44140e47 remove unused parameters 2025-03-13 18:34:14 +03:00
da571e0717 add direnv to home manager 2025-03-13 18:33:46 +03:00
f7db183202 update flake.lock 2025-03-13 18:25:15 +03:00
14a116b18b much closer to the turth now 2025-03-13 18:02:01 +03:00
42cc57a3f3 i will fix this someday i promise 2025-03-13 17:48:31 +03:00
7a55c6a79f make this asshole module happy 2025-03-13 17:46:05 +03:00
c84ee3de66 add alacritty configuration 2025-03-13 17:39:27 +03:00
2b66d88177 add cascadia code font 2025-03-13 17:29:25 +03:00
ff61d2d4d4 update flake.lock 2025-03-12 22:21:01 +03:00
ec0f0faea2 add script manager and clearurls 2025-03-12 00:11:52 +03:00
655d06d849 update flake.lock 2025-03-11 22:05:24 +03:00
4c8bb2bf3f update flake.lock 2025-03-11 15:45:37 +03:00
334b45e8bb update flake.lock 2025-03-11 15:44:56 +03:00
osman - オスマン
89e8678fbe
Merge pull request #6 from osbm/dependabot/github_actions/cachix/install-nix-action-31
Bump cachix/install-nix-action from 30 to 31
2025-03-11 15:44:30 +03:00
dependabot[bot]
47eb45570d
Bump cachix/install-nix-action from 30 to 31
Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 30 to 31.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](https://github.com/cachix/install-nix-action/compare/v30...v31)

---
updated-dependencies:
- dependency-name: cachix/install-nix-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 06:19:43 +00:00
db7c65f044 update flake.lock 2025-03-11 03:20:33 +03:00
8a1133f042 update flake.lock 2025-03-11 03:10:24 +03:00
99a16daece update flake.lock 2025-03-10 20:57:09 +03:00
a7edf043b6 formatting 2025-03-10 20:02:33 +03:00
e7278c26bb update flake.lock 2025-03-10 19:41:56 +03:00
47916c423b move the secrets to its own folder 2025-03-10 00:40:57 +03:00
d7659df192 update flake.lock 2025-03-09 15:45:02 +03:00
fd75b4cf33 update flake.lock 2025-03-09 15:42:18 +03:00
6a21b9cc7a update flake.lock 2025-03-09 03:47:56 +03:00
bdbae6b0ce update flake.lock 2025-03-08 17:21:37 +03:00
5c4e5e3bec formatting 2025-03-08 05:06:20 +03:00
eb74407f88 disable youtube again stupid stupid osman 2025-03-08 05:04:51 +03:00
01476f4758 formatting 2025-03-08 05:02:44 +03:00
5870b4e675 add newline 2025-03-08 04:59:28 +03:00
ea1e65b5bd update flake.loc 2025-03-08 03:40:41 +03:00
27711b0f70 update flake.lock 2025-03-08 00:54:02 +03:00
994be0d3e4 disable remote builds for now 2025-03-08 00:53:44 +03:00
e9b5ffc626 add back nixd 2025-03-07 21:33:44 +03:00
9fdceff740 use nom for better outputs 2025-03-07 21:11:57 +03:00
5a813954a6 update justfile with new system names 2025-03-07 21:11:01 +03:00
446c8d7d87 update flake.lock 2025-03-07 20:51:33 +03:00
119f5b3acd add nix inspect 2025-03-07 17:14:01 +03:00
2e85649c20 update flake.lock 2025-03-07 03:53:07 +03:00
98bebc15a2 remove nixd 2025-03-07 03:52:46 +03:00
9b16b0c33e update flake.lock 2025-03-06 22:48:24 +03:00
c118d7290d remove cd command doesnt work 2025-03-05 13:39:15 +03:00
1e7166dbdf fuck discord 2025-03-05 00:01:06 +03:00
263d2747f3 add other services 2025-03-04 22:06:14 +03:00
644b7b90d3 formatting 2025-03-04 21:39:49 +03:00
7d219d06e1 make ollama into a module 2025-03-04 21:39:18 +03:00
60ba5895d3 unnecessary arg 2025-03-04 21:33:06 +03:00
779e2c4b17 disable acme 2025-03-04 18:27:53 +03:00
4efc1d8588 how about this 2025-03-04 18:26:22 +03:00
1cebde6e73 i cant stop 2025-03-04 18:23:58 +03:00
af88a25767 update flake.lock 2025-03-04 18:13:05 +03:00
8d649d74e6 just disable caddy for now 2025-03-04 02:36:31 +03:00
a5a2225dd7 reenable cloudflare 2025-03-04 02:14:50 +03:00
19316502db just use the correct token 2025-03-04 02:14:07 +03:00
7d7e2eec37 lets try this 2025-03-04 02:05:17 +03:00
c9015f6879 update secret 2025-03-04 02:04:40 +03:00
1acb6db231 without https 2025-03-04 01:48:17 +03:00
a0e373e761 lets do this then 2025-03-04 01:33:48 +03:00
0c6c38badb i am starting to get crazy 2025-03-04 00:13:03 +03:00
f5df00db10 update flake.lock 2025-03-04 00:09:16 +03:00
0f89b21a41 use CF SSL 2025-03-03 23:13:12 +03:00
5393f464b1 add nss to caddy conf 2025-03-03 22:17:20 +03:00
b2355dfb37 update flake.lock 2025-03-03 06:13:57 +03:00
94cb81e513 whut 2025-03-03 03:24:43 +03:00
63ba081e9c make forgejo and caddy into modules 2025-03-02 13:27:20 +03:00
16b73f5e15 add cloudflare secret 2025-03-02 13:11:19 +03:00
97f77a9089 formatting 2025-03-02 02:50:19 +03:00
5e555895df add virtual hosts 2025-03-02 01:01:08 +03:00
7e9c32fabe why the fuck 2025-03-02 00:38:11 +03:00
5157595bc4 fill out hash 2025-03-02 00:34:18 +03:00
afc2c2aaf8 add plugin 2025-03-02 00:32:15 +03:00
dff5cff2bc enable ports? 2025-03-02 00:14:20 +03:00
79904a3ded add reverse proxy for git server 2025-03-01 23:17:39 +03:00
b42f986b5e update flake.lock 2025-03-01 23:17:14 +03:00
95b7c92259 add adb module 2025-03-01 11:31:30 +03:00
2e58955a95 update flake.lock 2025-03-01 10:50:39 +03:00
6e1d75ae7e update flake.lock 2025-02-28 02:20:39 +03:00
8d48e17c35 lets try this 2025-02-27 22:19:15 +03:00
c677b18996 pochita add forgejo 2025-02-27 22:18:59 +03:00
5e18abfe4b hotfix 2025-02-27 19:35:45 +03:00
62ab5d54f1 formatting 2025-02-27 19:31:50 +03:00
d4ecc60cc6 formatting 2025-02-27 19:31:39 +03:00
7661479627 add harmonica sd 2025-02-27 19:30:34 +03:00
c0f591787a i staging all over 2025-02-27 19:30:15 +03:00
1cbeba0f18 harmonica-sd 2025-02-27 19:29:29 +03:00
c14da8e176 update flake.lock 2025-02-27 12:53:37 +03:00
b7957bca71 update flake.lock 2025-02-26 22:55:01 +03:00
e90a9873a4 add ani-cli 2025-02-26 03:10:37 +03:00
b5b2665e99 add harmonica ssh config 2025-02-26 02:52:33 +03:00
cbe75701cc add deploy-rs 2025-02-26 02:40:17 +03:00
9142742c6c add deploy-rs 2025-02-26 01:45:52 +03:00
c33b951304 cleanup on isle 6 2025-02-26 01:26:41 +03:00
c9ed15cb89 idk about the "false" command but here goes nothing 2025-02-26 00:54:04 +03:00
7f67da2421 networking with secrets is hard in nixos 2025-02-26 00:53:41 +03:00
e5357f7099 formatting 2025-02-25 19:34:07 +03:00
de825eb4dc all hail nixd 2025-02-25 19:18:31 +03:00
19d57b43d5 create hardware configuration 2025-02-25 19:02:09 +03:00
2dd9ef7ba1 fancy 2025-02-25 18:58:10 +03:00
ba1007a4cc remove unnecessary part 2025-02-25 18:28:43 +03:00
44d1c0165c use correct password 2025-02-25 18:26:53 +03:00
8e5def77fb flash recipe 2025-02-25 18:09:19 +03:00
a7f5f8ebd8 i am not sure about this one 2025-02-25 18:09:04 +03:00
8d465fc7c5 set hostname 2025-02-25 18:08:49 +03:00
8a7c6977bb enable modules 2025-02-25 18:08:31 +03:00
923d9d9e0a change host 2025-02-25 15:33:32 +03:00
0f3b572a1a openFirewall 2025-02-25 12:46:04 +03:00
181edd4d55 add openwebui 2025-02-25 12:40:58 +03:00
c102005ea3 update flake.lock 2025-02-25 12:40:47 +03:00
8acfba9da8 obdisian commands 2025-02-24 23:47:28 +03:00
3d05ac9a93 huggingface login confition 2025-02-24 21:49:25 +03:00
9c222af667 update flake.lock 2025-02-24 19:50:33 +03:00
863720f3f2 add terraria sync program 2025-02-24 03:30:47 +03:00
dd2ee113a5 you filthy reprobate 2025-02-24 02:12:33 +03:00
367d90910c sshd config authorized keys 2025-02-24 02:08:52 +03:00
abcc52e999 hotfix 2025-02-24 01:53:04 +03:00
b0c5cbba80 set atreus port 2025-02-24 01:52:06 +03:00
432b607d2c fish? 2025-02-23 23:52:41 +03:00
a9a7763549 unused 2025-02-23 23:48:22 +03:00
e4fc3cc8c3 disable channels 2025-02-23 21:36:26 +03:00
53bee43f1a dont add path 2025-02-23 21:32:07 +03:00
fa83387550 add nix path 2025-02-23 21:28:12 +03:00
d766317430 try ssh-ng back 2025-02-23 20:49:52 +03:00
4613f3658b try ssh instead of ssh-ng 2025-02-23 20:12:50 +03:00
80f245f973 formatting 2025-02-23 20:03:40 +03:00
b398d3c688 hotfix 2025-02-23 20:01:33 +03:00
6aec2e2372 seperate out remote builds 2025-02-23 20:00:48 +03:00
f6bfae5e1e make the lsp happy 2025-02-23 19:08:28 +03:00
97bba14c7f remove firefox 2025-02-23 19:08:18 +03:00
56befadb4f mostly esthetics atp 2025-02-23 19:07:36 +03:00
40c254ee68 clear out some more things 2025-02-23 19:07:16 +03:00
8b331dae79 add wake-on-lan command as a program 2025-02-23 19:06:56 +03:00
ae8c5b8c35 diff 2025-02-23 17:56:14 +03:00
871f290dc5 update flake.lock 2025-02-22 22:36:43 +03:00
df023f69e6 kernel compiles now 2025-02-22 14:38:44 +03:00
0418be2d67 update flake.lock 2025-02-21 21:32:33 +03:00
64ab2e1f22 update flake.lock 2025-02-21 15:08:59 +03:00
8b28255907 reenable youtube for now 2025-02-20 12:55:18 +03:00
062eb9dde2 update flake.lock 2025-02-20 11:01:06 +03:00
a1ad96476d formatting 2025-02-19 14:08:31 +03:00
96e4afa3eb add ssh 2025-02-19 10:52:16 +03:00
c2d6818744 update flake.lock 2025-02-19 09:14:37 +03:00
3e471c9a39 update flake.lock 2025-02-18 23:08:20 +03:00
85907213a8 force 2025-02-18 22:53:48 +03:00
045676afc6 set username 2025-02-18 22:52:37 +03:00
27a8173248 localhost is a scary hostname 2025-02-18 22:44:16 +03:00
a4badfb206 update flake.lock 2025-02-18 22:40:44 +03:00
c2d3cd7274 formatting 2025-02-18 22:35:45 +03:00
536b4f8449 add phone to readme 2025-02-18 22:09:41 +03:00
4651b57a37 add nh 2025-02-18 20:53:15 +03:00
78150c1678 add shebang to recipe 2025-02-18 20:50:49 +03:00
8a604d7547 add just recipe for nix-on-droid 2025-02-18 20:42:29 +03:00
188cdafff3 dont just set username for now 2025-02-18 20:25:51 +03:00
829d5ac5f0 try forcing username 2025-02-18 20:20:38 +03:00
e99522a9c9 try extraSpecial 2025-02-18 20:19:10 +03:00
1f10087305 add phone config 2025-02-18 20:13:36 +03:00
088565575c disable waydroid 2025-02-18 19:23:01 +03:00
c0b05bb3f9 enable waydroid hotfix 2025-02-18 19:19:11 +03:00
d7b6bffb2b enable waydroid 2025-02-18 19:17:57 +03:00
2ce70e4de7 update flake.lock 2025-02-18 19:17:25 +03:00
be5359c46d update lock 2025-02-18 13:38:43 +03:00
3fa90f7a47 update flake.lock 2025-02-17 23:49:06 +03:00
a8ee31b452 remove unused args 2025-02-16 23:38:05 +03:00
b73d0807be remove unused things 2025-02-16 23:37:24 +03:00
3e9215ae53 show whitespaces 2025-02-16 21:21:41 +03:00
765c12af90 formatting 2025-02-16 21:21:24 +03:00
e573cd99ee make it work on all platforms 2025-02-16 19:58:13 +03:00
c38d70e6e7 dont check when switching 2025-02-16 19:45:50 +03:00
70ec48d33b update flake.lock 2025-02-16 02:36:56 +03:00
a0ae3ed3b7 update flake.lock 2025-02-16 02:36:38 +03:00
7499da1897 agenix module 2025-02-16 02:25:43 +03:00
0ba4cbb699 weird af error 2025-02-16 02:23:40 +03:00
dc952bd5bd add nixd 2025-02-16 02:14:05 +03:00
0a843253fc update flake.lock 2025-02-15 14:33:20 +03:00
fc1cede863 update harmonica os label 2025-02-14 18:58:45 +03:00
752ba3eb6d enable configuration hash label 2025-02-14 14:04:05 +03:00
7a3115f590 update justfile 2025-02-14 13:51:22 +03:00
9405d081f3 update flake.lock 2025-02-14 13:50:18 +03:00
29fb479f21 update flake.lock 2025-02-13 23:43:10 +03:00
dcf59804f6 same old 2025-02-13 20:08:51 +03:00
743e8b75b9 update flake.lock 2025-02-13 16:46:59 +03:00
1ed72b16c1 formatting 2025-02-13 03:00:41 +03:00
b2a80a9f96 hotfix 2025-02-13 02:05:36 +03:00
08cabc39de add new wanikani scripts 2025-02-13 02:03:03 +03:00
38449b87d8 update flake.lock 2025-02-12 18:55:08 +03:00
72acf62bbe formatting 2025-02-12 01:56:33 +03:00
dd06a9a041 add all options to firefox 2025-02-12 01:49:26 +03:00
6f8ecf6242 try another firefox instance 2025-02-12 01:31:41 +03:00
f65e47231f I pray this doesnt cause any trouble for me 2025-02-12 01:20:18 +03:00
dabbac4c4b make sound stuff into a module 2025-02-12 00:38:56 +03:00
d630dcb877 make wol into a module 2025-02-11 22:29:25 +03:00
069e9662fb formatting 2025-02-11 22:22:22 +03:00
270088d902 make disabling hibernation into a module 2025-02-11 22:21:58 +03:00
a3fa8203db make emulation a module 2025-02-11 22:16:56 +03:00
93b8218e46 update justfile 2025-02-11 19:35:56 +03:00
39ede21a89 this is better than waiting for a solution 2025-02-11 19:26:25 +03:00
b82235b34c formatting 2025-02-11 19:25:59 +03:00
ff6a101b35 update flake.lock 2025-02-11 19:21:11 +03:00
40c4f838b0 update flake.lock 2025-02-11 17:52:44 +03:00
04ba0934a1 update flake.lock 2025-02-10 16:13:28 +03:00
dcf87e342c add tlrc config 2025-02-09 22:49:54 +03:00
b13a33bf8c these need to be int 2025-02-09 22:31:27 +03:00
fb8f31fe1b hotfix 2025-02-09 22:28:56 +03:00
a6fccaf727 update git config 2025-02-09 22:28:26 +03:00
788ab922ea add tailscale inputs 2025-02-09 22:10:27 +03:00
aac4a9f093 bashrc 2025-02-09 22:09:34 +03:00
40533661ff update flake.lock and remove blender 2025-02-09 13:49:20 +03:00
c5e57b70d7 add iso build recipe 2025-02-08 17:38:30 +03:00
25f0ebf7ae update flake.lock 2025-02-08 16:54:56 +03:00
f9124eb256 i lied 2025-02-07 22:19:27 +03:00
db9afdbc50 just do it later 2025-02-07 22:08:44 +03:00
2c00c995dd lets enable gui on pochita 2025-02-07 22:00:20 +03:00
4d7d03248b disable jellyfin for now 2025-02-07 17:19:32 +03:00
552fe8cc55 change the user of jellyfin 2025-02-07 16:45:08 +03:00
b17a9f9754 formatting and dont creat enable option 2025-02-07 15:56:09 +03:00
ac433255a4 hotfix 2025-02-07 15:52:03 +03:00
5d37ced152 add jellyfin to ymir 2025-02-07 15:49:45 +03:00
3c39b49b0e enable youtube 2025-02-07 15:48:05 +03:00
1021d78371 remove port not an option 2025-02-07 14:41:45 +03:00
dcdd843b25 add jellyfin to ymir 2025-02-07 14:41:09 +03:00
674084ea5c update flake.lock 2025-02-07 14:40:51 +03:00
5c47bfe155 update flake.lock 2025-02-06 14:09:47 +03:00
7d6b743ac6 concentrate 2025-02-05 02:46:01 +03:00
a78d016a48 formatting 2025-02-05 02:44:44 +03:00
181afe262c no need to mention this in the flake 2025-02-05 02:44:26 +03:00
02893b6035 update flake.lock 2025-02-05 01:22:33 +03:00
6425d6a274 formatting 2025-02-05 00:42:36 +03:00
6cf1be302f seperate out home config 2025-02-05 00:41:36 +03:00
8c176c2643 infinite recursion? 2025-02-05 00:41:11 +03:00
749f96536f unnecessary now 2025-02-05 00:36:11 +03:00
3354984763 unnecessary now 2025-02-05 00:35:51 +03:00
7e9a24d1fd unnecessary now 2025-02-05 00:35:32 +03:00
09239008b1 i dont intend to seperate my home config from my system config 2025-02-05 00:35:01 +03:00
466d6a96f6 why so many comments 2025-02-05 00:16:16 +03:00
65ffcac4a1 refactor: streamline ISO module imports in flake.nix and configuration.nix 2025-02-05 00:14:40 +03:00
1b1e7f792f use namespace for my options 2025-02-04 23:53:13 +03:00
64fcba43f0 simpler flake 2025-02-04 23:46:05 +03:00
67296189c2 10 minutes seem more ideal 2025-02-04 23:18:42 +03:00
8455240ad1 dont fucking sleep for 1800 minutes 2025-02-04 22:39:01 +03:00
10f8e97557 formatting 2025-02-04 22:03:22 +03:00
6067232000 add special args 2025-02-04 22:03:11 +03:00
a11ff1ceb8 remove system label 2025-02-04 19:23:25 +03:00
aa9d5e283a remove comment 2025-02-04 19:20:55 +03:00
53cd2ff223 firefox to home manager one day 2025-02-04 18:57:18 +03:00
7c1cc7d4c5 remove the tempting comment 2025-02-04 18:56:50 +03:00
c92953a5e3 formatting 2025-02-04 18:31:48 +03:00
osman - オスマン
c1c611e2e4
Merge pull request #5 from osbm/tmux-wanikani
tmux wanikani
2025-02-04 18:31:32 +03:00
7ccfbeb2a6 update wanikani script 2025-02-04 17:52:49 +03:00
7c03363776 i cant bother 2025-02-04 17:24:31 +03:00
c6a9355e5d hotfix 2025-02-04 17:18:49 +03:00
4460838486 add wanikani script take 2 2025-02-04 17:16:42 +03:00
cffc18a485 add wanikani script 2025-02-04 16:49:08 +03:00
8eaac613fc update flake.lock 2025-02-04 16:16:09 +03:00
522b2b6363 add fish shell 2025-02-04 02:11:14 +03:00
1444347997 add final touches 2025-02-04 02:09:43 +03:00
7b963c0074 try setting shortcut 2025-02-04 02:03:44 +03:00
9a0e907c65 add my dracula settings 2025-02-04 02:02:04 +03:00
3bd0ddeae3 approximating towards my dotfile 2025-02-04 01:55:42 +03:00
137572e171 try enabling tmux this way 2025-02-04 01:19:38 +03:00
5cec74b8fb add more shit to the iso 2025-02-04 01:12:13 +03:00
784e64b99a i added description to my flake 2025-02-03 11:55:29 +03:00
01c75c9193 update flake.lock 2025-02-02 13:13:56 +03:00
0fb3129d03 formatting 2025-02-01 18:16:55 +03:00
dec08be98b enable bluesky 2025-02-01 16:14:57 +03:00
281fafe1d7 update flake.lock 2025-02-01 15:30:49 +03:00
86c92b9aa4 enable tailscale on tartarus 2025-01-31 21:56:33 +03:00
5e4cd941da add tailscale 2025-01-31 18:22:33 +03:00
6f0788175d enable ssh in ymir 2025-01-31 15:15:01 +03:00
0a2a9143fd try setting the open previous windows on firefox 2025-01-31 14:29:35 +03:00
f20dd85063 allow ssh port 2025-01-31 14:29:06 +03:00
4d4832a1af i want to watch videos 2025-01-31 00:08:24 +03:00
ce9baa954b enable nix required mounts 2025-01-30 21:45:00 +03:00
cba68b00e4 update flake.lock 2025-01-30 21:20:31 +03:00
6395ec3a16 enable this awesome option 2025-01-30 21:19:55 +03:00
1649c951a5 try regressing the nixpkgs for pochita 2025-01-28 17:01:52 +03:00
b2fbf87ba1 update flake.lock 2025-01-28 14:47:14 +03:00
f6decd434d is ip ok? 2025-01-28 13:39:10 +03:00
a17ae9b699 disable some features this time 2025-01-28 13:36:11 +03:00
1649900113 typo 2025-01-28 13:27:46 +03:00
08bfae7046 try remote builds 2025-01-28 13:26:26 +03:00
ed33dc8a76 lets see if this helps 2025-01-28 13:02:52 +03:00
8d5e9a79b7 add systemd thingy 2025-01-28 03:34:22 +03:00
051dbdb678 enable WOL on ymir 2025-01-28 03:19:28 +03:00
f08a1398f0 i am a moron 2025-01-28 02:44:23 +03:00
9db1eec3a3 new installation does not going well 2025-01-28 02:40:07 +03:00
ff9d992d81 rekey for ymir 2025-01-28 02:05:28 +03:00
bebb8673f5 collapsable area 2025-01-27 17:32:25 +03:00
3171fdb9c5 formatting 2025-01-27 16:18:11 +03:00
19d4bd8e5b mark iso image generator as complete in README 2025-01-27 15:43:11 +03:00
9bfad2364a finally my custom iso 2025-01-27 15:43:02 +03:00
a83c99b2a5 disable sddm theme 2025-01-26 18:31:40 +03:00
5866ba8cb5 update flake.lock 2025-01-26 18:22:09 +03:00
5de9c94b4d oh right 2025-01-26 18:20:56 +03:00
28f8cac710 enable sddm wayland 2025-01-26 18:19:03 +03:00
94765cb215 grammar is important e 2025-01-26 14:11:14 +03:00
cc6476e48a i am this close 2025-01-25 00:02:46 +03:00
f80549c6a6 super stupid me super stupid 2025-01-24 23:57:47 +03:00
9dc41f22c1 add new step to see cache availability 2025-01-24 23:56:27 +03:00
768d43b08d add todo item 2025-01-24 23:53:28 +03:00
5f755c1e32 disable aarch64 for now 2025-01-24 22:31:11 +03:00
008bc7b85b log 2025-01-24 22:28:14 +03:00
00b85132e5 fix 2025-01-24 22:20:05 +03:00
0030179bf0 fix: correct indentation for workflow_dispatch in test-my-packages.yml 2025-01-24 22:19:14 +03:00
367eae3801 add testing workflow 2025-01-24 22:17:35 +03:00
e9f83135a7 update flake.lock 2025-01-24 01:28:20 +03:00
e8f8a9aeda update flake.lock 2025-01-23 10:19:22 +03:00
2b5906c393 formatting 2025-01-21 19:35:58 +03:00
c5d26eee94 alphabetical order of flake inputs 2025-01-21 15:58:02 +03:00
222fb3bd42 update flake.lock 2025-01-20 19:15:48 +03:00
a27bbea43b state every unfree package from now on 2025-01-20 03:11:42 +03:00
fc988fcd47 add bat: a better cat 2025-01-20 00:06:51 +03:00
093442f3f7 update flake.lock 2025-01-19 23:16:19 +03:00
e19500e9db hate, hate, hateeeee 2025-01-19 04:11:12 +03:00
68709a3386 update flake.lock 2025-01-19 02:24:36 +03:00
f3af121fca enable bluesky 2025-01-19 00:56:04 +03:00
edf77a478d disable firefox alt key menu bar 2025-01-18 16:55:20 +03:00
312bf62b47 update flake.lock 2025-01-18 14:55:06 +03:00
a7b43ff912 update flake.lock 2025-01-17 18:22:35 +03:00
a8dd6a941c update flake.lock 2025-01-16 22:28:54 +03:00
914c540588 try adding the new package 2025-01-16 18:43:51 +03:00
d4b92ae5c5 select theme 2025-01-16 18:39:09 +03:00
87028c0cd8 no need for recursive keyword 2025-01-16 01:50:42 +03:00
b6fa7de98e add new items to to-do list 2025-01-16 01:36:02 +03:00
f0589db96f add how-to to readme 2025-01-15 21:30:50 +03:00
osman - オスマン
1e6bfe863a
Merge pull request #3 from osbm/dependabot/github_actions/cachix/install-nix-action-30
Bump cachix/install-nix-action from 16 to 30
2025-01-15 21:03:05 +03:00
dependabot[bot]
63c5339ca7
Bump cachix/install-nix-action from 16 to 30
Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 16 to 30.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](https://github.com/cachix/install-nix-action/compare/v16...v30)

---
updated-dependencies:
- dependency-name: cachix/install-nix-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 17:58:39 +00:00
osman - オスマン
962bff22a4
Merge pull request #4 from osbm/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 2 to 4
2025-01-15 20:57:45 +03:00
dependabot[bot]
e3df7e929c
Bump actions/checkout from 2 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 17:55:24 +00:00
osman - オスマン
db2cdb0047
Create dependabot.yml 2025-01-15 20:54:46 +03:00
6089162068 update cachix version 2025-01-15 20:52:40 +03:00
7491f60f2d update flake.lock 2025-01-15 20:51:54 +03:00
1034f9e259 try this 2025-01-15 20:45:10 +03:00
7c5ee3637d hotfix 2025-01-15 20:39:21 +03:00
9fb38ada73 update upload articact action 2025-01-15 20:38:16 +03:00
47c43291c6 also test new machines 2025-01-15 20:33:54 +03:00
115a768329 add sd image builder 2025-01-15 20:33:39 +03:00
ac28b07ba7 reformat 2025-01-15 20:25:18 +03:00
fe7dc6088d in isabel we trust 2025-01-15 20:24:19 +03:00
01068357ad leave out some lines 2025-01-15 19:57:11 +03:00
b78deec49f mark the things i done 2025-01-15 19:54:37 +03:00
a71674f8f4 add pochita to the list 2025-01-15 19:26:06 +03:00
35a7da242b set hostname 2025-01-15 19:01:35 +03:00
139804b63b we also dont need some of these 2025-01-15 15:53:20 +03:00
a6681472ab make fonts an option 2025-01-15 15:53:02 +03:00
e6fb13e4ce redundant option 2025-01-15 15:27:25 +03:00
0b590694a7 pochita 2025-01-15 15:27:09 +03:00
f778118fe5 secrets add pochita and rekey 2025-01-15 14:38:50 +03:00
a1897e396b there is ethernet connection lets leave this out for now 2025-01-15 14:33:39 +03:00
bf1721917f add my user to sd image 2025-01-15 14:33:07 +03:00
8d54b13aeb update flake.lock 2025-01-15 13:04:47 +03:00
6800ca5557 nix is not happy to include pochita what a piece of shit racist elitist build system that is historycally systematically keeps refusing to evaluate innocent nixos configurations. dual vector foil dark forest strike is upon us. we should not reveal our location to the cosmos. civilizations die every day. 2025-01-15 00:04:56 +03:00
9744b88916 no need to declare this 2025-01-14 23:59:08 +03:00
d81c48e578 remove comment 2025-01-14 23:58:52 +03:00
e49f5d5455 damn rpi 2025-01-14 23:58:39 +03:00
b6aca6a615 add pochita initial sh image 2025-01-14 23:57:26 +03:00
75de8d1175 tackle this later 2025-01-14 14:23:43 +03:00
28dc20aa36 try this for now 2025-01-14 14:15:30 +03:00
9f8515b23c disable pochita for now 2025-01-14 02:16:00 +03:00
449be007a8 formatting 2025-01-14 01:46:30 +03:00
8e57f421fd also mention vscode server 2025-01-14 01:45:39 +03:00
4e6b2cb413 initial password for me 2025-01-14 01:42:37 +03:00
837ce855ab add pochita 2025-01-14 01:42:24 +03:00
8de06d65c6 add rpi inputs 2025-01-14 01:42:03 +03:00
0fabea9c6d update flake.lock 2025-01-14 01:19:02 +03:00
bcb6883539 disable for now 2025-01-14 00:51:38 +03:00
9c66e81dd9 all time favorite semicolon error 2025-01-14 00:24:29 +03:00
ba8d429eef use fisshhhhhhh 2025-01-14 00:23:13 +03:00
55fc9d45a5 users users usersssssss 2025-01-13 23:57:31 +03:00
9b58e51b36 add module 2025-01-13 23:51:23 +03:00
97437b0c3c collect graphical interface code 2025-01-13 23:49:55 +03:00
4bdb9e5fe6 add space 2025-01-13 23:49:03 +03:00
b449920110 remove sops 2025-01-13 23:48:52 +03:00
ee9f96d563 move vscode server 2025-01-13 23:47:00 +03:00
4cc8e1339c move out openssh and docker and configure openssh 2025-01-13 23:19:39 +03:00
d3ddc8df9a add ssh config for ymir and tartarus 2025-01-13 22:55:09 +03:00
5556453232 add ownership 2025-01-13 22:24:09 +03:00
64cc78a2bd try this for ssh keys 2025-01-13 22:19:04 +03:00
bb7dca3144 ITS 2025 RAAAGHHHH 2025-01-13 21:15:31 +03:00
040e77e45a rename just recipe 2025-01-13 21:09:20 +03:00
d9ee14b693 fix option 2025-01-13 21:02:17 +03:00
71460684ba formatting 2025-01-13 20:56:16 +03:00
39f5651279 call home manager properly 2025-01-13 20:55:43 +03:00
f010992710 i am a dumb fuck 2025-01-13 20:48:32 +03:00
2f74c68a4f add comments 2025-01-13 20:47:31 +03:00
919308d150 i forgor 💀 2025-01-13 20:41:28 +03:00
7a0bf61d06 use modules 2025-01-13 20:40:38 +03:00
69ab407977 add option to arduino 2025-01-13 20:40:29 +03:00
2ba8b835df update home-manager configuration for osbm to use stateVersion 2025-01-13 20:38:47 +03:00
6a446ff6f9 remove arduino-ide from ymir configuration 2025-01-13 20:38:17 +03:00
6ffafdca8e add home manager to ymir 2025-01-13 20:38:04 +03:00
3c058360c7 add system and agenix to harmonica 2025-01-13 20:37:43 +03:00
bf58de8233 add formatter 2025-01-13 20:33:18 +03:00
99b32d3b97 add home configurations 2025-01-13 20:33:04 +03:00
28cf319bc0 fix my username 2025-01-13 20:30:39 +03:00
669bee21d6 remove comment 2025-01-13 20:30:15 +03:00
ebea7dbe63 bring neovim to flake 2025-01-13 20:30:02 +03:00
338d23388b delete python module 2025-01-13 20:28:22 +03:00
cf7f61ebc3 add new todo 2025-01-13 20:28:03 +03:00
b8fb783465 enable binfmt aarh64 build on tartarus 2025-01-13 16:50:32 +03:00
4616fc7d5c add justfile recipe for tartarus sd image 2025-01-13 16:50:08 +03:00
d57cef0741 use different wifi solution 2025-01-13 16:47:05 +03:00
79116ad45a add agenix to harmonica 2025-01-13 16:26:55 +03:00
f417983e5b use secrets 2025-01-13 16:21:47 +03:00
f2a22e7a8b sd-image add 2025-01-13 16:21:17 +03:00
efcc85cd44 hotfix 2025-01-13 15:48:58 +03:00
bdac402735 add wifi pswd and ssid 2025-01-13 15:46:59 +03:00
1794f6becf add initial code for harmonica 2025-01-13 15:45:10 +03:00
1144aa96d4 apply pulseaudo and nerd-font changes 2025-01-13 14:59:50 +03:00
a30bf1a7e4 update flake.lock 2025-01-13 14:51:30 +03:00
2a64282a30 move to nixpkgs-unstable 2025-01-13 14:49:50 +03:00
56eaf3fe52 update flake.lock 2025-01-12 20:13:07 +03:00
76aa088caf update flake.lock 2025-01-12 01:45:10 +03:00
ae9ff06566 enable concentration 2025-01-11 03:28:43 +03:00
745c69ba0e add bsky and delete them by default 2025-01-11 02:50:18 +03:00
b079fb9e7b unblock youtube 2025-01-10 17:41:47 +03:00
3347e9c9b6 update flake.lock 2025-01-10 13:58:39 +03:00
df37b71671 update flake.lock 2025-01-10 13:57:44 +03:00
f63023d6f7 formatting 2025-01-10 02:39:42 +03:00
f819c8855c update flake.lock 2025-01-09 16:20:07 +03:00
0ee5ed2e84 delete commented lines 2025-01-08 17:36:46 +03:00
4fcd95d3ca disable warp 2025-01-08 17:21:22 +03:00
e3adbdd0e6 also try blocking twitter 2025-01-08 17:18:20 +03:00
216c82e819 try this 2025-01-08 17:15:39 +03:00
7fb1550cba block youtube 2025-01-08 17:14:53 +03:00
a181a11e3e update concentration.nix 2025-01-08 17:12:01 +03:00
b9691caf58 update flake.lock 2025-01-08 07:54:04 +03:00
72bcfde381 update flake.lock 2025-01-08 07:53:01 +03:00
fd1f33ffad formatting 2025-01-07 16:46:27 +03:00
50d9afd8ae update flake.lock 2025-01-07 13:33:53 +03:00
ed415ca634 add ability to compile aarch64 to ymir 2025-01-05 22:53:48 +03:00
130228d60a add comma 2025-01-05 00:25:50 +03:00
3f83b3fc97 add nh 2025-01-05 00:23:05 +03:00
8163acd578 add agenix to tartarus 2025-01-04 20:49:59 +03:00
9c0ddc5658 ignore readme in actions 2025-01-04 18:51:50 +03:00
d20ca024a7 update readme 2025-01-04 18:49:34 +03:00
a2942d8f35 update readme 2025-01-04 18:03:46 +03:00
f93dbcd7de update flake.lock 2025-01-04 16:26:10 +03:00
osman - オスマン
781b8b0bf2
Merge pull request #2 from osbm/secret-management
add agenix
2025-01-04 16:23:09 +03:00
72b411083a remove old keys 2025-01-04 16:07:27 +03:00
8c0f71babc reenable bayram user 2024-12-31 14:01:46 +03:00
ee13cd7ac7 try disabling the user 2024-12-31 13:43:48 +03:00
ba8da8025c use initial password 2024-12-31 13:39:07 +03:00
68746c0d73 add ownership to password 2024-12-29 22:23:37 +03:00
006e837f2c update age file 2024-12-29 21:28:23 +03:00
8c5320f4df update age file 2024-12-29 19:02:08 +03:00
cf5a5d79e1 change name 2024-12-29 17:05:30 +03:00
ccadf5e450 correct folder path 2024-12-29 16:29:21 +03:00
21089d2df0 renamed option 2024-12-29 16:27:34 +03:00
41aa5f5547 also import secrets 2024-12-29 16:26:42 +03:00
788ea511b0 init secret management 2024-12-29 16:25:35 +03:00
1e854a93fb try adding agenix this way 2024-12-29 14:10:07 +03:00
16c5138cc2 add agenix 2024-12-29 14:02:37 +03:00
43cd47e6f5 fix name 2024-12-29 13:59:25 +03:00
be76d4646b add agenix 2024-12-29 13:58:27 +03:00
81d8f22d6f enable python 2024-12-28 13:55:41 +03:00
7f48d02f5d update flake.lock 2024-12-28 11:40:22 +03:00
6e7ef7cec9 update flake.lock 2024-12-26 14:12:12 +03:00
e36b7d0c40 update flake.lock 2024-12-25 13:33:20 +03:00
6b5b00a8c9 fuck python 2024-12-24 23:05:47 +03:00
aab38eadac update flake.lock 2024-12-24 14:12:21 +03:00
ce55a45bd4 enable python 2024-12-23 21:53:02 +03:00
1b52170d45 update flake.lock and disable concentration 2024-12-23 16:24:36 +03:00
49c2477044 update flake.lock 2024-12-22 23:58:44 +03:00
c56646eb29 update flake.lock 2024-12-21 20:44:49 +03:00
917e68cc36 update osbm-nvim 2024-12-21 01:41:55 +03:00
6f91edeadd update flake.lock 2024-12-20 18:54:38 +03:00
32837d362e update flake.lock 2024-12-19 23:43:59 +03:00
421e89aa70 update flake.lock 2024-12-18 16:42:49 +03:00
cd647195b9 add cloudflare warp 2024-12-17 17:17:12 +03:00
6c23eac37b formatting 2024-12-17 14:06:07 +03:00
2639e9c4e1 set home-manager to 24.11 2024-12-17 13:18:53 +03:00
3f870e4b21 hotfix 2024-12-17 13:14:50 +03:00
1fc43426ea mv home.nix 2024-12-17 13:13:41 +03:00
a2e03c12c6 try enabling home-manager in tartars 2024-12-17 13:12:23 +03:00
bd564a3287 update flake.lock 2024-12-17 11:53:19 +03:00
4d79606ac6 add nvim to tartarus 2024-12-17 11:10:05 +03:00
6f8ecf18b9 dont just copy paste lines 2024-12-17 00:11:00 +03:00
055dfc4ee5 try this 2024-12-17 00:10:19 +03:00
5a7d8fcba6 add my nvim 2024-12-17 00:06:17 +03:00
9c274c128b add bluetooth 2024-12-16 16:16:46 +03:00
6610ba8b09 update flake.lock 2024-12-16 16:06:49 +03:00
97a10bf9b2 add ripgrep 2024-12-16 15:13:46 +03:00
635048d7a1 update flake.lock 2024-12-16 09:39:56 +03:00
5d0ee5b356 add yazi 2024-12-16 01:08:16 +03:00
d9a7547306 update flake.lock 2024-12-15 19:36:44 +03:00
c3fbe2e337 formatting 2024-12-14 04:29:28 +03:00
30485caf09 remove default neovim 2024-12-14 04:25:56 +03:00
1ee3257c93 some rewrite to the flake 2024-12-14 04:25:36 +03:00
ec653c5d1b update flake.lock 2024-12-13 15:56:32 +03:00
1d89eec86d update flake.lock 2024-12-13 14:32:48 +03:00
9008f3fd10 update flake.lock 2024-12-12 23:37:55 +03:00
7edc108f28 update flake.lock 2024-12-12 19:49:29 +03:00
b1ac56cd69 update flake.lock 2024-12-12 03:59:53 +03:00
e67eb90d26 dont use global python package in nixos 2024-12-11 20:46:05 +03:00
166e7a8c0b try latest driver again 2024-12-11 18:14:36 +03:00
58ade75dcf try latest driver 2024-12-11 18:11:49 +03:00
1b5e9b2e37 try latest driver 2024-12-11 18:08:11 +03:00
3ed38bd8f5 update flake.lock 2024-12-11 17:46:04 +03:00
ae8b0300aa update flake.lock 2024-12-11 03:58:08 +03:00
529c3a1453 hotfix 2024-12-10 19:54:08 +03:00
819dfe5cbf try this out for docker nvidia 2024-12-10 19:53:26 +03:00
e30981dcc3 try out 2024-12-10 19:50:29 +03:00
92744d63c7 add nvidia container toolkit to ymir 2024-12-10 19:41:32 +03:00
3e59bdd849 update flake.lock 2024-12-10 00:23:14 +03:00
610a2987bb use ollama service 2024-12-09 16:44:21 +03:00
05988fad3c update flake.lock 2024-12-09 16:34:58 +03:00
cb0d6aae4d try usb 2024-12-09 11:29:19 +03:00
60289cd588 cancel 2024-12-09 09:55:32 +03:00
395fe68b68 the fuck kind of error is this? 2024-12-09 09:54:02 +03:00
08f41e3d6f unstable arduino 2024-12-09 09:47:13 +03:00
2568e34b32 disable youtube again 2024-12-08 19:35:32 +03:00
efac578236 update flake.lock 2024-12-08 19:25:42 +03:00
2e0e8f5f3f try accepting flake config 2024-12-07 22:18:57 +03:00
3a23586086 add prismlauncher 2024-12-07 22:16:07 +03:00
243b61d857 check more items 2024-12-07 17:04:09 +03:00
bf5f4746ab use set ubuntu version 2024-12-07 17:00:30 +03:00
55553b0b0f format nix 2024-12-07 16:57:03 +03:00
cd91077c86 change job name 2024-12-07 16:53:41 +03:00
8b211fa373 add formatter 2024-12-07 16:47:21 +03:00
7c45956ee5 not enough space on github actions for this 2024-12-07 16:19:39 +03:00
4506f7a158 accept flake config 2024-12-07 16:14:38 +03:00
4e8232704c enable for all branches 2024-12-07 16:10:29 +03:00
2a6d62052c add builder workflow 2024-12-07 16:09:03 +03:00
4f0cdda387 ignore result file 2024-12-07 16:08:48 +03:00
ba87de48e6 update flake.lock 2024-12-07 15:29:18 +03:00
8f1d91e86c update flake.lock 2024-12-06 16:53:30 +03:00
384874f55d update flake.lock 2024-12-06 14:23:46 +03:00
4270908330 update flake.lock 2024-12-05 22:20:56 +03:00
ed2c9dae63 weird nix syntax 😭 2024-12-05 21:23:11 +03:00
9ea006416b add cachix 2024-12-05 21:22:00 +03:00
85cc1c6b57 update flake.lock 2024-12-05 11:12:08 +03:00
382a7f31c9 update flake.lock 2024-12-04 17:18:08 +03:00
8c80394cc2 enable youtube for now 2024-12-04 13:32:47 +03:00
53e59a321c update flake.lock 2024-12-04 13:31:52 +03:00
18a9ed44ce update flake.lock 2024-12-03 23:37:05 +03:00
b6a8924c92 why is there a random tab 2024-12-03 20:55:39 +03:00
027e4413ef add home-manager because of peer pressure 2024-12-03 15:05:22 +03:00
bad5fa22d1 update readme 2024-12-03 00:33:42 +03:00
1a17560355 update tasks 2024-12-03 00:29:52 +03:00
53a8737f12 disable hybernation in ymir 2024-12-03 00:02:22 +03:00
6365c99be2 add ollama to only ymir 2024-12-02 16:31:44 +03:00
5977b126ce update flake.lock 2024-12-02 12:08:44 +03:00
0ed8c9ca81 get rid of ugly makefile 2024-12-02 10:14:04 +03:00
75e2024965 add dependency 2024-12-02 10:12:53 +03:00
f396c65d5f add check-git step 2024-12-02 10:10:51 +03:00
b7a926cfa9 add justfile 2024-12-02 10:07:53 +03:00
9a74c3167f add nom 2024-12-02 10:06:37 +03:00
06ffb3f165 update flake.lock 2024-12-02 10:06:07 +03:00
c29586f312 seperate out hosts file 2024-12-02 09:43:36 +03:00
9d9b24800e try not locking 2024-12-01 20:53:58 +03:00
1c643d0376 weird 2024-12-01 20:53:16 +03:00
13a47affc8 try fixing capital data 2024-12-01 20:52:07 +03:00
65280ca7bd new settings and extensions 2024-12-01 20:51:06 +03:00
4ae9716a95 fmt and fix 2024-12-01 20:25:57 +03:00
8a0b4856c4 try adding ExtensionSettings 2024-12-01 20:20:23 +03:00
8ab2158c2c update flake.lock 2024-12-01 16:23:37 +03:00
f54e61e8ed update flake.lock 2024-12-01 12:47:22 +03:00
db0d426ea2 dont forget unstable 2024-12-01 00:30:56 +03:00
bdebca5361 add ymir machine 2024-12-01 00:28:50 +03:00
5ca9bb4cee update flake.lock 2024-11-30 18:55:46 +03:00
0da0b4ea65 add direnv 2024-11-29 18:12:21 +03:00
d643998e23 add direnv 2024-11-29 18:04:27 +03:00
60b4c2005e add direnv 2024-11-29 18:03:25 +03:00
bc3ecae125 update flake.lock 2024-11-27 12:09:37 +03:00
5bb4d3a94f freedom squared 2024-11-26 20:27:33 +03:00
1fca6eba46 freedom 2024-11-26 20:25:15 +03:00
eb46b13aae update flake.lock 2024-11-26 15:02:58 +03:00
ea2b0cbfa2 remove whitespace 2024-11-25 21:22:35 +03:00
e8fdb029b9 add huggingface packages 2024-11-25 21:09:17 +03:00
98db1da64d add python packages 2024-11-25 20:59:21 +03:00
52b029825b update flake.lock 2024-11-25 17:15:35 +03:00
1395a158ce formatting flake 2024-11-25 17:13:36 +03:00
896d93096c update flake and install ffmpeg 2024-11-25 11:44:18 +03:00
c2c37ba98f update flake 2024-11-24 12:47:55 +03:00
363d7db67d add git lfs 2024-11-23 18:44:17 +03:00
c42a75c43b update flake 2024-11-22 16:53:23 +03:00
c656992897 a bit more beautiful 2024-11-21 23:24:05 +03:00
Osman F Bayram
13f7ab4601
Merge pull request #1 from osbm/nixos-version-update
update nixos to 24.11
2024-11-21 23:03:32 +03:00
f4bfc5dff8 whitespace fake commit 2024-11-21 22:42:59 +03:00
4df960070c use unstable mosc 2024-11-21 22:40:09 +03:00
b8b74b0fff updated font name 2024-11-21 21:39:31 +03:00
cb8c4209f5 disable stylix 2024-11-21 21:38:28 +03:00
8c0d34610c update input method 2024-11-21 21:33:10 +03:00
af160ad89c nixos version update 2024-11-21 21:28:44 +03:00
fc909e99da firefox settings 2024-11-21 17:02:55 +03:00
9e73dcc551 firefox settings 2024-11-21 16:58:39 +03:00
25c21fd019 fix error 2024-11-21 16:11:49 +03:00
28d8c74956 firefox options 2024-11-21 16:10:42 +03:00
de12b63d0f update flake 2024-11-21 15:07:47 +03:00
80a7a9e5e2 update flake 2024-11-21 12:15:05 +03:00
976e247851 add roboto 2024-11-19 15:14:54 +03:00
5aca0e676e add new fonts 2024-11-19 15:12:58 +03:00
48ec45c583 update flake 2024-11-19 11:47:41 +03:00
ff5b7ec7ff revert arduino-ide 2024-11-18 11:50:41 +03:00
b3fa7810f0 add tree 2024-11-18 10:22:16 +03:00
b2f123d002 update flake 2024-11-18 09:48:00 +03:00
0feadf474d update flake 2024-11-17 16:04:00 +03:00
2f6e9fc4f8 add starship 2024-11-16 17:50:57 +03:00
ca3f6df237 update flake 2024-11-16 17:23:35 +03:00
636d72ad87 tick stylix 2024-11-14 20:40:30 +03:00
4dabc1ff79 update flake 2024-11-14 18:41:14 +03:00
04a54e64f4 unstable obsidian 2024-11-12 19:52:10 +03:00
303954ef6f update flake 2024-11-11 18:31:50 +03:00
86e4aabaa3 add gh 2024-11-11 18:24:22 +03:00
53151f88c2 update flake 2024-11-10 23:52:32 +03:00
5084ec366b unstable arduino 2024-11-10 22:18:50 +03:00
0ba408c645 stupid ass error 2024-11-10 22:17:26 +03:00
bf884dc3b4 remove python11 2024-11-10 22:15:41 +03:00
e9de1bd54b weird-ass styling 2024-11-10 22:14:11 +03:00
25747846df seperate out arduino 2024-11-10 22:13:47 +03:00
667216c835 update flake 2024-11-10 17:13:54 +03:00
c658f1ad52 add my dotfiles 2024-11-10 01:34:49 +03:00
ca98086387 try out unstable qbittorrent 2024-11-10 00:29:58 +03:00
7713cd4a3a update flake 2024-11-09 22:33:42 +03:00
0ccd7f0d98 update flake 2024-11-08 20:32:50 +03:00
1b5c5a72b5 add arduino udev rules 2024-11-08 15:23:26 +03:00
8aab1c882e add stupid arduino library 2024-11-08 15:12:37 +03:00
5d2261bcf8 i am the user 2024-11-07 23:57:12 +03:00
6636fdc19a add virtualbox 2024-11-07 23:52:33 +03:00
8e375551c0 make vscode package follow my nixpkgs input 2024-11-07 03:26:32 +03:00
007f534594 flake.lock shenanigans4 <3 2024-11-06 16:04:13 +03:00
20376b79c2 flake.lock shenanigans3 :( 2024-11-06 15:59:26 +03:00
a7d118c7d5 flake.lock shenanigans2 2024-11-06 15:58:45 +03:00
15864ec347 flake.lock shenanigans 2024-11-06 15:56:57 +03:00
f189a5b56f make stylix follow nixpkgs 2024-11-06 15:55:26 +03:00
528b955c06 add stylix 2024-11-06 15:52:29 +03:00
4ab1538fa3 add arduino ide 2024-11-06 15:34:55 +03:00
f1f037878e disable qbittorrent 2024-11-05 22:03:47 +03:00
f8e7db7eee update flake 2024-11-05 18:14:20 +03:00
0aa1df6a9f add just 2024-11-04 23:21:29 +03:00
d17fc15b46 add onefetch 2024-11-03 04:29:55 +03:00
4bd48e99b4 add jq 2024-11-03 03:35:39 +03:00
9dc9b62553 add torrent client 2024-11-02 22:13:51 +03:00
eafe7ac300 set nixpath to current nixpkgs 2024-11-02 01:48:53 +03:00
375afdad48 update to-do list 2024-11-02 01:12:26 +03:00
9ed2c0d2c6 unstable discord 2024-11-02 00:08:11 +03:00
d8751c2c29 update flake 2024-11-01 17:10:56 +03:00
91520ff8c2 add encryption tools 2024-11-01 16:03:56 +03:00
8dac48fe9a add gpg 2024-11-01 15:41:57 +03:00
d7a7f2d129 add sops-nix 2024-11-01 15:41:46 +03:00
23ede7878f add very important programs 2024-10-27 14:17:24 +03:00
27d93ac91e add cloc 2024-10-27 14:03:09 +03:00
335bce576d remove jupyter 2024-10-26 20:01:36 +03:00
33c25072f4 remove jupyter 2024-10-26 20:00:07 +03:00
ff73392451 add jupyter 2024-10-26 19:58:15 +03:00
6de30c0f0f add vscode server 2024-10-26 19:31:16 +03:00
687d91f5cb add jax 2024-10-26 19:19:21 +03:00
72c98c78c8 add pip 2024-10-26 18:58:39 +03:00
ca4fd1a72e add python 11 2024-10-26 18:52:08 +03:00
8474adec6b seperate out python 2024-10-26 18:49:33 +03:00
505fc302c8 seperate i18n 2024-10-26 18:20:49 +03:00
b7a4ae6a18 seperate out nix settings 2024-10-26 18:16:39 +03:00
309d4730e8 also commit fonts file 2024-10-26 18:07:29 +03:00
9b75c8036d try out modular system configuration 2024-10-26 18:05:38 +03:00
5a1c159abf add nodejs 2024-10-24 16:39:51 +03:00
66e0d89ba8 add pciutils 2024-10-18 22:42:14 +03:00
c433343afe update flake 2024-10-18 22:22:16 +03:00
c68042698e add kitty 2024-10-18 11:01:42 +03:00
277297ebe5 add new packages 2024-10-18 10:18:38 +03:00
0e00b442e1 applied nixfmt 2024-10-18 00:01:32 +03:00
3dcfac3066 no need for this now 2024-10-17 23:17:15 +03:00
21ef79fbe4 japanese dates 2024-10-17 23:16:00 +03:00
8e444bc738 check another item 2024-10-17 00:37:52 +03:00
1eab074309 stupid typo 2024-10-17 00:36:03 +03:00
924a5c3631 add nerdfonts 2024-10-17 00:34:08 +03:00
45c2b909d9 check another item 2024-10-17 00:27:54 +03:00
3cd05610a2 enable auto gc 2024-10-17 00:26:11 +03:00
1fbb779c9a also save git hash to nixos generations 2024-10-17 00:19:19 +03:00
f20a9e2884 try if this will work 2024-10-16 23:51:53 +03:00
d515b7b31f update flake 2024-10-16 23:46:06 +03:00
c60c642e92 update readme 2024-10-16 23:41:12 +03:00
5697c0a054 added unstable branch 2024-10-16 23:40:34 +03:00
9dd8c3d993 update flake 2024-10-14 12:17:51 +03:00
fe6f3dc37c enable ssh 2024-10-14 11:22:01 +03:00
80841a9f8b add plans to readme 2024-10-13 21:59:31 +03:00
7c05b50e49 add steam and fix python packages 2024-10-13 21:48:26 +03:00
12202c880e please just work 2024-10-12 12:19:30 +03:00
e94a1ca091 add fonts 2024-10-12 12:16:06 +03:00
1dfeae2df6 try new makefile command 2024-10-12 12:04:34 +03:00
c7d63609da try new makefile command 2024-10-12 12:03:19 +03:00
7c6b6783e7 fix echo output 2024-10-12 11:59:26 +03:00
8a3f7143bc add makefile 2024-10-12 11:58:35 +03:00
14e3b10d97 add docker and more programs 2024-10-12 11:50:40 +03:00
63b94588f1 enable vim 2024-10-12 01:12:49 +03:00
112 changed files with 6777 additions and 188 deletions

11
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"

35
.github/workflows/build-sd-image.yml vendored Normal file
View file

@ -0,0 +1,35 @@
name: Build SD image for Raspberry Pi 5
on:
workflow_dispatch:
jobs:
build-sd-image:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install QEMU
run: sudo apt-get install qemu-user-static
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
system = aarch64-linux
- name: Build SD image
run: nix build -L '.#nixosConfigurations.pochita-sd.config.system.build.sdImage'
- name: Zip the Resulting SD image
run: |
mkdir -p sd-image
cp -r result/* sd-image
zip -r sd-image.zip sd-image
- name: Upload SD image
uses: actions/upload-artifact@v5
with:
name: sd-image

37
.github/workflows/nix.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: Nix
on:
push:
paths-ignore:
- README.md
pull_request:
paths-ignore:
- README.md
jobs:
build:
strategy:
matrix:
target-system:
- ymir
- tartarus
- pochita
- pochita-sd
- harmonica
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: cachix/install-nix-action@v31
# TODO: add a binary cache
# - uses: cachix/cachix-action@v10
# with:
# name: YOURCACHE
# authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: nix flake check --accept-flake-config
# Pre-build the system configuration
- run: nix build --accept-flake-config --dry-run .#nixosConfigurations.${{ matrix.target-system }}.config.system.build.toplevel
check-formatting:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: cachix/install-nix-action@v31
- run: nix run nixpkgs#nixfmt-tree -- --ci

41
.github/workflows/test-my-packages.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: Build and test the packages i maintain on Nixpkgs
on:
# cron every hour at 3 minutes 00:03 AM, 01:03 AM etc.
schedule:
- cron: '3 0 * * *'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-24.04
strategy:
matrix:
nixpkgs-branch: [nixos-unstable, nixpkgs-unstable, master] # TODO: add stable branch once they are available
# platform: [x86_64-linux, aarch64-linux] #TODO: add aarch64-linux
myPackages: # TODO automate this list
- python313Packages.runstats
- python313Packages.fastmri
- python312Packages.runstats
- python312Packages.fastmri
- python311Packages.runstats
# - python311Packages.fastmri # broken for now
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install Nix
uses: cachix/install-nix-action@v31
# with:
# extra_nix_config: |
# # system = ${{ matrix.platform }}
# i want to create .drv file and check if they exist in the nixos.cache
# if they dont exist, i want to skip the build
# - name: Check if the dependencies are in the cache
# run: nix path-info --closure-size --eval-store auto --store https://cache.nixos.org 'github:nixos/nixpkgs/${{ matrix.nixpkgs-branch }}#${{ matrix.myPackages }}^*'
- name: Build my packages
run: nix build -L "github:nixos/nixpkgs/${{ matrix.nixpkgs-branch }}#${{ matrix.myPackages }}"

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
result
.DS_Store
.direnv
*.old

3
.mailmap Normal file
View file

@ -0,0 +1,3 @@
osbm <osbm@osbm.dev> <osmanfbayram@gmail.com>
osbm <osbm@osbm.dev> <osbm@users.noreply.github.com>
osbm <osbm@osbm.dev> <74963545+osbm@users.noreply.github.com>

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 Osman F Bayram
Copyright (c) 2025 Osman F Bayram
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

138
README.md
View file

@ -1,2 +1,136 @@
# nix-configuration
The nix configuration
# nixos is life
The nix configuration of mine. My intentions are just to maintain my configuration and to contribute to the nix community.
Here i have 4 machines and 1 sd card image that i maintain.
- Laptop **tartarus** (faulty hardware, nvidia gpu doesnt work)
- Desktop **ymir** (beast, my most prized possession as of now)
- Raspberry Pi 5 **pochita** (a server that i experiment with)
- Raspberry Pi 5 SD image **pochita-sd** (produces an sd image that could be used to flash the sd card of a rpi-5)
- Phone **atreus** (unrooted, nix-on-droid)
I didnt get these setup yet.
- Raspberry Pi Zero 2W **harmonica** (small machine for small tasks and cronjobs) (not setup yet)
- Android phone (termux) **android** (not setup yet)
My options:
I implemented a module system for my configurations. Each machine has its own set of options that can be enabled or disabled. The options are defined in the `modules/options.nix` file. Each option is a module that can be imported into the machine configuration.
I am containing my options in the `osbmModules` attribute set. I dont like to interfere with the global configuration namespace. Here is all the available options:
```nix
osbmModules = {
desktopEnvironment = "plasma"; # options: "plasma", "none"
homeManager.enable = true;
machineType = "desktop"; # options: "desktop", "laptop", "server", "embedded", "mobile"
users = [ "osbm" "bayram" ];
defaultUser = "osbm";
agenix.enable = true;
nixSettings.enable = true;
programs = {
steam.enable = true;
graphical.enable = true;
commandLine.enable = true;
neovim.enable = true;
arduino.enable = true;
adbFastboot.enable = true;
};
services = {
# list services to enable
};
hardware = {
sound.enable = true;
nvidia.enable = false;
hibernation.enable = false;
disko = {
enable = true;
fileSystem = "zfs"; # options: "zfs", "ext4"
initrd-ssh = {
enable = true;
ethernetDrivers = [ "igc" ];
};
zfs = {
enable = true;
hostID = "49e95c43";
root = {
disk1 = "nvme0n1";
disk2 = "nvme1n1";
reservation = "200G";
impermanenceRoot = true;
};
storage = {
enable = true;
disks = [
"sda"
"sdb"
];
reservation = "1500G";
mirror = true;
#amReinstalling = true;
};
};
};
}
};
```
<details>
<summary> How to bootstrap raspberry pi 5</summary>
## How to use raspberry pi 5
I have 2 configurations for the raspberry pi 5. One is for the sd card (basically bootstraps the system) and the other is for my customized system itself.
build the image first (this took about 4 hours on ymir (binfmt for aarch64 needs to be enabled if you are building on x86_64))
```sh
$ nix build -L '.#nixosConfigurations.pochita-sd.config.system.build.sdImage'
```
then to flash the image to the sd card enable zstd
```sh
$ nix-shell -p zstd
```
then flash the image to the sd card
```sh
$ zstdcat nixos-sd-image-24.05.20241116.e8c38b7-aarch64-linux.img.zst | dd of=/dev/sda status=progress
```
and voila! when you plug the sd card to the raspberry pi 5 it will boot up with the configuration that you have built. And then you can ssh into it and further configure it.
</details>
build iso with:
nix build .#nixosConfigurations.myISO.config.system.build.isoImage
# To-do list
- [x] iso image generator for nixos
- Basically the original nixos iso with added packages and tweaks.
- [ ] build custom android rom
- Or how to run nixos on the phone.
- [ ] build android apps using nix
- [ ] lichess
- [ ] termux
- [ ] build my qmk keyboard with nix
- agenix
- [ ] add my gpg keys
- [x] add ssh keys so that machines can connect to each other
- [x] module system with options
- [ ] see which derivations will be built and which will be downloaded from cache or which is already present in the nix store.
- [ ] see which python packages are giving build errors.
- [x] home-manager setup
- [ ] make a development environment nix repository
- [ ] enable swap on pochita
- [ ] learnis it possible to enable swap with sd-image?
nano /tmp/secret.key
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode destroy,format,mount --flake github:osbm/flake#apollo
sudo mkdir -p /mnt/etc/ssh
sudo ssh-keygen -t ed25519 -N "" -f /mnt/etc/ssh/initrd
sudo nixos-install --flake github:osbm/flake#apollo --root /mnt --no-root-passwd

View file

@ -1,149 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "tartarus"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "Europe/Istanbul";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "tr_TR.UTF-8";
LC_IDENTIFICATION = "tr_TR.UTF-8";
LC_MEASUREMENT = "tr_TR.UTF-8";
LC_MONETARY = "tr_TR.UTF-8";
LC_NAME = "tr_TR.UTF-8";
LC_NUMERIC = "tr_TR.UTF-8";
LC_PAPER = "tr_TR.UTF-8";
LC_TELEPHONE = "tr_TR.UTF-8";
LC_TIME = "tr_TR.UTF-8";
};
# Enable the X11 windowing system.
# You can disable this if you're only using the Wayland session.
services.xserver.enable = true;
# Enable the KDE Plasma Desktop Environment.
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "";
};
# Enable CUPS to print documents.
services.printing.enable = true;
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.osbm = {
isNormalUser = true;
description = "osbm";
extraGroups = [ "networkmanager" "wheel" ];
packages = with pkgs; [
kdePackages.kate
vscode
discord
alacritty
# thunderbird
];
};
# Install firefox.
programs.firefox.enable = true;
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes"];
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
git
gnumake
zip
fish
trash-cli
tmux
zoxide
htop
unzip
tlrc
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
}

942
flake.lock generated
View file

@ -1,24 +1,952 @@
{
"nodes": {
"nixpkgs": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1728500571,
"narHash": "sha256-dOymOQ3AfNI4Z337yEwHGohrVQb4yPODCW9MDUyAc4w=",
"lastModified": 1761656077,
"narHash": "sha256-lsNWuj4Z+pE7s0bd2OKicOFq9bK86JE0ZGeKJbNqb94=",
"owner": "ryantm",
"repo": "agenix",
"rev": "9ba0d85de3eaa7afeab493fed622008b6e4924f5",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"blobs": {
"flake": false,
"locked": {
"lastModified": 1604995301,
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
"owner": "simple-nixos-mailserver",
"repo": "blobs",
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
"type": "gitlab"
},
"original": {
"owner": "simple-nixos-mailserver",
"repo": "blobs",
"type": "gitlab"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762276996,
"narHash": "sha256-TtcPgPmp2f0FAnc+DMEw4ardEgv1SGNR3/WFGH0N19M=",
"owner": "nix-community",
"repo": "disko",
"rev": "af087d076d3860760b3323f6b583f4d828c1ac17",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"osbm-nvim",
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1760948891,
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"simple-nixos-mailserver",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"simple-nixos-mailserver",
"nixpkgs"
]
},
"locked": {
"lastModified": 1760663237,
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"simple-nixos-mailserver",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762463325,
"narHash": "sha256-33YUsWpPyeBZEWrKQ2a1gkRZ7i0XCC/2MYpU6BVeQSU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "0562fef070a1027325dd4ea10813d64d2c967b39",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709445365,
"narHash": "sha256-DVv6nd9FQBbMWbOmhq0KVqmlc3y3FMSYl49UXmMcO+0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "4de84265d7ec7634a69ba75028696d74de9a44a7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
"osbm-nvim",
"nixvim",
"nuschtosSearch",
"flake-utils"
],
"nixpkgs": [
"osbm-nvim",
"nixvim",
"nuschtosSearch",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754860581,
"narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.1.1",
"repo": "ixx",
"type": "github"
}
},
"libcamera-src": {
"flake": false,
"locked": {
"lastModified": 1725630279,
"narHash": "sha256-KH30jmHfxXq4j2CL7kv18DYECJRp9ECuWNPnqPZajPA=",
"owner": "raspberrypi",
"repo": "libcamera",
"rev": "69a894c4adad524d3063dd027f5c4774485cf9db",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"repo": "libcamera",
"rev": "69a894c4adad524d3063dd027f5c4774485cf9db",
"type": "github"
}
},
"libpisp-src": {
"flake": false,
"locked": {
"lastModified": 1724944683,
"narHash": "sha256-Fo2UJmQHS855YSSKKmGrsQnJzXog1cdpkIOO72yYAM4=",
"owner": "raspberrypi",
"repo": "libpisp",
"rev": "28196ed6edcfeda88d23cc5f213d51aa6fa17bb3",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "v1.0.7",
"repo": "libpisp",
"type": "github"
}
},
"mobile-nixos": {
"flake": false,
"locked": {
"lastModified": 1761853569,
"narHash": "sha256-miiMKVgC2WVi4ItD8rWD0ngou5WicEDAuZGhI0TfEIw=",
"owner": "mobile-nixos",
"repo": "mobile-nixos",
"rev": "1e38d4027bbb944f2af1b3241eabd9ad9c950c84",
"type": "github"
},
"original": {
"owner": "mobile-nixos",
"repo": "mobile-nixos",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762501326,
"narHash": "sha256-QbhsksHaIN6qU3oXhwUFbYycKX1GRxObpQSWAM5fhRY=",
"owner": "nix-darwin",
"repo": "nix-darwin",
"rev": "e2b82ebd0f990a5d1b68fcc761b3d6383c86ccfd",
"type": "github"
},
"original": {
"owner": "nix-darwin",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-formatter-pack": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs"
],
"nmd": [
"nix-on-droid",
"nmd"
],
"nmt": "nmt"
},
"locked": {
"lastModified": 1705252799,
"narHash": "sha256-HgSTREh7VoXjGgNDwKQUYcYo13rPkltW7IitHrTPA5c=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "2de39dedd79aab14c01b9e2934842051a160ffa5",
"type": "github"
},
"original": {
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"type": "github"
}
},
"nix-formatter-pack_2": {
"inputs": {
"nixpkgs": [
"osbm-nvim",
"nixpkgs"
],
"nmd": "nmd_2",
"nmt": "nmt_2"
},
"locked": {
"lastModified": 1756744433,
"narHash": "sha256-6BSEvkprwEQDQQgW5UH/1GkBPGM8M9+qX6o9ePslr6E=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "63b748033a3fa0af80f8ed908521122e48858c30",
"type": "github"
},
"original": {
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"type": "github"
}
},
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762055842,
"narHash": "sha256-Pu1v3mlFhRzZiSxVHb2/i/f5yeYyRNqr0RvEUJ4UgHo=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "359ff6333a7b0b60819d4c20ed05a3a1f726771f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nix-on-droid": {
"inputs": {
"home-manager": "home-manager_2",
"nix-formatter-pack": "nix-formatter-pack",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-docs": "nixpkgs-docs",
"nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap",
"nmd": "nmd"
},
"locked": {
"lastModified": 1760773689,
"narHash": "sha256-TaRP+sx4EiqBcfdKVYKT+RbrRHioJF+HUmiaUaHj5I8=",
"owner": "nix-community",
"repo": "nix-on-droid",
"rev": "1c306c07b3e99ab79b967ead32f9af7b8672a7ef",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-on-droid",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1762463231,
"narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d51c28603def282a24fa034bcb007e2bcb5b5dd0",
"repo": "nixos-hardware",
"rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1762363567,
"narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-25_05": {
"locked": {
"lastModified": 1761999846,
"narHash": "sha256-IYlYnp4O4dzEpL77BD/lj5NnJy2J8qbHkNSFiPBCbqo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3de8f8d73e35724bf9abef41f1bdbedda1e14a31",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-docs": {
"locked": {
"lastModified": 1705957679,
"narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9a333eaa80901efe01df07eade2c16d183761fa3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-for-bootstrap": {
"locked": {
"lastModified": 1720244366,
"narHash": "sha256-WrDV0FPMVd2Sq9hkR5LNHudS3OSMmUrs90JUTN+MXpA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1761373498,
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1761656231,
"narHash": "sha256-EiED5k6gXTWoAIS8yQqi5mAX6ojnzpHwAQTS3ykeYMg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e99366c665bdd53b7b500ccdc5226675cfc51f45",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_3",
"nuschtosSearch": "nuschtosSearch",
"systems": "systems_3"
},
"locked": {
"lastModified": 1761744315,
"narHash": "sha256-OknzyEoI+VEYgk/FWMyx3tvjb/MPPyqS+G/aemDz51w=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "6233fc6b2c3f203d8a5970f4a2c1df5777902717",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nmd": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs-docs"
],
"scss-reset": "scss-reset"
},
"locked": {
"lastModified": 1705050560,
"narHash": "sha256-x3zzcdvhJpodsmdjqB4t5mkVW22V3wqHLOun0KRBzUI=",
"owner": "~rycee",
"repo": "nmd",
"rev": "66d9334933119c36f91a78d565c152a4fdc8d3d3",
"type": "sourcehut"
},
"original": {
"owner": "~rycee",
"repo": "nmd",
"type": "sourcehut"
}
},
"nmd_2": {
"flake": false,
"locked": {
"lastModified": 1666190571,
"narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=",
"owner": "rycee",
"repo": "nmd",
"rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmd",
"type": "gitlab"
}
},
"nmt": {
"flake": false,
"locked": {
"lastModified": 1648075362,
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=",
"owner": "rycee",
"repo": "nmt",
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmt",
"type": "gitlab"
}
},
"nmt_2": {
"flake": false,
"locked": {
"lastModified": 1648075362,
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=",
"owner": "rycee",
"repo": "nmt",
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmt",
"type": "gitlab"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils",
"ixx": "ixx",
"nixpkgs": [
"osbm-nvim",
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1761730856,
"narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=",
"owner": "NuschtOS",
"repo": "search",
"rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"osbm-nvim": {
"inputs": {
"nix-formatter-pack": "nix-formatter-pack_2",
"nixpkgs": "nixpkgs_2",
"nixvim": "nixvim"
},
"locked": {
"lastModified": 1761771567,
"narHash": "sha256-EC8Bpx6KIU0fHbhQVM6p8j+ZH56UfZ7mrVTl80d8Vcs=",
"owner": "osbm",
"repo": "osbm-nvim",
"rev": "8f08a58beafbcb94ddd6fb2d24975dd736e236d0",
"type": "github"
},
"original": {
"owner": "osbm",
"repo": "osbm-nvim",
"type": "github"
}
},
"raspberry-pi-nix": {
"inputs": {
"libcamera-src": "libcamera-src",
"libpisp-src": "libpisp-src",
"nixpkgs": "nixpkgs_4",
"rpi-bluez-firmware-src": "rpi-bluez-firmware-src",
"rpi-firmware-nonfree-src": "rpi-firmware-nonfree-src",
"rpi-firmware-src": "rpi-firmware-src",
"rpi-linux-6_12_17-src": "rpi-linux-6_12_17-src",
"rpi-linux-6_6_78-src": "rpi-linux-6_6_78-src",
"rpi-linux-stable-src": "rpi-linux-stable-src",
"rpicam-apps-src": "rpicam-apps-src"
},
"locked": {
"lastModified": 1742223591,
"narHash": "sha256-ZNTz8r5jlJ1jvpqf5+aUYgpnYJSVX0iP14doOc1Hm0E=",
"owner": "nix-community",
"repo": "raspberry-pi-nix",
"rev": "3e8100d5e976a6a2be363015cb33463af9ef441a",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "raspberry-pi-nix",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
"agenix": "agenix",
"disko": "disko",
"home-manager": "home-manager",
"impermanence": "impermanence",
"mobile-nixos": "mobile-nixos",
"nix-darwin": "nix-darwin",
"nix-index-database": "nix-index-database",
"nix-on-droid": "nix-on-droid",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs",
"osbm-nvim": "osbm-nvim",
"raspberry-pi-nix": "raspberry-pi-nix",
"simple-nixos-mailserver": "simple-nixos-mailserver"
}
},
"rpi-bluez-firmware-src": {
"flake": false,
"locked": {
"lastModified": 1708969706,
"narHash": "sha256-KakKnOBeWxh0exu44beZ7cbr5ni4RA9vkWYb9sGMb8Q=",
"owner": "RPi-Distro",
"repo": "bluez-firmware",
"rev": "78d6a07730e2d20c035899521ab67726dc028e1c",
"type": "github"
},
"original": {
"owner": "RPi-Distro",
"ref": "bookworm",
"repo": "bluez-firmware",
"type": "github"
}
},
"rpi-firmware-nonfree-src": {
"flake": false,
"locked": {
"lastModified": 1723266537,
"narHash": "sha256-T7eTKXqY9cxEMdab8Snda4CEOrEihy5uOhA6Fy+Mhnw=",
"owner": "RPi-Distro",
"repo": "firmware-nonfree",
"rev": "4b356e134e8333d073bd3802d767a825adec3807",
"type": "github"
},
"original": {
"owner": "RPi-Distro",
"ref": "bookworm",
"repo": "firmware-nonfree",
"type": "github"
}
},
"rpi-firmware-src": {
"flake": false,
"locked": {
"lastModified": 1728405098,
"narHash": "sha256-4gnK0KbqFnjBmWia9Jt2gveVWftmHrprpwBqYVqE/k0=",
"owner": "raspberrypi",
"repo": "firmware",
"rev": "7bbb5f80d20a2335066a8781459c9f33e5eebc64",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "1.20241008",
"repo": "firmware",
"type": "github"
}
},
"rpi-linux-6_12_17-src": {
"flake": false,
"locked": {
"lastModified": 1740765145,
"narHash": "sha256-hoCsGc4+RC/2LmxDtswLBL5ZhWlw4vSiL4Vkl39r2MU=",
"owner": "raspberrypi",
"repo": "linux",
"rev": "5985ce32e511f4e8279a841a1b06a8c7d972b386",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "rpi-6.12.y",
"repo": "linux",
"type": "github"
}
},
"rpi-linux-6_6_78-src": {
"flake": false,
"locked": {
"lastModified": 1740503700,
"narHash": "sha256-Y8+ot4Yi3UKwlZK3ap15rZZ16VZDvmeFkD46+6Ku7bE=",
"owner": "raspberrypi",
"repo": "linux",
"rev": "2e071057fded90e789c0101498e45a1778be93fe",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "rpi-6.6.y",
"repo": "linux",
"type": "github"
}
},
"rpi-linux-stable-src": {
"flake": false,
"locked": {
"lastModified": 1728403745,
"narHash": "sha256-phCxkuO+jUGZkfzSrBq6yErQeO2Td+inIGHxctXbD5U=",
"owner": "raspberrypi",
"repo": "linux",
"rev": "5aeecea9f4a45248bcf564dec924965e066a7bfd",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "stable_20241008",
"repo": "linux",
"type": "github"
}
},
"rpicam-apps-src": {
"flake": false,
"locked": {
"lastModified": 1727515047,
"narHash": "sha256-qCYGrcibOeGztxf+sd44lD6VAOGoUNwRqZDdAmcTa/U=",
"owner": "raspberrypi",
"repo": "rpicam-apps",
"rev": "a8ccf9f3cd9df49875dfb834a2b490d41d226031",
"type": "github"
},
"original": {
"owner": "raspberrypi",
"ref": "v1.5.2",
"repo": "rpicam-apps",
"type": "github"
}
},
"scss-reset": {
"flake": false,
"locked": {
"lastModified": 1631450058,
"narHash": "sha256-muDlZJPtXDIGevSEWkicPP0HQ6VtucbkMNygpGlBEUM=",
"owner": "andreymatin",
"repo": "scss-reset",
"rev": "0cf50e27a4e95e9bb5b1715eedf9c54dee1a5a91",
"type": "github"
},
"original": {
"owner": "andreymatin",
"repo": "scss-reset",
"type": "github"
}
},
"simple-nixos-mailserver": {
"inputs": {
"blobs": "blobs",
"flake-compat": "flake-compat",
"git-hooks": "git-hooks",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-25_05": "nixpkgs-25_05"
},
"locked": {
"lastModified": 1762302830,
"narHash": "sha256-f3xe6CRPT51vCQFZotJOXi/JpGOiukz0WIa86arJSE8=",
"owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver",
"rev": "58659fbdfd8aba9bd8f4517d3e5c388c4d8266c4",
"type": "gitlab"
},
"original": {
"owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver",
"type": "gitlab"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},

132
flake.nix
View file

@ -1,19 +1,131 @@
{
description = "My system configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
nixConfig = {
extra-substituters = [
"https://nix-community.cachix.org"
# "http://wallfacer.curl-boga.ts.net:7080/main"
];
extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
# "main:2AjPdIsbKyoTGuw+4x2ZXMUT/353CXosW9pdbTQtjqw="
];
};
outputs = { self, nixpkgs, ... }:
inputs = {
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nix-darwin = {
url = "github:nix-darwin/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-on-droid = {
url = "github:nix-community/nix-on-droid";
inputs.nixpkgs.follows = "nixpkgs";
};
osbm-nvim.url = "github:osbm/osbm-nvim";
raspberry-pi-nix = {
url = "github:nix-community/raspberry-pi-nix";
};
# colmena = {
# url = "github:zhaofengli/colmena";
# inputs.nixpkgs.follows = "nixpkgs";
# };
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
impermanence.url = "github:nix-community/impermanence";
mobile-nixos = {
url = "github:mobile-nixos/mobile-nixos";
flake = false;
};
simple-nixos-mailserver = {
url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
nix-on-droid,
nix-darwin,
...
}@inputs:
let
lib = nixpkgs.lib;
in {
nixosConfigurations = {
tartarus = lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./configuration.nix ];
inherit (self) outputs;
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems f;
makePkgs = system: import nixpkgs { inherit system; };
makeNixosConfig =
configName:
nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs outputs; };
modules = [ ./hosts/nixos/${configName}/configuration.nix ];
};
nixosConfigNames = builtins.attrNames (builtins.readDir ./hosts/nixos);
in
{
nixosConfigurations = nixpkgs.lib.genAttrs nixosConfigNames makeNixosConfig;
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
extraSpecialArgs = { inherit inputs outputs; };
pkgs = import nixpkgs { system = "aarch64-linux"; };
modules = [ ./hosts/nixOnDroidHosts/atreus/configuration.nix ];
};
darwinConfigurations.prometheus = nix-darwin.lib.darwinSystem {
system = "x86_64-darwin";
modules = [ ./hosts/darwinHosts/prometheus/configuration.nix ];
specialArgs = { inherit inputs outputs; };
};
lib = import ./lib { inherit (nixpkgs) lib; };
formatter = forAllSystems (system: (makePkgs system).nixfmt-tree);
nixosModules.default = ./modules/nixos;
homeManagerModules.default = ./modules/home-manager;
# packages = forAllSystems (
# system:
# let
# makeNixosConfigWithSystemOverride =
# configName:
# nixpkgs.lib.nixosSystem {
# specialArgs = { inherit inputs outputs; };
# modules = [
# ./hosts/nixos/${configName}/configuration.nix
# { nixpkgs.hostPlatform = nixpkgs.lib.mkForce system; }
# ];
# };
# dotfilesMachineNames = [
# "ymir"
# "pochita"
# "tartarus"
# "wallfacer"
# ];
# in
# builtins.listToAttrs (
# map (name: {
# name = "${name}-dotfiles";
# value = (makeNixosConfigWithSystemOverride name).config.home-manager.users.osbm.home-files;
# }) dotfilesMachineNames
# )
# );
};
}

View file

@ -0,0 +1,59 @@
{
pkgs,
inputs,
...
}:
{
imports = [
../../../modules/nixos/options.nix
../../../modules/nixos/programs/command-line.nix
../../../modules/nixos/programs/neovim.nix
../../../modules/nixos/system/nix-settings.nix
inputs.home-manager.darwinModules.home-manager
];
osbmModules = {
desktopEnvironment = "none"; # fuckass darwin defaults
machineType = "laptop";
programs.neovim.enable = true;
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
verbose = true;
backupFileExtension = "hmbak";
users.osbm = {
imports = [ ../../../modules/home-manager ];
home.stateVersion = "24.11";
};
};
services.tailscale = {
enable = true;
};
programs.fish.enable = true;
# osbmModules.setUsers = false;
users.users.osbm = {
description = "osbm";
shell = pkgs.fish;
home = "/Users/osbm";
};
environment.systemPackages = with pkgs; [
alacritty
# ghostty
kitty
vscode
git
lazygit
# blender
# libreoffice
# ungoogled-chromium
code-cursor
ollama
];
system.stateVersion = 6;
nixpkgs.hostPlatform = "x86_64-darwin";
}

View file

@ -0,0 +1,97 @@
{
pkgs,
...
}:
{
user.userName = "osbm";
# Read the changelog before changing this value
system.stateVersion = "24.05";
# Set up nix for flakes
nix.extraOptions = ''
experimental-features = nix-command flakes
'';
build.activation.sshd = ''
if [ ! -e /etc/ssh/ssh_host_ed25519_key ]; then
$VERBOSE_ECHO "Generating host keys..."
$DRY_RUN_CMD ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -a 32 -f "/etc/ssh/ssh_host_ed25519_key" -N ""
fi
'';
environment = {
packages = with pkgs; [
vim # or some other editor, e.g. nano or neovim
procps
inetutils
findutils
utillinux
tzdata
hostname
man
gnugrep
zip
unzip
fish
tmux
nano
ripgrep
git
openssh
just
nh
(pkgs.writeShellScriptBin "lg-rerouting" ''
${pkgs.lazygit}/bin/lazygit --path /storage/emulated/0/Documents/rerouting
'')
(pkgs.writeShellScriptBin "sshd-start" ''
echo "Starting sshd on port 8022"
${pkgs.openssh}/bin/sshd
'')
(pkgs.writeShellScriptBin "wake-ymir" ''
echo waking up ymir
${pkgs.wakeonlan}/bin/wakeonlan 04:7c:16:e6:d9:13
'')
# obsidian tools
# i need a background process that can just keep pulling and pushing changes just like the obsidian git plugin
# (pkgs.writeShellScriptBin "rerouting-sync-start" ''
# cd /storage/emulated/0/Documents/rerouting
# git pull
# git add --all
# git commit -m "Android sync"
# git push
# '')
(pkgs.writeShellScriptBin "rerouting-status" ''
cd /storage/emulated/0/Documents/rerouting
git fetch
git status
'')
(pkgs.writeShellScriptBin "rerouting-pull" ''
cd /storage/emulated/0/Documents/rerouting
git pull
'')
(pkgs.writeShellScriptBin "rerouting-push" ''
cd /storage/emulated/0/Documents/rerouting
git add --all
git commit -m "Android sync"
git push
'')
ani-cli
];
# Backup etc files instead of failing to activate generation if a file already exists in /etc
etcBackupExtension = ".bak";
etc."ssh/sshd_config".text = ''
AcceptEnv LANG LC_*
KbdInteractiveAuthentication no
PasswordAuthentication no
PermitRootLogin no
Port 8022
PrintMotd no
AuthorizedKeysFile /etc/ssh/authorized_keys.d/%u
'';
etc."ssh/authorized_keys.d/osbm".text = ''
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfnV+qqUCJf92npNW4Jy0hIiepCJFBDJHXBHnUlNX0k
'';
};
}

View file

@ -0,0 +1,97 @@
{
pkgs,
...
}:
{
user.userName = "osbm";
# Read the changelog before changing this value
system.stateVersion = "25.11";
# Set up nix for flakes
nix.extraOptions = ''
experimental-features = nix-command flakes
'';
build.activation.sshd = ''
if [ ! -e /etc/ssh/ssh_host_ed25519_key ]; then
$VERBOSE_ECHO "Generating host keys..."
$DRY_RUN_CMD ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -a 32 -f "/etc/ssh/ssh_host_ed25519_key" -N ""
fi
'';
environment = {
packages = with pkgs; [
vim # or some other editor, e.g. nano or neovim
procps
inetutils
findutils
utillinux
tzdata
hostname
man
gnugrep
zip
unzip
fish
tmux
nano
ripgrep
git
openssh
just
nh
(pkgs.writeShellScriptBin "lg-rerouting" ''
${pkgs.lazygit}/bin/lazygit --path /storage/emulated/0/Documents/rerouting
'')
(pkgs.writeShellScriptBin "sshd-start" ''
echo "Starting sshd on port 8022"
${pkgs.openssh}/bin/sshd
'')
(pkgs.writeShellScriptBin "wake-ymir" ''
echo waking up ymir
${pkgs.wakeonlan}/bin/wakeonlan 04:7c:16:e6:d9:13
'')
# obsidian tools
# i need a background process that can just keep pulling and pushing changes just like the obsidian git plugin
# (pkgs.writeShellScriptBin "rerouting-sync-start" ''
# cd /storage/emulated/0/Documents/rerouting
# git pull
# git add --all
# git commit -m "Android sync"
# git push
# '')
(pkgs.writeShellScriptBin "rerouting-status" ''
cd /storage/emulated/0/Documents/rerouting
git fetch
git status
'')
(pkgs.writeShellScriptBin "rerouting-pull" ''
cd /storage/emulated/0/Documents/rerouting
git pull
'')
(pkgs.writeShellScriptBin "rerouting-push" ''
cd /storage/emulated/0/Documents/rerouting
git add --all
git commit -m "Android sync"
git push
'')
ani-cli
];
# Backup etc files instead of failing to activate generation if a file already exists in /etc
etcBackupExtension = ".bak";
etc."ssh/sshd_config".text = ''
AcceptEnv LANG LC_*
KbdInteractiveAuthentication no
PasswordAuthentication no
PermitRootLogin no
Port 8022
PrintMotd no
AuthorizedKeysFile /etc/ssh/authorized_keys.d/%u
'';
etc."ssh/authorized_keys.d/osbm".text = ''
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfnV+qqUCJf92npNW4Jy0hIiepCJFBDJHXBHnUlNX0k
'';
};
}

View file

@ -0,0 +1,110 @@
{ lib, ... }:
{
imports = [
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "none";
machineType = "server";
users = [ "osbm" ];
services = {
glance.enable = true;
# anubis.enable = true;
mailserver.enable = true;
nginx.enable = true;
forgejo.enable = true;
vaultwarden.enable = true;
immich.enable = true;
actual.enable = true;
firefox-syncserver.enable = true;
# seafile.enable = true;
};
hardware = {
sound.enable = false;
hibernation.enable = false;
disko = {
enable = true;
fileSystem = "zfs";
initrd-ssh = {
enable = true;
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfnV+qqUCJf92npNW4Jy0hIiepCJFBDJHXBHnUlNX0k"
];
ethernetDrivers = [
"virtio_pci" # QEMU support
"virtio_net"
"virtio_pci"
"virtio_blk"
"virtio_balloon"
"virtio_console"
"virtio_gpu"
];
};
zfs = {
enable = true;
hostID = "0f7de22e";
root = {
useTmpfs = false; # Use ZFS root, not tmpfs
encrypt = true;
disk1 = "vda";
impermanenceRoot = true; # Wipe root on boot with ZFS snapshots
};
};
};
};
};
system.stateVersion = "25.11";
networking.hostName = "apollo";
# Enable zram swap
zramSwap.enable = true;
users.mutableUsers = false;
# Disable sudo lecture message
security.sudo.extraConfig = ''
Defaults lecture = never
'';
# server is in germany
time.timeZone = "Europe/Berlin"; # or "Europe/Amsterdam"
# Network configuration
networking = {
useDHCP = false;
interfaces.eth0 = {
useDHCP = false;
ipv4.addresses = [
{
address = "152.53.152.129";
prefixLength = 22;
}
];
ipv6.addresses = [
{
address = "2a00:11c0:47:3b2a::1";
prefixLength = 64;
}
];
};
defaultGateway = "152.53.152.1";
defaultGateway6 = {
address = "fe80::1";
interface = "eth0";
};
nameservers = [
"1.1.1.1"
"8.8.8.8"
]; # Cloudflare and Google DNS
};
# Override initrd kernel params for static IP
boot.kernelParams = [ "ip=152.53.152.129::152.53.152.1:255.255.252.0::eth0:none" ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -0,0 +1,46 @@
{
inputs,
pkgs,
lib,
...
}:
{
imports = [
(import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-enchilada"; })
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "gnome";
machineType = "mobile";
hardware.systemd-boot.enable = false; # Mobile devices use different bootloader
programs.graphical.enable = false;
};
# mobile-nixos needs aliases (uses nettools instead of net-tools)
nixpkgs = {
config = {
allowAliases = true;
allowUnfreePredicate =
pkg:
builtins.elem (lib.getName pkg) [
"oneplus-sdm845-firmware-zstd"
"oneplus-sdm845-firmware"
];
};
system = "aarch64-linux";
};
# Minimal essential packages
environment.systemPackages = with pkgs; [
git
vim
wget
curl
lazygit
asciiquarium
neovim
kitty
];
system.stateVersion = "25.11";
}

View file

@ -0,0 +1,48 @@
{
inputs,
...
}:
{
imports = [
./sd-image.nix
"${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
./hardware-configuration.nix
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "none";
fonts.enable = false;
services.tailscale.enable = true;
hardware.systemd-boot.enable = false; # SD card uses extlinux
};
system.stateVersion = "25.05";
networking.hostName = "harmonica";
networking = {
interfaces."wlan0".useDHCP = true;
wireless = {
enable = true;
interfaces = [ "wlan0" ];
networks = {
"House_Bayram" = {
psk = "PASSWORD";
};
"it_hurts_when_IP" = {
psk = "PASSWORD";
};
};
};
};
# NTP time sync.
services.timesyncd.enable = true;
security.sudo = {
enable = true;
wheelNeedsPassword = false;
};
services.getty.autologinUser = "osbm";
}

View file

@ -0,0 +1,85 @@
{
pkgs,
lib,
...
}:
{
# Some packages (ahci fail... this bypasses that) https://discourse.nixos.org/t/does-pkgs-linuxpackages-rpi3-build-all-required-kernel-modules/42509
nixpkgs.overlays = [
(_final: super: {
makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; });
})
];
zramSwap = {
enable = true;
algorithm = "zstd";
};
image.fileName = "zero2.img";
sdImage = {
# bzip2 compression takes loads of time with emulation, skip it. Enable this if you're low on space.
compressImage = false;
extraFirmwareConfig = {
# Give up VRAM for more Free System Memory
# - Disable camera which automatically reserves 128MB VRAM
start_x = 0;
# - Reduce allocation of VRAM to 16MB minimum for non-rotated (32MB for rotated)
gpu_mem = 16;
# Configure display to 800x600 so it fits on most screens
# * See: https://elinux.org/RPi_Configuration
hdmi_group = 2;
hdmi_mode = 8;
};
};
hardware = {
enableRedistributableFirmware = lib.mkForce false;
firmware = [ pkgs.raspberrypiWirelessFirmware ]; # Keep this to make sure wifi works
i2c.enable = true;
deviceTree.filter = "bcm2837-rpi-zero*.dtb";
deviceTree.overlays = [
{
name = "enable-i2c";
dtsText = ''
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2837";
fragment@0 {
target = <&i2c1>;
__overlay__ {
status = "okay";
};
};
};
'';
}
];
};
boot = {
kernelPackages = pkgs.linuxKernel.packages.linux_rpi3;
initrd.availableKernelModules = [
"xhci_pci"
"usbhid"
"usb_storage"
];
loader = {
grub.enable = false;
generic-extlinux-compatible.enable = true;
};
extraModprobeConfig = ''
options brcmfmac roamoff=1 feature_disable=0x82000
'';
# Avoids warning: mdadm: Neither MAILADDR nor PROGRAM has been set. This will cause the `mdmon` service to crash.
# See: https://github.com/NixOS/nixpkgs/issues/254807
swraid.enable = lib.mkForce false;
};
nixpkgs.hostPlatform = "aarch64-linux";
}

View file

@ -0,0 +1,39 @@
# This module extends the official sd-image.nix with the following:
# - ability to add options to the config.txt firmware
{
config,
lib,
...
}:
{
options.sdImage = with lib; {
extraFirmwareConfig = mkOption {
type = types.attrs;
default = { };
description = lib.mdDoc ''
Extra configuration to be added to config.txt.
'';
};
};
config = {
sdImage.populateFirmwareCommands =
lib.mkIf ((lib.length (lib.attrValues config.sdImage.extraFirmwareConfig)) > 0)
(
let
# Convert the set into a string of lines of "key=value" pairs.
keyValueMap = name: value: name + "=" + toString value;
keyValueList = lib.mapAttrsToList keyValueMap config.sdImage.extraFirmwareConfig;
extraFirmwareConfigString = lib.concatStringsSep "\n" keyValueList;
in
lib.mkAfter ''
config=firmware/config.txt
# The initial file has just been created without write permissions. Add them to be able to append the file.
chmod u+w $config
echo "\n# Extra configuration" >> $config
echo "${extraFirmwareConfigString}" >> $config
chmod u-w $config
''
);
};
}

View file

@ -0,0 +1,25 @@
{
imports = [
./hardware-configuration.nix
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "none";
machineType = "server";
hardware.systemd-boot.enable = false; # Uses extlinux bootloader
};
system.stateVersion = "25.05";
networking.hostName = "harmonica";
# NTP time sync.
services.timesyncd.enable = true;
security.sudo = {
enable = true;
wheelNeedsPassword = false;
};
# services.getty.autologinUser = "osbm";
}

View file

@ -0,0 +1,71 @@
{
pkgs,
lib,
...
}:
{
# Some packages (ahci fail... this bypasses that) https://discourse.nixos.org/t/does-pkgs-linuxpackages-rpi3-build-all-required-kernel-modules/42509
nixpkgs.overlays = [
(_final: super: {
makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; });
})
];
zramSwap = {
enable = true;
algorithm = "zstd";
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
fsType = "ext4";
};
hardware = {
enableRedistributableFirmware = lib.mkForce false;
firmware = [ pkgs.raspberrypiWirelessFirmware ]; # Keep this to make sure wifi works
i2c.enable = true;
deviceTree.filter = "bcm2837-rpi-zero*.dtb";
deviceTree.overlays = [
{
name = "enable-i2c";
dtsText = ''
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2837";
fragment@0 {
target = <&i2c1>;
__overlay__ {
status = "okay";
};
};
};
'';
}
];
};
boot = {
kernelPackages = pkgs.linuxKernel.packages.linux_rpi3;
initrd.availableKernelModules = [
"xhci_pci"
"usbhid"
"usb_storage"
];
loader = {
grub.enable = false;
generic-extlinux-compatible.enable = true;
};
extraModprobeConfig = ''
options brcmfmac roamoff=1 feature_disable=0x82000
'';
# Avoids warning: mdadm: Neither MAILADDR nor PROGRAM has been set. This will cause the `mdmon` service to crash.
# See: https://github.com/NixOS/nixpkgs/issues/254807
swraid.enable = lib.mkForce false;
};
nixpkgs.hostPlatform = "aarch64-linux";
}

View file

@ -0,0 +1,39 @@
{
lib,
pkgs,
inputs,
...
}:
{
imports = [
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix"
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
nixpkgs.config.allowUnfree = true;
# Set environment variable for allowing non-free packages
environment.sessionVariables = {
NIXPKGS_ALLOW_UNFREE = "1";
};
environment.systemPackages = with pkgs; [
# Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
git
curl
parted
nano
comma
just
age
neovim
wget
];
services.openssh.enable = true;
}

View file

@ -0,0 +1,57 @@
{
pkgs,
inputs,
...
}:
{
imports = [
inputs.raspberry-pi-nix.nixosModules.raspberry-pi
inputs.raspberry-pi-nix.nixosModules.sd-image
];
# bcm2711 for rpi 3, 3+, 4, zero 2 w
# bcm2712 for rpi 5
# See the docs at:
# https://www.raspberrypi.com/documentation/computers/linux_kernel.html#native-build-configuration
raspberry-pi-nix.board = "bcm2712";
time.timeZone = "America/Chicago";
users.users.root = {
initialPassword = "root";
};
# Define a user account. Don't forget to set a password with passwd.
users.users.osbm = {
isNormalUser = true;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
initialPassword = "changeme";
};
networking = {
hostName = "pochita";
};
environment.systemPackages = with pkgs; [
neovim
git-lfs
git
wakeonlan
htop
unzip
zip
wget
];
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
nix.settings.trusted-users = [
"root"
"osbm"
];
nixpkgs.hostPlatform = "aarch64-linux";
services.openssh = {
enable = true;
};
system.stateVersion = "25.05";
}

View file

@ -0,0 +1,41 @@
{
pkgs,
inputs,
...
}:
{
imports = [
./hardware-configuration.nix
../../../modules/nixos
inputs.raspberry-pi-nix.nixosModules.raspberry-pi
inputs.nixos-hardware.nixosModules.raspberry-pi-5
];
osbmModules = {
desktopEnvironment = "none";
machineType = "server";
hardware.systemd-boot.enable = false; # Raspberry Pi uses init-script bootloader
services = {
wanikani-bypass-lessons.enable = true;
wanikani-fetch-data.enable = true;
wanikani-stats.enable = true;
};
};
zramSwap.enable = true;
networking.hostName = "pochita";
# log of shame: osbm blamed nix when he wrote "hostname" instead of "hostName"
environment.systemPackages = [
pkgs.raspberrypi-eeprom
];
# The board and wanted kernel version
raspberry-pi-nix = {
board = "bcm2712";
#kernel-version = "v6_10_12";
};
system.stateVersion = "25.05";
}

View file

@ -0,0 +1,47 @@
{
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
availableKernelModules = [ ];
kernelModules = [ ];
};
kernelModules = [ ];
extraModulePackages = [ ];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
fsType = "ext4";
};
"/boot/firmware" = {
device = "/dev/disk/by-uuid/2178-694E";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.end0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
}

View file

@ -0,0 +1,21 @@
{
imports = [
./hardware-configuration.nix
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "plasma";
machineType = "laptop";
emulation.aarch64.enable = true;
hardware.sound.enable = true;
programs.steam.enable = true;
};
networking.hostName = "tartarus"; # Define your hostname.
# Enable networking
networking.networkmanager.enable = true;
system.stateVersion = "24.05"; # lalalalala
}

View file

@ -0,0 +1,53 @@
{
config,
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usb_storage"
"sd_mod"
];
initrd.kernelModules = [ ];
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/246d3df7-3578-44b2-8aee-c1ed33581184";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/33D0-6524";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [
{ device = "/dev/disk/by-uuid/b74b04db-c7ea-44e7-b3fe-15cd6d0cd851"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,18 @@
{
imports = [
./hardware-configuration.nix
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "none";
machineType = "server";
services = {
hydra.enable = true;
atticd.enable = true;
cloudflared.enable = true;
};
};
networking.hostName = "wallfacer";
system.stateVersion = "25.05";
}

View file

@ -0,0 +1,68 @@
{
config,
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd.availableKernelModules = [
"ahci"
"ehci_pci"
"megaraid_sas"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
initrd.kernelModules = [ ];
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/8270dba5-6d89-438a-90bd-d9f29b20cb5b";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/A1EB-43F8";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
"/data/atreus" = {
device = "/dev/disk/by-uuid/1840c2af-fdb2-48b6-8555-2cecd1afb106";
fsType = "ext4";
};
# 500 gb nvme pcie
"/data/kasio" = {
device = "/dev/disk/by-uuid/af74aa48-8513-4e31-a4b7-9fdd138e0002";
fsType = "ext4";
};
};
swapDevices = [
{ device = "/dev/disk/by-uuid/534ea30c-2664-498b-915f-41b037eba01b"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1np0.useDHCP = lib.mkDefault true;
# networking.interfaces.eno2np1.useDHCP = lib.mkDefault true;
# networking.interfaces.eno3.useDHCP = lib.mkDefault true;
# networking.interfaces.eno4.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,43 @@
{
imports = [
./hardware-configuration.nix
../../../modules/nixos
];
osbmModules = {
desktopEnvironment = "plasma";
machineType = "desktop";
programs = {
adbFastboot.enable = true;
steam.enable = true;
};
emulation.aarch64.enable = true;
virtualisation.docker.enable = true;
hardware = {
hibernation.enable = false;
wakeOnLan.enable = true;
sound.enable = true;
nvidia.enable = true;
};
services = {
ollama.enable = true;
};
i18n.enable = true;
};
networking = {
hostName = "ymir"; # Define your hostname.
firewall.allowedTCPPorts = [
8889
8000
];
# Enable networking
networkmanager.enable = true;
};
virtualisation.waydroid.enable = true;
system.stateVersion = "25.05"; # changing this is a great taboo of the nixos world
}

View file

@ -1,39 +1,58 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
config,
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/246d3df7-3578-44b2-8aee-c1ed33581184";
boot = {
initrd = {
availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
kernelModules = [ ];
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/fd6792b4-d1ec-493c-a686-64dbeaac3371";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/33D0-6524";
"/boot" = {
device = "/dev/disk/by-uuid/383D-1E8A";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
options = [
"fmask=0077"
"dmask=0077"
];
};
};
swapDevices =
[ { device = "/dev/disk/by-uuid/b74b04db-c7ea-44e7-b3fe-15cd6d0cd851"; }
];
swapDevices = [
{ device = "/dev/disk/by-uuid/33c6277d-eb0a-487d-8be0-829829a8a308"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.enp3s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";

78
justfile Normal file
View file

@ -0,0 +1,78 @@
_default:
@just --list --unsorted
check-git:
# git must be clean
test -z "$(git status --porcelain)"
[linux]
build *args: check-git
sudo nixos-rebuild build --flake . {{args}} |& nom
nvd diff /run/current-system ./result
[linux]
switch *args: check-git remove-hm-backup-files
#!/usr/bin/env sh
if [[ "$(hostname)" == "localhost" ]]; then
nix-on-droid switch --flake . {{args}}
else
nh os switch . {{args}} --accept-flake-config
fi
[macos]
switch *args: check-git
nh darwin switch . -- --accept-flake-config {{args}}
remove-hm-backup-files:
#!/usr/bin/env sh
if [ -f ~/.gtkrc-2.0.hmbak ]; then
rm ~/.gtkrc-2.0.hmbak
fi
test:
nh os test .
update:
nix flake update
check:
nix flake check
repl:
nix repl -f flake:nixpkgs
collect-garbage:
sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations old
# home-manager expire-generations now
sudo nix-collect-garbage --delete-older-than 3d
list-generations:
nixos-rebuild list-generations
build-sd-image-harmonica: check-git
nom build -L .#nixosConfigurations.harmonica-sd.config.system.build.sdImage
build-sd-image-pochita: check-git
nom build -L .#nixosConfigurations.pochita-sd.config.system.build.sdImage
build-iso: check-git
nom build -L .#nixosConfigurations.myISO.config.system.build.isoImage
flash-sd-image-harmonica:
# raise error because this command should be edited before running
false
nom build -L .#nixosConfigurations.harmonica-sd.config.system.build.sdImage
sudo dd if=result/sd-image/nixos-image-sd-card-25.05.20250224.0196c01-aarch64-linux.img of=/dev/sda bs=4M status=progress conv=fsync
setup-apollo-nixos:
nano /tmp/secret.key
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode destroy,format,mount --flake github:osbm/flake#apollo
sudo mkdir -p /mnt/etc/ssh
sudo ssh-keygen -t ed25519 -N "" -f /mnt/etc/ssh/initrd
sudo nixos-install --flake github:osbm/flake#apollo --root /mnt --no-root-passwd
sweep *args:
nix run github:jzbor/nix-sweep -- {{args}}

9
lib/default.nix Normal file
View file

@ -0,0 +1,9 @@
{ lib, ... }:
{
importList = lib.mapAttrsToList (name: _path: ./. + "/${name}") (
lib.filterAttrs (
filename: kind: filename != "default.nix" && (kind == "regular" || kind == "directory")
) (builtins.readDir ./.)
);
}

7
modules/default.nix Normal file
View file

@ -0,0 +1,7 @@
# Main module entry point
# Import the new NixOS module system
{
imports = [
./nixos
];
}

View file

@ -0,0 +1,32 @@
{ lib, ... }:
{
# Import all home-manager modules
imports = [
./programs
# no home manager services yet
# ./services
];
# Basic home-manager configuration
home.sessionVariables = {
EDITOR = lib.mkDefault "nvim";
};
home.shellAliases = {
c = "code .";
l = "eza --all --long --git --icons --group --sort size --header --group-directories-first";
ll = "eza --all --long --git --icons --group --sort name --header --group-directories-first";
free = "free -h";
df = "df -h";
du = "du -h";
lg = "lazygit";
onefetch = "onefetch -T prose -T programming -T data";
};
# Don't set stateVersion here - let it be set by the system configuration
# home.stateVersion should be set in the system's home-manager configuration
# Enable basic programs that most users want
programs.home-manager.enable = true;
}

View file

@ -0,0 +1,40 @@
{
lib,
pkgs,
nixosConfig,
...
}:
{
config = lib.mkMerge [
(lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") {
# Set enableAlacritty to true by default when there's a desktop environment
programs.alacritty.enable = lib.mkDefault true;
})
{
programs.alacritty = {
settings = {
font = {
size = 14.0;
normal.family = "Cascadia Code";
};
terminal.shell = {
args = [
"new-session"
"-A"
"-s"
"general"
];
program = lib.getExe pkgs.tmux;
};
window = {
decorations = "None";
opacity = 1;
startup_mode = "Maximized";
};
env.TERM = "xterm-256color";
};
};
}
];
}

View file

@ -0,0 +1,10 @@
{
programs.bash = {
enable = true;
bashrcExtra = ''
if [ "dumb" == "$TERM" ] ; then
export TERM=xterm-256color
fi
'';
};
}

View file

@ -0,0 +1,18 @@
{
imports = [
./alacritty.nix
./bash.nix
./direnv.nix
./firefox.nix
./fish.nix
./ghostty.nix
./git.nix
./mpv.nix
./ssh.nix
./starship.nix
./tlrc.nix
./tmux.nix
./wezterm.nix
./zoxide.nix
];
}

View file

@ -0,0 +1,6 @@
{
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
}

View file

@ -0,0 +1,115 @@
{
lib,
nixosConfig ? null, # Receive the NixOS config
pkgs,
...
}:
{
config = lib.mkMerge [
# Auto-enable Firefox if system has a desktop environment
(lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") {
# Set enableFirefox to true by default when there's a desktop environment
programs.firefox.enable = lib.mkDefault true;
})
# Firefox configuration
{
programs.firefox = {
# TODO Firefox fails as the closure contains a reference to stdenv.cc
# Relax this assertion until the underlying issue is fixed
# https://github.com/NixOS/nixpkgs/pull/457424
package = pkgs.firefox.overrideAttrs { disallowedRequisites = [ ]; };
languagePacks = [
"ja"
"tr"
"en-US"
];
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
# DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
StartPage = "previous-session";
# OverrideFirstRunPage = "";
# OverridePostUpdatePage = "";
# DontCheckDefaultBrowser = true;
DisplayBookmarksToolbar = "always"; # alternatives: "never" or "newtab"
# DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
# SearchBar = "unified"; # alternat
ExtensionSettings =
let
extension = shortId: uuid: {
name = uuid;
value = {
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "normal_installed"; # i dont want to get the packages from a non-open source source
};
};
in
builtins.listToAttrs [
(extension "tree-style-tab" "treestyletab@piro.sakura.ne.jp")
(extension "ublock-origin" "uBlock0@raymondhill.net")
(extension "bitwarden-password-manager" "{446900e4-71c2-419f-a6a7-df9c091e268b}")
(extension "motivation-new-tab" "")
(extension "return-youtube-dislikes" "{762f9885-5a13-4abd-9c77-433dcd38b8fd}")
(extension "violentmonkey" "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}")
(extension "vimium-ff" "{d7742d87-e61d-4b78-b8a1-b469842139fa}")
(extension "i-dont-care-about-cookies" "jid1-KKzOGWgsW3Ao4Q@jetpack")
# (extension "tabliss" "extension@tabliss.io")
# (extension "umatrix" "uMatrix@raymondhill.net")
# (extension "libredirect" "7esoorv3@alefvanoon.anonaddy.me")
(extension "clearurls" "{74145f27-f039-47ce-a470-a662b129930a}")
(extension "youtube-shorts-block" "")
];
# To add additional extensions, find it on addons.mozilla.org, find
# the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/)
# Then, download the XPI by filling it in to the install_url template, unzip it,
# run `jq .browser_specific_settings.gecko.id manifest.json` or
# `jq .applications.gecko.id manifest.json` to get the UUID
};
profiles.default = {
id = 0;
name = "osbm";
userChrome = ''
#tabbrowser-tabs {
visibility: collapse;
}
'';
settings = {
# "Open previous windows and tabs"
"browser.startup.page" = 3;
"browser.contentblocking.category" = true;
"extensions.pocket.enabled" = false;
"extensions.screenshots.disabled" = true;
"browser.topsites.contile.enabled" = false;
"browser.formfill.enable" = false;
"browser.search.suggest.enabled" = false;
"browser.search.suggest.enabled.private" = false;
"browser.urlbar.suggest.searches" = false;
"browser.urlbar.showSearchSuggestionsFirst" = false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
"browser.newtabpage.activity-stream.feeds.snippets" = false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false;
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false;
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = false;
"browser.newtabpage.activity-stream.showSponsored" = false;
"browser.newtabpage.activity-stream.system.showSponsored" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"ui.key.menuAccessKeyFocuses" = false;
};
};
};
}
];
}

View file

@ -0,0 +1,15 @@
{
programs.fish = {
enable = true;
interactiveShellInit = ''
set -g fish_greeting
'';
functions = {
gitu = ''
git add --all
git commit -m "$argv"
git push
'';
};
};
}

View file

@ -0,0 +1,9 @@
{ lib, nixosConfig, ... }:
{
config = lib.mkMerge [
(lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") {
# Set enableGhostty to true by default when there's a desktop environment
programs.ghostty.enable = lib.mkDefault true;
})
];
}

View file

@ -0,0 +1,54 @@
{
programs.git = {
enable = true;
signing = {
format = "openpgp";
};
ignores = [
"*.pyc" # python
"*.swp" # vim
"__pycache__" # python
".DS_Store" # macOS
"result" # nix
"node_modules" # node
];
settings = {
user = {
email = "osbm@osbm.dev";
name = "osbm";
};
credential = {
helper = "store";
};
core = {
editor = "vim";
pager = "cat";
};
diff = {
wsErrorHighlight = "all";
};
init = {
defaultBranch = "main";
};
http = {
postBuffer = 1048576000;
};
https = {
postBuffer = 1048576000;
};
push = {
autoSetupRemote = true;
};
filter.lfs = {
clean = "git-lfs clean -- %f";
smudge = "git-lfs smudge -- %f";
process = "git-lfs filter-process";
required = true;
};
signing = {
signByDefault = true;
key = "3A264839184185CF";
};
};
};
}

View file

@ -0,0 +1,18 @@
{ lib, nixosConfig, ... }:
{
config = lib.mkMerge [
(lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") {
programs.mpv.enable = lib.mkDefault true;
})
{
programs.mpv = {
config = {
hwdec = "auto";
vo = "gpu";
};
};
}
];
}

View file

@ -0,0 +1,59 @@
let
# define a block that just takes a hostname and returns attrset to not repeat the same fields
sshBlock = hostname: {
inherit hostname;
user = "osbm";
identityFile = "~/.ssh/id_ed25519";
extraOptions = {
# [ERROR] - (starship::print): Under a 'dumb' terminal (TERM=dumb).
"RemoteCommand" = "fish";
"RequestTTY" = "force";
};
hashKnownHosts = true;
compression = true;
};
# sshBlockAtreus is the same as sshBlock but with 8090 as the port
sshBlockAtreus = hostname: {
inherit hostname;
user = "osbm";
identityFile = "~/.ssh/id_ed25519";
port = 8022;
hashKnownHosts = true;
compression = true;
# fish not found error ???
};
in
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
ymir = sshBlock "192.168.0.2";
ymir-ts = sshBlock "ymir.curl-boga.ts.net";
atreus = sshBlockAtreus "192.168.0.3";
atreus-ts = sshBlockAtreus "atreus.curl-boga.ts.net";
tartarus = sshBlock "192.168.0.4";
tartarus-ts = sshBlock "tartarus.curl-boga.ts.net";
pochita = sshBlock "192.168.0.9";
pochita-ts = sshBlock "pochita.curl-boga.ts.net";
harmonica = sshBlock "192.168.0.11";
harmonica-ts = sshBlock "harmonica.curl-boga.ts.net";
wallfacer = sshBlock "192.168.0.5";
wallfacer-ts = sshBlock "wallfacer.curl-boga.ts.net";
prometheus = sshBlock "192.168.0.12";
prometheus-ts = sshBlock "prometheus.curl-boga.ts.net";
apollo = sshBlock "152.53.152.129";
apollo-ts = sshBlock "apollo.curl-boga.ts.net";
apollo-initrd = {
hostname = "152.53.152.129";
port = 2222;
user = "root";
identityFile = "~/.ssh/id_ed25519";
hashKnownHosts = true;
compression = true;
};
# artemis
};
};
}

View file

@ -0,0 +1,18 @@
{
programs.starship = {
enable = true;
enableFishIntegration = true;
settings = {
add_newline = false;
dart.disabled = true;
python.disabled = true;
nodejs.disabled = true;
c.disabled = true;
gradle.disabled = true;
java.disabled = true;
ruby.disabled = true;
rust.disabled = true;
typst.disabled = true;
};
};
}

View file

@ -0,0 +1,94 @@
{
pkgs,
config,
...
}:
# stolen from https://github.com/dmarcoux/dotfiles
{
home.packages = [ pkgs.tlrc ];
xdg.configFile."tlrc/config.toml".text = ''
[cache]
dir = "${config.xdg.cacheHome}/tlrc"
mirror = "https://github.com/tldr-pages/tldr/releases/latest/download"
auto_update = true
max_age = 336
languages = ["en", "tr", "ja"]
[output]
show_title = false
platform_title = false
show_hyphens = false
example_prefix = "- "
compact = true
raw_markdown = false
[indent]
title = 2
description = 2
bullet = 2
example = 4
[style.title]
color = "magenta"
background = "default"
bold = true
underline = false
italic = false
dim = false
strikethrough = false
[style.description]
color = "magenta"
background = "default"
bold = false
underline = false
italic = false
dim = false
strikethrough = false
[style.bullet]
color = "green"
background = "default"
bold = false
underline = false
italic = false
dim = false
strikethrough = false
[style.example]
color = "cyan"
background = "default"
bold = false
underline = false
italic = false
dim = false
strikethrough = false
[style.url]
color = "red"
background = "default"
bold = false
underline = false
italic = true
dim = false
strikethrough = false
[style.inline_code]
color = "yellow"
background = "default"
bold = false
underline = false
italic = true
dim = false
strikethrough = false
[style.placeholder]
color = "red"
background = "default"
bold = false
underline = false
italic = true
dim = false
strikethrough = false
'';
}

View file

@ -0,0 +1,38 @@
{
pkgs,
lib,
...
}:
{
programs.tmux = {
enable = true;
historyLimit = 100000;
baseIndex = 1;
shortcut = "s";
mouse = true;
shell = lib.getExe pkgs.fish;
plugins = with pkgs; [
tmuxPlugins.sensible
tmuxPlugins.better-mouse-mode
{
plugin = tmuxPlugins.dracula;
extraConfig = ''
set -g @dracula-plugins "cpu-usage ram-usage gpu-usage battery"
set -g @dracula-show-left-icon hostname
set -g @dracula-git-show-current-symbol
set -g @dracula-git-no-repo-message "no-git"
set -g @dracula-show-timezone false
set -g @dracula-ignore-lspci true
'';
}
];
extraConfig = ''
# Automatically renumber windows
set -g renumber-windows on
set -g allow-passthrough on
set -ga update-environment TERM
set -ga update-environment TERM_PROGRAM
set-option -g default-command "${lib.getExe pkgs.fish} -l"
'';
};
}

View file

@ -0,0 +1,36 @@
{
lib,
pkgs,
nixosConfig,
...
}:
{
config = lib.mkMerge [
(lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") {
programs.wezterm.enable = lib.mkDefault true;
})
{
programs.wezterm = {
extraConfig = ''
_G.shells = {
fish = '${lib.getExe pkgs.fish}'
};
wezterm.on('gui-startup', function(cmd)
local tab, pane, window = wezterm.mux.spawn_window(cmd or {})
window:gui_window():maximize()
end)
return {
default_prog = { _G.shells.fish },
window_decorations = "NONE",
hide_tab_bar_if_only_one_tab = true,
enable_wayland = false,
}
'';
};
}
];
}

View file

@ -0,0 +1,6 @@
{
programs.zoxide = {
enable = true;
enableFishIntegration = true;
};
}

View file

@ -0,0 +1,9 @@
{
imports = [
./options.nix
./programs
./hardware
./services
./system
];
}

View file

@ -0,0 +1,7 @@
{ config, lib, ... }:
{
config = lib.mkIf config.osbmModules.hardware.bluetooth.enable {
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
};
}

View file

@ -0,0 +1,8 @@
{ config, lib, ... }:
{
config = lib.mkIf config.osbmModules.hardware.systemd-boot.enable {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
};
}

View file

@ -0,0 +1,11 @@
{
imports = [
./bluetooth.nix
./boot.nix
./sound.nix
./nvidia.nix
./hibernation.nix
./wakeOnLan.nix
./disko.nix
];
}

View file

@ -0,0 +1,341 @@
{
config,
inputs,
lib,
pkgs,
...
}:
let
cfg = config.osbmModules.hardware.disko;
# Default authorized keys for initrd SSH
defaultAuthorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDF1TFwXbqdC1UyG75q3HO1n7/L3yxpeRLIq2kQ9DalI"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHYSJ9ywFRJ747tkhvYWFkx/Y9SkLqv3rb7T1UuXVBWo"
];
authorizedKeys =
if cfg.initrd-ssh.authorizedKeys != [ ] then
cfg.initrd-ssh.authorizedKeys
else
defaultAuthorizedKeys;
in
{
imports = [
inputs.disko.nixosModules.default
];
config = lib.mkMerge [
# Initrd SSH for remote unlocking
(lib.mkIf (cfg.enable && cfg.initrd-ssh.enable) {
boot = {
kernelParams = [ "ip=152.53.152.129::152.53.152.1:255.255.252.0::eth0:none" ];
initrd = {
network.enable = true;
availableKernelModules = cfg.initrd-ssh.ethernetDrivers;
network.ssh = {
enable = true;
port = 2222; # different port to avoid conflicts
shell = "/bin/cryptsetup-askpass";
inherit authorizedKeys;
hostKeys = [ "/etc/ssh/initrd" ];
};
secrets = {
"/etc/ssh/initrd" = "/etc/ssh/initrd";
};
};
};
})
# ZFS Configuration
(lib.mkIf (cfg.enable && cfg.zfs.enable) {
networking.hostId = cfg.zfs.hostID;
environment.systemPackages = [ pkgs.zfs-prune-snapshots ];
boot = {
# ZFS does not support swapfiles
kernelParams = [
"nohibernate"
"zfs.zfs_arc_max=17179869184" # 16GB ARC max
];
supportedFilesystems = [
"vfat"
"zfs"
];
zfs = {
devNodes = "/dev/disk/by-id/";
forceImportAll = true;
requestEncryptionCredentials = cfg.zfs.root.encrypt;
};
};
services.zfs = {
autoScrub.enable = true;
trim.enable = true;
};
# Disko configuration for ZFS
disko.devices = {
disk = lib.mkMerge [
# Storage pool disks (if enabled and not reinstalling)
(lib.mkIf (cfg.zfs.storage.enable && !cfg.amReinstalling) (
lib.mkMerge (
map (diskname: {
"${diskname}" = {
type = "disk";
device = "/dev/${diskname}";
content = {
type = "gpt";
partitions = {
luks = {
size = "100%";
content = {
type = "luks";
name = "stg${diskname}";
settings.allowDiscards = true;
passwordFile = "/tmp/secret.key";
content = {
type = "zfs";
pool = "zstorage";
};
};
};
};
};
};
}) cfg.zfs.storage.disks
)
))
# Root disk 1 (primary)
{
one = lib.mkIf (cfg.zfs.root.disk1 != "") {
type = "disk";
device = "/dev/${cfg.zfs.root.disk1}";
content = {
type = "gpt";
partitions = {
ESP = {
label = "EFI";
name = "ESP";
size = "2048M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"defaults"
"umask=0077"
];
};
};
# Encrypted root partition
luks = lib.mkIf cfg.zfs.root.encrypt {
size = "100%";
content = {
type = "luks";
name = "crypted1";
settings.allowDiscards = true;
passwordFile = "/tmp/secret.key";
content = {
type = "zfs";
pool = "zroot";
};
};
};
# Unencrypted root partition
notluks = lib.mkIf (!cfg.zfs.root.encrypt) {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
};
};
};
# Root disk 2 (mirror)
two = lib.mkIf (cfg.zfs.root.disk2 != "") {
type = "disk";
device = "/dev/${cfg.zfs.root.disk2}";
content = {
type = "gpt";
partitions = {
luks = {
size = "100%";
content = {
type = "luks";
name = "crypted2";
settings.allowDiscards = true;
passwordFile = "/tmp/secret.key";
content = {
type = "zfs";
pool = "zroot";
};
};
};
};
};
};
}
];
# ZFS pools
zpool = {
# Root pool
zroot = {
type = "zpool";
mode = lib.mkIf cfg.zfs.root.mirror "mirror";
rootFsOptions = {
canmount = "off";
checksum = "edonr";
compression = "zstd";
dnodesize = "auto";
mountpoint = "none";
normalization = "formD";
relatime = "on";
"com.sun:auto-snapshot" = "false";
};
options = {
ashift = "12";
autotrim = "on";
};
datasets = {
# Reserved space for ZFS CoW operations
reserved = {
type = "zfs_fs";
options = {
canmount = "off";
mountpoint = "none";
inherit (cfg.zfs.root) reservation;
};
};
# SSH keys dataset
etcssh = {
type = "zfs_fs";
options.mountpoint = "legacy";
mountpoint = "/etc/ssh";
options."com.sun:auto-snapshot" = "false";
postCreateHook = "zfs snapshot zroot/etcssh@empty";
};
# Persistent data
persist = {
type = "zfs_fs";
options.mountpoint = "legacy";
mountpoint = "/persist";
options."com.sun:auto-snapshot" = "false";
postCreateHook = "zfs snapshot zroot/persist@empty";
};
# Persistent save data
persistSave = {
type = "zfs_fs";
options.mountpoint = "legacy";
mountpoint = "/persist/save";
options."com.sun:auto-snapshot" = "false";
postCreateHook = "zfs snapshot zroot/persistSave@empty";
};
# Nix store
nix = {
type = "zfs_fs";
options.mountpoint = "legacy";
mountpoint = "/nix";
options = {
atime = "off";
canmount = "on";
"com.sun:auto-snapshot" = "false";
};
postCreateHook = "zfs snapshot zroot/nix@empty";
};
# Root filesystem
root = {
type = "zfs_fs";
options.mountpoint = "legacy";
options."com.sun:auto-snapshot" = "false";
mountpoint = "/";
postCreateHook = "zfs snapshot zroot/root@empty";
};
};
};
# Storage pool (if enabled and not reinstalling)
zstorage = lib.mkIf (cfg.zfs.storage.enable && !cfg.amReinstalling) {
type = "zpool";
mode = lib.mkIf cfg.zfs.storage.mirror "mirror";
rootFsOptions = {
canmount = "off";
checksum = "edonr";
compression = "zstd";
dnodesize = "auto";
mountpoint = "none";
normalization = "formD";
relatime = "on";
"com.sun:auto-snapshot" = "false";
};
options = {
ashift = "12";
autotrim = "on";
};
datasets = {
# Reserved space
reserved = {
type = "zfs_fs";
options = {
canmount = "off";
mountpoint = "none";
inherit (cfg.zfs.storage) reservation;
};
};
# Main storage
storage = {
type = "zfs_fs";
mountpoint = "/storage";
options = {
atime = "off";
canmount = "on";
"com.sun:auto-snapshot" = "false";
};
};
# Persistent save in storage
persistSave = {
type = "zfs_fs";
mountpoint = "/storage/save";
options = {
atime = "off";
canmount = "on";
"com.sun:auto-snapshot" = "false";
};
};
};
};
};
};
fileSystems = {
# Needed for agenix - SSH keys must be available before ZFS mounts
"/etc/ssh".neededForBoot = true;
# Needed for impermanence
"/persist".neededForBoot = true;
"/persist/save".neededForBoot = true;
};
})
# Impermanence: wipe root on boot
(lib.mkIf (cfg.enable && cfg.zfs.enable && cfg.zfs.root.impermanenceRoot) {
boot.initrd.postResumeCommands = lib.mkAfter ''
zfs rollback -r zroot/root@empty
'';
})
];
}

View file

@ -0,0 +1,12 @@
{ lib, config, ... }:
{
config = lib.mkIf (!config.osbmModules.hardware.hibernation.enable) {
# Disable hibernation/suspend
systemd.targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
};
};
}

View file

@ -0,0 +1,68 @@
{
lib,
config,
pkgs,
...
}:
{
config = lib.mkIf config.osbmModules.hardware.nvidia.enable {
# Enable OpenGL
hardware.graphics = {
enable = true;
};
nixpkgs.config = {
cudaSupport = true;
cudaCapabilities = [ "8.9" ]; # 4090
};
# Load nvidia driver for Xorg and Wayland
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement = {
enable = false;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
finegrained = false;
};
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.latest;
};
nvidia-container-toolkit.enable = lib.mkIf config.osbmModules.virtualisation.docker.enable true;
};
environment.systemPackages = [
pkgs.nvidia-container-toolkit
];
# TODO explain why this is needed
programs.nix-required-mounts = {
enable = true;
presets.nvidia-gpu.enable = true;
};
};
}

View file

@ -0,0 +1,20 @@
{ lib, config, ... }:
{
config = lib.mkIf config.osbmModules.hardware.sound.enable {
# Disable PulseAudio
services.pulseaudio.enable = false;
# Enable rtkit for realtime audio
security.rtkit.enable = true;
# Enable PipeWire
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications:
# jack.enable = true;
};
};
}

View file

@ -0,0 +1,25 @@
{
pkgs,
lib,
config,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.hardware.wakeOnLan.enable {
networking.interfaces.enp3s0.wakeOnLan.enable = true;
# The services doesn't actually work atm, define an additional service
# see https://github.com/NixOS/nixpkgs/issues/91352
systemd.services.wakeonlan = {
description = "Reenable wake on lan every boot";
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
RemainAfterExit = "true";
ExecStart = "${pkgs.ethtool}/sbin/ethtool -s enp3s0 wol g";
};
wantedBy = [ "default.target" ];
};
})
];
}

411
modules/nixos/options.nix Normal file
View file

@ -0,0 +1,411 @@
{ lib, config, ... }:
{
options.osbmModules = {
# Desktop Environment
desktopEnvironment = lib.mkOption {
type = lib.types.enum [
"plasma"
"gnome"
"none"
];
default = "none";
description = "Which desktop environment to use";
};
# Machine Type
machineType = lib.mkOption {
type = lib.types.enum [
"desktop"
"laptop"
"server"
"embedded"
"mobile"
];
default = "server";
description = "Type of machine for appropriate defaults";
};
# Users
users = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
"osbm"
]
++ lib.optionals (
config.osbmModules.machineType == "desktop" || config.osbmModules.machineType == "laptop"
) [ "bayram" ];
description = "List of users to create. `osbm` is my main user, and `bayram` is for my family (only on desktop/laptop).";
};
defaultUser = lib.mkOption {
type = lib.types.str;
default = "osbm";
description = "Default user for the system";
};
# Home Manager
homeManager = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable home-manager integration";
};
};
# Agenix
agenix = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable agenix for secrets management";
};
};
# Nix Settings
nixSettings = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable custom nix settings";
};
};
# Programs
programs = {
steam = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable Steam gaming platform";
};
};
graphical = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none";
description = "Enable graphical applications";
};
};
commandLine = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable common command line tools";
};
};
neovim = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable neovim with custom configuration";
};
};
arduino = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable Arduino IDE and development tools";
};
};
adbFastboot = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable ADB and Fastboot for Android development";
};
};
};
# Services
services = {
openssh = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable OpenSSH server";
};
};
tailscale = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Tailscale VPN";
};
};
actual.enable = lib.mkEnableOption "actual";
anubis.enable = lib.mkEnableOption "anubis";
syncthing.enable = lib.mkEnableOption "syncthing";
jellyfin.enable = lib.mkEnableOption "jellyfin";
mailserver.enable = lib.mkEnableOption "mailserver";
firefox-syncserver.enable = lib.mkEnableOption "firefox-syncserver";
vaultwarden.enable = lib.mkEnableOption "vaultwarden";
nginx.enable = lib.mkEnableOption "nginx";
ollama.enable = lib.mkEnableOption "ollama";
forgejo.enable = lib.mkEnableOption "forgejo";
atticd.enable = lib.mkEnableOption "atticd";
cloudflared.enable = lib.mkEnableOption "cloudflared";
cloudflare-dyndns.enable = lib.mkEnableOption "cloudflare-dyndns";
glance.enable = lib.mkEnableOption "glance";
hydra.enable = lib.mkEnableOption "hydra";
immich.enable = lib.mkEnableOption "immich";
vscode-server.enable = lib.mkEnableOption "vscode-server";
wanikani-bypass-lessons.enable = lib.mkEnableOption "wanikani-bypass-lessons";
wanikani-fetch-data.enable = lib.mkEnableOption "wanikani-fetch-data";
wanikani-stats.enable = lib.mkEnableOption "wanikani-stats";
};
# Hardware
hardware = {
bluetooth = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none";
description = "Enable Bluetooth support";
};
};
sound = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable sound with pipewire";
};
};
nvidia = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable NVIDIA proprietary drivers";
};
};
hibernation = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable hibernation support";
};
};
wakeOnLan = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable wake-on-LAN support";
};
};
systemd-boot.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Use systemd-boot bootloader";
};
# Disko configuration (inspired by ZFS.nix)
disko = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable custom disk configuration with disko";
};
amReinstalling = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Am I reinstalling and want to save the storage pool";
};
fileSystem = lib.mkOption {
type = lib.types.enum [
"zfs"
"ext4"
];
default = "ext4";
description = "Root filesystem type";
};
initrd-ssh = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable SSH in initrd for remote unlocking";
};
authorizedKeys = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "SSH public keys for initrd access";
};
ethernetDrivers = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "Ethernet drivers to load in initrd";
};
};
zfs = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable ZFS filesystem";
};
hostID = lib.mkOption {
type = lib.types.str;
default = "";
description = "ZFS host ID (8 hex characters)";
};
root = {
useTmpfs = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Use tmpfs for root instead of ZFS (with ZFS datasets for /nix and /persist)";
};
tmpfsSize = lib.mkOption {
type = lib.types.str;
default = "2G";
description = "Size of tmpfs root filesystem";
};
encrypt = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Encrypt root ZFS pool";
};
disk1 = lib.mkOption {
type = lib.types.str;
default = "";
description = "First disk device name (e.g., nvme0n1)";
};
disk2 = lib.mkOption {
type = lib.types.str;
default = "";
description = "Second disk device name for mirroring";
};
reservation = lib.mkOption {
type = lib.types.str;
default = "20G";
description = "ZFS reservation size";
};
mirror = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Mirror the root ZFS pool";
};
impermanenceRoot = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Wipe the root directory on boot (impermanence)";
};
};
storage = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable separate storage ZFS pool";
};
disks = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "Storage pool disk device names";
};
reservation = lib.mkOption {
type = lib.types.str;
default = "20G";
description = "Storage pool ZFS reservation";
};
mirror = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Mirror the storage ZFS pool";
};
};
};
};
};
virtualisation = {
docker = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable Docker";
};
};
podman = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable Podman";
};
};
libvirt = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable libvirt/KVM";
};
};
};
# Emulation
emulation = {
aarch64 = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable aarch64 emulation via binfmt";
};
};
};
# Internationalization
i18n = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable internationalization settings";
};
};
# Fonts
fonts = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none";
description = "Enable custom fonts";
};
};
# Nix Index
nixIndex = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable nix-index for command-not-found";
};
};
};
}

View file

@ -0,0 +1,9 @@
{ lib, config, ... }:
{
config = lib.mkIf config.osbmModules.programs.adbFastboot.enable {
programs.adb.enable = true;
# Add default user to adbusers group
users.users.${config.osbmModules.defaultUser}.extraGroups = [ "adbusers" ];
};
}

View file

@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
{
config = lib.mkIf config.osbmModules.programs.arduino.enable {
environment.systemPackages = with pkgs; [
arduino-ide
adafruit-nrfutil
python3 # some arduino libraries require python3
];
services.udev.extraRules = ''
KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"
'';
};
}

View file

@ -0,0 +1,75 @@
{
pkgs,
lib,
config,
...
}:
{
config = lib.mkIf config.osbmModules.programs.commandLine.enable {
environment.systemPackages = with pkgs; [
# networking
wget
curl
dig
# text editors
nano
# version control
git
lazygit
git-lfs
gh
# nix tools
nix-output-monitor
nixd
nix-inspect
comma
nh
# information and vanity
neofetch
onefetch
pfetch
htop
btop
cloc
inxi
tlrc
pciutils
# basic quality of life
eza
dysk
trash-cli
zoxide
lazysql
jq
ripgrep
dust
bat
just
tree
fd
yazi
duf
# archives
zip
unzip
# shell
fish
starship
# multiplexers
tmux
(pkgs.writeShellScriptBin "wake-ymir" ''
echo waking up ymir
${pkgs.wakeonlan}/bin/wakeonlan 04:7c:16:e6:d9:13
'')
];
};
}

View file

@ -0,0 +1,10 @@
{
imports = [
./adb-fastboot.nix
./arduino.nix
./command-line.nix
./graphical.nix
./neovim.nix
./steam.nix
];
}

View file

@ -0,0 +1,23 @@
{
pkgs,
lib,
config,
...
}:
{
config = lib.mkIf config.osbmModules.programs.graphical.enable {
environment.systemPackages = with pkgs; [
mpv
gimp
inkscape
libreoffice
discord
telegram-desktop
obs-studio
blender
vscode
chromium
thunderbird
];
};
}

View file

@ -0,0 +1,19 @@
{
lib,
inputs,
config,
pkgs,
...
}:
{
config = lib.mkIf config.osbmModules.programs.neovim.enable {
environment.systemPackages = [
inputs.osbm-nvim.packages."${pkgs.stdenv.hostPlatform.system}".default
];
# Environment variables
environment.variables = {
EDITOR = "nvim";
VISUAL = "nvim";
};
};
}

View file

@ -0,0 +1,14 @@
{ lib, config, ... }:
{
config = lib.mkIf config.osbmModules.programs.steam.enable {
programs.steam = {
enable = true;
# Open ports in the firewall for Steam Remote Play
remotePlay.openFirewall = true;
# Open ports in the firewall for Source Dedicated Server
dedicatedServer.openFirewall = true;
# Open ports in the firewall for Steam Local Network Game Transfers
localNetworkGameTransfers.openFirewall = true;
};
};
}

View file

@ -0,0 +1,54 @@
{ config, lib, ... }:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.actual.enable {
services.actual = {
enable = true;
settings = {
port = 51514;
# dataDir = "/var/lib/actual"
};
};
})
# actual and nginx
(lib.mkIf (config.osbmModules.services.nginx.enable && config.osbmModules.services.actual.enable) {
services.nginx.virtualHosts."actual.osbm.dev" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.actual.settings.port}";
proxyWebsockets = true;
};
};
})
# # impermanence and immich
# (lib.mkIf
# (
# config.osbmModules.services.immich.enable
# && config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
# )
# {
# environment.persistence."/persist" = {
# directories = [
# {
# directory = "/var/lib/immich";
# user = config.services.immich.user;
# group = config.services.immich.group;
# mode = "0750";
# }
# {
# directory = "/var/lib/postgresql";
# user = "postgres";
# group = "postgres";
# mode = "0750";
# }
# ];
# };
# }
# )
];
}

View file

@ -0,0 +1,14 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.anubis.enable {
services.anubis = {
# enable = true;
};
})
];
}

View file

@ -0,0 +1,43 @@
{
config,
lib,
...
}:
let
atticdPort = 7080;
in
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.atticd.enable {
services.atticd = {
enable = true;
environmentFile = "/persist/attic.env";
settings = {
listen = "[::]:${toString atticdPort}";
compression = {
type = "zstd";
level = 9;
};
# jwt = { };
# storage = {
# type = "local";
# # path = "/data/atreus/attic";
# # there is an issue
# };
};
};
networking.firewall.allowedTCPPorts = [ atticdPort ];
services.cloudflared.tunnels = {
"fa301a21-b259-4149-b3d0-b1438c7c81f8" = {
default = "http_status:404";
credentialsFile = "/home/osbm/.cloudflared/fa301a21-b259-4149-b3d0-b1438c7c81f8.json";
ingress = {
"cache.osbm.dev" = {
service = "http://localhost:${toString atticdPort}";
};
};
};
};
})
];
}

View file

@ -0,0 +1,19 @@
{
lib,
config,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.cloudflare-dyndns.enable {
services.cloudflare-dyndns = {
enable = true;
apiTokenFile = "/persist/cloudflare-dyndns";
proxied = false; # TODO please revert
domains = [
"git.osbm.dev"
];
};
})
];
}

View file

@ -0,0 +1,15 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.cloudflared.enable {
services.cloudflared = {
enable = true;
certificateFile = "/home/osbm/.cloudflared/cert.pem";
};
})
];
}

View file

@ -0,0 +1,29 @@
{
imports = [
./actual.nix
./anubis.nix
./atticd.nix
./cloudflare-dyndns.nix
./cloudflared.nix
./ollama.nix
./openssh.nix
./firefox-syncserver.nix
./forgejo.nix
./glance.nix
./hydra.nix
./immich.nix
./jellyfin.nix
./mailserver.nix
./nginx.nix
./syncthing.nix
./tailscale.nix
./vaultwarden.nix
./vscode-server.nix
# custom services
./system-logger
./wanikani-bypass-lessons.nix
./wanikani-fetch-data
./wanikani-stats
];
}

View file

@ -0,0 +1,69 @@
{
config,
lib,
pkgs,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.firefox-syncserver.enable {
services.mysql.package = pkgs.mariadb; # Use MariaDB as the database backend
services.firefox-syncserver = {
enable = true;
secrets = "/persist/firefox-syncserver-secrets.env"; # TODO: Make this into agenix secret
logLevel = "trace";
singleNode = {
enable = true;
url = "https://firefox.osbm.dev";
capacity = 1;
};
settings = {
host = "0.0.0.0";
# Override database URLs to use Unix socket for authentication
# This allows the firefox-syncserver user to authenticate via unix_socket
syncstorage.database_url = "mysql://firefox-syncserver@localhost/firefox_syncserver?socket=%2Frun%2Fmysqld%2Fmysqld.sock";
tokenserver.database_url = "mysql://firefox-syncserver@localhost/firefox_syncserver?socket=%2Frun%2Fmysqld%2Fmysqld.sock";
};
};
})
# firefox-syncserver and nginx
(lib.mkIf
(config.osbmModules.services.nginx.enable && config.osbmModules.services.firefox-syncserver.enable)
{
services.nginx.virtualHosts."firefox.osbm.dev" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.firefox-syncserver.settings.port}";
};
};
}
)
# impermanence and firefox-syncserver
(lib.mkIf
(
config.osbmModules.services.firefox-syncserver.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
systemd.services.firefox-syncserver.serviceConfig.ReadWritePaths = [
"/var/lib/firefox-syncserver"
];
environment.persistence."/persist" = {
directories = [
{
directory = "/var/lib/firefox-syncserver";
user = config.systemd.services.firefox-syncserver.serviceConfig.User;
group = config.systemd.services.firefox-syncserver.serviceConfig.Group;
mode = "0750";
}
];
};
}
)
];
}

View file

@ -0,0 +1,91 @@
{
lib,
config,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.forgejo.enable {
services.forgejo = {
enable = true;
lfs.enable = true;
dump = {
enable = true;
type = "zip";
interval = "01:01";
};
settings = {
DEFAULT = {
APP_NAME = "osbm's self hosted git service";
};
server = {
DOMAIN = "git.osbm.dev";
ROOT_URL = "https://git.osbm.dev/";
};
"ui.meta" = {
AUTHOR = "osbm";
DESCRIPTION = "\"After all, all devices have their dangers. The discovery of speech introduced communication and lies.\" -Isaac Asimov";
KEYWORDS = "git,self-hosted,gitea,forgejo,osbm,open-source,nix,nixos";
};
service = {
DISABLE_REGISTRATION = true;
LANDING_PAGE = "/osbm";
};
};
};
})
(lib.mkIf
(config.osbmModules.services.cloudflared.enable && config.osbmModules.services.forgejo.enable)
{
services.cloudflared.tunnels = {
"eb9052aa-9867-482f-80e3-97a7d7e2ef04" = {
default = "http_status:404";
credentialsFile = "/home/osbm/.cloudflared/eb9052aa-9867-482f-80e3-97a7d7e2ef04.json";
ingress = {
"${config.services.forgejo.settings.server.DOMAIN}" = {
service = "http://localhost:3000";
};
};
};
};
}
)
(lib.mkIf (config.osbmModules.services.nginx.enable && config.osbmModules.services.forgejo.enable) {
services.nginx.virtualHosts."${config.services.forgejo.settings.server.DOMAIN}" = {
forceSSL = true;
enableACME = true;
locations."/".proxyPass = "http://localhost:3000";
locations."/".proxyWebsockets = true;
};
})
(lib.mkIf
(
config.osbmModules.services.forgejo.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
# environment.persistence."/persist" = {
# directories = [
# {
# directory = "/var/lib/forgejo";
# user = config.services.forgejo.user;
# group = config.services.forgejo.group;
# mode = "0750";
# }
# ];
# };
# # forgejo-secrets service keep giving error
# systemd.services."forgejo-secrets" = {
# wants = [ "var-lib-forgejo.mount" ];
# after = [ "var-lib-forgejo.mount" ];
# };
# fuckass thing
services.forgejo.stateDir = "/persist/var/lib/forgejo";
}
)
];
}

View file

@ -0,0 +1,181 @@
{
lib,
config,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.glance.enable {
services.glance = {
enable = true;
openFirewall = true;
settings = {
server = {
port = 3838;
host = "0.0.0.0";
};
branding = {
# stolen from notohh/snowflake but i love it so much
custom-footer = ''<b><p></p></b>'';
};
pages = [
{
columns = [
{
size = "small";
widgets = [
{ type = "calendar"; }
{
type = "bookmarks";
groups = [
{
title = "My Profiles";
same-tab = true;
color = "200 50 50";
links = [
{
title = "GitHub";
url = "https://github.com/osbm";
}
{
title = "Gitlab";
url = "https://gitlab.com/osbm";
}
{
title = "Crates.io";
url = "https://crates.io/users/osbm";
}
{
title = "HuggingFace";
url = "https://huggingface.co/osbm";
}
{
title = "Bluesky";
url = "https://bsky.app/profile/osbm.dev";
}
{
title = "Docker Hub";
url = "https://hub.docker.com/u/osbm";
}
{
title = "Kaggle";
url = "https://www.kaggle.com/osmanf";
}
];
}
{
title = "Documents";
links = [
{
title = "Nixos Search";
url = "https://search.nixos.org";
}
];
}
];
}
];
}
{
size = "full";
widgets = [
{
type = "search";
search-engine = "google";
bangs = [
{
title = "youtube";
shortcut = "!yt";
url = "https://www.youtube.com/results?search_query={QUERY}";
}
{
title = "nixpkgs";
shortcut = "!np";
url = "https://search.nixos.org/packages?channel=unstable&query={QUERY}";
}
{
title = "nixos";
shortcut = "!no";
url = "https://search.nixos.org/options?channel=unstable&query={QUERY}";
}
];
}
{
cache = "1m";
sites = [
{
icon = "sh:forgejo";
title = "Forgejo git server";
url = "https://git.osbm.dev";
}
{
icon = "sh:bitwarden";
title = "Bitwarden Vault";
url = "https://bitwarden.osbm.dev";
}
{
icon = "sh:visual-studio-code";
title = "Ymir Remote VSCode";
url = "http://ymir.curl-boga.ts.net:4444/";
}
{
icon = "sh:visual-studio-code";
title = "Tartarus Remote VSCode";
url = "http://tartarus.curl-boga.ts.net:4444/";
}
{
icon = "sh:visual-studio-code";
title = "Wallfacer Remote VSCode";
url = "http://wallfacer.curl-boga.ts.net:4444/";
}
{
icon = "si:json";
title = "Wanikani Stats";
url = "http://pochita:8501";
}
];
title = "Services";
type = "monitor";
}
];
}
];
name = "Home";
content = "Welcome to osbm's home page!";
}
];
};
};
networking.firewall.allowedTCPPorts = [ config.services.glance.settings.server.port ];
})
(lib.mkIf
(config.osbmModules.services.cloudflared.enable && config.osbmModules.services.glance.enable)
{
services.cloudflared.tunnels = {
"91b13f9b-81be-46e1-bca0-db2640bf2d0a" = {
default = "http_status:404";
credentialsFile = "/home/osbm/.cloudflared/91b13f9b-81be-46e1-bca0-db2640bf2d0a.json";
ingress = {
"home.osbm.dev" = {
service = "http://localhost:${toString config.services.glance.settings.server.port}";
};
};
};
};
}
)
# if nginx and glance are both enabled, set up a reverse proxy
(lib.mkIf (config.osbmModules.services.nginx.enable && config.osbmModules.services.glance.enable) {
services.nginx.virtualHosts."home.osbm.dev" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.glance.settings.server.port}";
proxyWebsockets = true;
};
};
})
];
}

View file

@ -0,0 +1,22 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.hydra.enable {
services.hydra = {
enable = true;
port = 3000;
hydraURL = "http://${config.networking.hostName}.curl-boga.ts.net/hydra/";
notificationSender = "hydra@localhost";
buildMachinesFiles = [ ];
useSubstitutes = true;
};
networking.firewall.allowedTCPPorts = [
config.services.hydra.port
];
})
];
}

View file

@ -0,0 +1,48 @@
{ config, lib, ... }:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.immich.enable {
services.immich = {
enable = true;
};
})
# immich and nginx
(lib.mkIf (config.osbmModules.services.nginx.enable && config.osbmModules.services.immich.enable) {
services.nginx.virtualHosts."immich.osbm.dev" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.immich.port}";
proxyWebsockets = true;
};
};
})
# impermanence and immich
(lib.mkIf
(
config.osbmModules.services.immich.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
environment.persistence."/persist" = {
directories = [
{
directory = "/var/lib/immich";
inherit (config.services.immich) user group;
mode = "0750";
}
{
directory = "/var/lib/postgresql";
user = "postgres";
group = "postgres";
mode = "0750";
}
];
};
}
)
];
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.jellyfin.enable {
services.jellyfin = {
enable = true;
openFirewall = true;
user = "osbm";
group = "users";
dataDir = "/home/osbm/.local/share/jellyfin";
};
networking.firewall.allowedTCPPorts = [ 8096 ];
})
];
}

View file

@ -0,0 +1,90 @@
{
config,
inputs,
lib,
...
}:
{
imports = [
inputs.simple-nixos-mailserver.nixosModule
];
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.mailserver.enable {
mailserver = {
enable = true;
stateVersion = 3;
fqdn = "mail.osbm.dev";
domains = [ "osbm.dev" ];
# A list of all login accounts. To create the password hashes, use
# nix-shell -p mkpasswd --run 'mkpasswd -sm bcrypt'
loginAccounts = {
"osbm@osbm.dev" = {
hashedPasswordFile = "/persist/osbm.passwd"; # TODO: Make this into agenix secret
aliases = [ "postmaster@osbm.dev" ];
};
};
# Use Let's Encrypt certificates. Note that this needs to set up a stripped
# down nginx and opens port 80.
certificateScheme = "acme-nginx";
};
})
# mailserver and impermanence
(lib.mkIf
(
config.osbmModules.services.mailserver.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
environment.persistence."/persist" = {
directories = [
# Dovecot is an open source IMAP and POP3 server
# which means it handles email retrieval for users.
"/var/lib/dovecot" # owned by root
# Postfix is a open-source mail transfer agent (MTA)
"/var/lib/postfix" # owned by root
# Rspamd is a open-source spam filtering system.
{
directory = "/var/lib/rspamd";
user = "rspamd";
group = "rspamd";
mode = "0700";
}
# redis-rspamd is just a redis instance used by rspamd for caching
# TODO: what is the /var/spool folder?
{
directory = "/var/spool/redis-rspamd";
user = "redis-rspamd";
group = "redis-rspamd";
mode = "0750";
}
# Sieve is a scripting language for filtering email messages.
{
directory = config.mailserver.sieveDirectory; # /var/sieve by default
user = "virtualMail";
group = "virtualMail";
mode = "0770";
}
# Mail folder
{
directory = config.mailserver.mailDirectory; # /var/vmail by default
user = config.mailserver.vmailUserName;
group = config.mailserver.vmailGroupName;
mode = "0700";
}
# DKIM is used to sign outgoing emails to verify they are from the claimed domain.
{
directory = config.mailserver.dkimKeyDirectory; # /var/dkim by default
user = "rspamd";
group = "rspamd";
mode = "0755";
}
];
};
}
)
];
}

View file

@ -0,0 +1,43 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.nginx.enable {
services.nginx = {
enable = true;
};
networking.firewall.allowedTCPPorts = [
80
443
];
security.acme = {
acceptTerms = true;
defaults.email = "osbm@osbm.dev";
};
})
(lib.mkIf
(
config.osbmModules.services.nginx.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
# environment.persistence."/persist" = {
# directories = [
# {
# directory = "/var/lib/acme";
# user = "acme";
# group = "nginx";
# mode = "0750";
# }
# ];
# };
}
)
];
}

View file

@ -0,0 +1,33 @@
{
lib,
config,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.ollama.enable {
services.ollama = {
enable = true;
acceleration = "cuda";
# loadModels = [
# "deepseek-r1:7b"
# "deepseek-r1:14b"
# ];
};
services.open-webui = {
enable = false; # TODO gives error fix later
port = 7070;
host = "0.0.0.0";
openFirewall = true;
environment = {
SCARF_NO_ANALYTICS = "True";
DO_NOT_TRACK = "True";
ANONYMIZED_TELEMETRY = "False";
WEBUI_AUTH = "False";
ENABLE_LOGIN_FORM = "False";
};
};
})
];
}

View file

@ -0,0 +1,31 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.openssh.enable {
services.openssh = {
enable = true;
startWhenNeeded = true;
settings = {
PermitRootLogin = "no";
# only allow key based logins and not password
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
AuthenticationMethods = "publickey";
PubkeyAuthentication = "yes";
ChallengeResponseAuthentication = "no";
UsePAM = false;
# kick out inactive sessions
ClientAliveCountMax = 5;
ClientAliveInterval = 60;
};
};
})
];
}

View file

@ -0,0 +1,16 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.syncthing.enable {
services.syncthing = {
enable = true;
openDefaultPorts = true;
# port is 8384
};
})
];
}

View file

@ -0,0 +1,68 @@
{
pkgs,
config,
lib,
...
}:
let
system-logger = pkgs.writeShellApplication {
name = "system-logger";
runtimeInputs = with pkgs; [
curl
jq
zip
gawk
systemd
];
text = builtins.readFile ./system-logger.sh;
};
in
{
options.services.system-logger = {
enable = lib.mkEnableOption {
description = "Enable System Logger Service";
default = false;
};
logDirectory = lib.mkOption {
type = lib.types.path;
default = "/var/lib/system-logger";
description = "Directory to store log archives";
};
maxSizeMB = lib.mkOption {
type = lib.types.int;
default = 1;
description = "Maximum size of daily log archive in megabytes";
};
retentionDays = lib.mkOption {
type = lib.types.int;
default = 30;
description = "Number of days to retain log archives";
};
};
config = lib.mkIf config.services.system-logger.enable {
systemd.timers.system-logger = {
description = "System Logger Timer";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Persistent = true;
};
};
systemd.services.system-logger = {
description = "System Logger Service";
serviceConfig = {
Type = "oneshot";
ExecStart = "${lib.getExe system-logger}";
Restart = "on-failure";
RestartSec = 60;
User = "root";
Group = "root";
};
};
};
}

View file

@ -0,0 +1,136 @@
#!/usr/bin/env bash
set -euo pipefail
# Configuration
LOG_DIR="/var/lib/system-logger"
MAX_SIZE_MB=1
RETENTION_DAYS=30
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
TEMP_DIR=$(mktemp -d)
# Create log directory if it doesn't exist
mkdir -p "$LOG_DIR"
# Check if today's log already exists
if [ -f "$LOG_DIR/${DATE}-logs-${HOSTNAME}.zip" ]; then
echo "Logs for today already exist. Exiting..."
exit 0
fi
echo "Starting system log collection for $DATE"
# Function to collect logs with size limit
collect_logs() {
local source="$1"
local output="$2"
local max_lines="$3"
if [ -f "$source" ]; then
# Get the last N lines to stay within size limit
tail -n "$max_lines" "$source" > "$output" 2>/dev/null || true
echo "Collected from $source"
else
echo "Source $source not found, skipping..."
fi
}
# Function to get journal logs with filtering
get_journal_logs() {
local output="$1"
local filter="$2"
local max_lines="$3"
journalctl --since "00:00:00" --until "23:59:59" \
--no-pager --output=short \
| grep -i "$filter" | tail -n "$max_lines" > "$output" 2>/dev/null || true
echo "Collected journal logs for $filter"
}
# Calculate approximate lines per log type to stay under 1MB
# Assuming average line is ~100 bytes, we aim for ~10,000 total lines
TOTAL_LINES=10000
SSH_LINES=2000
KERNEL_LINES=2000
LOGIN_LINES=1000
SYSTEM_LINES=2000
AUTH_LINES=1000
FAILED_LOGIN_LINES=500
DISK_LINES=500
NETWORK_LINES=500
MEMORY_LINES=500
# Collect SSH connections
get_journal_logs "$TEMP_DIR/ssh.log" "sshd" "$SSH_LINES"
# Collect kernel warnings and errors
get_journal_logs "$TEMP_DIR/kernel.log" "kernel.*warning\|kernel.*error" "$KERNEL_LINES"
# Collect login/logout events
get_journal_logs "$TEMP_DIR/login.log" "session.*opened\|session.*closed\|login\|logout" "$LOGIN_LINES"
# Collect system messages
get_journal_logs "$TEMP_DIR/system.log" "systemd\|daemon" "$SYSTEM_LINES"
# Collect authentication events
get_journal_logs "$TEMP_DIR/auth.log" "authentication\|auth" "$AUTH_LINES"
# Collect failed login attempts
get_journal_logs "$TEMP_DIR/failed_login.log" "failed\|failure\|denied" "$FAILED_LOGIN_LINES"
# Collect disk usage and errors
get_journal_logs "$TEMP_DIR/disk.log" "disk\|storage\|iostat" "$DISK_LINES"
# Collect network events
get_journal_logs "$TEMP_DIR/network.log" "network\|connection\|interface" "$NETWORK_LINES"
# Collect memory usage
get_journal_logs "$TEMP_DIR/memory.log" "memory\|oom\|swap" "$MEMORY_LINES"
# Collect traditional log files if they exist
collect_logs "/var/log/auth.log" "$TEMP_DIR/auth_traditional.log" 1000
collect_logs "/var/log/syslog" "$TEMP_DIR/syslog_traditional.log" 1000
collect_logs "/var/log/messages" "$TEMP_DIR/messages_traditional.log" 1000
# Create a summary file
{
echo "=== System Log Summary for $DATE ==="
echo "Hostname: $HOSTNAME"
echo "Collection time: $(date)"
echo "Total lines collected:"
wc -l "$TEMP_DIR"/*.log 2>/dev/null || true
echo ""
echo "=== System Information ==="
echo "Uptime: $(uptime)"
echo "Load average: $(cat /proc/loadavg)"
echo "Memory usage:"
free -h
echo ""
echo "Disk usage:"
df -h
echo ""
echo "Active users:"
who
} > "$TEMP_DIR/summary.txt"
# Create the zip file
cd "$TEMP_DIR"
zip -r "$LOG_DIR/${DATE}-logs-${HOSTNAME}.zip" ./* > /dev/null
# Check file size and warn if too large
FILE_SIZE=$(stat -c%s "$LOG_DIR/${DATE}-logs-${HOSTNAME}.zip")
FILE_SIZE_MB=$((FILE_SIZE / 1024 / 1024))
if [ "$FILE_SIZE_MB" -gt "$MAX_SIZE_MB" ]; then
echo "WARNING: Log file size ($FILE_SIZE_MB MB) exceeds limit ($MAX_SIZE_MB MB)"
fi
echo "Log collection completed: $LOG_DIR/${DATE}-logs-${HOSTNAME}.zip ($FILE_SIZE_MB MB)"
# Clean up old logs (older than RETENTION_DAYS)
find "$LOG_DIR" -name "*-logs-*.zip" -type f -mtime +$RETENTION_DAYS -delete 2>/dev/null || true
# Clean up temporary directory
rm -rf "$TEMP_DIR"
echo "System log collection finished successfully"

View file

@ -0,0 +1,32 @@
{
config,
lib,
pkgs,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.tailscale.enable {
services.tailscale = {
enable = true;
port = 51513;
};
networking.firewall.allowedUDPPorts = [ config.services.tailscale.port ];
environment.systemPackages = [ pkgs.tailscale ];
})
# tailscale and impermanence
(lib.mkIf
(
config.osbmModules.services.tailscale.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
environment.persistence."/persist".directories = [
"/var/lib/tailscale"
];
}
)
];
}

View file

@ -0,0 +1,75 @@
{
config,
lib,
...
}:
{
config = lib.mkMerge [
(lib.mkIf config.osbmModules.services.vaultwarden.enable {
services.vaultwarden = {
enable = true;
backupDir = "/persist/backup/vaultwarden";
# in order to avoid having ADMIN_TOKEN in the nix store it can be also set with the help of an environment file
# be aware that this file must be created by hand (or via secrets management like sops)
environmentFile = config.age.secrets.vaultwarden.path;
config = {
# Refer to https://github.com/dani-garcia/vaultwarden/blob/main/.env.template
DOMAIN = "https://bitwarden.osbm.dev";
SIGNUPS_ALLOWED = false;
ROCKET_ADDRESS = "127.0.0.1";
ROCKET_PORT = 8222;
ROCKET_LOG = "critical";
# This example assumes a mailserver running on localhost,
# thus without transport encryption.
# If you use an external mail server, follow:
# https://github.com/dani-garcia/vaultwarden/wiki/SMTP-configuration
SMTP_HOST = "127.0.0.1";
SMTP_PORT = 25;
SMTP_SSL = false;
SMTP_FROM = "osbm@osbm.dev";
SMTP_FROM_NAME = "osbm.dev Bitwarden server";
};
};
})
# vaultwarden reverse proxy via nginx
(lib.mkIf
(config.osbmModules.services.nginx.enable && config.osbmModules.services.vaultwarden.enable)
{
services.nginx.virtualHosts."bitwarden.osbm.dev" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.vaultwarden.config.ROCKET_PORT}";
};
};
}
)
# impermanence with vaultwarden
(lib.mkIf
(
config.osbmModules.services.vaultwarden.enable
&& config.osbmModules.hardware.disko.zfs.root.impermanenceRoot
)
{
systemd.services.vaultwarden.serviceConfig.ReadWritePaths = [ "/var/lib/vaultwarden" ];
# TODO try if not using bindMounts fixes this
environment.persistence."/persist" = {
directories = [
{
directory = "/var/lib/vaultwarden";
user = config.systemd.services.vaultwarden.serviceConfig.User;
group = config.systemd.services.vaultwarden.serviceConfig.Group;
mode = "0750";
}
];
};
}
)
];
}

View file

@ -0,0 +1,56 @@
{
config,
pkgs,
lib,
...
}:
{
config = lib.mkIf config.osbmModules.services.vscode-server.enable {
services.code-server = {
# only true if the machine is not pochita
enable = config.networking.hostName != "pochita";
port = 4444;
disableTelemetry = true;
disableUpdateCheck = true;
user = "osbm";
group = "users";
# auth = "none";
host = "${config.networking.hostName}.curl-boga.ts.net";
hashedPassword = "$argon2i$v=19$m=4096,t=3,p=1$dGc0TStGMDNzSS9JRkJYUFp3d091Q2p0bXlzPQ$zvdE9BkclkJmyFaenzPy2E99SEqsyDMt4IQNZfcfFFQ";
package = pkgs.vscode-with-extensions.override {
vscode = pkgs.code-server;
vscodeExtensions =
with pkgs.vscode-extensions;
[
bbenoist.nix
catppuccin.catppuccin-vsc
catppuccin.catppuccin-vsc-icons
charliermarsh.ruff
davidanson.vscode-markdownlint
esbenp.prettier-vscode
foxundermoon.shell-format
github.copilot
github.vscode-github-actions
github.vscode-pull-request-github
jnoortheen.nix-ide
kamadorueda.alejandra
ms-azuretools.vscode-docker
ms-python.python
# ms-vscode-remote.remote-ssh
timonwong.shellcheck
tyriar.sort-lines
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
# Available in nixpkgs, but outdated (0.4.0) at the time of adding
name = "vscode-tailscale";
publisher = "tailscale";
sha256 = "sha256-MKiCZ4Vu+0HS2Kl5+60cWnOtb3udyEriwc+qb/7qgUg=";
version = "1.0.0";
}
];
};
};
networking.firewall.allowedTCPPorts = [ config.services.code-server.port ];
};
}

View file

@ -0,0 +1,109 @@
{
lib,
config,
pkgs,
...
}:
let
waniKani-bypass-lessons = pkgs.writeShellApplication {
name = "wanikani-bypass-lessons";
runtimeInputs = with pkgs; [
curl
jq
];
text = ''
#!/usr/bin/env bash
# this token that starts with "2da24" is read only so i am keeping it public, i have nothing secret on my wanikani account
# but i need a write token for the second part of this script
# i am going to read it from /persist/wanikani
[ ! -e /persist/wanikani ] && echo "/persist/wanikani doesnt exist here :(" && exit 1
WANIKANI_TOKEN=$(< /persist/wanikani)
# Maximum number of reviews to maintain
MAX_REVIEWS=200
echo "=== Checking current reviews ==="
# Get current reviews (SRS stages 0-4)
current_reviews=0
for i in {0..4}; do
stage_count=$(curl -s -H "Authorization: Bearer 2da24e4a-ba89-4c4a-9047-d08f21e9dd01" "https://api.wanikani.com/v2/assignments?srs_stages=$i" | jq '.total_count')
current_reviews=$((current_reviews + stage_count))
echo "SRS stage $i: $stage_count items"
done
echo "Current total reviews: $current_reviews"
echo "Maximum reviews target: $MAX_REVIEWS"
if [ "$current_reviews" -ge "$MAX_REVIEWS" ]; then
echo "Reviews ($current_reviews) >= max ($MAX_REVIEWS). No lessons to bypass."
sleep 3600
exit 0
fi
lessons_to_bypass=$((MAX_REVIEWS - current_reviews))
echo "Need to bypass $lessons_to_bypass lessons to reach $MAX_REVIEWS total"
# Get available lessons (limited to what we need)
ASSIGNMENT_IDS=$(curl -s -H "Authorization: Bearer 2da24e4a-ba89-4c4a-9047-d08f21e9dd01" "https://api.wanikani.com/v2/assignments?immediately_available_for_lessons=true" | jq -r ".data[] | .id" | head -n "$lessons_to_bypass")
available_lessons=$(echo "$ASSIGNMENT_IDS" | wc -l)
echo "Available lessons: $available_lessons"
if [ "$available_lessons" -eq 0 ]; then
echo "No lessons available to bypass."
sleep 3600
exit 0
fi
# Limit to what we actually need
actual_bypass=$(echo "$ASSIGNMENT_IDS" | wc -l)
echo "Will bypass $actual_bypass lessons"
# "2017-09-05T23:41:28.980679Z" i need to create this from current time
TIME_STRING=$(date -u +"%Y-%m-%dT%H:%M:%S.%6NZ")
echo "Current time: $TIME_STRING"
echo "=== Starting assignments ==="
for assignment_id in $ASSIGNMENT_IDS; do
echo "Starting assignment $assignment_id"
curl -s "https://api.wanikani.com/v2/assignments/$assignment_id/start" \
-X "PUT" \
-H "Wanikani-Revision: 20170710" \
-H "Content-Type: application/json; charset=utf-8" \
-H "Authorization: Bearer $WANIKANI_TOKEN" \
-d "{\"assignment\": {\"started_at\": \"$TIME_STRING\" }}"
echo
sleep 1
done
echo "Successfully bypassed $actual_bypass lessons"
echo "New total should be approximately: $((current_reviews + actual_bypass))"
sleep 3600
'';
};
in
{
options.services.wanikani-bypass-lessons.enable = lib.mkEnableOption {
description = "Enable WaniKani Bypass Lessons";
default = config.osbmModules.services.wanikani-bypass-lessons.enable or false;
};
config = lib.mkIf config.services.wanikani-bypass-lessons.enable {
systemd.services.wanikani-bypass-lessons = {
description = "WaniKani Bypass Lessons";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${lib.getExe waniKani-bypass-lessons}";
Restart = "always";
RestartSec = 60 * 60;
};
};
};
}

View file

@ -0,0 +1,42 @@
{
pkgs,
config,
lib,
...
}:
let
wanikani-fetcher = pkgs.writeShellApplication {
name = "wanikani-fetcher";
runtimeInputs = with pkgs; [
curl
jq
zip
];
text = builtins.readFile ./wanikani-fetcher.sh;
};
in
{
options.services.wanikani-fetch-data.enable = lib.mkEnableOption {
description = "Enable WaniKani Fetch Data";
default = config.osbmModules.services.wanikani-fetch-data.enable or false;
};
config = lib.mkIf config.services.wanikani-fetch-data.enable {
systemd.timers.wanikani-fetch-data = {
description = "WaniKani Fetch Data";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "02:00";
};
};
systemd.services.wanikani-fetch-data = {
description = "WaniKani Fetch Data";
serviceConfig = {
Type = "oneshot";
ExecStart = "${lib.getExe wanikani-fetcher}";
Restart = "on-failure";
RestartSec = 60;
};
};
};
}

View file

@ -0,0 +1,82 @@
#!/usr/bin/env bash
shopt -s nullglob
API_TOKEN="2da24e4a-ba89-4c4a-9047-d08f21e9dd01"
date=$(date +%Y-%m-%d)
# check if todays date is already in the logs folder
if [ -f "/var/lib/wanikani-logs/wanikani_data_$date.zip" ]; then
echo "Data for today already exists. Exiting..."
exit 0
fi
tmp_dir=$(mktemp -d)
echo "Temporary directory created at $tmp_dir"
mkdir "$tmp_dir/data"
mkdir -p "/var/lib/wanikani-logs"
fetch_and_merge() {
local topic="$1"
local counter=0
local url="https://api.wanikani.com/v2/$topic"
local output_file="$tmp_dir/data/$topic.json"
local next_url="$url"
echo "Fetching from $url..."
while [[ -n "$next_url" ]]; do
local resp_file="$tmp_dir/$topic-page-$counter.json"
curl -s "$next_url" \
-H "Wanikani-Revision: 20170710" \
-H "Authorization: Bearer $API_TOKEN" \
-o "$resp_file"
echo -e "\n--- Page $((counter + 1)) (First 20 lines) ---"
head -n 20 <(jq . "$resp_file")
# jq . "$resp_file" 2>/dev/null | head -n 20
next_url=$(jq -r '.pages.next_url // empty' "$resp_file")
counter=$((counter + 1))
done
echo "Merging data..."
local meta
meta=$(jq '{object, total_count, data_updated_at}' "$resp_file")
local files=("$tmp_dir/$topic-page-"*.json)
jq -cn \
--argjson meta "$meta" \
--slurpfile data <(jq -s '[.[] | .data[]]' "${files[@]}") \
'$meta + {data: $data[0]}' > "$output_file"
echo "Saved to $output_file"
}
fetch_and_merge assignments
fetch_and_merge level_progressions
fetch_and_merge resets
fetch_and_merge reviews
fetch_and_merge review_statistics
fetch_and_merge spaced_repetition_systems
fetch_and_merge study_materials
fetch_and_merge subjects
curl -s "https://api.wanikani.com/v2/summary" \
-H "Wanikani-Revision: 20170710" \
-H "Authorization: Bearer $API_TOKEN" \
-o "$tmp_dir/data/summary.json"
curl -s "https://api.wanikani.com/v2/user" \
-H "Wanikani-Revision: 20170710" \
-H "Authorization: Bearer $API_TOKEN" \
-o "$tmp_dir/data/user.json"
# get the date as a variable and use it to zip the data folder
zip -j -r "/var/lib/wanikani-logs/wanikani_data_$date.zip" "$tmp_dir/data"
echo "Data zipped to /var/lib/wanikani-logs/wanikani_data_$date.zip"
echo "Cleaning up temporary files..."
rm -r "$tmp_dir"

View file

@ -0,0 +1,475 @@
import zipfile
import json
from pathlib import Path
from flask import Flask, render_template_string, Response
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.io as pio
import functools
# Set Plotly dark theme
pio.templates.default = "plotly_dark"
app = Flask(__name__)
DATA_DIR = Path("/var/lib/wanikani-logs")
def get_zip_file_names():
"""Get a list of zip files in the data directory."""
return [f for f in DATA_DIR.glob("*.zip") if f.is_file()]
# this is an expensive function so we will cache the results
@functools.lru_cache(maxsize=None)
def load_zip(zip_path):
print(f"Processing {zip_path}")
"""Load a zip file and return its contents as a dictionary."""
with zipfile.ZipFile(zip_path, "r") as z:
data = {}
# just read summary.json
with z.open("summary.json") as f:
summary_data = json.load(f)
num_reviews = len(summary_data["data"]["reviews"][0]["subject_ids"])
num_lessons = len(summary_data["data"]["lessons"][0]["subject_ids"])
data["num_reviews"] = num_reviews
data["num_lessons"] = num_lessons
# wanikani_data_2025-05-18.zip
data["date"] = zip_path.stem.split("_")[-1].replace(".zip", "")
# with z.open("subjects.json") as f:
# subjects_data = json.load(f)
# print(f"Found total data subjects: {subjects_data['total_count']}")
# data["total_subjects"] = subjects_data['total_count']
# so the subjects.json file is about 50 mb so we are just not gonna care if this value changes (doesnt change much)
data["total_subjects"] = 9300
with z.open("assignments.json") as f:
assignments_data = json.load(f)
print(f"Found total assignments: {assignments_data['total_count']}")
data["total_assignments"] = assignments_data["total_count"]
# now the data key will give us all the srs stages
srs_stages = [0 for _ in range(10)] # 10 SRS stages
for assignment in assignments_data["data"]:
srs_stage = assignment["data"]["srs_stage"]
srs_stages[srs_stage] += 1
# add srs stages to data
for i, count in enumerate(srs_stages):
data[f"srs_stage_{i}"] = count
print(data)
return data
def get_dataframe(list_of_daily_data):
"""Convert a list of daily data dictionaries into a pandas DataFrame."""
df = pd.DataFrame(list_of_daily_data)
df["progression"] = df.apply(
lambda row: sum(row[f"srs_stage_{i}"] * (i + 1) for i in range(10))
/ (row["total_subjects"] * 10)
* 100,
axis=1,
)
df["apprentice"] = df.apply(
lambda row: row["srs_stage_1"]
+ row["srs_stage_2"]
+ row["srs_stage_3"]
+ row["srs_stage_4"],
axis=1,
)
# Individual apprentice stages for distribution analysis
df["apprentice_1"] = df["srs_stage_1"]
df["apprentice_2"] = df["srs_stage_2"]
df["apprentice_3"] = df["srs_stage_3"]
df["apprentice_4"] = df["srs_stage_4"]
df["unlocked"] = df["srs_stage_0"]
df["guru"] = df.apply(lambda row: row["srs_stage_5"] + row["srs_stage_6"], axis=1)
df["master"] = df["srs_stage_7"]
df["enlightened"] = df["srs_stage_8"]
df["burned"] = df["srs_stage_9"]
return df
def get_plotly_html(df, column, title, ylabel):
"""Generate an interactive Plotly HTML for a given DataFrame column."""
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=df["date"],
y=df[column],
mode="lines+markers",
name=column.capitalize(),
line=dict(width=2),
marker=dict(size=6),
)
)
fig.update_layout(
title=title,
xaxis_title="Date",
yaxis_title=ylabel,
template="plotly_dark",
plot_bgcolor="#151519",
paper_bgcolor="#151519",
width=1200,
height=600,
margin=dict(l=50, r=50, t=50, b=50),
)
# Show every 10th date label for better readability
date_indices = list(range(0, len(df), 10))
fig.update_xaxes(
tickmode="array",
tickvals=[df.iloc[i]["date"] for i in date_indices],
ticktext=[df.iloc[i]["date"] for i in date_indices],
tickangle=45,
)
return fig.to_html(include_plotlyjs=True, div_id=f"plot_{column}")
def get_apprentice_distribution_html(df):
"""Generate a stacked area chart showing apprentice stage distribution over time."""
fig = go.Figure()
# Add stacked area traces
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["apprentice_1"],
mode="lines",
name="Apprentice I",
stackgroup="one",
fillcolor="rgba(255, 107, 107, 0.8)",
line=dict(width=0.5, color="#ff6b6b"),
)
)
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["apprentice_2"],
mode="lines",
name="Apprentice II",
stackgroup="one",
fillcolor="rgba(78, 205, 196, 0.8)",
line=dict(width=0.5, color="#4ecdc4"),
)
)
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["apprentice_3"],
mode="lines",
name="Apprentice III",
stackgroup="one",
fillcolor="rgba(69, 183, 209, 0.8)",
line=dict(width=0.5, color="#45b7d1"),
)
)
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["apprentice_4"],
mode="lines",
name="Apprentice IV",
stackgroup="one",
fillcolor="rgba(150, 206, 180, 0.8)",
line=dict(width=0.5, color="#96ceb4"),
)
)
fig.update_layout(
title="Apprentice Stage Distribution Over Time",
xaxis_title="Date",
yaxis_title="Number of Items",
template="plotly_dark",
plot_bgcolor="#151519",
paper_bgcolor="#151519",
width=1200,
height=600,
margin=dict(l=50, r=50, t=50, b=50),
legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1),
)
# Show every 10th date label for better readability
date_indices = list(range(0, len(df), 10))
fig.update_xaxes(
tickmode="array",
tickvals=[df.iloc[i]["date"] for i in date_indices],
ticktext=[df.iloc[i]["date"] for i in date_indices],
tickangle=45,
)
return fig.to_html(include_plotlyjs=True, div_id="apprentice_distribution")
def generate_standalone_html(df, output_path=None):
"""Generate a completely self-contained HTML file with all charts."""
# Generate all chart HTML
reviews_html = get_plotly_html(
df, "num_reviews", "Daily Reviews", "Number of Reviews"
)
lessons_html = get_plotly_html(
df, "num_lessons", "Daily Lessons", "Number of Lessons"
)
progression_html = get_plotly_html(
df, "progression", "SRS Progression", "Progression (%)"
)
apprentice_distribution_html = get_apprentice_distribution_html(df)
srs_stage_apprentice_html = get_plotly_html(
df, "apprentice", "Apprentice Stage", "Number of Subjects"
)
srs_stage_guru_html = get_plotly_html(
df, "guru", "Guru Stage", "Number of Subjects"
)
srs_stage_master_html = get_plotly_html(
df, "master", "Master Stage", "Number of Subjects"
)
srs_stage_enlightened_html = get_plotly_html(
df, "enlightened", "Enlightened Stage", "Number of Subjects"
)
srs_stage_burned_html = get_plotly_html(
df, "burned", "Burned Stage", "Number of Subjects"
)
# Create complete standalone HTML
html_content = f"""
<!DOCTYPE html>
<html>
<head>
<title>WaniKani Statistics Dashboard</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {{
background-color: #151519;
color: #8b8b9c;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
margin: 0;
padding: 20px;
line-height: 1.6;
}}
.chart-container {{
margin: 20px auto;
padding: 15px;
border-radius: 8px;
border: 1px solid #1e1e24;
background-color: #1a1a1f;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}}
h1 {{
text-align: center;
color: #ffffff;
margin-bottom: 40px;
font-size: 2.5em;
font-weight: 300;
}}
.dashboard-info {{
text-align: center;
margin-bottom: 30px;
color: #888;
font-size: 0.9em;
}}
</style>
</head>
<body>
<h1>WaniKani Statistics Dashboard</h1>
<div class="dashboard-info">
Interactive dashboard showing your WaniKani learning progress over time
</div>
<div class="chart-container">{reviews_html}</div>
<div class="chart-container">{lessons_html}</div>
<div class="chart-container">{progression_html}</div>
<div class="chart-container">{apprentice_distribution_html}</div>
<div class="chart-container">{srs_stage_apprentice_html}</div>
<div class="chart-container">{srs_stage_guru_html}</div>
<div class="chart-container">{srs_stage_master_html}</div>
<div class="chart-container">{srs_stage_enlightened_html}</div>
<div class="chart-container">{srs_stage_burned_html}</div>
</body>
</html>
"""
# Save to file if output_path is provided
if output_path:
with open(output_path, "w", encoding="utf-8") as f:
f.write(html_content)
print(f"Standalone HTML dashboard saved to: {output_path}")
return html_content
@app.route("/download")
def download_dashboard():
"""Route to download a standalone HTML file."""
file_names = get_zip_file_names()
print(f"Found {len(file_names)} zip files in {DATA_DIR}")
list_of_daily_data = []
for file_name in file_names:
daily_data = load_zip(file_name)
list_of_daily_data.append(daily_data)
df = get_dataframe(list_of_daily_data)
df.sort_values(by="date", inplace=True)
html_content = generate_standalone_html(df)
response = Response(html_content, content_type="text/html")
response.headers["Content-Disposition"] = (
"attachment; filename=wanikani_dashboard.html"
)
return response
def render_html(df):
"""Render the DataFrame as HTML with interactive Plotly charts."""
reviews_html = get_plotly_html(
df, "num_reviews", "Daily Reviews", "Number of Reviews"
)
lessons_html = get_plotly_html(
df, "num_lessons", "Daily Lessons", "Number of Lessons"
)
progression_html = get_plotly_html(
df, "progression", "SRS Progression", "Progression (%)"
)
# apprentice distribution chart
apprentice_distribution_html = get_apprentice_distribution_html(df)
# srs stages
srs_stage_apprentice_html = get_plotly_html(
df, "apprentice", "Apprentice Stage", "Number of Subjects"
)
srs_stage_guru_html = get_plotly_html(
df, "guru", "Guru Stage", "Number of Subjects"
)
srs_stage_master_html = get_plotly_html(
df, "master", "Master Stage", "Number of Subjects"
)
srs_stage_enlightened_html = get_plotly_html(
df, "enlightened", "Enlightened Stage", "Number of Subjects"
)
srs_stage_burned_html = get_plotly_html(
df, "burned", "Burned Stage", "Number of Subjects"
)
# Render HTML with embedded Plotly charts
html_content = f"""
<!DOCTYPE html>
<html>
<head>
<title>WaniKani Stats</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {{
background-color: #151519;
color: #8b8b9c;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
margin: 0;
padding: 20px;
}}
.chart-container {{
margin: 20px auto;
padding: 10px;
border-radius: 5px;
border: 1px solid #1e1e24;
background-color: #151519;
}}
h1 {{
text-align: center;
color: #8b8b9c;
margin-bottom: 30px;
}}
</style>
</head>
<body>
<h1>WaniKani Statistics Dashboard</h1>
<div class="chart-container">{reviews_html}</div>
<div class="chart-container">{lessons_html}</div>
<div class="chart-container">{progression_html}</div>
<div class="chart-container">{apprentice_distribution_html}</div>
<div class="chart-container">{srs_stage_apprentice_html}</div>
<div class="chart-container">{srs_stage_guru_html}</div>
<div class="chart-container">{srs_stage_master_html}</div>
<div class="chart-container">{srs_stage_enlightened_html}</div>
<div class="chart-container">{srs_stage_burned_html}</div>
</body>
</html>
"""
return html_content
@app.route("/")
def index():
"""Index route"""
file_names = get_zip_file_names()
print(f"Found {len(file_names)} zip files in {DATA_DIR}")
list_of_daily_data = []
for file_name in file_names:
daily_data = load_zip(file_name)
list_of_daily_data.append(daily_data)
df = get_dataframe(list_of_daily_data)
# sort by date string
df.sort_values(by="date", inplace=True)
response = Response(render_html(df), content_type="text/html")
response.headers["Widget-Content-Type"] = "html"
response.headers["Widget-Title"] = "WaniKani Statistics"
return response
@app.route("/health")
def health():
"""Health check endpoint"""
return {"status": "ok", "service": "wanikani-stats"}
if __name__ == "__main__":
import sys
# Check if user wants to generate standalone HTML
if len(sys.argv) > 1 and sys.argv[1] == "generate":
output_file = sys.argv[2] if len(sys.argv) > 2 else "wanikani_dashboard.html"
print("Generating standalone HTML dashboard...")
file_names = get_zip_file_names()
print(f"Found {len(file_names)} zip files in {DATA_DIR}")
list_of_daily_data = []
for file_name in file_names:
daily_data = load_zip(file_name)
list_of_daily_data.append(daily_data)
df = get_dataframe(list_of_daily_data)
df.sort_values(by="date", inplace=True)
generate_standalone_html(df, output_file)
print(f"✅ Standalone HTML dashboard generated: {output_file}")
print(
"📊 You can now open this file in any web browser to view your interactive WaniKani stats!"
)
else:
# Start Flask server
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8501
print(f"Starting WaniKani Stats Flask app on port {port}")
print(f"📊 View dashboard at: http://localhost:{port}")
print(f"💾 Download standalone HTML at: http://localhost:{port}/download")
app.run(host="0.0.0.0", port=port, debug=False)

View file

@ -0,0 +1,115 @@
{
pkgs,
config,
lib,
...
}:
let
python =
# let
# packageOverrides = self: super: {
# imageio = super.imageio.overridePythonAttrs (old: {
# disabledTests = [
# "test_read_stream"
# "test_uri_reading"
# "test_trim_filter"
# "test_process_termination"
# ];
# });
# plotly = super.plotly.overridePythonAttrs (old: {
# disabledTestPaths = (old.disabledTestPaths or [ ]) ++ [
# "tests/test_optional/test_kaleido/test_kaleido.py"
# ];
# });
# };
# in
pkgs.python3.override {
# inherit packageOverrides;
self = python;
};
wanikani-stats-flask = pkgs.writeShellApplication {
name = "wanikani-stats-flask";
runtimeInputs = [
(python.withPackages (
ppkgs: with ppkgs; [
flask
pandas
numpy
jinja2
matplotlib
seaborn
plotly
]
))
];
text = ''
#!/usr/bin/env bash
echo "Starting WaniKani Stats Flask app..."
exec python ${./app.py} ${toString config.services.wanikani-stats.port}
'';
};
in
{
options.services.wanikani-stats = {
enable = lib.mkEnableOption {
description = "Enable WaniKani Stats Service";
default = config.osbmModules.services.wanikani-stats.enable or false;
};
logDirectory = lib.mkOption {
type = lib.types.path;
default = "/var/lib/wanikani-logs";
description = "Directory to get the log archives";
};
port = lib.mkOption {
type = lib.types.port;
default = 8501;
description = "Port for the WaniKani Stats service";
};
};
config = lib.mkIf config.services.wanikani-stats.enable {
networking.firewall.allowedTCPPorts = [
config.services.wanikani-stats.port
];
systemd = {
services = {
wanikani-stats = {
description = "WaniKani Stats Service";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${lib.getExe wanikani-stats-flask}";
StateDirectory = "/var/lib/wanikani-stats";
Restart = "on-failure";
User = "root";
Group = "root";
};
};
# Timer to restart the service every 12 hours
wanikani-stats-restart = {
description = "Restart WaniKani Stats Service";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.systemd}/bin/systemctl restart wanikani-stats.service";
User = "root";
};
};
};
timers.wanikani-stats-restart = {
description = "Timer to restart WaniKani Stats Service every 12 hours";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*-*-* 00,12:00:00";
Persistent = true;
RandomizedDelaySec = "5m";
};
};
};
};
}

View file

@ -0,0 +1,39 @@
{
lib,
pkgs,
inputs,
config,
...
}:
{
imports = [
inputs.agenix.nixosModules.default
];
config = lib.mkIf config.osbmModules.agenix.enable {
environment.systemPackages = [
inputs.agenix.packages.${pkgs.stdenv.hostPlatform.system}.agenix
pkgs.age
];
age.secrets = {
vaultwarden.file = ../../../secrets/vaultwarden.age;
network-manager.file = ../../../secrets/network-manager.age;
ssh-key-private = {
file = ../../../secrets/ssh-key-private.age;
path = "/home/osbm/.ssh/id_ed25519";
owner = "osbm";
group = "users";
mode = "600";
};
ssh-key-public = {
file = ../../../secrets/ssh-key-public.age;
path = "/home/osbm/.ssh/id_ed25519.pub";
owner = "osbm";
group = "users";
mode = "644";
};
};
};
}

View file

@ -0,0 +1,15 @@
{
imports = [
./users.nix
./desktop-environment.nix
./nix-settings.nix
./agenix.nix
./home-manager.nix
./virtualisation.nix
./emulation.nix
./i18n.nix
./impermanence.nix
./fonts.nix
./nix-index.nix
];
}

View file

@ -0,0 +1,95 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.osbmModules;
in
{
config = lib.mkMerge [
# Plasma Desktop Environment
(lib.mkIf (cfg.desktopEnvironment == "plasma") {
services = {
xserver.enable = true;
displayManager.sddm.enable = true;
desktopManager.plasma6.enable = true;
printing.enable = true;
};
environment = {
plasma6.excludePackages = with pkgs.kdePackages; [
kate
konsole
yakuake
krunner # fuckass program keeps opening
];
systemPackages = with pkgs; [
alacritty
ghostty
obsidian
mpv
kitty
qbittorrent
element-desktop
];
sessionVariables.NIXOS_OZONE_WL = "1";
};
})
# GNOME Desktop Environment
(lib.mkIf (cfg.desktopEnvironment == "gnome") {
# Enable GNOME Desktop Environment
services = {
xserver.enable = true;
desktopManager.gnome.enable = true;
displayManager.gdm.enable = true;
gnome.gnome-keyring.enable = true;
};
# Enable dconf for GNOME settings
programs.dconf.enable = true;
# Remove unwanted GNOME applications
environment.gnome.excludePackages = with pkgs; [
baobab # disk usage analyzer
cheese # photo booth
eog # image viewer
epiphany # web browser
simple-scan # document scanner
totem # video player
yelp # help viewer
evince # document viewer
file-roller # archive manager
geary # email client
seahorse # password manager
gnome-calculator
gnome-calendar
gnome-characters
gnome-clocks
gnome-contacts
gnome-font-viewer
gnome-logs
gnome-maps
gnome-music
gnome-screenshot
gnome-system-monitor
gnome-weather
gnome-disk-utility
pkgs.gnome-connections
];
})
# Common settings for any desktop environment
(lib.mkIf (cfg.desktopEnvironment != "none") {
# Enable X11 keymap
services.xserver.xkb = {
layout = lib.mkDefault "us";
variant = lib.mkDefault "";
};
})
];
}

View file

@ -0,0 +1,7 @@
{ lib, config, ... }:
{
config = lib.mkIf config.osbmModules.emulation.aarch64.enable {
# Enable binfmt for aarch64 emulation
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
};
}

View file

@ -0,0 +1,57 @@
{
pkgs,
lib,
config,
...
}:
{
config = lib.mkIf config.osbmModules.fonts.enable {
fonts.packages = with pkgs; [
cascadia-code
noto-fonts-cjk-sans
noto-fonts-color-emoji
liberation_ttf
fira-code
fira-code-symbols
mplus-outline-fonts.githubRelease
dina-font
nerd-fonts.fira-code
nerd-fonts.ubuntu
nerd-fonts.droid-sans-mono
proggyfonts
source-sans
source-han-sans
source-han-mono
source-sans-pro
source-serif-pro
font-awesome
font-awesome_5
roboto
twitter-color-emoji
iosevka
dejavu_fonts
];
# fonts.fontconfig = {
# defaultFonts.emoji = ["Noto Color Emoji"];
# };
fonts.fontconfig.defaultFonts = {
serif = [
"Source Han Serif SC"
"Source Han Serif TC"
"Noto Color Emoji"
];
sansSerif = [
"Source Han Sans SC"
"Source Han Sans TC"
"Noto Color Emoji"
];
monospace = [
"Droid Sans Mono"
"DejaVu Sans Mono"
"Source Han Mono"
"Cascadia Code"
];
emoji = [ "Noto Color Emoji" ];
};
};
}

View file

@ -0,0 +1,52 @@
{
lib,
config,
inputs,
...
}:
{
imports = [
inputs.home-manager.nixosModules.home-manager
];
config = lib.mkMerge [
# Enable FUSE user_allow_other when impermanence is used
(lib.mkIf config.osbmModules.hardware.disko.zfs.root.impermanenceRoot {
programs.fuse.userAllowOther = true;
})
(lib.mkIf config.osbmModules.homeManager.enable {
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = ".nixbak";
# Pass inputs and outputs to home-manager modules
extraSpecialArgs = {
inherit inputs;
# Pass the NixOS system config to home-manager modules
nixosConfig = config;
};
# Configure home-manager for each user (excluding root)
users =
let
# Capture the NixOS system config before entering the home-manager scope
systemConfig = config;
in
lib.genAttrs (builtins.filter (u: u != "root") config.osbmModules.users) (_username: {
# Use the system's stateVersion for home-manager
home.stateVersion = lib.mkDefault systemConfig.system.stateVersion;
imports = [
../../home-manager
]
++ lib.optionals systemConfig.osbmModules.hardware.disko.zfs.root.impermanenceRoot [
# Import impermanence home-manager module when impermanence is enabled
inputs.impermanence.homeManagerModules.impermanence
];
});
};
})
];
}

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