Compare commits

..

870 Commits

Author SHA1 Message Date
Danilo Reyes
59c88ba905 rol vm + dev stuff for webref 2025-11-08 14:12:13 -06:00
Danilo Reyes
37dce91efa windows vm ssh key for rol
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 4m0s
2025-11-06 20:49:54 -06:00
Danilo Reyes
41ced09790 single runner
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 10m43s
2025-11-02 10:10:00 -06:00
Danilo Reyes
14d3e6b1ee action runner & webref stuff 2025-11-02 00:16:49 -06:00
Danilo Reyes
007744fb84 attic to the runner 2025-11-01 23:17:17 -06:00
Danilo Reyes
349495bea6 unsupported schema 2025-11-01 23:09:11 -06:00
Danilo Reyes
151ba68a35 webref runner 2025-11-01 22:39:40 -06:00
Danilo Reyes
78afe09dcb tailscale security 2025-11-01 17:19:44 -06:00
Danilo Reyes
4abb664cfe xterm name 2025-11-01 16:54:08 -06:00
Danilo Reyes
31cd975555 cursor wihtout fhs 2025-11-01 16:26:29 -06:00
Danilo Reyes
8d056ebd86 last flake update from master before 25.11 2025-11-01 12:15:51 -06:00
Danilo Reyes
5ae0facbf7 flake update 2025-11-01 11:38:17 -06:00
Danilo Reyes
310ea1d253 new vps ip, region dallas
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Has been cancelled
2025-10-29 19:50:49 -06:00
Danilo Reyes
6d05270d09 new redirection 2025-10-29 14:06:29 -06:00
Danilo Reyes
6971bc9c9e secrets servidos.lat > lebubu.org 2025-10-29 13:20:35 -06:00
Danilo Reyes
0ec7fc1ec9 servidos.lat > lebubu.org 2025-10-29 13:12:31 -06:00
NixOS Builder Bot
943d9f3329 Weekly flake update: 2025-10-29 17:38 UTC 2025-10-29 11:38:29 -06:00
Danilo Reyes
cad0288d68 lan login for schemes pipeline as well 2025-10-29 09:57:44 -06:00
Danilo Reyes
15f998179d lowered compression rate 2025-10-29 01:57:21 -06:00
Danilo Reyes
11075969f2 push attic throguh lan 2025-10-29 01:41:24 -06:00
Danilo Reyes
4c6d02ba55 using rmlint from nixpkgs 2025-10-29 00:39:51 -06:00
Danilo Reyes
2cce4376e5 ignore conflicting cache syncthing librewolf 2025-10-29 00:00:39 -06:00
Danilo Reyes
9f455ec19c change public listener url synapse 2025-10-28 18:51:11 -06:00
Danilo Reyes
0ef6b08c42 changed ip/config of new vps 2025-10-28 16:11:16 -06:00
Danilo Reyes
fd2962c306 nextcloud headers fix
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 2m4s
2025-10-26 10:08:37 -06:00
Danilo Reyes
87cca163b0 updated collabora docker 2025-10-26 09:59:24 -06:00
Danilo Reyes
cf64ff1616 heartbeat is a boolean 2025-10-25 00:59:37 -06:00
Danilo Reyes
2f6d65b239 atticd fix 2025-10-25 00:52:22 -06:00
Danilo Reyes
6dc429e56c insecure package ughhhh 2025-10-25 00:00:28 -06:00
Danilo Reyes
28ef0d8108 fixes qbittorrent, nextcloud python update, firewall logic
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 1m55s
2025-10-18 10:12:09 -06:00
Danilo Reyes
0e5e06bcb6 flake update
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 18m55s
2025-10-13 10:08:02 -06:00
Danilo Reyes
cf4db411e0 Update SSH key paths in core.nix to use relative paths for improved consistency and maintainability.
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 18m30s
2025-10-12 23:00:45 -06:00
Danilo Reyes
be82c5c477 Refactor configuration files to include 'inputs' parameter for improved modularity and consistency across hosts. 2025-10-12 22:57:24 -06:00
Danilo Reyes
de5ad541b8 Refactor SSH key management to use centralized key retrieval function for nixremote users across configurations. 2025-10-12 20:28:39 -06:00
Danilo Reyes
0f7e28abd0 more migration stuff 2025-10-12 20:24:42 -06:00
Danilo Reyes
30cff89a50 cleaned up duplicated code 2025-10-12 20:03:24 -06:00
Danilo Reyes
e393a4481b reverted server factory 2025-10-12 19:59:46 -06:00
Danilo Reyes
8664061145 further figration 2025-10-12 14:12:19 -06:00
Danilo Reyes
c3d20aa28f part 3 of the flake-parts migration 2025-10-12 14:02:09 -06:00
Danilo Reyes
11fd8e0440 refractor shell configurations with flake-parts 2025-10-12 13:51:45 -06:00
Danilo Reyes
6f97b24115 flake parts, migrated modules 2025-10-12 13:41:48 -06:00
Danilo Reyes
6497dede6f migration to flake-parts 2025-10-12 13:23:38 -06:00
Danilo Reyes
1b743f9fcc moved some emulators to retroarch cores 2025-10-12 12:58:02 -06:00
Danilo Reyes
6216d19d0b gonna give pop-shell a go 2025-10-12 12:57:50 -06:00
NixOS Builder Bot
360fe268f8 Weekly flake update: 2025-10-11 03:33 UTC 2025-10-10 21:33:27 -06:00
Danilo Reyes
efb98d6d54 sudo-rs
All checks were successful
Weekly NixOS Build & Cache / build-and-cache (push) Successful in 8m39s
2025-10-09 23:42:38 -06:00
Danilo Reyes
d3ec0a04b7 gallery-dl reads secrets on runtime 2025-10-09 23:23:26 -06:00
Danilo Reyes
9eadbb08ab fixed indentation of secrets 2025-10-09 23:10:00 -06:00
Danilo Reyes
350fc82be9 new keyring isnt compatible with proton yet 2025-10-09 23:01:01 -06:00
NixOS Builder Bot
823c4be1e7 Weekly flake update: 2025-10-06 09:54 UTC 2025-10-06 03:54:05 -06:00
Danilo Reyes
a09d10ab90 replaced stash readonly paths with normal binds
All checks were successful
Weekly NixOS Build & Cache / build-and-cache (push) Successful in 23m49s
2025-10-05 13:12:07 -06:00
Danilo Reyes
84737df99b fix to have stash plugins work 2025-10-04 19:46:04 -06:00
Danilo Reyes
3746abd6ec rate limits + reverted keyring 2025-10-04 11:14:31 -06:00
NixOS Builder Bot
ceefac0754 Weekly flake update: 2025-10-04 17:11 UTC 2025-10-04 11:11:55 -06:00
Danilo Reyes
0b6f76a120 removed wayland env variable that crashes cursor 2025-10-04 11:00:44 -06:00
Danilo Reyes
3598f12af4 pinned ucode, so flake can update 2025-10-04 10:43:57 -06:00
Danilo Reyes
180f467c46 gnome-keyring > gcr_4 2025-10-04 10:43:47 -06:00
Danilo Reyes
e632276274 yellow fits the theme better
All checks were successful
Build All Color Schemes / build-schemes (push) Successful in 5m6s
2025-10-03 19:58:50 -06:00
Danilo Reyes
3e6ae8c0a8 hyprland another day 2025-10-03 19:55:39 -06:00
Danilo Reyes
3f3d338f50 Adjust Waybar configuration and styling: reduce height to 18px and modify module margins and padding for improved layout. 2025-10-03 19:40:12 -06:00
Danilo Reyes
93f7e78540 Update stylix scheme and refactor Hyprland configuration with new waybar setup 2025-10-03 19:09:39 -06:00
Danilo Reyes
04019415bd firewall symplification + theme adjustments
All checks were successful
Build All Color Schemes / build-schemes (push) Successful in 13m10s
2025-10-03 09:51:11 -06:00
988f53bd46 Remove artifact upload step from CI workflow to simplify build process and update summary messaging.
Some checks failed
Weekly NixOS Build & Cache / build-and-cache (push) Failing after 1m21s
2025-10-02 23:30:39 -06:00
f704871516 changed email 2025-10-02 23:05:29 -06:00
d77a84b2e9 readme 2025-10-02 22:56:56 -06:00
ab22bef7b4 Enhance CI workflow by adding --quiet flag to Nix build commands for reduced output during scheme builds and cache pushes. 2025-10-02 22:39:22 -06:00
edf8f1c411 Update CI workflow to use impure Nix evaluation for retrieving available schemes. 2025-10-02 22:33:29 -06:00
08b521b7cc Remove Nix setup step from CI workflow to streamline the build process for NixOS schemes. 2025-10-02 22:32:12 -06:00
94fe046266 Refactor CI workflow to build and push NixOS schemes, replacing parallel builds with sequential processing for better cache management. Introduce a new script for pushing builds to Attic cache and remove the obsolete build-all-schemes script. 2025-10-02 22:28:15 -06:00
c238a15f31 Update CI workflow to use NixOS, configure Attic cache, and enhance build summary 2025-10-02 22:12:27 -06:00
e15b93c43a cicd schemes 2025-10-02 22:08:00 -06:00
1ba04c465f wip new themes 2025-10-02 21:55:03 -06:00
ac3eb36ab0 new wallpapers and script adjustment 2025-10-02 21:51:26 -06:00
dc3aec897e cursor unstable overlay 2025-10-02 21:11:33 -06:00
5c5325bd6c brave > librewolf containers 2025-10-02 15:37:00 -06:00
8241e6ca57 removed/untoggled unused apps 2025-10-02 15:13:18 -06:00
2e42d1ebfd created syncthing module 2025-10-02 14:58:57 -06:00
6ceabf32f5 qbit_manage flake 2025-10-02 14:30:33 -06:00
5e49f6d326 absolute qbit_manage conf path 2025-10-02 14:29:56 -06:00
df80a06b23 attempt to pseudo-package qbit_manage 2025-10-02 14:21:59 -06:00
86e540b35d properly set unpackerr and stash secrets 2025-10-02 14:07:46 -06:00
143187e171 Add gitignore rules for secrets 2025-10-02 12:57:40 -06:00
ec57fb1611 nix linter settings 2025-10-02 12:52:31 -06:00
e4d8b16ee6 encrypted gallery-dl secrets 2025-10-02 12:52:14 -06:00
b915571fb2 pined doom emacs so nix lsp doesnt break 2025-10-02 11:19:43 -06:00
f92834e4de lowered grub timeout 2025-10-02 11:10:19 -06:00
3988202916 hyprland will have to be another day 2025-10-02 11:06:20 -06:00
971d7d1d93 little annoyance 2025-10-02 11:02:47 -06:00
e63a0590b4 restoring config.org 2025-10-02 11:02:17 -06:00
771b7b1a42 specializations are annoying + trying to fix emacs 2025-10-02 03:27:13 -06:00
acdc0fb0eb flushing up hyprland 2025-10-02 02:49:44 -06:00
ab8d8f068d misc adjustments/improvements 2025-10-02 01:44:37 -06:00
NixOS Builder Bot
79ce705a5e Weekly flake update: 2025-09-30 20:10 UTC 2025-09-30 14:10:47 -06:00
b55dfe5aad specizlizations complete 2025-09-30 13:39:29 -06:00
fab4bd0876 flake update manual script 2025-09-30 00:38:44 -06:00
d449570a0c specializations for workstation 2025-09-29 22:11:35 -06:00
0beab15f24 bash ~ zsh wip 2025-09-29 21:52:02 -06:00
ba8d491cf7 nixformat alias 2025-09-29 21:23:56 -06:00
bb08c52790 hyprland safe escape with stylix + fonts flake 2025-09-29 21:19:38 -06:00
NixOS Builder Bot
a5e8cf27ec Weekly flake update: 2025-09-29 09:48 UTC 2025-09-29 03:48:15 -06:00
NixOS Builder Bot
b2b3052ab8 Weekly flake update: 2025-09-29 04:38 UTC 2025-09-28 22:38:33 -06:00
679f51e6da moved wallpapers to another repo 2025-09-28 21:53:14 -06:00
b099248489 hyprland bindings 2025-09-28 17:16:43 -06:00
NixOS Builder Bot
1b2c5dc7cc Weekly flake update: 2025-09-28 22:46 UTC 2025-09-28 16:46:22 -06:00
b7400098b0 emacs-vm test! 2025-09-28 16:38:54 -06:00
NixOS Builder Bot
6231373ebc Weekly flake update: 2025-09-28 22:24 UTC 2025-09-28 16:24:25 -06:00
354c7c38bd Update weekly build workflow: change schedule to run Mondays and Fridays at 09:30 UTC, remove emacs-vm build step, and adjust success message accordingly. 2025-09-28 16:04:40 -06:00
50b20197b8 Add emacs-vm build to weekly workflow 2025-09-28 16:02:22 -06:00
702f5cb2ea hyprland wip 2025-09-28 15:58:21 -06:00
2ff6ff45bf cheems ci test 2025-09-28 15:49:33 -06:00
56adbf671f optimizations + overall linting 2025-09-28 15:08:10 -06:00
6da8588e40 assertions + more descriptive initializations 2025-09-28 15:05:34 -06:00
712a0728a3 security hardcoding 2025-09-28 15:03:50 -06:00
NixOS Builder Bot
2a11c338a0 Weekly flake update: 2025-09-28 20:54 UTC 2025-09-28 14:54:39 -06:00
c24ecaa6d9 proper cache? 2025-09-28 13:12:56 -06:00
255d843941 local atticd 2025-09-28 13:02:55 -06:00
eb43cf033b podman image updates 2025-09-28 12:40:57 -06:00
2da5b91d0c removed sabnzbd from default firewall open 2025-09-28 12:35:06 -06:00
7169f72735 ??? 2025-09-28 12:21:29 -06:00
0922222149 fuck it 2025-09-28 12:19:30 -06:00
e86ca773b8 another cicd test 2025-09-28 12:17:43 -06:00
c7a477404d new cache compression 2025-09-28 11:55:15 -06:00
09d4aa5b25 no longer building emulator from source 2025-09-28 11:47:02 -06:00
f9da9f892c gitea settings migration 2025-09-28 11:39:57 -06:00
b993d1c68d moved gitea runners 2025-09-28 11:33:01 -06:00
dfbc84c6ad renamed factory scripts 2025-09-28 11:31:02 -06:00
fc22178e4a moved base.nix to factories 2025-09-28 11:29:38 -06:00
2acddde11f moved setup.nix outside of the servers block. 2025-09-28 11:27:49 -06:00
6c7439894b properly refactored flame 2025-09-28 11:23:10 -06:00
b4417a6acd properly inherit enable on servers 2025-09-28 11:14:57 -06:00
a376428118 added secureHost flag 2025-09-28 10:52:27 -06:00
d704e0ee13 print less logs when building 2025-09-28 10:24:43 -06:00
f400b8922a easier to read nginx file 2025-09-28 02:15:41 -06:00
cd9e738c3c removed empty lines 2025-09-28 02:11:14 -06:00
8053fc7843 flake for emacs vm 2025-09-28 02:08:03 -06:00
7b1c061c9d wip emacs output 2025-09-28 01:58:34 -06:00
eee3e2dfea galaxy hosts 2025-09-28 00:36:53 -06:00
80fc73a9a3 tailscale + sunshine + lint 2025-09-27 23:57:13 -06:00
b444e8d399 flake test 2025-09-27 23:36:19 -06:00
48a70ab9c4 update flake.lock and flake.nix: refresh dependencies and change jawz-scripts URL to HTTPS 2025-09-27 23:28:49 -06:00
e680906a7f add openssh to Gitea Actions runners for SSH git operations 2025-09-27 23:03:04 -06:00
de80ff655b refactor gitea.nix: update domain and rootUrl keys for consistency 2025-09-27 22:47:36 -06:00
2ac20c519c added nodejs to Gitea Actions runners for GitHub Actions support 2025-09-27 22:45:03 -06:00
fe8c258d8f attic setup done 2025-09-27 22:41:53 -06:00
fdcfe609b2 renamed changes for 25.11 2025-09-27 22:10:17 -06:00
9ccc45ba41 added attic-client to jawz user packages in configuration.nix 2025-09-27 22:08:11 -06:00
5ee3618199 env secret fix 2025-09-27 21:57:22 -06:00
17755c9cd2 adjusted runner 2025-09-27 21:29:48 -06:00
e6c9e80a3b gitea nixos cicd 2025-09-27 21:04:50 -06:00
0b709f4ef0 dotfiles cleanup 2025-09-27 19:59:40 -06:00
ab845af157 nginx proxy module 2025-09-27 18:12:23 -06:00
99574c9b66 modularized firewall logic 2025-09-27 17:44:01 -06:00
3d3f49aeec wip: server-factory + firewall refractor 2025-09-27 17:00:13 -06:00
4b81028cde made a build and nixremote modules. 2025-09-27 16:31:05 -06:00
8cd5e390cf ssh config 2025-09-27 15:56:36 -06:00
a9b9063ee1 renamed shell to galaxy 2025-09-27 13:45:46 -06:00
dd2b84f3f9 flake registry + merged outputs as jawz# 2025-09-24 00:04:51 -06:00
606d8c675f stash finished 2025-09-23 00:44:37 -06:00
ce35a92ba7 stash wip 2025-09-22 23:49:07 -06:00
7c174a9a45 flake update 2025-09-21 18:09:32 -06:00
90bb5c4da1 upgraded flaresolverr 2025-09-21 15:42:55 -06:00
41cfe4b2fd wip fixing synapse ssl 2025-09-21 14:42:32 -06:00
3c93a761ef expose synapse to local lan 2025-09-21 12:11:11 -06:00
2a01065e0c containers check 2025-09-21 11:54:54 -06:00
97748edc3f wg & syncthing properly talk through subnet 2025-09-21 11:36:59 -06:00
8262c551e7 syncthing nat disabled 2025-09-21 10:49:45 -06:00
b7c6c87d33 syncthing global discovery off 2025-09-21 10:48:05 -06:00
fad0bc90e0 permission fix 2025-09-20 22:52:19 -06:00
4f0f1a08f5 resilio deprecated 2025-09-20 22:38:06 -06:00
e58f6cfb86 syncthing devices 2025-09-20 22:11:44 -06:00
c40429d3d7 new paths 2025-09-20 21:49:58 -06:00
1a06a69a5c removed nginx proxy 2025-09-20 21:05:55 -06:00
a9bf2a5835 syncthing friends folder 2025-09-20 20:21:22 -06:00
3c2919c674 qbittorrent new env 2025-09-20 16:41:10 -06:00
ef611ff9e9 gitea check if enabled before compiling runner 2025-09-20 16:13:19 -06:00
94eb3edef3 vps pub key 2025-09-20 16:09:19 -06:00
f57f64a880 gitea file properly linted 2025-09-20 15:57:01 -06:00
8bc05d559c gitea with key, mail, and worker 2025-09-20 15:55:37 -06:00
c646a58cea metube enabled 2025-09-20 15:55:31 -06:00
e3272a1dce joint ips & ports open through lambda 2025-09-20 15:48:05 -06:00
6e49c741f3 android wireless screen sharing 2025-09-19 22:46:52 -06:00
b759d318b6 port fix flake 2025-09-19 11:19:25 -06:00
c234acacec gitea email support 2025-09-19 11:15:26 -06:00
3d16556312 mealie 2025-09-19 01:21:32 -06:00
9a5d209cfe disabled portfolio 2025-09-18 21:54:20 -06:00
4c505e0e2d new token 2025-09-18 21:52:45 -06:00
7dc27e127c gitlab > gitea 2025-09-18 21:44:55 -06:00
100a708ce6 gitea + jellyfin on homepage 2025-09-18 21:42:48 -06:00
6204b76f83 gitea 2025-09-18 20:45:05 -06:00
5d3d68d0ba sonarqube setup 2025-09-18 19:12:58 -06:00
9a269de7c3 cursor installed 2025-09-18 19:11:26 -06:00
c1ef26366c updates 2025-09-17 21:51:35 -06:00
8f3d5c9c03 ryot env 2025-09-16 16:00:59 -06:00
e6c1a57e59 new theme 2025-09-16 15:01:20 -06:00
17b2d98b6c modularizing of vps ips 2025-09-16 14:56:42 -06:00
cfca87a703 synapse ipv6 changes 2025-09-16 12:32:02 -06:00
dabca4fc58 vscode 2025-09-13 12:08:37 -06:00
dd52ae40f6 fix path 2025-09-08 18:44:43 -06:00
cf1cc48245 updated postgress 2025-09-08 16:28:13 -06:00
1ae555e854 updated lidarr 2025-09-08 16:28:08 -06:00
d615be7e81 nextcloud ip fix for homepage api call 2025-09-07 22:46:39 -06:00
f181bcb2e2 vps adjustments 2025-09-07 22:38:03 -06:00
ee75fed429 disabled reverse proxy, opened ports 2025-09-07 19:07:53 -06:00
16e556f113 wireguard vps 2025-09-07 18:40:14 -06:00
825d8fe72d disabled dlna, enabled btrfs scrub 2025-09-07 18:39:54 -06:00
7e1801973a microbin port no longer loopback 2025-09-07 18:38:32 -06:00
934a9c287b vps keys 2025-09-07 18:22:55 -06:00
55c490a6c7 new hard drive! 2025-09-06 18:20:04 -06:00
52edffc52a flake update 2025-09-06 2025-09-06 15:27:10 -06:00
677ab11598 new ips 2025-09-06 13:06:40 -06:00
2c3333e7e1 enable decryption 2025-09-06 12:26:36 -06:00
d9c4f36e32 flake update 2025-08-20 14:29:25 -06:00
c1ec0f5e1d encrypting drives 2025-08-20 14:28:57 -06:00
f6c2d30992 flake 17 august 2025-08-17 11:48:08 -06:00
e418b1fe3b flake 2025-08-13 09:39:07 -06:00
1f49aeec29 rote flix 2025-08-13 09:38:46 -06:00
caf9e222f8 gio trash mount option 2025-08-10 16:29:53 -06:00
2470c8ad53 trying to fix notes sync 2025-08-09 11:22:12 -06:00
6418e1aa9d comfyai share 2025-08-05 14:47:36 -06:00
e08f743688 linting 2025-08-03 20:05:31 -06:00
2ecd9e04ea fix ai mounts 2025-08-03 19:55:36 -06:00
9a417a74e0 yt-dlp home-manager config 2025-08-02 22:01:44 -06:00
480f5290f1 sharing backups mount 2025-08-02 14:57:13 -06:00
81e9cb64bb open ai 2025-08-02 11:15:47 -06:00
3525cdc425 flake update august first 2025-08-02 11:15:01 -06:00
1b0b484e6e ryot upgrade to 9.0 + api tokens 2025-08-02 10:49:21 -06:00
7bd6b07d4b propper lint 2025-07-31 10:57:30 -06:00
901173ff7e temporary layout while mealie is updated on nix 2025-07-28 23:03:38 -06:00
e948bd9ef5 enable audiobookshelf 2025-07-28 22:24:21 -06:00
d1e09536d6 path compliant unified pool 2025-07-27 00:20:09 -06:00
3897f2bb55 accent color for space looks best cold 2025-07-27 00:19:36 -06:00
f2fbbbcc35 symbola font source code was deleted 2025-07-26 22:25:31 -06:00
b27c44fb97 removing ssd from workstation 2025-07-26 10:17:55 -06:00
ffcde8309c changed theme 2025-07-25 14:56:34 -06:00
f3fff75973 handling firefox theme myself 2025-07-25 01:48:40 -06:00
66fcbcca67 stylix still enables some properties. 2025-07-25 01:35:49 -06:00
6dc9174731 stylix properly handles being disabled 2025-07-25 01:19:36 -06:00
0eb7f99168 secret descriptions 2025-07-24 02:43:16 -06:00
286dfd4822 servers description 2025-07-24 02:38:43 -06:00
4f2f108815 hide descriptions 2025-07-24 02:36:50 -06:00
9d03287f4a bookmark descriptions 2025-07-24 02:28:32 -06:00
a34152a1ef midjourney link 2025-07-24 02:11:52 -06:00
4221f9fb5d this function isnt quite working 2025-07-24 02:10:59 -06:00
053690fd50 syncthing gui secrer 2025-07-22 12:32:05 -06:00
a8bb053d8b fixed syncthing paths with server check 2025-07-22 11:29:30 -06:00
98deb3846c vuetorrent properly linked 2025-07-22 10:55:19 -06:00
9cb1cd4d45 flake update unstable 2025-07-22 10:46:49 -06:00
54a1a6aed3 qbittorrent copy vue as user 2025-07-22 10:45:51 -06:00
f80545784c syncthing open to local network 2025-07-22 10:40:15 -06:00
80c8d5c33c syncthing to phone 2025-07-21 22:25:35 -06:00
77ccb88c8b removed doas nh fork, and ssh-try 2025-07-21 22:25:14 -06:00
d57745e3e7 doas is kind of frustrating 2025-07-21 22:24:57 -06:00
0d1a18aeb4 flake update july 19 2025-07-19 15:25:01 -06:00
1331476877 flake update, yesterday 2025-07-16 13:51:24 -06:00
90dac76ad1 cert access to homepage 2025-07-16 13:50:10 -06:00
98024d8672 stylix enabled... 2025-07-12 21:22:23 -06:00
800268d988 flake update 2025-07-12 21:21:44 -06:00
a91d4468f4 gke credential plugin 2025-07-12 21:21:37 -06:00
63c0bb570e zen kernel broken 2025-07-12 21:21:25 -06:00
1fba3fae2d doom now-playing-modeline disabled + flake update 2025-07-10 09:12:46 -06:00
1c0c82afde new aliases and bashrc settings 2025-07-10 00:32:04 -06:00
559c40f508 disabling some unused apps 2025-07-06 15:08:33 -06:00
472e1d28aa testing zen-browser 2025-07-01 22:01:20 -06:00
ae6c745880 gallery-dl new account 2025-07-01 22:01:20 -06:00
46d7904fdd fixed env mismanagement 2025-06-29 18:49:25 -06:00
7c738cdb5f sudo -> doas 2025-06-26 23:46:20 -06:00
12f2c03932 flake update late june 2025-06-26 23:14:35 -06:00
eb144cdf13 using this for work ig 2025-06-26 23:03:21 -06:00
132d3f37f3 give boot mount preference 2025-06-22 14:46:07 -06:00
0cd4475e5e gnome-text-editor is a bit useful + miniserver toggles 2025-06-18 21:28:05 -06:00
0fca2c0b6a flake update 2025-06-14 22:28:04 -06:00
3432e0145f extensions update 2025-06-14 22:21:50 -06:00
2e53a0de1b flake update birthday 2025-06-12 12:48:58 -06:00
2612cc7ae3 keypunch! 2025-06-10 20:06:28 -06:00
ca5ed8b24b lidarr update 2025-06-09 22:00:40 -06:00
ccb99fde4a libreoffice integrates better with my themes 2025-06-08 21:11:45 -06:00
3462f8c7a3 paul <3 2025-06-08 19:03:05 -06:00
380d8c3a85 segmentated schemes into their own file 2025-06-08 19:00:09 -06:00
5593b85524 organization p2 2025-06-08 18:47:39 -06:00
8a02320f12 organizing 2025-06-08 18:40:27 -06:00
ceb3962833 more robust logic for stylix theme picking 2025-06-08 18:10:07 -06:00
0c21ba4e43 flake update + stylix theming customization 2025-06-08 16:21:27 -06:00
3c7e049994 bind g... 2025-06-07 14:31:21 -06:00
d08b35b1ff apps no longer declarative 2025-06-06 13:34:42 -06:00
280c38ce62 homepage layout changes 2025-06-06 13:26:28 -06:00
372de23ecc nextcloud sync 2025-06-06 09:01:33 -06:00
a6207465c3 nextcloud back! + flake update 2025-06-06 08:54:01 -06:00
c80eff7926 nextcloud enabled 2025-06-05 01:17:02 -06:00
ba2b406b03 librewolf settings moved to their own file 2025-06-05 01:16:48 -06:00
57471553a2 stylix schemas configurations 2025-06-02 20:33:31 -06:00
1827c3851e flix.servidos.lat == plex.servidos.lat 2025-06-02 19:32:18 -06:00
0c1bc0f324 fuck qbit-manage 2025-05-31 19:52:21 -06:00
d466d4091a somewhat declaratively install vuetorrent 2025-05-31 17:32:04 -06:00
f67f550867 enhanced qbittorrent 2025-05-31 16:00:29 -06:00
2fab849550 remove jellyfin 2025-05-31 15:53:18 -06:00
4f0fbcc91e concatenation fixes 2025-05-31 15:52:30 -06:00
6054385386 krita patch 2025-05-31 15:21:56 -06:00
af33349c10 cachix breaks nvidia + flake update 2025-05-31 14:57:38 -06:00
2f016c6925 pinned resilio to old version 2025-05-28 09:06:44 -06:00
8497c3fa69 better concatenation of var packages 2025-05-28 09:06:19 -06:00
a9edd30f02 celluloid fixed upstream 2025-05-28 09:05:55 -06:00
6937706da9 propper ballerinas wallpaper 2025-05-27 13:57:37 -06:00
c649331e9f user-agent update 2025-05-26 19:51:52 -06:00
35bd4e5abb changed fonts settings + onlyoffice 2025-05-25 15:55:46 -06:00
27aa640418 properly overlayed qbittorrent-api 2025-05-24 14:32:49 -06:00
cbc92f1d0d overlay fix? 2025-05-24 14:12:20 -06:00
b48afc4549 qbittorrent-api unstable 2025-05-24 14:09:23 -06:00
f3826b7046 update lidarr 2025-05-24 13:43:10 -06:00
ecdb0b6404 25.05 out! + stylix wallpapers 2025-05-23 16:19:31 -06:00
74f3303f31 disable instagram stories 2025-05-20 20:56:16 -06:00
f4b429eac0 stylix update 2025-05-20 18:26:47 -06:00
25a7435724 update to channel 25.05 2025-05-18 11:41:39 -06:00
fe2d3286b0 discord krisp patcher 2025-05-18 11:41:20 -06:00
bc15f2576c flake update sunday 2025-05-18 08:11:27 -06:00
8f6becf2c1 compiling torzu myself due to takedown 2025-05-15 11:05:12 -06:00
76f9082330 flake update may 15th 2025-05-15 11:05:04 -06:00
95f706eab5 ryot update 2025-05-11 00:29:17 -06:00
3b4bfe84ae papirus color change 2025-05-10 12:29:21 -06:00
d2e9933dc3 wallpaper change 2025-05-10 12:19:33 -06:00
da0f6f357b fractal 2025-05-10 12:19:33 -06:00
ce43fd49fa microcode kernel flag 2025-05-10 12:19:33 -06:00
064e95b8a9 overlays to properly patch celluloid, nautilus + order 2025-05-10 12:19:33 -06:00
2089bbee90 thumbnailers 2025-05-10 12:19:33 -06:00
f0e2421262 flake update 2025-05-10 12:19:33 -06:00
842b2b4d32 mealie broken + instagram timer 2025-05-03 12:18:44 -06:00
a007b7cf83 synapse temporarly disable https 2025-05-03 10:15:16 -06:00
2c0df7a664 flake update 2025-05-03 10:08:58 -06:00
40a2e802dc stylix toggle 2025-05-02 09:04:15 -06:00
cccc8dc90b npmrc 2025-05-02 09:03:56 -06:00
ae5ed3f864 doom emacs gpt 2025-05-02 09:03:39 -06:00
8f2b3d109a rustc compiler added to rust dev shell 2025-04-30 20:15:52 -06:00
3ecafe7632 flake update april 20 2025-04-25 19:44:06 -06:00
7199461743 yubikey 2025-04-25 19:43:56 -06:00
c62b009bee cachy kernel 2025-04-21 20:20:04 -06:00
5a0117fe92 droidcam + adjust open-gallery path 2025-04-21 19:12:36 -06:00
cd489f0f98 capitalization 2025-04-18 22:21:07 -06:00
690893bff0 added go, zig, and ruby, as well as environment 2025-04-18 22:05:19 -06:00
685d0e3bba linting 2025-04-18 21:43:42 -06:00
200a8a660a disabled language toggles 2025-04-18 21:38:17 -06:00
9615226318 deadnix + statix 2025-04-18 21:36:47 -06:00
745034aaeb tealdeer is faster than tldr 2025-04-18 21:32:18 -06:00
023744a872 migrated all languages to devshell 2025-04-18 21:29:02 -06:00
ecb9f386ce migrating dev environments to output 2025-04-18 20:57:36 -06:00
e7883be1f1 modularized timezone 2025-04-18 01:49:41 -06:00
c6f9d06f85 disabling stash 2025-04-17 12:28:14 -06:00
31d279eabb made toggles.nix easier to read 2025-04-17 12:25:09 -06:00
8c2af56e3e nextcloud temporarly disabled 2025-04-17 11:43:10 -06:00
49d4ec097a moved portfolio (or began) 2025-04-17 02:11:51 -06:00
01755071f1 stewpid 2025-04-17 02:08:03 -06:00
e3af64bf9e attempt 2... 2025-04-17 02:05:55 -06:00
d9f5d476af attempt to properly parametize multi-scrobbler 2025-04-17 02:02:03 -06:00
31e53e5493 multiscrobbler fix 2025-04-17 01:59:13 -06:00
055603e403 url adjustments for migrated servers 2025-04-17 01:52:50 -06:00
cf1b0bc02c mount srv again 2025-04-17 01:52:50 -06:00
c2d97d933c servers migrated from miniserver to server 2025-04-17 01:30:09 -06:00
7e85264a02 rebase conflict 2025-04-17 00:31:21 -06:00
bcbf047415 servers module linting, removed unnecesary nesting 2025-04-16 22:38:02 -06:00
556bce8282 flake update sudoku fix 2025-04-14 22:00:14 -06:00
485d26577b flake update 2025-04-14 20:49:57 -06:00
8d43ecffca new gitlab ssh keys 2025-04-13 23:12:58 -06:00
bef3fa57b7 migrating miniserver proxy to server 2025-04-13 23:09:59 -06:00
Danilo Reyes
629e3cc356 ignore config.el 2025-04-11 23:23:09 -06:00
f7f477cca5 synching all my documents to my tablet 2025-04-11 23:17:25 -06:00
31b8164efc doom config variables load order 2025-04-11 22:52:01 -06:00
8cdb4b5a9b stylix fallback 2025-04-11 21:54:01 -06:00
4d514e0391 spring cleaning config.org 2025-04-11 21:17:13 -06:00
512f551cf8 set org_device env variable 2025-04-11 21:13:44 -06:00
c8afcac4c5 modularized config.org 2025-04-11 21:10:53 -06:00
3b58498192 emacs update cache complete 2025-04-11 20:03:14 -06:00
41ad6a2c6d agenda functions work 2025-04-11 16:15:04 -06:00
f6dbb1b32d flake update + moved inputs around 2025-04-11 15:08:35 -06:00
15eea176c6 linting 2025-04-11 13:22:34 -06:00
b44b79740b :/ hd is dying 2025-04-11 13:22:19 -06:00
ee24a85358 the nix app isn't quite that good, not worth it 2025-04-10 11:47:52 -06:00
5dd838b1ce wip doom emacs agenda cache 2025-04-10 11:47:15 -06:00
24ca43097f more fixes regarding nix paths 2025-04-07 00:21:18 -06:00
f3cd76aedb doom fix org templates 2025-04-07 00:14:39 -06:00
92959cf11a init galaxy host 2025-04-06 23:54:04 -06:00
1cd8c2822d added org notes to syncthing 2025-04-06 15:38:46 -06:00
57bce36b23 sops ssh keys cleanup before rotating 2025-04-06 14:05:37 -06:00
d60a2928f7 secret not created yet 2025-04-03 15:48:10 -06:00
112db4db7c librewolf to home-manager 2025-04-03 15:30:14 -06:00
a5fe52f1b5 wip: firefox-syncserver (no postgress support) 2025-04-03 15:00:11 -06:00
3cc8a4e5fe flake march 3 2025-04-03 11:49:57 -06:00
94c1d2e0f4 flake update last of march 2025-03-30 13:00:32 -06:00
2880426d4d added jawz to trusted-users 2025-03-29 23:57:55 -06:00
2cac7b9988 why was lorri here? 2025-03-29 23:46:19 -06:00
80d1291e68 deprecated shiori 2025-03-29 20:59:18 -06:00
9a05d06c6f readeck 2025-03-29 20:56:26 -06:00
fbc13d9cae reset stateversion 2025-03-29 12:31:30 -06:00
c313fd16b8 emacs fix, new dependency 2025-03-28 23:01:35 -06:00
4f45a6c2f2 removed loadModels 2025-03-28 19:01:49 -06:00
a4ef0361e8 test webui 2025-03-28 17:01:56 -06:00
56ead6797e homepage host whitelist 2025-03-28 12:24:54 -06:00
aade80bc25 flake update for small 2025-03-28 11:30:38 -06:00
bc04dfedda flake update 2025-03-28 10:37:00 -06:00
1d391c0667 better matrix syntax 2025-03-28 02:10:18 -06:00
6519d409ad cleanup proxy settings 2025-03-28 00:31:47 -06:00
c7beaaf8dd flake fix for tuh online status 2025-03-27 23:11:56 -06:00
592d82c664 synapse vpn test 2025-03-27 23:11:04 -06:00
65da629248 statix 2025-03-25 01:30:39 -06:00
f366c208e0 deadnix 2025-03-25 01:28:47 -06:00
6846fc3eec emacs support for new languages + dependencies 2025-03-25 01:26:35 -06:00
39ce87696c emacs packages installed user-level 2025-03-25 01:01:00 -06:00
3606fc417c new language support for emacs wip 2025-03-24 23:49:13 -06:00
002f7f9eb7 cursor size 2025-03-24 09:46:15 -06:00
1307b68b9a upgrade to nextcloud31 + disabling incompatible maps 2025-03-23 18:15:56 -06:00
9332cd9f37 nextcloud fixes 2025-03-23 16:18:12 -06:00
795a91d00b secrets...! 2025-03-17 20:06:06 -06:00
5672d130ff rollback to nextcloud, not app apps upgradet yet 2025-03-17 20:06:06 -06:00
30d393ad34 audiobookshelf websocket definition 2025-03-17 20:06:06 -06:00
75efcec006 websocket support 2025-03-17 20:06:06 -06:00
9297fbd655 flake update now requires to set cursor size 2025-03-16 21:33:34 -06:00
d0ffbf48d7 bluetooth passhtrough for wiimotes 2025-03-15 01:00:39 -06:00
17bce18693 flake update march 10 2025-03-10 20:37:16 -06:00
255ef28c0a nextcloud bigger thumbnails and v31 2025-03-10 20:36:19 -06:00
319356fe45 expanded my HD 2025-03-10 19:49:27 -06:00
caab03c785 prism launcher is kewler 2025-03-09 20:07:29 -06:00
6b94a37ba9 removed polymc in favor for the official launcher 2025-03-09 14:05:46 -06:00
57ba10515a flake update march 7 2025-03-08 23:27:46 -06:00
64e95af3da oops, synapse should not install unless enabled 2025-03-08 23:11:47 -06:00
cd0f96ee6e I say I'll learn to play piano... 2025-03-08 22:50:09 -06:00
dd65a03d69 flake modifications 2025-03-08 20:02:59 -06:00
5fc6e4247e nextcloud max upload size 2025-03-08 20:02:59 -06:00
9c3645b9eb modified setup function so now domain is a variable 2025-03-08 20:02:59 -06:00
a0efbc5188 module for synapse-matrix 2025-03-08 20:02:59 -06:00
c526970745 jre17 for libreoffice extensions 2025-03-08 10:03:13 -06:00
a9aa3b02c9 stash wip, needs upstream pr 2025-03-07 21:35:31 -06:00
169c463243 ca-certificate 2025-03-07 15:39:08 -06:00
d47bfaea07 certificates 2025-03-07 00:00:52 -06:00
4db7fe1936 stylix enabled on all modules 2025-03-03 22:57:46 -06:00
9088b2cdcf flake update match 3 2025-03-03 22:46:42 -06:00
5125f78ed1 lidarr update + torrent mappping 2025-03-02 13:56:56 -06:00
03990425d8 let's see if this fixes the base theme compilation error 2025-03-01 14:35:59 -06:00
37a3c28629 broken, and I dont really ever use droidcam 2025-03-01 14:35:55 -06:00
61c8f59c3c flake update march first. 2025-03-01 13:38:57 -06:00
db7659ad8a new wallpaper 2025-03-01 13:38:49 -06:00
784926ce46 emacs adjustments, path still broken 2025-02-27 21:50:03 -06:00
c286e42821 another tuh fix 2025-02-25 09:25:06 -06:00
7827a15a1f tuh logger fixed 2025-02-24 18:00:42 -06:00
69011bd672 update flake 2025-02-23 00:52:37 -06:00
c19f2599c2 flake update feb 19 2025-02-19 15:42:49 -06:00
29d977d218 better way to declare nix functions 2025-02-19 10:46:42 -06:00
50d73a3833 updated galaxy id 2025-02-15 17:41:45 -06:00
99e8ffeabc re-enabling librewolf 2025-02-15 17:34:20 -06:00
e3502b095d added galaxy cache declaratively 2025-02-15 17:28:06 -06:00
ad0a7290ef added cache to syncthing 2025-02-15 17:05:34 -06:00
18319e34f1 oops... 2025-02-15 16:47:40 -06:00
70b51c4d20 remove encryption requeriment 2025-02-15 16:46:14 -06:00
a5d56bd2c6 syncthing now syncs librewolf profile 2025-02-15 16:39:37 -06:00
c4611b9041 test to swap channels 2025-02-15 15:55:14 -06:00
661189aa50 flake update 2025-02-13 17:08:51 -06:00
b196d31242 pinning some packages to nix 24.11 2025-02-09 16:48:23 -06:00
b6eeb2d9fb disabled switch precense, since I lend my switch to my cousin 2025-02-09 14:37:19 -06:00
cac6af6c06 nintendo switch flake 2025-02-09 03:05:37 -06:00
42db1e1ab5 wireguard fix 2025-02-08 13:29:36 -06:00
3a2f514ce4 flake 2025-02-08 13:02:27 -06:00
313415bda9 disabling webcomix... 2025-02-08 12:05:10 -06:00
481a338799 wireguard declarative interface 2025-02-05 16:31:55 -06:00
47f4b2a536 networking lambdas to enable wakeonlan and hosts file 2025-02-05 15:36:14 -06:00
8a46014a08 multimedia enabled 2025-02-05 10:18:11 -06:00
022a0a5770 flake update after vacation 2025-02-04 22:11:53 -06:00
fdfe4e4b96 ai: init 2025-02-04 21:03:08 -06:00
78108c9dea fixed multi-scrobbler with local urls, solution dirty tho 2025-01-30 23:41:59 -06:00
933f7738e0 flake update 2025-01-30 23:13:56 -06:00
de93bb2d42 flake update for jawz-scripts run & tasks 2025-01-25 17:09:58 -06:00
7ea8472de1 re-enabled some bookmarks 2025-01-25 13:02:28 -06:00
a91cad44c7 adjustments to how nextcloud finds dependencies 2025-01-25 13:02:15 -06:00
82b20844e1 flake update 2025-01-25 01:55:56 -06:00
fb60046068 lidarr update 2025-01-23 20:43:39 -06:00
f94396afea new wallpaper la fragua de vulcano 2025-01-23 20:29:50 -06:00
5302c8e6d5 ryot -> 8 2025-01-23 16:19:59 -06:00
348e33caf0 flake update & fix 2025-01-23 14:48:12 -06:00
9f731001d8 doom c# 2025-01-23 14:06:03 -06:00
f07dc20dbd jawz scripts flake 2025-01-23 01:44:13 -06:00
e93019822f flake update 20250123 2025-01-23 01:21:34 -06:00
a1b9f9e47d homepage: wip cal, weather + secret hidden 2025-01-22 21:31:32 -06:00
a83fbf5e9a nextcloud finally works with local api calls 2025-01-22 19:51:53 -06:00
cdd9dac355 some formatting 2025-01-22 16:38:15 -06:00
e1be43a0a5 jawz script updates dns 2025-01-22 04:34:38 -06:00
385c15e791 removed listenaddr 2025-01-22 04:09:50 -06:00
6fc01a3330 disabled ombi 2025-01-22 04:09:37 -06:00
0152d4a1a8 modified setup.nix so that the proxy functions take cfg 2025-01-22 03:54:23 -06:00
d477f15cbc homepage now uses local ip for api calls 2025-01-22 01:04:31 -06:00
ffc3770839 opening firewall 2025-01-18 23:39:28 -06:00
2e776fb9ad opening audiobookshelf port 2025-01-18 23:29:24 -06:00
7c196d7365 adjustment of how overlay works with pkgs 2025-01-18 19:04:19 -06:00
1c9be455d8 removed pkgs5 input and pinned packages that can now compile 2025-01-18 01:18:56 -06:00
30c5bbbf8d bye virtmanager 2025-01-18 00:57:48 -06:00
8aa55d6640 enabled virt-manager 2025-01-18 00:56:33 -06:00
3cfb55c4f0 replaced citra with new mantained emulator 2025-01-18 00:56:10 -06:00
9da73161d3 flake update 2025-01-18 00:53:59 -06:00
e56d1e5040 maloja update 2025-01-16 21:27:48 -06:00
fc4f160135 flake update 13 jan 2025-01-13 23:16:58 -06:00
ee78339bb6 reenable instagram stories 2025-01-11 10:58:19 -06:00
84bdeea035 homepage typo fix 2025-01-11 10:41:01 -06:00
d14aabd3e3 while rmlint is fixed upstream, using my own fork 2025-01-10 16:52:44 -06:00
3204242308 gaming configurations 2025-01-10 16:40:24 -06:00
e3a5151f62 citra fixed + new 3ds emu? 2025-01-09 22:11:20 -06:00
7c7a07ea55 stylix now natively works with ghostty 2025-01-09 19:17:25 -06:00
1e35b16ee8 pinning broken packages to stable cache 2025-01-09 13:21:50 -06:00
cd99711e01 ghosty in official channels + input rename 2025-01-09 13:21:30 -06:00
0e2b4b226d pokemon-colorscripts + declarative bash config 2025-01-09 13:19:10 -06:00
5d66d618e8 libgda is no longer necesary 2025-01-09 13:18:46 -06:00
090f148756 citra broken due to upstream c changes 2025-01-09 13:17:26 -06:00
f5c98c7867 pipewire setting renamed 2025-01-09 13:17:12 -06:00
dad0979ff7 ombi enable 2025-01-07 19:06:58 -06:00
07551ffdc3 homepage-dashboard fixed 2025-01-07 18:55:27 -06:00
0951842f3a enable ombi 2025-01-07 18:49:03 -06:00
0c53111b51 ombi init 2025-01-07 18:47:06 -06:00
7bfced223f sonarr now uses integrated openfirewall 2025-01-07 18:47:06 -06:00
9847206e9b jan 5 flake update 2025-01-05 17:09:39 -06:00
b5d8d1193b rmlint pin & 2025 flake update 2025-01-01 22:40:00 -06:00
f86997956c jawz-scripts updated download 2024-12-29 15:10:03 -06:00
0a60f023a7 emacs stylix theme is conditional 2024-12-28 18:07:18 -06:00
71f59b22b4 new wallpapers + moved stylix module 2024-12-27 11:24:32 -06:00
73a094538d instagram gdl download previews 2024-12-27 10:48:06 -06:00
0137416970 removed unnecesary flake override 2024-12-27 10:25:13 -06:00
5a1e04ebc7 ghostty 2024-12-27 02:03:45 -06:00
5c310d6e10 bencode-py on store 2024-12-27 01:46:39 -06:00
741de2c73e using 24.05 to download mypaint from cache 2024-12-22 20:12:45 -06:00
d032e426ce color picking tools 2024-12-21 20:10:19 -06:00
cdcef674eb flatpak...shit 2024-12-21 20:03:20 -06:00
99f9ef354d updated talk to have an icon 2024-12-21 13:28:14 -06:00
02044b2af1 variables and dotfile configs 2024-12-21 12:35:37 -06:00
882fe52852 syncthing linting 2024-12-21 12:01:43 -06:00
7845109e25 flake update 20241220 2024-12-20 15:43:35 -06:00
6a3aa6b551 rename doom-emacs input for simplicity 2024-12-19 11:12:00 -06:00
806f9a489a text preferences 2024-12-19 10:59:02 -06:00
dbe12cfece enabled opentabletdriver daemon 2024-12-19 10:52:01 -06:00
93e437cafe typo 2024-12-19 10:46:34 -06:00
d5af07a191 stylix adjustments 2024-12-18 13:37:53 -06:00
181babfa2a list concatenation 2024-12-18 13:30:55 -06:00
e05e6fcb45 flake update + ffpb merged 2024-12-18 09:17:16 -06:00
7e640f34ee tangle on nix 2024-12-17 22:52:25 -06:00
0237405cdd bibtext removal 2024-12-17 22:37:58 -06:00
eaf48232cd doom emacs! + theming 2024-12-17 22:26:10 -06:00
1826efd1ff dotfile removal 2024-12-17 20:12:27 -06:00
a7007e5f03 stylix <3 2024-12-17 14:43:50 -06:00
ca8e88697a inheriting pkgs overwrides nur 2024-12-17 11:23:30 -06:00
95415188b5 removed small channel logic, declared inputs follows 2024-12-17 11:13:38 -06:00
2c2ec1a873 forgot to delete old file 2024-12-15 21:36:59 -06:00
44126badc3 flake update 2024-12-15 21:06:26 -06:00
f167e0cf42 merged all the module import files into modules.nix 2024-12-15 21:04:49 -06:00
45cdbd53c2 deadnix 2024-12-15 20:31:22 -06:00
7039c8fe5c used pipe-operator on module import lambdas 2024-12-15 18:33:19 -06:00
c820bac2e8 better package concatenation 2024-12-15 18:12:12 -06:00
c798603dfe bencodepy migrated to flake 2024-12-15 01:29:20 -06:00
97c27d2703 ffpb merged 2024-12-15 00:25:14 -06:00
39c5425628 removed super-mario-127 2024-12-14 21:53:02 -06:00
8fe7b8a1db removed helix 2024-12-14 17:06:43 -06:00
c1c2f10999 nextcloud-cronjob mispell 2024-12-14 17:06:13 -06:00
b40e4e2226 migrated complex pkgs 2024-12-14 16:54:50 -06:00
3242385ad5 disabled sub-sync for jellyfin 2024-12-14 16:31:40 -06:00
16b0a42aca migrated scripts to separate flake 2024-12-14 16:30:47 -06:00
a325009332 migrated download, tasks and webcomix 2024-12-14 14:18:18 -06:00
4952408d25 moved scripts to gitlab url 2024-12-14 13:44:28 -06:00
5e8a7eeb64 removed cosmic 2024-12-14 13:22:04 -06:00
2e5358c65e set pyproject = true 2024-12-14 13:17:53 -06:00
84fb83a076 homepage-dashboard overlay to build older version 2024-12-13 12:20:24 -06:00
48e232f83d flake update dec 13th 2024-12-13 12:20:14 -06:00
c2ebca70e1 flake update 12 dec 2024-12-12 00:21:48 -06:00
8f13108004 uninstalling attic 2024-12-12 00:15:51 -06:00
079564d9ee wip aviator 2024-12-11 23:54:35 -06:00
6db9c94d6f nur changed how pkgs are called 2024-12-10 19:23:20 -06:00
ed11419f95 ryot update 2024-12-10 19:13:18 -06:00
22a6546891 flake update dec 10 2024-12-10 19:12:17 -06:00
613f3ea409 unused file 2024-12-08 19:52:06 -06:00
460d6ee308 music > recordbox 2024-12-08 16:52:17 -06:00
67409c9cbf more packages concatenation 2024-12-07 23:03:24 -06:00
ecec4b138d nextcloud talk pkgs 2024-12-07 11:37:01 -06:00
100756427b added bsky to monitor list 2024-12-07 10:26:21 -06:00
f4b81e2075 increased sleep time for gallery-dl 2024-12-06 23:05:37 -06:00
389786d0ba removed incompatible extensions 2024-12-06 23:05:23 -06:00
7193568363 cleanup 2024-12-06 18:47:55 -06:00
743dd1bfdc reverted flake to avoid broken nvidia rtx driver 2024-12-06 18:41:18 -06:00
ffe8d4aa9a better list concatenation + renamed vars on overlay 2024-12-06 18:40:59 -06:00
2e6ad43e10 fixed pano so it works on gnome 47 2024-12-06 18:40:13 -06:00
1ab8508d46 flake update 2024-12-06 13:48:00 -06:00
2e608c2ef0 using pipe operator for lambda chain 2024-12-06 13:34:25 -06:00
18d55a44cf download pkg rewrote 2024-12-06 13:34:25 -06:00
bf426e9cda setup my own flake path, tuh-activity-logger 2024-12-06 13:34:25 -06:00
1493315a80 2024-12-05 2024-12-05 22:55:13 -06:00
4c98723203 oops installed vencord instead of vesktop 2024-12-05 12:23:29 -06:00
e5df27c54b install pano extension from nur 2024-12-04 22:33:39 -06:00
a655b2fd00 super-mario-127 2024-12-04 22:33:31 -06:00
fcc0b36089 - zen, other apps; + thunderbird 2024-12-04 22:32:57 -06:00
2269bf16cc remote builders speedfactor optimized 2024-12-04 17:10:11 -06:00
31590477f3 miniserver max jobs increased to 12 2024-12-04 15:27:17 -06:00
ebddba43b2 miniserver authorized server remotebuilder 2024-12-04 15:09:32 -06:00
9edb91fdde replaced flaresolverr chromium pin with nur pkgs 2024-12-04 14:35:12 -06:00
6965e935b6 miniserver: now uses two remote builders 2024-12-04 13:38:13 -06:00
04eaab5d8d workstation & server toggle.nix + builder ssh 2024-12-04 13:32:54 -06:00
49904b36fa changed wallpaper 2024-12-04 12:33:48 -06:00
2038c673e9 flake update 2024/12/04 2024-12-04 05:18:16 -06:00
f54d298af5 removed commented apps 2024-12-04 05:18:16 -06:00
b68a39b28b serving portfolio 2024-12-04 05:16:23 -06:00
42f48dd5dd miniserver moved my. toggles into a module 2024-12-03 18:34:14 -06:00
e3056baa6e rewrote homepage to be easier to read 2024-12-03 18:34:14 -06:00
1ae6c88a8e deleted result binary 2024-12-03 01:01:24 -06:00
fb8d93e562 reordered dependencies for download 2024-12-02 23:15:00 -06:00
dc61c454d5 compiled webcomix with nix 2024-12-02 22:40:48 -06:00
7f052f6098 more nix managed nextcloud apps 2024-12-02 21:01:16 -06:00
bca1b85c19 install cove variant of caskaydia 2024-12-02 09:58:22 -06:00
a5d0b44397 24.11 release + quirks 2024-11-30 22:13:15 -06:00
c74af2cd27 permitting appnet insecure package 2024-11-30 16:57:51 -06:00
0681d3aed4 nerd-fonts moved to individual packages 2024-11-30 16:48:24 -06:00
6b82b9d84f multi-scrobbler plex is now port-based 2024-11-30 02:11:30 -06:00
5828752c03 api change for user on multi-scrobbler 2024-11-30 02:07:58 -06:00
b30d02964b plex multiscrobble fix 2024-11-30 02:04:33 -06:00
c43b591e8d multi-scrobbler plex settings 2024-11-30 01:58:33 -06:00
01bb83cd7d discord rich presence plex 2024-11-30 01:55:19 -06:00
b9868a9013 removed podman labels for flame 2024-11-30 01:38:05 -06:00
85d5f57304 removed client id and secret from gallery-dl 2024-11-30 00:28:56 -06:00
9139e7387d homepage layout 2024-11-30 00:22:28 -06:00
eedbbcf3af plex api changed 2024-11-30 00:01:18 -06:00
332efad0ac removed todo dotfiles + moved some to nix 2024-11-29 23:34:22 -06:00
049762bc4d homepage plex widget 2024-11-29 22:27:24 -06:00
85ec0c0ff4 gallery-dl dotfile built with nix 2024-11-29 22:26:59 -06:00
cda2a0c957 discord-rpc is now on unstable 2024-11-29 22:18:39 -06:00
fb3be24567 deleted compiled result 2024-11-29 19:12:27 -06:00
46846781d4 nginx settings for plex & disabled instagram 2024-11-29 09:01:10 -06:00
3811ebc27d flake update 2024-11-29 2024-11-29 08:59:57 -06:00
59495810ea nginx plex fix 2024-11-29 00:17:00 -06:00
384d1f4dbb plex reverse proxy 2024-11-29 00:06:43 -06:00
bdb27a4486 plex 2024-11-29 00:02:17 -06:00
83703c328e testing evolution email 2024-11-28 23:55:58 -06:00
23e905d5f8 discord-rpc 2024-11-28 23:55:47 -06:00
27d3926db3 internet.nix adjusted apps 2024-11-27 01:22:25 -06:00
c9f3dc8ef1 gallery-dl user agent on config 2024-11-27 00:02:09 -06:00
cf8648e60e home-manager flake adjustment 2024-11-25 21:31:21 -06:00
bcea0d9477 install stream-dl 2024-11-22 20:40:53 -06:00
dcab271a08 upgraded mealie api on homepage-dashboard 2024-11-22 20:40:53 -06:00
2cf9361954 simplified setup.nix 2024-11-22 20:40:12 -06:00
4f1fdab7a2 lidarr can see torrent/nasnzbd 2024-11-22 20:31:53 -06:00
b863568077 more pipe rewriting 2024-11-21 22:23:09 -06:00
fbd6b16962 began using the pipe-operator 2024-11-21 21:40:53 -06:00
c95b4ac026 experimental feature pipe-operators 2024-11-21 21:33:38 -06:00
9f6aad5584 bye attic 2024-11-21 21:33:32 -06:00
3f212610b8 gnome tweaks 2024-11-21 21:29:15 -06:00
3d19b8c731 heroic re-enabled 2024-11-15 12:22:24 -06:00
137313cd23 pre-release 24.11 flake update 2024-11-15 12:15:27 -06:00
2ab10e6423 cleanup 2024-11-14 15:42:48 -06:00
6b129f299b finally, can compile small channel with overlay 2024-11-14 15:09:07 -06:00
725a404949 flake update 20241114 2024-11-14 12:16:30 -06:00
804fe6ffc2 removed unnecesary lib 2024-11-14 00:04:59 -06:00
cc4e8b86cd removed nixpkgs-small, trying env var 2024-11-13 23:33:49 -06:00
a689137a11 atticd change url 2024-11-13 23:08:28 -06:00
5a92a8c996 renamed proxyreversearr > proxyreversefix 2024-11-13 22:45:51 -06:00
13ffe469a5 pkgs moved up a level, so it becomes specialarg 2024-11-13 22:38:13 -06:00
addb3d3284 overlay function reduced 2024-11-13 22:29:41 -06:00
d6a3036bd1 servers arr adjustment + formatting 2024-11-13 22:25:51 -06:00
5f639e4a6b pkgs-small broke down into functions 2024-11-13 22:15:11 -06:00
f9727bb284 flake update 20241113 2024-11-13 21:26:26 -06:00
e10f834eda removed alejandra 2024-11-13 17:36:59 -06:00
d6450db07e added nixpkgs-small for the servers 2024-11-13 17:26:33 -06:00
7dd31a95f4 comments cleanup 2024-11-12 23:32:28 -06:00
8478d8155f blender cuda overlay 2024-11-12 18:55:42 -06:00
4f8591e6c0 discord modified to be overriden with vencord 2024-11-12 17:01:56 -06:00
5cc10886fc further attic configurations 2024-11-12 15:59:45 -06:00
a3baabcd25 attic substituter 2024-11-12 15:47:43 -06:00
505b841696 modified nix module to include attic client 2024-11-12 15:10:46 -06:00
978afd1209 atticd setup 2024-11-12 15:08:06 -06:00
8c30f64db7 cleaning atticd flake module 2024-11-12 15:03:52 -06:00
cc2e79725f attic + some formatting of inputs 2024-11-12 14:50:12 -06:00
5b615c0b89 using my own cache server 2024-11-12 14:19:15 -06:00
63fa3236b1 nix-serve 2024-11-12 14:08:55 -06:00
f67726b3ad cleanup of redundant false toggles 2024-11-12 14:08:42 -06:00
e9f392f858 nginx ports declarative 2024-11-12 13:27:23 -06:00
baba4b9c7c vaultwarden env 2024-11-12 11:58:39 -06:00
2a17ba8e12 nix uses xdg directories 2024-11-12 10:29:23 -06:00
09a816f5cb amd microcode patch 2024-11-12 09:14:37 -06:00
f9bfed965b flake 20241111 2024-11-11 19:21:57 -06:00
f504dca34e properly installed gnome-music 2024-11-10 21:24:41 -06:00
54519fe028 papirus green <3 2024-11-10 21:24:28 -06:00
81b8b0b703 gnome music 2024-11-10 20:49:25 -06:00
89e7803f4e flake update gnome 47 2024-11-10 20:49:25 -06:00
feb92de303 changed my fork repo for citra 2024-11-09 18:24:00 -06:00
0c6a00bfdd cachix new key 2024-11-09 17:49:07 -06:00
e3287772f4 qbittorrent attrvalues 2024-11-09 17:25:20 -06:00
b0ac83658e bugfix: builtins.path 2024-11-09 17:13:34 -06:00
2c377b9664 deadnix + statix after best-practices 2024-11-09 16:41:33 -06:00
a9ef403cea best practices: use builtins.path for local source 2024-11-09 16:36:25 -06:00
120d485f28 best practices: get rid of with pkgs; 2024-11-09 16:26:20 -06:00
ebcab67a6a pureref fixed 2024-11-09 15:32:24 -06:00
be0e4d7109 best practices: got rid of rec 2024-11-09 14:53:58 -06:00
0bebf3e366 added personal cachix repo 2024-11-09 14:00:34 -06:00
b60f61cc2c chromium 126 lock 2024-11-06 23:30:35 -06:00
a5d31d2ee0 protonmail-bridge 2024-11-06 22:58:12 -06:00
00f2fd8f57 podman updated version of images 2024-11-06 22:12:43 -06:00
ae40b6208c tranga is trash 2024-11-06 12:56:38 -06:00
31dea22e57 library-report + manage-library fixes + timer 2024-11-06 12:56:05 -06:00
c5155d3117 wireguard network rewiring fix 2024-11-06 02:58:12 -06:00
9273958e64 mangadex condition 2024-11-06 02:24:18 -06:00
1dd7932a44 manga subcategories 2024-11-06 01:55:23 -06:00
5735ea7c7a jeancarlos vpn 2024-11-04 16:05:24 -06:00
c2c66e5d0b podman permissions + tranga 2024-11-03 02:11:11 -06:00
f0dde95f74 small tweaks nextcloud 2024-11-01 17:56:27 -06:00
b43d2f5a31 download tweaks, - fooyin, flake updt, modules 2024-11-01 17:53:27 -06:00
5d7fb596d2 mypaint can't compile 2024-10-31 23:25:50 -06:00
72589d221d nextcloud tweaks + apps 2024-10-30 00:25:01 -06:00
ecb0bb970e nextcloud29 > nextcloud30 2024-10-27 17:40:47 -06:00
37aa35daed migrated channel 24.05 to unstable 2024-10-27 17:11:00 -06:00
6b6b7e39b1 removed manage-library from miniserver 2024-10-26 19:32:20 -06:00
57c2525713 manage-library adjustments + download fix 2024-10-26 19:28:46 -06:00
5d97237fa7 enable downloading mangas on server 2024-10-26 18:25:33 -06:00
6c43f97af8 added cloudflare click domain 2024-10-26 06:17:08 -06:00
1b9345d651 removed psd 2024-10-26 04:36:00 -06:00
40164cb953 adjusted unstable declaration + gnome extensions 2024-10-24 15:23:59 -06:00
a0b7dc0186 flake update 2024-10-24 13:09:16 -06:00
75747a8184 download manga modilarized to run on diff hosts 2024-10-24 12:29:15 -06:00
9683177062 migrating /mnt to /srv 2024-10-24 10:18:18 -06:00
84bc9cddab nvidia uses open drivers if workstation 2024-10-24 10:00:05 -06:00
672437ed04 tablet wireguard 2024-10-23 00:13:04 -06:00
c948941f0e jellyfin proxy cache for video disabled 2024-10-22 16:48:21 -06:00
185cdf45e6 flake update 2024-10-22 16:44:32 -06:00
84f0f08e1a typo 2024-10-22 01:43:01 -06:00
1795e56242 openssh keys cleanup 2024-10-22 01:36:55 -06:00
bd278baa5f syncthing setup 2024-10-22 00:02:09 -06:00
3f769d34a0 pureref 2, added pkg to load source file 2024-10-19 21:45:48 -06:00
155ae98c72 preparing gaming for 24.11 2024-10-19 17:37:12 -06:00
284e78dbc4 flake update 2024-10-19 13:38:11 -06:00
0ffafb2160 flake update 2024-10-16 09:41:16 -06:00
c98ff99724 small refactioning 2024-10-16 09:36:23 -06:00
069134e43c hyprland wip 2024-10-16 09:29:08 -06:00
52c5a01552 flake update 2024-10-12 21:50:04 -06:00
22f50958be lutris > unstable, sh:remake works 2024-10-10 22:04:10 -06:00
9bc989ecdd lutris + nvidia 2024-10-10 15:55:45 -06:00
c2286cd346 zen-browser 2024-10-10 12:26:45 -06:00
c3c3811ab2 adjusted resolvers 2024-10-07 14:34:55 -06:00
99ff526e9f nix update 2024-10-07 12:32:44 -06:00
3103ea6f83 manage-library adjustments 2024-10-06 21:36:40 -06:00
2951f5e944 qbit cert to lambda, homepage uses https qbit nzbd 2024-10-05 17:30:00 -06:00
61afb7478d qbittorrent certificates 2024-10-05 17:04:53 -06:00
dd71c99d0a dnscrypt-proxy2 2024-10-05 15:56:56 -06:00
46f6fc626f lambda to import recursive files on all modules 2024-10-02 19:22:53 -06:00
933f52d4ee ryot update 2024-10-02 18:16:49 -06:00
ef00d45148 migrated lambdas to setup.nix + lambda for server files 2024-10-02 18:16:25 -06:00
6181709ca3 mealie fixed 2024-10-01 19:58:47 -06:00
ead72a68ce flake update + jellyfin-ffmpeg 2024-10-01 19:16:21 -06:00
47a0d36975 servers install from unstable 2024-10-01 19:13:47 -06:00
3d2b9df6fc wallpaper removed 2024-10-01 17:59:49 -06:00
1dcadd6f8e wireguard access to friends 2024-10-01 17:58:59 -06:00
e47c2a6974 homepage finished, flame deprecated 2024-09-29 17:08:07 -06:00
3e8aa1818b wip layout & bookmarks 2024-09-29 12:49:47 -06:00
0f0acb01b8 implemented all of the currently available server 2024-09-29 12:49:43 -06:00
9151ca5971 masive rewriting and setup of server files 2024-09-29 12:49:35 -06:00
f9399c51fa trying out a new nix lsp 2024-09-28 21:02:35 -06:00
e95168d0b0 homepage scrapper section complete 2024-09-28 02:56:38 -06:00
0e1ad747b4 wireguard setup and works 2024-09-28 02:13:58 -06:00
5b2c478cb4 multi-scrobbler migrated to homepage setup 2024-09-28 02:13:54 -06:00
dfad637ff5 updated multi-scrobbler image 2024-09-28 00:31:47 -06:00
4359caffc6 maloja jellyfin api 2024-09-28 00:15:59 -06:00
2485f544fb removed proxy for torrent, nzb, multi-scrobbler 2024-09-27 23:59:42 -06:00
23d69d9691 new kavita password 2024-09-27 23:12:26 -06:00
d8881611eb flake update 2024-09-27 22:06:58 -06:00
2850a487dc stash reverse proxy 2024-09-27 22:04:40 -06:00
dc20b6a602 kavita unstable 2024-09-24 10:04:42 -06:00
2ad566ec27 stash wip 2024-09-22 15:00:39 -06:00
3934d899b8 flake update 2024-09-22 14:53:05 -06:00
957da656bc deadnix 2024-09-22 14:51:14 -06:00
b514828594 applied nixfmt (new version) 2024-09-22 14:45:24 -06:00
dd00fb4854 minidlna disabled 2024-09-22 14:41:57 -06:00
2146eb0e51 nixfmt-classic removed 2024-09-21 16:56:19 -06:00
dc7bf53434 updated obs-studio module. 2024-09-21 15:33:58 -06:00
557c59e5a3 added support for bluesky 2024-09-21 13:06:01 -06:00
31ee90e2d5 new fonts 2024-09-18 11:19:26 -06:00
77ec2f10ad moved key to initramfs 2024-09-18 00:31:50 -06:00
f09d882d7d nextcloud fixes 2024-09-17 23:42:15 -06:00
7c1f870835 luks keyfile 2024-09-17 23:41:34 -06:00
0f45aad464 flake update 2024-09-17 23:41:34 -06:00
cb806e4545 modified bashrc 2024-09-12 23:53:59 -06:00
30c64917ed manually sourcing /etc/profile 2024-09-12 23:41:19 -06:00
f7d6985f69 fixed minidlna 2024-09-12 22:57:47 -06:00
00481a5d22 env test 2024-09-12 22:55:55 -06:00
a17d1c68f2 homepage wip, downloads section 2024-09-11 23:48:56 -06:00
7b90c4297c homepage: downloaders wip 2024-09-11 23:48:56 -06:00
3d66cc60d9 sabnzbd added proxy 2024-09-11 23:48:56 -06:00
b99d2b76cc flake update 2024-09-11 23:40:24 -06:00
74c4f50792 teamspeak 2024-09-11 23:36:46 -06:00
7ec2735029 flake update && jellyfin lock removed 2024-09-08 13:08:58 -06:00
f8f6d3366b added home to minidlna 2024-09-07 09:08:30 -06:00
5f10aeeccd layout adjustments 2024-09-05 23:56:02 -06:00
667128e3fe homepage integrations: *arrs, jellyfin, kavita 2024-09-05 23:18:45 -06:00
c3cbfffe66 added phone ssh key 2024-09-05 19:29:59 -06:00
9c02b64dc5 flake update 2024-09-03 17:27:35 -06:00
8c083e5010 noooooooooope 2024-09-03 17:25:19 -06:00
fc3cf627d2 trying out cinnamon 2024-09-03 16:28:01 -06:00
21f7f53706 linting 2024-09-03 16:21:47 -06:00
bb71e8a4ab linting 2024-09-03 16:19:32 -06:00
0aaf692b4b sub-sync turned into a path based executable 2024-09-03 01:43:30 -06:00
24496c87b9 test to fix env variables 2024-09-03 00:33:32 -06:00
9c40f2916c jellyfin + subsync 2024-09-03 00:33:32 -06:00
007a368cf6 conditioned nvidia kernel parameters 2024-09-03 00:33:32 -06:00
b857d39307 rotehaare flix + updatedns bugfix 2024-08-29 17:57:49 -06:00
7cc3c43da9 latest ryot 2024-08-27 09:57:44 -06:00
ad1d89e2e1 sabnzbd setup 2024-08-25 20:51:28 -06:00
a4c71691a8 lidarr was enabled twice 2024-08-25 15:17:57 -06:00
eb1c0ebbd1 jellyfin has nvidia only toggle 2024-08-25 14:20:54 -06:00
3c4cd28a83 unpackerr fix 2024-08-25 13:42:51 -06:00
e406180a47 scrobble jellyfin 2024-08-25 13:31:21 -06:00
7ca323426a toggled unpackerr 2024-08-25 11:36:24 -06:00
b85aaff840 removed redundant ports 2024-08-25 02:03:39 -06:00
22021fded2 qbittorrent port range 2024-08-25 02:00:43 -06:00
f9e8b6ca73 prowlarr firewall 2024-08-25 01:24:35 -06:00
d6ba8cc321 moved prowlarr 2024-08-25 00:32:43 -06:00
7f505def46 cloudflare-dns uses script status 2024-08-24 22:27:03 -06:00
f9d3da4237 enable jellyfin 2024-08-24 22:17:56 -06:00
51a477e90f pureref broken 2024-08-24 22:04:33 -06:00
a2c67d146a flake update 2024-08-24 22:02:28 -06:00
4540ebb9d0 pureref updated 2024-08-24 21:59:42 -06:00
0a09261efe enabled sub-sync 2024-08-24 21:50:15 -06:00
c411623eb7 miniserver enabled nginx 2024-08-24 21:50:06 -06:00
009fdf7f01 qbittorrent enabled on server 2024-08-24 21:47:03 -06:00
b3de19aed1 disabled firefly + jellyfin proxy 2024-08-24 21:46:29 -06:00
b19659fa4c temporary reverse proxying some servers to server 2024-08-24 21:46:29 -06:00
b6f17c262a mount server nfs 2024-08-24 21:36:06 -06:00
57b15a4df4 removed btrfs nfs 2024-08-24 21:30:50 -06:00
634d5728d6 changed mount points 2024-08-24 21:30:40 -06:00
fb1a44d2ca servers now have an unique toggle for nginx 2024-08-24 20:55:42 -06:00
ad97dcf385 mount btrfs on boot 2024-08-23 00:25:37 -06:00
1cdb2fd226 nvidia + flake update 2024-08-20 15:55:19 -06:00
2ad2bb52e6 removed xserver from cosmic 2024-08-17 14:27:16 -06:00
872e8bec96 reverting back to gnome 2024-08-17 14:01:32 -06:00
3ea6dbda13 cosmic-alpha1 2024-08-16 20:49:18 -06:00
79fe732e6b flake update 2024-08-16 20:32:18 -06:00
0785235fc6 flake update 2024-08-14 18:24:44 -06:00
eb9f2047e0 flake update + linux downgrade + podmannvidia 2024-08-10 13:24:49 -06:00
8d5180b11c bugfix 2024-08-10 00:03:05 -06:00
fd3237464e distrobox 2024-08-09 23:39:45 -06:00
6f8edb2052 installed warp 2024-08-02 13:09:59 -06:00
b1e408f508 light-theme 2024-07-26 13:05:56 -06:00
224fc39a25 update flake + migrate to librewolf 2024-07-26 12:26:45 -06:00
b06a40035d flake update 2024-07-20 13:07:17 -06:00
4224ba8887 collector from unstable <3 2024-07-20 13:07:09 -06:00
ebc585c984 disabled blur my shell 2024-07-20 13:06:59 -06:00
c3349ec022 updated flake.lock 2024-07-16 00:00:58 -06:00
933e591a6a aliases fix 2024-07-13 12:18:52 -06:00
db384b4721 qbit_manage: manages virtual environment with nix 2024-07-13 12:07:29 -06:00
befbac0bcc collabora fixed + replaced local with online urls 2024-07-07 15:09:12 -06:00
30edf36801 enabled ipv6 on workstation 2024-07-07 15:06:41 -06:00
e10055393c server enabled minidlna 2024-07-07 12:47:52 -06:00
e2914cd0f0 migrated back to cloudflare... 2024-07-07 00:24:48 -06:00
9419a12823 better way to declare hosts 2024-07-06 23:49:53 -06:00
c2542bd98b collabora disabled (broken) 2024-07-06 14:52:51 -06:00
cf1143a3fc updated download script install method 2024-07-06 14:52:23 -06:00
328d3a925e updated cloudflare api token 2024-07-06 11:36:12 -06:00
3c0166c2cd enable ipv6 2024-07-06 11:06:05 -06:00
3cc3a378cb enabled minidlna 2024-07-06 11:05:49 -06:00
de81b95a77 homepage: jellyfin init 2024-07-05 22:22:42 -06:00
a02bbd1cc9 removed serviceBase function 2024-07-05 21:05:52 -06:00
8d70d160cf homepage: audiobookshelf init 2024-07-05 20:46:50 -06:00
96e5a4b8ca homepage-dashboard init 2024-07-05 18:27:11 -06:00
91650b3263 adjusted formatting of containers 2024-07-05 15:46:52 -06:00
ffbc449c4a configured nginx to proxy into new domain 2024-07-05 13:44:02 -06:00
522dd0ffcb added cloudflare-dyndns to update-dns 2024-07-05 13:44:02 -06:00
5d00de2886 networking linting 2024-07-05 13:43:51 -06:00
c9d9a24570 removed redundant allowunfree 2024-07-04 20:01:13 -06:00
4ffb7255bc updated collabora 2024-07-04 18:29:38 -06:00
0f09750417 changed backend to podman, don't make me regret it 2024-07-04 15:26:07 -06:00
f177fde0ef cleanup: statix 2024-07-04 14:38:37 -06:00
6055c9e63a cleanup: dead-nix 2024-07-04 14:17:37 -06:00
7a5885fc22 path now contains emacs/bin 2024-07-04 11:55:07 -06:00
28330d0095 attempt #321312 at compiling the entire system 2024-07-04 10:36:38 -06:00
9f2a6eae25 hostPlatform moved to configuration.nix 2024-07-04 10:36:38 -06:00
9d749ee082 reverted jellyfin to 10.9.6 2024-07-04 03:16:16 -06:00
1565d2964f gallery-dl && yt-dlp moved to master 2024-07-04 02:39:14 -06:00
c99f356809 organizing 2024-07-01 10:39:37 -06:00
c3b9eb85ce packages added 2024-07-01 10:21:29 -06:00
0a2a9bfa5a enabled audiobookshelf 2024-06-30 15:41:42 -06:00
200 changed files with 10596 additions and 3844 deletions

92
.github/workflows/build-schemes.yml vendored Normal file
View File

@ -0,0 +1,92 @@
name: Build All Color Schemes
on:
push:
paths:
- "config/schemes.nix"
- "config/scheme-utils.nix"
workflow_dispatch:
jobs:
build-schemes:
runs-on: nixos
env:
HOSTNAME: server
steps:
- uses: actions/checkout@v4
- name: Get available schemes
id: schemes
run: |
SCHEMES=$(nix eval --raw --impure --expr '
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep " " utils.availableSchemes
')
echo "schemes=$SCHEMES" >> $GITHUB_OUTPUT
echo "Available schemes: $SCHEMES"
- name: Configure Attic cache
run: |
# Configure attic client to use your cache server
attic login servidos http://127.0.0.1:2343 ${{ secrets.ATTIC_TOKEN }}
- name: Build and push all schemes
run: |
echo "Building and pushing all schemes..."
# Store original scheme
ORIGINAL_SCHEME=$(grep -oP "scheme = schemesFile\.schemes\.\K\w+" config/stylix.nix)
echo "Original scheme: $ORIGINAL_SCHEME"
# Build and push each scheme
for scheme in ${{ steps.schemes.outputs.schemes }}; do
echo "========================================="
echo "Processing scheme: $scheme"
echo "========================================="
# Update stylix.nix to use this scheme
sed -i "s/scheme = schemesFile\.schemes\.\w\+;/scheme = schemesFile.schemes.$scheme;/" config/stylix.nix
# Verify the change
grep "scheme = schemesFile.schemes" config/stylix.nix
# Build the configuration
echo "Building $scheme..."
nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
--out-link ./result-$scheme \
--quiet
# Push to cache
echo "Pushing $scheme to cache..."
attic push servidos:nixos ./result-$scheme
# Also push using print-out-paths for better cache coverage
nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
--print-out-paths \
--quiet | attic push servidos:nixos --stdin
echo "✓ Completed $scheme"
echo ""
done
# Restore original scheme
echo "Restoring original scheme: $ORIGINAL_SCHEME"
sed -i "s/scheme = schemesFile\.schemes\.\w\+;/scheme = schemesFile.schemes.$ORIGINAL_SCHEME;/" config/stylix.nix
echo "========================================="
echo "All schemes built and pushed successfully!"
echo "========================================="
- name: Summary
run: |
SCHEME_COUNT=$(echo "${{ steps.schemes.outputs.schemes }}" | wc -w)
echo "✅ Color scheme builds completed successfully!"
echo "- Built $SCHEME_COUNT schemes: ${{ steps.schemes.outputs.schemes }}"
echo "- Pushed all builds to Atticd cache"
echo ""
echo "You can now switch schemes quickly without waiting for builds!"

View File

@ -0,0 +1,99 @@
name: Weekly NixOS Build & Cache
on:
schedule:
- cron: "30 09 * * 1,5"
workflow_dispatch: # Allow manual trigger
jobs:
build-and-cache:
runs-on: nixos
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure Git for automated commits
run: |
git config user.name "NixOS Builder Bot"
git config user.email "noreply@servidos.lat"
- name: Update flake inputs
run: |
nix flake update
- name: Check for changes
id: check_changes
run: |
if git diff --quiet flake.lock; then
echo "changes=false" >> $GITHUB_OUTPUT
echo "No changes in flake.lock"
else
echo "changes=true" >> $GITHUB_OUTPUT
echo "Changes detected in flake.lock"
fi
- name: Configure Attic cache
if: steps.check_changes.outputs.changes == 'true'
run: |
# Configure attic client to use your cache server
attic login servidos http://127.0.0.1:2343 ${{ secrets.ATTIC_TOKEN }}
- name: Build workstation configuration
if: steps.check_changes.outputs.changes == 'true'
run: |
echo "Building workstation configuration..."
nix build .#nixosConfigurations.workstation.config.system.build.toplevel --quiet
- name: Build server configuration
if: steps.check_changes.outputs.changes == 'true'
run: |
echo "Building server configuration..."
nix build .#nixosConfigurations.server.config.system.build.toplevel --quiet
- name: Build emacs-vm configuration
if: steps.check_changes.outputs.changes == 'true'
run: |
echo "Building emacs-vm configuration..."
nix build .#emacs-vm --quiet
- name: Push to cache
if: steps.check_changes.outputs.changes == 'true'
run: |
echo "Pushing builds to cache..."
# Push all built derivations to cache
if ls result* 1> /dev/null 2>&1; then
attic push servidos:nixos result*
fi
# Push the specific system derivations we just built
nix build .#nixosConfigurations.workstation.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin
nix build .#nixosConfigurations.server.config.system.build.toplevel --print-out-paths | attic push servidos:nixos --stdin
nix build .#emacs-vm --print-out-paths | attic push servidos:nixos --stdin
- name: Commit updated flake.lock
if: steps.check_changes.outputs.changes == 'true'
run: |
git add flake.lock
git commit -m "Weekly flake update: $(date -u '+%Y-%m-%d %H:%M UTC')"
git push origin main
- name: Create release tag
if: steps.check_changes.outputs.changes == 'true'
run: |
TAG_NAME="weekly-$(date -u '+%Y-%m-%d')"
git tag -a "$TAG_NAME" -m "Weekly build and cache update for $(date -u '+%Y-%m-%d')"
git push origin "$TAG_NAME"
- name: Summary
run: |
if [[ "${{ steps.check_changes.outputs.changes }}" == "true" ]]; then
echo "✅ Weekly build completed successfully!"
echo "- Updated flake.lock"
echo "- Built workstation and server configurations"
echo "- Pushed builds to Atticd cache"
echo "- Committed changes and created release tag"
else
echo " No updates needed - flake.lock is already up to date"
fi

7
.gitignore vendored
View File

@ -1 +1,8 @@
.direnv
config.el
*.qcow2
result
# Prevent accidentally committing unencrypted secrets
**/secrets/*.yaml.dec
**/*-decrypted.*
**/temp-secrets.*

View File

@ -1,10 +1,8 @@
keys:
- &users:
- &devkey age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37
- &hosts:
- &workstation age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz
- &server age15hx530yrqmhm80vsjmffyg9deq9gssj7hl5rsqdnsn3dwegj9qusv4sjf5
- &miniserver age13w4elx3x6afrte2d82lak59mwr2k25wfz3hx79tny6sfdk66lqjq989dzl
- &devkey age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37
- &workstation age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz
- &server age15hx530yrqmhm80vsjmffyg9deq9gssj7hl5rsqdnsn3dwegj9qusv4sjf5
- &miniserver age13w4elx3x6afrte2d82lak59mwr2k25wfz3hx79tny6sfdk66lqjq989dzl
creation_rules:
- path_regex: secrets/secrets.yaml$
key_groups:
@ -27,3 +25,31 @@ creation_rules:
- *workstation
- *server
- *miniserver
- path_regex: secrets/gallery.yaml$
key_groups:
- age:
- *devkey
- *workstation
- *server
- *miniserver
- path_regex: secrets/wireguard.yaml$
key_groups:
- age:
- *devkey
- *workstation
- *server
- *miniserver
- path_regex: secrets/homepage.yaml$
key_groups:
- age:
- *devkey
- *workstation
- *server
- *miniserver
- path_regex: secrets/certs.yaml$
key_groups:
- age:
- *devkey
- *workstation
- *server
- *miniserver

239
README.org Normal file
View File

@ -0,0 +1,239 @@
#+TITLE: JawZ NixOS Configuration
#+AUTHOR: JawZ
#+EMAIL: danilo.reyes.251@proton.me
#+OPTIONS: toc:t num:t
#+STARTUP: content
* Overview
This repository contains my personal NixOS configuration flake, managing
multiple hosts with a modular approach. Designed the configuration for a
self-hosted infrastructure with services and development environments.
* Architecture
** Hosts
- =workstation= :: Main development machine with GNOME desktop
- =server= :: Primary server with containerized services
- =miniserver= :: Secondary server for additional services
- =galaxy= :: Minimal configuration host
- =emacs= :: Development VM for Emacs configuration
** Key Features
- Modular configuration system
- SOPS-based secrets management
- Container orchestration with Podman
- Automated builds and caching
- Multi-language development environments
- Self-hosted service stack
* Quick Start
** Prerequisites
- NixOS 23.05 or later
- SOPS configured with age keys
- SSH keys for remote builds
** Initial Setup
#+BEGIN_SRC bash
# Clone the repository git clone <repository-url> /home/jawz/Development/NixOS
cd /home/jawz/Development/NixOS
# Install dependencies nix flake update
# Build and switch to configuration sudo nixos-rebuild switch --flake
.#<hostname>
#+END_SRC
** Development Environment
#+BEGIN_SRC bash
# Enter development shell for specific language nix develop .#<language>
# Available languages: python, rust, go, haskell, javascript, julia, zig, sh,
cc, nix
#+END_SRC
* Configuration Structure
** Core Configuration
- =config/base.nix= :: Common system configuration
- =config/jawz.nix= :: User and SSH configuration
- =config/stylix.nix= :: Theming configuration
- =config/schemes.nix= :: Color scheme definitions
** Host Configurations
- =hosts/<hostname>/configuration.nix= :: Host-specific settings
- =hosts/<hostname>/hardware-configuration.nix= :: Hardware-specific config
- =hosts/<hostname>/toggles.nix= :: Feature toggles
** Modules
- =modules/apps/= :: Application packages and configurations
- =modules/dev/= :: Development environment modules
- =modules/servers/= :: Self-hosted service configurations
- =modules/services/= :: System service configurations
- =modules/scripts/= :: Custom scripts and utilities
- =modules/shell/= :: Shell and terminal configurations
* Services
** Core Services
- PostgreSQL 17 :: Database backend
- Nginx :: Reverse proxy and web server
- Podman :: Container runtime
- Syncthing :: File synchronization
- WireGuard :: VPN connectivity
** Self-Hosted Applications
- Nextcloud :: File sharing and collaboration
- Gitea :: Git repository hosting
- Jellyfin :: Media server
- Plex :: Media streaming
- Sonarr/Radarr/Lidarr :: Media management
- Vaultwarden :: Password manager
- Homepage :: Service dashboard
- And more...
* Development
** Available Development Shells
The configuration provides development shells for my favorite programming
languages:
#+BEGIN_SRC bash
# Python development nix develop .#python
# Rust development nix develop .#rust
# Go development nix develop .#go
# JavaScript/Node.js development nix develop .#javascript
# Haskell development nix develop .#haskell
# Julia development nix develop .#julia
# Zig development nix develop .#zig
# Shell scripting nix develop .#sh
# C/C++ development nix develop .#cc
# Nix development nix develop .#nix
#+END_SRC
** Adding New Modules
1. Create module file in appropriate directory under =modules/=
2. Add module to =modules/modules.nix= if needed
3. Enable module in host configuration or toggles
** Adding New Hosts
1. Create host directory under =hosts/<hostname>/
2. Add =configuration.nix= and =hardware-configuration.nix=
3. Add host to =flake.nix= outputs
4. Create =toggles.nix= for feature management
* Secrets Management
** SOPS Configuration
Manage secrets using SOPS with age encryption:
- =secrets/secrets.yaml= :: Main secrets file
- =secrets/keys.yaml= :: SSH and encryption keys
- =secrets/env.yaml= :: Environment variables
- =secrets/wireguard.yaml= :: VPN configuration
- =secrets/certs.yaml= :: SSL certificates
** Adding New Secrets
#+BEGIN_SRC bash
# Edit secrets file sops secrets/secrets.yaml
# Add new secret sops -i -a 'new-secret: "value"' secrets/secrets.yaml
#+END_SRC
* CI/CD
** GitHub Actions
The repository includes automated workflows:
- =weekly-build-cache.yml= :: Weekly builds and cache updates
- =build-schemes.yml= :: Color scheme builds
** Build Cache
Builds are automatically cached using Atticd for faster rebuilds.
* Customization
** Theming
The configuration uses Stylix for theming. Define color schemes in
=config/schemes.nix= and can set them via the =config/stylix.nix= file.
** Adding New Services
1. Create service module in =modules/servers/=
2. Add service configuration
3. Enable service in host toggles
4. Add to homepage if needed
** Custom Scripts
Scripts are in =modules/scripts/= and toggle them per host.
* Troubleshooting
** Common Issues
*** Build Failures
- Check flake inputs are up to date: =nix flake update=
- Verify all required secrets are present
- Check host-specific configuration
*** Service Issues
- Check service status: =systemctl status <service>=
- View logs: =journalctl -u <service>=
- Verify firewall rules
*** Development Environment
- Rebuild development shell: =nix develop .#<language>=
- Check available packages: =nix search nixpkgs <package>=
** Getting Help
- Check NixOS documentation
- Review module documentation
- Check service-specific documentation
* Maintenance
** Regular Tasks
- Update flake inputs weekly
- Review and rotate secrets quarterly
- Update system packages monthly
- Clean old generations: =sudo nix-collect-garbage -d=
** Backup Strategy
- Configuration is version controlled
- Secrets are encrypted and backed up
- BTRFS snapshots for data protection
* Contributing
** Code Style
- Use consistent formatting
- Add comments for complex configurations
- Follow Nix conventions
** Pull Requests
- Test changes on development host first
- Update documentation as needed
- Ensure all secrets are properly managed
* License
This configuration is for personal use. Please respect the licenses of
individual packages and services used.
* Contact
For questions or issues, contact danilo.reyes.251@proton.me
---
*Last updated: 2025*

View File

@ -1,18 +1,21 @@
{ lib, pkgs, inputs, outputs, ... }: {
{
lib,
pkgs,
inputs,
outputs,
config,
...
}:
{
imports = [
inputs.home-manager.nixosModules.home-manager
./modules/apps.nix
./modules/dev.nix
./modules/shell.nix
./modules/services.nix
./modules/servers.nix
./modules/scripts.nix
./jawz.nix
../modules/modules.nix
];
system.stateVersion = "24.05";
system.stateVersion = "23.05";
sops = {
defaultSopsFormat = "yaml";
defaultSopsFile = ./secrets/secrets.yaml;
defaultSopsFile = ../secrets/secrets.yaml;
age = {
sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
keyFile = "/var/lib/sops-nix/key.txt";
@ -20,113 +23,109 @@
};
};
home-manager = {
backupFileExtension = "hbckup";
useUserPackages = true;
useGlobalPkgs = true;
extraSpecialArgs = { inherit inputs outputs; };
extraSpecialArgs = {
inherit inputs outputs;
};
users.jawz = import ./home-manager.nix;
};
time = {
timeZone = "America/Mexico_City";
inherit (config.my) timeZone;
hardwareClockInLocalTime = true;
};
i18n = {
defaultLocale = "en_CA.UTF-8";
extraLocaleSettings = { LC_MONETARY = "es_MX.UTF-8"; };
extraLocaleSettings = {
LC_MONETARY = "es_MX.UTF-8";
};
};
console = {
font = "Lat2-Terminus16";
keyMap = "us";
# useXkbConfig = true; # use xkbOptions in tty.
};
security = {
polkit.enable = true;
sudo = {
sudo-rs = {
enable = true;
wheelNeedsPassword = false;
};
pam.loginLimits = [{
domain = "*";
type = "soft";
item = "nofile";
value = "8192";
}];
pam.loginLimits = [
{
domain = "*";
type = "soft";
item = "nofile";
value = "8192";
}
];
};
users = {
mutableUsers = false;
groups.piracy.gid = 985;
groups = {
users.gid = 100;
piracy.gid = 985;
};
};
nixpkgs.config.allowUnfree = true;
nix = let
featuresList = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
"gccarch-znver3"
"gccarch-skylake"
"gccarch-alderlake"
nixpkgs.config = {
allowUnfree = true;
permittedInsecurePackages = [
"aspnetcore-runtime-wrapped-6.0.36"
"aspnetcore-runtime-6.0.36"
"dotnet-runtime-6.0.36"
"dotnet-sdk-wrapped-6.0.428"
"dotnet-sdk-6.0.428"
"mbedtls-2.28.10"
];
in {
};
nix = {
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
distributedBuilds = true;
optimise.automatic = true;
settings = {
use-xdg-base-directories = true;
auto-optimise-store = true;
trusted-users = [ "nixremote" ];
system-features = featuresList;
experimental-features = [ "nix-command" "flakes" ];
trusted-users = [
"jawz"
"root"
"nixremote"
];
experimental-features = [
"nix-command"
"flakes"
"pipe-operators"
];
substituters = [
"${config.my.servers.atticd.url}/nixos"
"https://nix-gaming.cachix.org"
"https://nixpkgs-python.cachix.org"
"https://devenv.cachix.org"
"https://cuda-maintainers.cachix.org"
"https://ai.cachix.org"
"https://cache.lix.systems"
"https://cosmic.cachix.org"
];
trusted-public-keys = [
"nixos:kubuWhYCk9/aZp5GDJFAScYgigM66DszP8i1Pzbq0Fc="
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
"nixpkgs-python.cachix.org-1:hxjI7pFxTyuTHn2NkvWCrAUcNZLNS3ZAvfYNuYifcEU="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
"ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc="
"cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o="
"cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="
];
};
};
documentation.enable = false;
environment = {
systemPackages = with pkgs; [ wget sops ];
variables = rec {
# PATH
XDG_CACHE_HOME = "\${HOME}/.cache";
XDG_CONFIG_HOME = "\${HOME}/.config";
XDG_BIN_HOME = "\${HOME}/.local/bin";
XDG_DATA_HOME = "\${HOME}/.local/share";
XDG_STATE_HOME = "\${HOME}/.local/state";
# DEV PATH
CARGO_HOME = "${XDG_DATA_HOME}/cargo";
GEM_HOME = "${XDG_DATA_HOME}/ruby/gems";
GEM_PATH = "${XDG_DATA_HOME}/ruby/gems";
GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs";
GOPATH = "${XDG_DATA_HOME}/go";
PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history";
REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history";
WINEPREFIX = "${XDG_DATA_HOME}/wine";
# OPTIONS
ELECTRUMDIR = "${XDG_DATA_HOME}/electrum";
WGETRC = "${XDG_CONFIG_HOME}/wgetrc";
XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose";
"_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java";
# NVIDIA
CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv";
# Themes
# WEBKIT_DISABLE_COMPOSITING_MODE = "1";
PATH = [ "\${HOME}/.local/bin" ];
systemPackages = builtins.attrValues {
inherit (pkgs)
wget
sops
;
};
variables = inputs.self.lib.xdgEnvironment;
};
programs = {
nh = {
@ -143,6 +142,7 @@
};
};
services = {
udev.packages = [ pkgs.yubikey-personalization ];
smartd.enable = true;
fstrim.enable = true;
avahi = {

82
config/home-manager.nix Normal file
View File

@ -0,0 +1,82 @@
{
inputs,
config,
pkgs,
lib,
osConfig,
...
}:
let
inherit (pkgs) fd fzf;
inherit (inputs.jawz-scripts.packages.x86_64-linux) pokemon-colorscripts;
shellType = osConfig.my.shell.type;
commonInit = ''
${pokemon-colorscripts}/bin/pokemon-colorscripts -r --no-title
export command_timeout=60
'';
commonAliases = inputs.self.lib.commonAliases // {
open-gallery = ''
cd /srv/pool/scrapping/JawZ/gallery-dl &&
xdg-open "$(${fd}/bin/fd . ./ Husbands wikifeet -tdirectory -d 1 | ${fzf}/bin/fzf -i)"'';
};
in
{
home.stateVersion = "23.05";
programs = {
direnv = {
enable = true;
enableBashIntegration = shellType == "bash";
enableZshIntegration = shellType == "zsh";
nix-direnv.enable = true;
};
git = {
enable = true;
delta.enable = true;
userName = "Danilo Reyes";
userEmail = osConfig.my.email;
extraConfig = {
init.defaultBranch = "main";
pull.rebase = true;
};
};
bash = lib.mkIf (shellType == "bash") {
enable = true;
historyFile = "\${XDG_STATE_HOME}/bash/history";
shellAliases = commonAliases;
enableVteIntegration = true;
initExtra = commonInit;
historyControl = [
"erasedups"
"ignorespace"
"ignoredups"
];
};
zsh = lib.mkIf (shellType == "zsh") {
enable = true;
dotDir = ".config/zsh";
shellAliases = commonAliases;
initContent = commonInit;
history = {
path = "\${XDG_STATE_HOME}/zsh/history";
expireDuplicatesFirst = true;
ignoreSpace = true;
ignoreAllDups = true;
};
};
};
xdg = {
enable = true;
userDirs = {
enable = true;
createDirectories = false;
desktop = "${config.home.homeDirectory}";
documents = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
music = "${config.home.homeDirectory}/Music";
pictures = "${config.home.homeDirectory}/Pictures";
templates = "${config.xdg.dataHome}/Templates";
videos = "${config.home.homeDirectory}/Videos";
};
configFile.wgetrc.text = "hsts-file=\${XDG_CACHE_HOME}/wget-hsts";
};
}

82
config/jawz.nix Normal file
View File

@ -0,0 +1,82 @@
{
config,
lib,
inputs,
...
}:
let
inherit (config.networking) hostName;
nixosHosts = inputs.self.lib.getNixosHosts config.my.ips hostName lib;
nixosHostsMatch = lib.concatStringsSep " " nixosHosts;
in
{
sops.secrets = lib.mkIf config.my.secureHost (
let
baseDir = ".ssh/ed25519";
keyConfig = file: {
sopsFile = ../secrets/keys.yaml;
owner = config.users.users.jawz.name;
inherit (config.users.users.jawz) group;
path = "/home/jawz/${file}";
};
in
{
jawz-password.neededForUsers = true;
"private_keys/${hostName}" = keyConfig "${baseDir}_${hostName}";
"git_private_keys/${hostName}" = keyConfig "${baseDir}_git";
}
);
home-manager.users.jawz = {
home.file.".librewolf/.stignore".source = ../dotfiles/stignore;
programs.ssh = lib.mkIf config.my.secureHost {
enable = true;
matchBlocks = {
vps = {
hostname = config.my.ips.vps;
user = "jawz";
port = 3456;
identityFile = config.sops.secrets."private_keys/${hostName}".path;
};
"${nixosHostsMatch}" = {
user = "jawz";
identityFile = config.sops.secrets."private_keys/${hostName}".path;
};
"${config.my.servers.gitea.host} github.com gitlab.com bitbucket.org".identityFile =
config.sops.secrets."git_private_keys/${hostName}".path;
};
};
};
users.users.jawz = {
uid = 1000;
linger = true;
isNormalUser = true;
hashedPasswordFile = lib.mkIf config.my.secureHost config.sops.secrets.jawz-password.path;
hashedPassword =
lib.mkIf (!config.my.secureHost)
"$6$s4kbia4u7xVwCmyo$LCN7.Ki2n3xQOqPKnTwa5idwOWYeMNTieQYbLkiiKcMFkFmK76BjtNofJk3U7yRmLGnW3oFT433.nTRq1aoN.1";
extraGroups = [
"wheel"
"networkmanager"
"scanner"
"lp"
"piracy"
"kavita"
"video"
"docker"
"libvirt"
"rslsync"
"plugdev"
"bluetooth"
];
openssh.authorizedKeys.keyFiles = inputs.self.lib.getSshKeys [
"deacero"
"workstation"
"server"
"miniserver"
"galaxy"
"phone"
"vps"
"windows_vm"
];
};
}

48
config/overlay.nix Normal file
View File

@ -0,0 +1,48 @@
{
mkpkgs,
inputs,
...
}:
let
pkgs = mkpkgs inputs.nixpkgs;
pkgsU = mkpkgs inputs.nixpkgs-unstable;
in
_final: prev: {
handbrake = prev.handbrake.override { useGtk = true; };
ripgrep = prev.ripgrep.override { withPCRE2 = true; };
nautilus = prev.nautilus.overrideAttrs (old: {
buildInputs =
old.buildInputs
++ builtins.attrValues {
inherit (pkgs.gst_all_1)
gst-plugins-good
gst-plugins-bad
;
};
});
lutris = prev.lutris.override {
extraPkgs =
pkgs:
builtins.attrValues {
inherit (pkgs) pango winetricks;
}
++ (with pkgs; [
wine64Packages.stable
wineWowPackages.stable
]);
};
discord = prev.discord.override {
withVencord = true;
withOpenASAR = true;
};
waybar = prev.waybar.overrideAttrs (old: {
mesonFlags = old.mesonFlags ++ [ "-Dexperimental=true" ];
});
inherit (pkgsU)
code-cursor
symbola
mealie
flaresolver
deadnix
;
}

120
config/schemes.nix Normal file
View File

@ -0,0 +1,120 @@
{ pkgs, inputs }:
let
inherit (inputs) wallpapers;
mkScheme =
{
color ? null,
name ? null,
polarity,
image,
iconPackage ? pkgs.papirus-icon-theme.override { inherit color; },
base16Scheme ? if name != null then "${pkgs.base16-schemes}/share/themes/${name}.yaml" else null,
}:
{
inherit
color
name
polarity
image
iconPackage
base16Scheme
;
};
in
{
schemes = {
vulcano = mkScheme {
name = "mocha";
color = "brown";
polarity = "dark";
image = "${wallpapers}/la_fragua_de_vulcano.jpg";
};
who = mkScheme {
name = "catppuccin-frappe";
polarity = "dark";
image = "${wallpapers}/Nikolay_Kasatkin_Who.jpeg";
iconPackage = pkgs.catppuccin-papirus-folders.override {
flavor = "frappe";
accent = "peach";
};
};
space = mkScheme {
name = "solarflare";
color = "darkcyan";
polarity = "dark";
image = "${wallpapers}/space.jpg";
};
jesus = mkScheme {
color = "red";
name = "equilibrium-light";
polarity = "light";
image = "${wallpapers}/jesus.png";
};
ballerinas = mkScheme {
color = "brown";
name = "mocha";
polarity = "dark";
image = "${wallpapers}/Waay-Ballerinas.jpeg";
};
febroary = mkScheme {
color = "yellow";
name = "gruvbox-light";
polarity = "light";
image = "${wallpapers}/febroary.jpg";
};
paul3 = mkScheme {
color = "bluegrey";
name = "mexico-light";
polarity = "light";
image = "${wallpapers}/paul3.jpg";
};
paul = mkScheme {
color = "green";
name = "valua";
polarity = "light";
image = "${wallpapers}/paul1.jpg";
base16Scheme = {
base00 = "#1a1f16"; # dark forest floor (was deep green-black)
base01 = "#23291a"; # bark shadow
base02 = "#3c422c"; # damp moss
base03 = "#50573c"; # lichen-streaked rock
base04 = "#767d5e"; # moss + sun mix
base05 = "#a9ae8a"; # dry fern or lichen dust
base06 = "#dfe1d2"; # pale sage
base07 = "#f5f7f0"; # slightly sunlit leaf white
base08 = "#4c7c4a"; # deep fern green
base09 = "#6b8f3c"; # olive bark
base0A = "#b5b938"; # lichen gold
base0B = "#7CC844"; # success green (kept from original)
base0C = "#4fbf87"; # turquoise vine
base0D = "#2aaf6f"; # jungle leaf
base0E = "#88a337"; # mossy lime
base0F = "#5c8b55"; # swamp olive
};
};
cheems = mkScheme {
color = "yellow";
name = "equilibrium-light";
polarity = "light";
image = "${wallpapers}/cheems.png";
base16Scheme = {
base00 = "#f5f0e9"; # very light cream
base01 = "#e8ddd4"; # light beige
base02 = "#d4c4b0"; # warm tan
base03 = "#b8a082"; # golden brown
base04 = "#9c7c5a"; # medium brown
base05 = "#7a5f3f"; # darker brown
base06 = "#5c4328"; # dark brown
base07 = "#3e2d1a"; # very dark brown
base08 = "#d2691e"; # golden orange
base09 = "#cd853f"; # peru
base0A = "#daa520"; # goldenrod
base0B = "#228b22"; # forest green
base0C = "#20b2aa"; # light sea green
base0D = "#daa520"; # goldenrod
base0E = "#8b008b"; # dark magenta
base0F = "#dc143c"; # crimson
};
};
};
}

52
config/stylix.nix Normal file
View File

@ -0,0 +1,52 @@
{
pkgs,
lib,
config,
inputs,
...
}:
let
schemesFile = import ./schemes.nix {
inherit pkgs inputs;
};
scheme = schemesFile.schemes.febroary;
cfg = config.my.stylix;
gnomeEnabled = config.services.xserver.desktopManager.gnome.enable;
in
{
options.my.stylix.enable = lib.mkEnableOption "system-wide theming with Stylix";
config = {
stylix = {
inherit (scheme) image polarity;
enable = true;
autoEnable = cfg.enable;
targets.qt.platform = lib.mkForce "qtct";
}
// lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; };
home-manager.users.jawz = {
gtk = lib.mkIf (!cfg.enable && gnomeEnabled) {
enable = true;
iconTheme = {
name = "Papirus-Light";
package = pkgs.papirus-icon-theme.override {
color = "yellow";
};
};
};
stylix = {
inherit (cfg) enable;
autoEnable = cfg.enable;
iconTheme = {
inherit (cfg) enable;
package = scheme.iconPackage;
light = "Papirus-Light";
dark = "Papirus-Dark";
};
targets.librewolf = {
firefoxGnomeTheme.enable = true;
profileNames = [ "jawz" ];
};
};
};
};
}

10
dotfiles/doom/bookmarks Normal file
View File

@ -0,0 +1,10 @@
;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("org-capture-last-stored"
(filename . "~/Documents/Notes/20240518175854-egypt.org")
(front-context-string)
(rear-context-string . "\n#+title: Egypt\n")
(position . 83))
)

1076
dotfiles/doom/config.org Executable file

File diff suppressed because it is too large Load Diff

21
dotfiles/doom/custom.el Normal file
View File

@ -0,0 +1,21 @@
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(flycheck-flake8-maximum-line-length 88)
'(safe-local-variable-values
'((org-hugo-auto-export-on-save . t)
(org-hugo-base-dir . /home/jawz/Development/Websites/portfolio/)
(git-commit-major-mode . git-commit-elisp-text-mode))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(org-document-title ((t (:inherit outline-1 :height 2.0))))
'(org-level-1 ((t (:inherit outline-1 :height 1.4))))
'(org-level-2 ((t (:inherit outline-2 :height 1.3))))
'(org-level-3 ((t (:inherit outline-3 :height 1.2))))
'(org-level-4 ((t (:inherit outline-4 :height 1.1))))
'(org-level-5 ((t (:inherit outline-5 :height 1.0)))))

192
dotfiles/doom/init.el Executable file
View File

@ -0,0 +1,192 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
;; company ; the ultimate code completion backend
(corfu +orderless) ; complete with cap(f), cape and a flying feather!
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;(ivy +fuzzy +childframe +icons) ; a search engine for love and life
vertico ; the search engine of the future
:ui
deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode +github) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;indent-guides ; highlighted indent columns
;;(ligatures +extra +iosevka) ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
;;tabs ; a tab bar for Emacs
(treemacs +lsp) ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
;;word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
eww ; the internet is gross
ibuffer ; interactive buffer management
(undo +tree) ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell +hunspell) ; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
direnv
(docker +lsp)
editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
(lookup +dictionary + offline) ; navigate your code and its documentation
(lsp +peek) ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
;;pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
;;terraform ; infrastructure as code
tmux ; an API for interacting with tmux
;; tree-sitter ; syntax and parsing, sitting in a tree...
upload ; map local to remote projects via ssh/ftp
:os
;;(:if (featurep :system 'macos) macos) ; improve compatibility with macOS tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;; (csharp +lsp) ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
(gdscript +lsp) ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
(haskell +lspr) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
(json +lsp) ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
(javascript +lsp) ; all(hope(abandon(ye(who(enter(here))))))
(julia +lsp) ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
;;markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
(nix +lsp) ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +hugo +pretty +roam2) ; organize your plain life in plain text
;;(php +lsp) ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;; graphviz ; diagrams for confusing yourself even more
;;purescript ; javascript, but functional
(python +pyright +lsp) ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
(sh +lsp) ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
;;web ; the tubes
(yaml +lsp) ; JSON, but readable
;;zig ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
calendar
;;emms
everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
:config
literate
(default +bindings +smartparens))

96
dotfiles/doom/packages.el Executable file
View File

@ -0,0 +1,96 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/raxod502/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see raxod502/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
;; (package! nixos-options) ;; enable when migrating to nixos
;; (package! quick-preview) ;; preview files with sushi
;; (package! codeium :recipe (:host github :repo "Exafunction/codeium.el"))
(package! config-general-mode)
(package! dired-open)
(package! dired-subtree)
;; (package! doom-modeline-now-playing)
(package! ini-mode)
(package! insert-esv) ;; bible passages
(package! olivetti) ;; writing mode centering text, looks like word
(package! org-alert)
(package! org-auto-tangle)
(package! org-roam-ui)
(package! org-transclusion)
(package! peep-dired) ;; kind of cool but never could make it work
(package! php-cs-fixer)
(package! systemd)
;; (package! 2048-game)
;; (package! academic-phrases)
;; (package! caddyfile-mode)
;; (package! clippy)
;; (package! crontab-mode) ;; crontab colors
;; (package! evil-tutor) ;; vim tutorial
;; (package! ewal) ;; theme colors based on pywal
;; (package! ewal-doom-themes)
;; (package! ewal-evil-cursors)
;; (package! fish-completion) ;; what does it do???????????????????????????
;; (package! flycheck-aspell)
;; (package! ivy-posframe)
;; (package! mw-thesaurus)
;; (package! org-appear) ;; couldn't get it to work
;; (package! org-recur) ;; works but I want to keep org vanilla
;; (package! ox-chameleon
;; :recipe (:host github :repo "tecosaur/ox-chameleon"))
;; (package! renpy)
;; (package! resize-window)
;; (package! tldr)
;; (package! typit) ;; type speed test
;; (package! vimgolf) ;; vim puzzles
;; (package! wc-mode) ;; displays character count of buffer
(package! expand-region)
(package! gptel :recipe (:nonrecursive t))

View File

@ -0,0 +1 @@
%?

View File

@ -0,0 +1,21 @@
%?
* Sources
1.
* Belligerents
1.
* Casualties and losses
* Location
* Causes
* Events
* Major Contention Events
* Outcome
* Important Notes

View File

@ -0,0 +1,13 @@
%?
- Influenced by
- Influenced
- Related tools
* Hello World
* Tips
* Resources
- Documentation
- YouTube channels

301
dotfiles/gallery-dl.nix Normal file
View File

@ -0,0 +1,301 @@
{
extractor = {
skip = "abort:5";
cookies = [
"firefox"
"/home/jawz/.librewolf/jawz"
"gnomekeyring"
];
retries = 10;
sleep-request = 0;
directlink = {
filename = "{filename}.{extension}";
directory = [ ];
};
bluesky = {
limit-rate = "400k-1M";
username = "blablablamagic.bsky.social";
reposts = false;
videos = true;
directory = [ "{author['handle']}" ];
include = [ "media" ];
};
twitter = {
skip = "abort:1";
retweets = false;
videos = "ytdl";
logout = true;
include = [ "media" ];
directory = [ "{user[name]}" ];
};
flickr = {
size-max = "Original";
directory = [
"{category}"
"{owner[username]}"
];
};
pinterest.directory = [
"{board[owner][username]}"
"{board[name]}"
];
wikifeet = {
page-reverse = true;
directory = [
"{category}"
"{celebrity}"
];
};
instagram = {
limit-rate = "200k-300k";
browser = "firefox:linux";
user-agent = "Mozilla/5.0 (X11; Linux x86_64; rv:143.0) Gecko/20100101 Firefox/143.0";
sleep = "66-123";
sleep-request = "66-123";
parent-directory = true;
directory = [ "{username}" ];
previews = true;
highlights = {
reverse = true;
directory = [ "{username}" ];
};
stories = {
reverse = true;
directory = [ "{username}" ];
};
tagged.directory = [
"{username}"
"tagged"
"{tagged_username}"
];
};
kemonoparty = {
limit-rate = "200k-300k";
retries = 10;
timeout = 5;
filename = "{id}_{filename}.{extension}";
directory = [
"{category}"
"{user}"
];
};
exhentai.directory = [
"{category}"
"{title}"
];
tumblr = {
external = true;
inline = true;
posts = "all";
reblogs = false;
parent-directory = true;
directory = [ "{blog_name}" ];
};
deviantart = {
limit-rate = "200k-300k";
include = "gallery,scraps";
flat = true;
original = true;
mature = true;
auto-watch = true;
auto-unwatch = true;
directory = [ "{username}" ];
};
furaffinity = {
directory = [
"{user}"
"{subcategory}"
];
include = [
"scraps"
"gallery"
];
};
patreon = {
limit-rate = "400k-1M";
filename = "{filename}.{num}.{extension}";
browser = "firefox";
directory = [
"(Patreon) {creator[vanity]}"
"({date:%Y%m%d}) {title} ({id})"
];
};
blogger = {
filename = "{filename} - {num}.{extension}";
directory = [
"{blog[name]}"
"{post[author]}"
"{post[title]} - [{post[id]}]"
];
};
artstation = {
external = true;
directory = [ "{userinfo[username]}" ];
};
gfycat.format = "webm";
reddit = {
user-agent = "Python:gallery-dl:v1.0 (by /u/captainjawz)";
client-id = "T7nZ6WZ3_onJWBhLP8r08g";
parent-directory = true;
directory = [ "{author}" ];
};
redgifs = {
reverse = true;
directory = [ "{userName}" ];
};
imgur.mp4 = true;
paheal.directory = [
"Husbands"
"{search_tags}"
];
rule34.directory = [
"Husbands"
"{search_tags}"
];
e621.directory = [
"Husbands"
"{search_tags}"
];
baraag.directory = [ "{account[username]}" ];
pixiv = {
directory = [ "{user[account]} - {user[id]}" ];
ugoira = true;
favorite.directory = [
"{user_bookmark[account]} - {user_bookmark[id]}"
"Bookmarks"
];
postprocessors = [
{
name = "ugoira";
extension = "webm";
keep-files = false;
whitelist = [ "pixiv" ];
ffmpeg-twopass = true;
ffmpeg-args = [
"-c:v"
"libvpx"
"-crf"
"4"
"-b:v"
"5000k"
"-an"
];
}
];
};
fanbox = {
embeds = true;
directory = [
"{category}"
"{creatorId}"
];
};
readcomiconline = {
limit-rate = "400k-1M";
chapter-reverse = true;
quality = "hq";
captcha = "wait";
postprocessors = [ "cbz" ];
directory = [
"comics"
"{comic}"
"{comic} #{issue}"
];
};
kissmanga = {
chapter-reverse = true;
captcha = "wait";
postprocessors = [ "cbz" ];
directory = [
"manga"
"{subcategory}"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
mangahere = {
chapter-reverse = true;
postprocessors = [ "cbz" ];
directory = [
"manga"
"{subcategory}"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
mangadex = {
chapter-reverse = true;
chapter-filter = "lang == 'en'";
postprocessors = [ "cbz" ];
directory = [
"manga"
"manga"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
manganelo = {
chapter-reverse = true;
chapter-filter = "lang == 'en'";
postprocessors = [ "cbz" ];
directory = [
"manga"
"{subcategory}"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
mangareader = {
chapter-reverse = true;
postprocessors = [ "cbz" ];
directory = [
"manga"
"{subcategory}"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
mangapanda = {
chapter-reverse = true;
postprocessors = [ "cbz" ];
directory = [
"manga"
"{subcategory}"
"{manga}"
"{manga} Ch.{chapter}{chapter_minor}"
];
};
webtoons = {
chapter-reverse = true;
postprocessors = [ "cbz" ];
directory = [
"webtoons"
"{comic}"
"{comic} #{episode}"
];
};
};
output.mode = "auto";
downloader = {
part = true;
part-directory = "/home/jawz/.cache/gallery-dl";
ytdl = {
logging = true;
format = "bestvideo+bestaudio/best";
module = "yt_dlp";
forward-cookies = true;
};
http = {
rate = null;
retries = 5;
timeout = 10.0;
verify = true;
};
};
postprocessor.cbz = {
name = "zip";
compression = "store";
mode = "safe";
extension = "cbz";
};
}

View File

@ -1,228 +0,0 @@
{
"extractor": {
"skip": "abort:5",
"cookies": ["firefox", "yw8fhvh4.default-release", "gnomekeyring"],
"user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0",
"retries": 10,
"sleep-request": 0,
"directlink": {
"directory": [],
"filename": "{filename}.{extension}"
},
"twitter": {
"skip": "abort:1",
"directory": ["{user[name]}"],
"include": ["media"],
"retweets": false,
"videos": "ytdl",
"logout": true
},
"flickr": {
"directory": ["{category}", "{owner[username]}"],
"size-max": "Original",
"access-token": "72157720915197374-51a26dc4fdfdf173",
"access-token-secret": "a1ddb10902f3fa85"
},
"pinterest": {
"directory": ["{board[owner][username]}", "{board[name]}"]
},
"wikifeet": {
"page-reverse": true,
"directory": ["{category}", "{celebrity}"]
},
"instagram": {
"sleep-request": "25-45",
"sleep": "25-45",
"directory": ["{username}"],
"parent-directory": true,
"highlights": {
"reverse": "true",
"directory": ["{username}"]
},
"stories": {
"reverse": "true",
"directory": ["{username}"]
},
"tagged": {
"directory": ["{tagged_username}", "tagged"]
}
},
"kemonoparty": {
"directory": ["{category}", "{user}"],
"retries": 10,
"timeout": 5,
"filename": "{id}_{filename}.{extension}"
},
"exhentai": {
"directory": ["{category}", "{title}"]
},
"tumblr": {
"directory": ["{blog_name}"],
"access-token": "5VwIW8TNBoNVPo9CzvKMza2wcn9gJXd6rnUBy6Ctqb4BCPpI59",
"access-token-secret": "8krZGeauA171aZpXZhwgZN8nZCxKQkXYKXWL473mTQPKrqoP3e",
"external": true,
"inline": true,
"posts": "all",
"reblogs": false,
"parent-directory": true,
"api-key": "uhBUtgPaX9gl7eaD8suGWW6ZInRedQoVT6xsZzopljy0jXHqm5",
"api-secret": "D3FDj1INyPzXikVpp4jmzSqjlC9czFUQ8oj2I883PSYJdqwURv"
},
"deviantart": {
"client-id": "20016",
"client-secret": "52e1f9b0cb26e673da36f69e2ddd0e9a",
"refresh-token": "3fd25b06f97853a93cbe3729edf5d1d196d44700",
"directory": ["{username}"],
"include": "gallery,scraps",
"flat": true,
"original": true,
"mature": true,
"auto-watch": true,
"auto-unwatch": true
},
"furaffinity": {
"directory": ["{user}", "{subcategory}"],
"include": ["scraps", "gallery"]
},
"patreon": {
"directory": [
"(Patreon) {creator[vanity]}",
"({date:%Y%m%d}) {title} ({id})"
],
"filename": "{filename}.{num}.{extension}",
"browser": "firefox"
},
"blogger": {
"directory": [
"{blog[name]}",
"{post[author]}",
"{post[title]} - [{post[id]}]"
],
"filename": "{filename} - {num}.{extension}"
},
"artstation": {
"directory": ["{userinfo[username]}"],
"external": true
},
"gfycat": {
"format": "webm"
},
"reddit": {
"user-agent": "Python:gallery-dl:v1.0 (by /u/captainjawz)",
"client-id": "T7nZ6WZ3_onJWBhLP8r08g",
"refresh-token": "184157546842-UHdPQX1c7kG1kbO09NAHY2O2taEiwg",
"directory": ["{author}"],
"parent-directory": true
},
"redgifs": {
"reverse": "true",
"directory": ["{userName}"]
},
"imgur": {
"mp4": true
},
"paheal": {
"directory": ["Husbands", "{search_tags}"]
},
"rule34": {
"directory": ["Husbands", "{search_tags}"]
},
"e621": {
"directory": ["Husbands", "{search_tags}"]
},
"baraag": {
"directory": ["{account[username]}"]
},
"pixiv": {
"refresh-token": "O4kc9tTzGItuuacDcfmevW6NELjm5CJdWiAbZdUv3Kk",
"directory": ["{user[account]} - {user[id]}"],
"ugoira": true,
"favorite": {
"directory": [
"{user_bookmark[account]} - {user_bookmark[id]}",
"Bookmarks"
]
},
"postprocessors": [
{
"name": "ugoira",
"extension": "webm",
"keep-files": false,
"whitelist": ["pixiv"],
"ffmpeg-twopass": true,
"ffmpeg-args": ["-c:v", "libvpx", "-crf", "4", "-b:v", "5000k", "-an"]
}
]
},
"fanbox": {
"directory": ["{category}", "{creatorId}"],
"embeds": true
},
"readcomiconline": {
"chapter-reverse": true,
"directory": ["Comics", "{comic}", "{comic} #{issue}"],
"quality": "hq",
"captcha": "wait",
"postprocessors": ["cbz"]
},
"kissmanga": {
"chapter-reverse": true,
"directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"],
"captcha": "wait",
"postprocessors": ["cbz"]
},
"mangahere": {
"chapter-reverse": true,
"directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"],
"postprocessors": ["cbz"]
},
"mangadex": {
"chapter-reverse": true,
"chapter-filter": "lang == 'en'",
"directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"],
"postprocessors": ["cbz"]
},
"mangareader": {
"chapter-reverse": true,
"directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"],
"postprocessors": ["cbz"]
},
"mangapanda": {
"chapter-reverse": true,
"directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"],
"postprocessors": ["cbz"]
},
"webtoons": {
"chapter-reverse": true,
"directory": ["Webtoons", "{comic}", "{comic} #{episode}"],
"postprocessors": ["cbz"]
}
},
"output": {
"mode": "auto"
},
"downloader": {
"part": true,
"part-directory": "/home/jawz/.cache/gallery-dl",
"ytdl": {
"logging": true,
"format": "bestvideo+bestaudio/best",
"module": "yt_dlp",
"forward-cookies": true
},
"http": {
"rate": null,
"retries": 5,
"timeout": 10.0,
"verify": true
}
},
"postprocessor": {
"cbz": {
"name": "zip",
"compression": "store",
"mode": "safe",
"extension": "cbz"
}
}
}

View File

@ -1,10 +0,0 @@
autoclip: true
autoimport: false
cliptimeout: 45
exportkeys: false
nopager: false
notifications: false
parsing: true
path: /home/jawz/.local/share/pass
safecontent: true
mounts: {}

View File

@ -1,61 +0,0 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.2.1
config_reader_min_version=3
fields=18 0 123 124 46 47 38 50 1
hide_kernel_threads=0
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=0
highlight_base_name=1
highlight_deleted_exe=1
highlight_megabytes=1
highlight_threads=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=1
header_margin=1
screen_tabs=1
detailed_cpu_time=0
cpu_count_from_one=1
show_cpu_usage=1
show_cpu_frequency=1
show_cpu_temperature=1
degree_fahrenheit=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=3
enable_mouse=1
delay=15
hide_function_bar=0
header_layout=two_67_33
column_meters_0=LeftCPUs Swap Tasks NetworkIO Memory
column_meter_modes_0=1 1 2 2 2
column_meters_1=RightCPUs Hostname Uptime LoadAverage
column_meter_modes_1=1 2 2 2
tree_view=1
sort_key=38
tree_sort_key=0
sort_direction=-1
tree_sort_direction=1
tree_view_always_by_pid=1
all_branches_collapsed=1
screen:Main=NICE PID COMM EXE PERCENT_CPU PERCENT_MEM M_VIRT NLWP Command
.sort_key=M_VIRT
.tree_sort_key=PID
.tree_view=1
.tree_view_always_by_pid=1
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=1
screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command
.sort_key=IO_RATE
.tree_sort_key=PID
.tree_view=0
.tree_view_always_by_pid=0
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=0

View File

@ -1,4 +0,0 @@
{
"optOut": false,
"lastUpdateCheck": 1646662583446
}

View File

@ -1 +0,0 @@
b/run/current-system/sw/bin/bash5/BpvLE.0dXQuzNskhAD94U6zFCFvfhzqWJEiBi

8
dotfiles/stignore Normal file
View File

@ -0,0 +1,8 @@
(?d)jawz/chrome/userChrome.css
(?d)jawz/chrome/userContent.css
(?d)jawz/lock
(?d)jawz/storage
(?d)jawz/user.js
(?d)native-messaging-hosts/org.gnome.browser_connector.json
(?d)native-messaging-hosts/org.gnome.chrome_gnome_shell.json
(?d)profiles.ini

View File

@ -1,222 +0,0 @@
## Unpackerr Example Configuration File ##
## The following values are application defaults. ##
## Environment Variables may override all values. ##
####################################################
# [true/false] Turn on debug messages in the output. Do not wrap this in quotes.
# Recommend trying this so you know what it looks like. I personally leave it on.
debug = false
# Disable writing messages to stdout. This silences the app. You should set a log
# file below if you set this to true. Recommended when starting with systemctl.
quiet = false
# Setting activity to true will silence all app queue log lines with only zeros.
# Set this to true when you want less log spam.
activity = false
# The application queue data is logged on an interval. Adjust that interval with this setting.
# Default is a minute. 2m, 5m, 10m, 30m, 1h are also perfectly acceptable.
log_queues = "1m"
# Write messages to a log file. This is the same data that is normally output to stdout.
# This setting is great for Docker users that want to export their logs to a file.
# The alternative is to use syslog to log the output of the application to a file.
# Default is no log file; this is unset. log_files=0 turns off auto-rotation.
# Default files is 10 and size(mb) is 10 Megabytes; both doubled if debug is true.
#log_file = '/downloads/unpackerr.log'
log_files = 10
log_file_mb = 10
# How often to poll sonarr and radarr.
# Recommend 1m-5m. Uses Go Duration.
interval = "5m"
# How long an item must be queued (download complete) before extraction will start.
# One minute is the historic default and works well. Set higher if your downloads
# take longer to finalize (or transfer locally). Uses Go Duration.
start_delay = "1m"
# How long to wait before removing the history for a failed extraction.
# Once the history is deleted the item will be recognized as new and
# extraction will start again. Uses Go Duration.
retry_delay = "5m"
# How many files may be extracted in parallel. 1 works fine.
# Do not wrap the number in quotes. Raise this only if you have fast disks and CPU.
parallel = 1
# Use these configurations to control the file modes used for newly extracted
# files and folders. Recommend 0644/0755 or 0666/0777.
file_mode = "0664"
dir_mode = "0775"
[webserver]
## The web server currently only supports metrics; set this to true if you wish to use it.
metrics = false
## This may be set to a port or an ip:port to bind a specific IP. 0.0.0.0 binds ALL IPs.
listen_addr = "0.0.0.0:5656"
## Recommend setting a log file for HTTP requests. Otherwise, they go with other logs.
log_file = ""
## This app automatically rotates logs. Set these to the size and number to keep.
log_files = 10
log_file_mb = 10
## Set both of these to valid file paths to enable HTTPS/TLS.
ssl_cert_file = ""
ssl_key_file = ""
## Base URL from which to serve content.
urlbase = "/"
## Upstreams should be set to the IP or CIDR of your trusted upstream proxy.
## Setting this correctly allows X-Forwarded-For to be used in logs.
## In the future it may control auth proxy trust. Must be a list of strings.
upstreams = [ ] # example: upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]
##-Notes-#######-READ THIS!!!-##################################################
## The following sections can be repeated if you have more than one Sonarr, ##
## Radarr or Lidarr, Readarr, Folder, Webhook, or Command Hook. ##
## You MUST uncomment the [[header]] and api_key at a minimum for Starr apps. ##
## ALL LINES BEGINNING WITH A HASH # ARE IGNORED ##
## REMOVE THE HASH # FROM CONFIG LINES YOU WANT TO CHANGE ##
################################################################################
[[sonarr]]
url = "http://localhost:8989"
api_key = "52869fe7bec4482dafb21c4053fe71e4"
## File system path where downloaded Sonarr items are located.
paths = ['/mnt/pool/multimedia/downloads/torrent']
## Default protocols is torrent. Alternative: "torrent,usenet"
protocols = "torrent"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
# delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
# syncthing = false
[[radarr]]
url = "http://127.0.0.1:7878"
api_key = "a987ac45ca2c47bc88e762031ea33296"
## File system path where downloaded Radarr items are located.
paths = ['/mnt/pool/multimedia/downloads/torrent']
## Default protocols is torrents. Alternative: "torrent,usenet"
protocols = "torrent"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
# delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
# syncthing = false
#[[lidarr]]
# url = "http://127.0.0.1:8686"
# api_key = "0123456789abcdef0123456789abcdef"
## File system path where downloaded Lidarr items are located.
# paths = ['/downloads']
## Default protocols is torrent. Alternative: "torrent,usenet"
# protocols = "torrent"
## How long to wait for a reply from the backend.
# timeout = "10s"
## How long to wait after import before deleting the extracted items.
# delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
# delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
# syncthing = false
#[[readarr]]
# url = "http://127.0.0.1:8787"
# api_key = "0123456789abcdef0123456789abc"
## File system path where downloaded Readarr items are located.
# paths = ['/downloads']
## Default protocols is torrent. Alternative: "torrent,usenet"
# protocols = "torrent"
## How long to wait for a reply from the backend.
# timeout = "10s"
## How long to wait after import before deleting the extracted items.
# delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
# delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
# syncthing = false
##################################################################################
### ### STOP HERE ### STOP HERE ### STOP HERE ### STOP HERE #### STOP HERE ### #
### Only using Starr apps? The things above. The below configs are OPTIONAL. ### #
##################################################################################
##-Folders-#######################################################################
## This application can also watch folders for things to extract. If you copy a ##
## subfolder into a watched folder (defined below) any extractable items in the ##
## folder will be decompressed. This has nothing to do with Starr applications. ##
##################################################################################
#[[folder]]
# path = '/some/folder/to/watch'
## Path to extract files to. The default (leaving this blank) is the same as `path` (above).
# extract_path = ""
## Delete extracted or original files this long after extraction.
## The default is 0. Set to 0 to disable all deletes. Uncomment it to enable deletes. Uses Go Duration.
# delete_after = "10m"
## Delete extracted files after successful extraction? true/false, no quotes. Honors delete_after.
# delete_files = false
## Delete original items after successful extraction? true/false, no quotes. Honors delete_after.
# delete_original = false
## Disable extraction log (unpackerred.txt) file creation? true/false, no quotes.
# disable_log = false
## Move extracted files into original folder? If false, files go into an _unpackerred folder.
# move_back = false
## Set this to true if you want this app to extract ISO files with .iso extension.
# extract_isos = false
################
### Webhooks ###
################
# Sends a webhook when an extraction queues, starts, finishes, and/or is deleted.
# Created to integrate with notifiarr.com.
# Also works natively with Discord.com, Telegram.org, and Slack.com webhooks.
# Can possibly be used with other services by providing a custom template_path.
###### Don't forget to uncomment [[webhook]] and url at a minimum !!!!
#[[webhook]]
# url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com"
# name = "" # Set this to hide the URL in logs.
# silent = false # do not log success (less log spam)
# events = [0] # list of event ids to include, 0 == all.
## Advanced Optional Webhook Configuration
# nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id.
# channel = "" # Also passed into templates. Used in Slack templates for destination channel.
# exclude = [] # list of apps to exclude, ie. ["radarr", "lidarr"]
# template_path = "" # Override internal webhook template for discord.com or other hooks.
# template = "" # Override automatic template detection. Values: notifiarr, discord, telegram, gotify, pushover, slack
# ignore_ssl = false # Set this to true to ignore the SSL certificate on the server.
# timeout = "10s" # You can adjust how long to wait for a server response.
# content_type = "application/json" # If your custom template uses another MIME type, set this.
#####################
### Command Hooks ###
#####################
# Executes a script or command when an extraction queues, starts, finishes, and/or is deleted.
# All data is passed in as environment variables. Try /usr/bin/env to see what variables are available.
###### Don't forget to uncomment [[cmdhook]] and url at a minimum !!!!
#[[cmdhook]]
# command = '/my/cool/app' # Path to command or script.
# shell = false # Runs the command inside /bin/sh ('nix) or cmd.exe (Windows).
# name = "" # Provide an optional name for logging.
# silent = false # Hides command output from logs.
# events = [0] # list of event ids to include, 0 == all.
## Optional Command Hook Configuration
# exclude = [] # list of apps to exclude, ie. ["radarr", "lidarr"]
# timeout = "10s" # You can adjust how long to wait for a server response.

View File

@ -1 +0,0 @@
hsts-file = /home/jawz/.cache/wget-hsts

21
environments/cinnamon.nix Normal file
View File

@ -0,0 +1,21 @@
{ pkgs, ... }:
{
services = {
libinput.enable = true;
xserver = {
enable = true;
displayManager.lightdm.enable = true;
desktopManager.cinnamon.enable = true;
};
};
qt = {
enable = true;
style = "adwaita";
};
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
adw-gtk3 # theme legacy applications
papirus-icon-theme # icon theme
;
};
}

46
environments/gnome.nix Normal file
View File

@ -0,0 +1,46 @@
{
pkgs,
lib,
...
}:
{
qt.enable = true;
services = {
gvfs.enable = true;
libinput.enable = true;
xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager = {
gnome.enable = true;
xterm.enable = lib.mkForce false;
};
};
};
environment.gnome.excludePackages = builtins.attrValues {
inherit (pkgs)
baobab
cheese
epiphany
gnome-characters
gnome-connections
gnome-font-viewer
gnome-photos
# gnome-text-editor
gnome-tour
yelp
gnome-music
totem
;
};
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs.gnomeExtensions)
tactile # window manager
freon # hardware temperature monitor
gamemode-shell-extension # I guess I'm a gamer now?
burn-my-windows # special effects for when closing windows
pano # clipboard manager
pop-shell
;
};
}

137
environments/hyprland.nix Normal file
View File

@ -0,0 +1,137 @@
{
pkgs,
config,
...
}:
let
mod = "SUPER";
waybarConfig = import ./waybar-config.nix { inherit pkgs config; };
waybarStyle = import ./waybar-style.nix { inherit config; };
in
{
programs.hyprland.enable = true;
services.greetd = {
enable = true;
settings.default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
user = "greeter";
};
};
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
# Wayland utilities
wl-clipboard-rs
wf-recorder
grimblast # screenshots
mako # notification daemon
libnotify # dependency of mako
swaylock-effects # screen locker
yazi # file manager
imv # images
playerctl # media player control
;
};
home-manager.users.jawz = {
programs = {
wofi = {
enable = true;
settings = {
allow_images = true;
allow_markup = true;
insensitive = true;
width = "30%";
};
};
waybar = waybarConfig.programs.waybar // {
style = waybarStyle;
};
};
wayland.windowManager.hyprland = {
enable = true;
settings = {
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 3;
layout = "dwindle";
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
force_default_wallpaper = 0;
};
dwindle = {
pseudotile = true;
preserve_split = true;
force_split = 2;
};
bind = [
"${mod}, return, exec, ghostty"
"${mod}, Q, killactive,"
"${mod} SHIFT, F, togglefloating,"
"${mod}, F, fullscreen,"
"${mod}, T, pin,"
"${mod}, G, togglegroup,"
"${mod}, bracketleft, changegroupactive, b"
"${mod}, bracketright, changegroupactive, f"
"${mod}, S, exec, wofi --show drun icons"
"${mod}, P, pin, active"
"${mod}, left, movefocus, l"
"${mod}, right, movefocus, r"
"${mod}, up, movefocus, u"
"${mod}, down, movefocus, d"
"${mod}, h, movefocus, l"
"${mod}, l, movefocus, r"
"${mod}, k, movefocus, u"
"${mod}, j, movefocus, d"
"${mod} SHIFT, left, movewindow, l"
"${mod} SHIFT, right, movewindow, r"
"${mod} SHIFT, up, movewindow, u"
"${mod} SHIFT, down, movewindow, d"
"${mod} SHIFT, h, movewindow, l"
"${mod} SHIFT, l, movewindow, r"
"${mod} SHIFT, k, movewindow, u"
"${mod} SHIFT, j, movewindow, d"
"${mod}, 1, workspace, 1"
"${mod}, 2, workspace, 2"
"${mod}, 3, workspace, 3"
"${mod}, 4, workspace, 4"
"${mod}, 5, workspace, 5"
"${mod}, 6, workspace, 6"
"${mod}, 7, workspace, 7"
"${mod}, 8, workspace, 8"
"${mod}, 9, workspace, 9"
"${mod}, 0, workspace, 10"
"${mod} SHIFT, 1, movetoworkspace, 1"
"${mod} SHIFT, 2, movetoworkspace, 2"
"${mod} SHIFT, 3, movetoworkspace, 3"
"${mod} SHIFT, 4, movetoworkspace, 4"
"${mod} SHIFT, 5, movetoworkspace, 5"
"${mod} SHIFT, 6, movetoworkspace, 6"
"${mod} SHIFT, 7, movetoworkspace, 7"
"${mod} SHIFT, 8, movetoworkspace, 8"
"${mod} SHIFT, 9, movetoworkspace, 9"
"${mod} SHIFT, 0, movetoworkspace, 10"
"${mod}, F3, exec, grimblast save area ~/Pictures/screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png"
"${mod} SHIFT, F3, exec, grimblast save screen ~/Pictures/screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png"
];
binde = [
"${mod} SHIFT, h, moveactive, -20 0"
"${mod} SHIFT, l, moveactive, 20 0"
"${mod} SHIFT, k, moveactive, 0 -20"
"${mod} SHIFT, j, moveactive, 0 20"
"${mod} CTRL, l, resizeactive, 30 0"
"${mod} CTRL, h, resizeactive, -30 0"
"${mod} CTRL, k, resizeactive, 0 -10"
"${mod} CTRL, j, resizeactive, 0 10"
",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+"
",XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-"
];
bindm = [
"${mod}, mouse:272, movewindow"
"${mod}, mouse:273, resizewindow"
];
};
};
};
}

View File

@ -0,0 +1,113 @@
_: {
programs.waybar = {
enable = true;
systemd.enable = true;
settings.main-bar = {
layer = "top";
height = 18;
tray.spacing = 5;
clock = {
format = "{:%a %b %d %I:%M %p}";
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
};
modules-left = [
"hyprland/workspaces"
"custom/separator"
"temperature#cpu"
"custom/gpu-temp"
];
modules-center = [
"clock"
];
modules-right = [
"tray"
"mpris"
"wireplumber"
"wireplumber#microphone"
];
"hyprland/workspaces" = {
format = "{icon}";
active-only = true;
on-scroll-up = "hyprctl dispatch workspace e-1";
on-scroll-down = "hyprctl dispatch workspace e+1";
persistent-workspaces."*" = 10; # Show 5 workspaces on all monitors
};
"custom/separator" = {
format = "|";
tooltip = false;
};
cava = {
bars = 14;
method = "pulse";
framerate = 20;
bar_delimiter = 0;
stereo = false;
format-icons.default = [
""
""
""
""
""
""
""
""
];
};
"temperature#cpu" = {
interval = 2;
format = " {temperatureC}°C";
critical-threshold = 80;
hwmon-path = "/sys/class/hwmon/hwmon1/temp1_input";
tooltip-format = "CPU: {temperatureC}°C";
};
"custom/gpu-temp" = {
exec = "nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits";
format = "󰢮 {}°C";
interval = 2;
tooltip-format = "GPU: {}°C";
};
mpris = {
interval = 2;
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} {dynamic}";
dynamic-len = 40;
on-click = "playerctl play-pause";
on-scroll-up = "playerctl next";
on-scroll-down = "playerctl previous";
dynamic-order = [
"title"
"artist"
];
player-icons = {
default = "🎵";
firefox = "🦊";
librewolf = "🦊";
};
status-icons = {
paused = "";
playing = "";
};
};
wireplumber = {
format = "{icon} {volume}%";
format-muted = "󰝟 muted";
scroll-step = 5;
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
format-icons.default = [
"󰕿"
"󰖀"
"󰕾"
];
};
"wireplumber#microphone" = {
format = "{format_source}";
format-source = " {volume}%";
format-source-muted = "";
on-click = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
on-scroll-up = "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%+";
on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%-";
tooltip-format = "{source_desc}";
};
};
};
}

View File

@ -0,0 +1,41 @@
{
config,
...
}:
let
inherit (config.lib.stylix) colors;
in
''
* {
border: none;
font-family: "${config.stylix.fonts.monospace.name}";
font-size: ${toString config.stylix.fonts.sizes.desktop}pt;
color: #${colors.base04};
}
window#waybar {
background: #${colors.base00};
min-height: 18px;
}
.module {
background: #${colors.base00};
margin: 0px 3px 0px 3px;
padding: 4px 6px 4px 6px;
}
#workspaces button {
padding: 2px 8px;
margin: 2px;
border-radius: 8px;
background: transparent;
color: #${colors.base03};
border: none;
min-width: 20px;
}
#workspaces button.active {
background: #${colors.base02};
color: #${colors.base05};
}
#workspaces button:hover {
background: #${colors.base01};
color: #${colors.base04};
}
''

1278
flake.lock generated

File diff suppressed because it is too large Load Diff

120
flake.nix
View File

@ -1,74 +1,72 @@
{
description = "JawZ NixOS flake setup";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-24.05";
unstable.url = "github:nixos/nixpkgs?ref=nixos-unstable";
master.url = "github:nixos/nixpkgs?ref=master";
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05";
nixpkgs-small.url = "github:nixos/nixpkgs?ref=nixos-25.05-small";
nixpkgs-unstable.url = "github:nixos/nixpkgs?ref=nixos-unstable";
ucodenix.url = "github:e-tho/ucodenix/ba7f0a366460e0fbea9622fc770cb982be0e4720";
doom-emacs = {
url = "github:marienz/nix-doom-emacs-unstraightened/ad01165af00765af07989b6ad14115960ac675f8";
inputs.nixpkgs.follows = "";
};
jawz-scripts = {
url = "git+https://git.lebubu.org/jawz/scripts.git";
inputs.nixpkgs.follows = "nixpkgs";
};
nur = {
url = "github:nix-community/nur";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming = {
url = "github:fufexan/nix-gaming";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager?ref=release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming.url = "github:fufexan/nix-gaming";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nixtendo-switch = {
url = "github:nyawox/nixtendo-switch";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
wallpapers = {
url = "git+https://git.lebubu.org/jawz/wallpapers.git";
flake = false;
};
fonts = {
url = "git+https://git.lebubu.org/jawz/fonts.git";
flake = false;
};
qbit_manage = {
url = "github:StuffAnThings/qbit_manage";
flake = false;
};
};
outputs =
{ self, nixpkgs, unstable, master, home-manager, sops-nix, ... }@inputs:
let
inherit (self) outputs;
lib = nixpkgs.lib // home-manager.lib;
system = "x86_64-linux";
makePkgs = repo:
import repo {
inherit system;
config.allowUnfree = true;
};
pkgs = makePkgs nixpkgs;
pkgsU = makePkgs unstable;
pkgsM = makePkgs master;
in {
inherit lib pkgs;
formatter = pkgs.alejandra;
nixosConfigurations = {
workstation = lib.nixosSystem {
inherit system;
specialArgs = { inherit inputs outputs; };
modules = [
./hosts/workstation/configuration.nix
sops-nix.nixosModules.sops
({ pkgs, ... }: {
nixpkgs.overlays =
[ (import ./overlay.nix { inherit pkgs pkgsU pkgsM; }) ];
})
];
};
miniserver = lib.nixosSystem {
inherit system;
specialArgs = { inherit inputs outputs; };
modules = [
./hosts/miniserver/configuration.nix
sops-nix.nixosModules.sops
({ pkgs, ... }: {
nixpkgs.overlays =
[ (import ./overlay.nix { inherit pkgs pkgsU pkgsM; }) ];
})
];
};
server = lib.nixosSystem {
inherit system;
specialArgs = { inherit inputs outputs; };
modules = [
./hosts/server/configuration.nix
sops-nix.nixosModules.sops
({ pkgs, ... }: {
nixpkgs.overlays =
[ (import ./overlay.nix { inherit pkgs pkgsU pkgsM; }) ];
})
];
};
};
inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
imports = [
./parts/core.nix
./parts/hosts.nix
./parts/packages.nix
./parts/devshells.nix
];
};
}

View File

@ -1,58 +0,0 @@
{ pkgs, ... }:
{
services = {
gvfs.enable = true;
libinput.enable = true;
xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome = {
enable = true;
extraGSettingsOverridePackages = [ pkgs.gnome.mutter ];
extraGSettingsOverrides = ''
[org.gnome.mutter]
experimental-features=['variable-refresh-rate', 'scale-monitor-framebuffer']
'';
};
};
};
environment.gnome.excludePackages = (with pkgs; [
gnome-photos
gnome-tour
gnome-text-editor
gnome-connections
# gnome-shell-extensions
baobab
]) ++ (with pkgs.gnome; [
# totem
gnome-music
epiphany
gnome-characters
yelp
gnome-font-viewer
cheese
]);
qt = {
enable = true;
style = "adwaita-dark";
};
users.users.jawz.packages = (with pkgs; [
# ffmpegthumbnailer # generate thumbnails
adw-gtk3 # theme legacy applications
gnome.gnome-tweaks # tweaks for the gnome desktop environment
papirus-icon-theme # icon theme
libgda # for pano shell extension
# gradience # theme customizer, allows you to modify adw-gtk3 themes
]) ++ (with pkgs.gnomeExtensions; [
appindicator # applets for open applications
reading-strip # like putting a finger on every line I read
tactile # window manager
pano # clipboard manager
freon # hardware temperature monitor
gamemode-indicator-in-system-settings # I guess I'm a gamer now?
blur-my-shell # make the overview more visually appealing
burn-my-windows
# forge # window manager
]);
}

View File

@ -1,57 +0,0 @@
{ config, ... }: {
home.stateVersion = "24.05";
programs.bash = {
enable = true;
historyFile = "\${XDG_STATE_HOME}/bash/history";
historyControl = [ "erasedups" "ignorespace" "ignoredups" ];
shellAliases = {
cp = "cp -i";
mv = "mv -i";
mkdir = "mkdir -p";
".." = "cd ..";
"..." = "cd ../..";
".3" = "cd ../../..";
".4" = "cd ../../../..";
".5" = "cd ../../../../..";
c = "cat";
sc = "systemctl --user";
jc = "journalctl --user -xefu";
open-gallery = ''
cd /mnt/miniserver/pool/scrapping/JawZ/gallery-dl &&
xdg-open "$(fd . ./ Husbands -tdirectory -d 1 | fzf -i)"'';
};
enableVteIntegration = true;
initExtra = ''
$HOME/.local/bin/pokemon-colorscripts -r --no-title
export command_timeout=60
'';
};
xdg = {
enable = true;
userDirs = {
enable = true;
createDirectories = false;
desktop = "${config.home.homeDirectory}";
documents = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
music = "${config.home.homeDirectory}/Music";
pictures = "${config.home.homeDirectory}/Pictures";
templates = "${config.xdg.dataHome}/Templates";
videos = "${config.home.homeDirectory}/Videos";
};
configFile."wgetrc".source = ./dotfiles/wget/wgetrc;
};
programs = {
helix.enable = true;
direnv = {
enable = true;
enableBashIntegration = true;
nix-direnv.enable = true;
};
git = {
enable = true;
userName = "Danilo Reyes";
userEmail = "CaptainJawZ@protonmail.com";
};
};
}

View File

@ -0,0 +1,49 @@
{
lib,
...
}:
{
imports = [
../../config/base.nix
../../config/stylix.nix
../../environments/hyprland.nix
];
virtualisation.vmVariant.virtualisation = {
memorySize = 4096;
cores = 4;
graphics = true;
resolution = {
x = 1920;
y = 1080;
};
};
my = {
secureHost = false;
stylix.enable = true;
emacs.enable = true;
apps.fonts.enable = true;
shell.tools.enable = true;
services.network.enable = true;
dev = {
nix.enable = true;
python.enable = true;
sh.enable = true;
rust.enable = true;
ruby.enable = true;
javascript.enable = true;
go.enable = true;
haskell.enable = true;
cc.enable = true;
julia.enable = true;
zig.enable = true;
docker.enable = true;
};
interfaces = lib.mkMerge [
{
emacs = "eth0";
}
];
};
networking.hostName = "emacs";
environment.systemPackages = [ ];
}

View File

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
../../config/base.nix
../../config/stylix.nix
];
}

View File

@ -1,65 +1,32 @@
{ ... }: {
imports = [ ./hardware-configuration.nix ../../base.nix ];
my = {
emacs.enable = true;
apps.dictionaries.enable = true;
shell.tools.enable = true;
services.network.enable = true;
dev = {
nix.enable = true;
python.enable = true;
sh.enable = true;
};
units = {
download.enable = true;
stream-dl.enable = true;
};
scripts = {
run.enable = true;
split-dir.enable = true;
download.enable = true;
ffmpreg.enable = true;
ffmpeg4discord.enable = true;
manage-library.enable = true;
pika-list.enable = true;
find-dup-episodes.enable = true;
update-dns.enable = true;
};
servers = {
jellyfin = {
enable = true;
enableCron = false;
};
nextcloud = {
enable = true;
enableCron = true;
};
adguardhome.enable = false;
audiobookshelf.enable = false;
bazarr.enable = false;
collabora.enable = true;
flame.enable = true;
flameSecret.enable = true;
go-vod.enable = false;
kavita.enable = false;
lidarr.enable = false;
maloja.enable = true;
mealie.enable = true;
metube.enable = false;
microbin.enable = true;
multi-scrobbler.enable = true;
paperless.enable = true;
postgres.enable = true;
prowlarr.enable = false;
qbittorrent.enable = true;
radarr.enable = false;
ryot.enable = true;
shiori.enable = true;
sonarr.enable = false;
vaultwarden.enable = true;
firefly-iii.enable = true;
};
{ config, inputs, ... }:
{
imports = [
./hardware-configuration.nix
../../config/base.nix
../../config/stylix.nix
];
my = import ./toggles.nix { inherit inputs; } // {
nix.cores = 3;
nix.maxJobs = 8;
users.nixremote.enable = true;
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
"nixworkstation"
"nixserver"
];
};
nix.buildMachines =
let
buildMachine = hostName: maxJobs: speedFactor: {
inherit hostName maxJobs speedFactor;
system = "x86_64-linux";
sshUser = "nixremote";
supportedFeatures = config.my.nix.features;
};
in
[
(buildMachine "workstation" 8 40)
(buildMachine "server" 6 17)
];
networking = {
hostName = "miniserver";
firewall = {
@ -67,53 +34,19 @@
allowedUDPPorts = [ 2049 ];
};
};
nix = let
featuresList = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
"gccarch-znver3"
"gccarch-skylake"
"gccarch-alderlake"
];
in {
settings.cores = 3;
buildMachines = [{
hostName = "workstation";
system = "x86_64-linux";
sshUser = "nixremote";
maxJobs = 14;
speedFactor = 1;
supportedFeatures = featuresList;
}];
};
nixpkgs.config.permittedInsecurePackages = [ "openssl-1.1.1w" ];
users = {
groups.nixremote.gid = 555;
users.nixremote = {
isNormalUser = true;
createHome = true;
group = "nixremote";
home = "/var/nixremote/";
openssh.authorizedKeys.keys =
[ (builtins.readFile ../../secrets/ssh/ed25519_nixworkstation.pub) ];
};
};
services = {
btrfs.autoScrub = {
enable = true;
fileSystems = [ "/" ];
};
# minidlna = {
# enable = true;
# openFirewall = true;
# settings = {
# inotify = "yes";
# media_dir = [
# "/mnt/pool/glue"
# ];
# };
# };
minidlna = {
enable = false;
openFirewall = true;
settings = {
inotify = "yes";
media_dir = [ "/srv/pool/" ];
};
};
};
}

View File

@ -1,23 +1,23 @@
{ lib, modulesPath, ... }: {
{
lib,
modulesPath,
pkgs,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
nixpkgs.hostPlatform = "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
hardware = {
cpu.intel.updateMicrocode = lib.mkDefault true;
opengl = {
graphics = {
enable = true;
driSupport = true;
driSupport32Bit = true;
enable32Bit = true;
extraPackages = [ pkgs.vpl-gpu-rt ];
};
};
boot = {
kernelModules = [ "kvm-intel" ];
kernel.sysctl = {
"vm.swappiness" = 80;
"net.ipv6.conf.all.disable_ipv6" = 1;
"net.ipv6.conf.lo.disable_ipv6" = 1;
"net.ipv6.conf.default.disable_ipv6" = 1;
};
kernel.sysctl."vm.swappiness" = 80;
loader = {
efi = {
canTouchEfiVariables = true;
@ -30,30 +30,14 @@
enableCryptodisk = true;
};
};
initrd.luks.devices = {
nvme = {
device = "/dev/disk/by-uuid/30fd7d86-9bed-42a6-8a4e-a2ddb0031233";
preLVM = true;
};
# disk1 = {
# device = "/dev/disk/by-uuid/a9b0f346-7e38-40a6-baf6-3ad80cafc842";
# preLVM = true;
# };
# disk2 = {
# device = "/dev/disk/by-uuid/0ed12b83-4c56-4ba8-b4ea-75a9e927d771";
# preLVM = true;
# };
# disk3 = {
# device = "/dev/disk/by-uuid/8cd728f6-0d5b-4cea-8f7d-01aad11192c1";
# preLVM = true;
# };
# disk4 = {
# device = "/dev/disk/by-uuid/7fcac808-491f-4846-a4a9-a34cc77cb43d";
# preLVM = true;
# };
};
extraModulePackages = [ ];
initrd = {
secrets."/keyfile" = /etc/keyfile;
luks.devices.nvme = {
device = "/dev/disk/by-uuid/30fd7d86-9bed-42a6-8a4e-a2ddb0031233";
keyFile = "keyfile";
preLVM = true;
};
availableKernelModules = [
"xhci_pci"
"ahci"
@ -67,92 +51,89 @@
kernelModules = [ "kvm-intel" ];
};
};
fileSystems = {
"/" = {
device = "/dev/mapper/nvme";
fsType = "btrfs";
options = [
"subvol=nix"
"ssd"
"compress=zstd:3"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
"noatime"
];
};
"/home" = {
device = "/dev/mapper/nvme";
fsType = "btrfs";
options = [
"subvol=home"
"ssd"
"compress=zstd:3"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
];
};
# "/mnt/pool" = {
# device = "/dev/disk/by-uuid/1e7cf787-e34d-4e3e-ac3c-0c07309dbd34";
# fsType = "btrfs";
# options = [
# "subvol=@data"
# "compress=zstd:3"
# "space_cache=v2"
# "commit=120"
# "datacow"
# ];
# };
"/boot" = {
device = "/dev/disk/by-uuid/bf0aeb95-94cc-4377-b6e4-1dbb4958b334";
fsType = "ext4";
};
"/boot/efi" = {
device = "/dev/disk/by-uuid/0C7B-4D4C";
fsType = "vfat";
};
"/var/lib/nextcloud/data" = {
device = "/mnt/pool/nextcloud";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
};
# "/mnt/jellyfin/media" = {
# device = "/mnt/pool/multimedia/media";
# options = [ "bind" "ro" ];
# depends = [ "/mnt/pool" ];
# };
# NFS
"/export/pool" = {
device = "/mnt/pool";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
};
"/export/jawz" = {
device = "/home/jawz";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
fileSystems =
let
nfsMount = server: nfsDisk: {
device = "${server}:/${nfsDisk}";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"x-systemd.idle-timeout=600"
];
};
in
{
"/" = {
device = "/dev/mapper/nvme";
fsType = "btrfs";
options = [
"subvol=nix"
"ssd"
"compress=zstd:3"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
"noatime"
];
};
"/home" = {
device = "/dev/mapper/nvme";
fsType = "btrfs";
options = [
"subvol=home"
"ssd"
"compress=zstd:3"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
];
};
"/boot" = {
device = "/dev/disk/by-uuid/bf0aeb95-94cc-4377-b6e4-1dbb4958b334";
fsType = "ext4";
};
"/boot/efi" = {
device = "/dev/disk/by-uuid/0C7B-4D4C";
fsType = "vfat";
};
"/var/lib/nextcloud/data" = {
device = "/srv/pool/nextcloud";
options = [ "bind" ];
depends = [ "/srv/pool" ];
};
"/export/pool" = {
device = "/srv/pool";
options = [ "bind" ];
depends = [ "/srv/pool" ];
};
"/export/jawz" = {
device = "/home/jawz";
options = [ "bind" ];
depends = [ "/srv/pool" ];
};
"/srv/server/pool" = nfsMount "server" "pool" // { };
"/srv/server/jawz" = nfsMount "server" "jawz" // { };
};
services.nfs.server = {
enable = true;
exports = ''
/export workstation(rw,fsid=0,no_subtree_check)
/export/jawz workstation(rw,nohide,insecure,no_subtree_check)
/export/pool workstation(rw,nohide,insecure,no_subtree_check)
'';
};
services.nfs = {
server = {
enable = true;
exports = ''
/export workstation(rw,fsid=0,no_subtree_check)
/export/jawz workstation(rw,nohide,insecure,no_subtree_check)
/export/pool workstation(rw,nohide,insecure,no_subtree_check)
'';
};
};
swapDevices = [{
device = "/dev/nvme0n1p3";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}];
swapDevices = [
{
device = "/dev/nvme0n1p3";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}
];
}

View File

@ -0,0 +1,40 @@
{ inputs }:
let
inherit (inputs.self.lib) mkEnabled mkEnabledWithProxy enableList;
in
{
emacs.enable = true;
enableProxy = true;
websites.portfolio.enableProxy = true;
apps = enableList mkEnabled [
"dictionaries"
];
services = enableList mkEnabled [
"network"
];
shell = enableList mkEnabled [
"tools"
"multimedia"
];
dev = enableList mkEnabled [
"nix"
"python"
"sh"
];
units = enableList mkEnabled [
"download"
"stream-dl"
];
scripts = enableList mkEnabled [
"split-dir"
"pika-list"
"update-dns"
];
servers =
enableList mkEnabled [
"qbittorrent"
]
// enableList mkEnabledWithProxy [
"audiobookshelf"
];
}

View File

@ -1,63 +1,75 @@
{ ... }: {
imports = [ ./hardware-configuration.nix ../../base.nix ];
my = {
emacs.enable = true;
apps.dictionaries.enable = true;
shell.tools.enable = true;
services.network.enable = true;
dev = {
nix.enable = true;
python.enable = true;
sh.enable = true;
};
scripts = {
run.enable = true;
split-dir.enable = true;
ffmpreg.enable = true;
ffmpeg4discord.enable = true;
};
{
pkgs,
config,
lib,
inputs,
...
}:
{
imports = [
./hardware-configuration.nix
../../config/base.nix
../../config/stylix.nix
];
my = import ./toggles.nix { inherit config inputs; } // {
nix.cores = 6;
users.nixremote.enable = true;
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
"nixworkstation"
"nixminiserver"
];
network.firewall.enabledServicePorts = true;
network.firewall.additionalPorts = [
2049 # idk
8384 # syncthing gui
22000 # syncthing relay
3452 # sonarqube
8448 # synapse ssl
];
};
nix.buildMachines = [
{
hostName = "workstation";
system = "x86_64-linux";
sshUser = "nixremote";
maxJobs = 8;
speedFactor = 2;
supportedFeatures = config.my.nix.features;
}
];
sops.secrets."vps/home/private" = lib.mkIf config.my.secureHost {
sopsFile = ../../secrets/wireguard.yaml;
};
networking = {
hostName = "server";
firewall = {
allowedTCPPorts = [ 2049 ];
allowedUDPPorts = [ 2049 ];
allowedUDPPorts = config.networking.firewall.allowedTCPPorts;
interfaces.wg0.allowedTCPPorts = [ 8081 ];
};
wireguard.interfaces.wg0 = lib.mkIf config.my.secureHost {
ips = [ "${config.my.ips.wg-server}/32" ];
privateKeyFile = config.sops.secrets."vps/home/private".path;
peers = [
{
publicKey = "dFbiSekBwnZomarcS31o5+w6imHjMPNCipkfc2fZ3GY=";
endpoint = "${config.my.ips.vps}:51820";
allowedIPs = [
"${config.my.ips.wg-vps}/32"
"${config.my.ips.wg-friends}/24" # all friends
];
persistentKeepalive = 25;
}
];
};
};
nix = let
featuresList = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
"gccarch-znver3"
"gccarch-skylake"
"gccarch-alderlake"
];
in {
settings.cores = 6;
buildMachines = [{
hostName = "workstation";
system = "x86_64-linux";
sshUser = "nixremote";
maxJobs = 14;
speedFactor = 1;
supportedFeatures = featuresList;
}];
};
users = {
groups.nixremote.gid = 555;
users.nixremote = {
isNormalUser = true;
createHome = true;
group = "nixremote";
home = "/var/nixremote/";
openssh.authorizedKeys.keys =
[ (builtins.readFile ../../secrets/ssh/ed25519_nixworkstation.pub) ];
};
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) podman-compose attic-client;
};
services.btrfs.autoScrub = {
enable = true;
fileSystems = [ "/" ];
fileSystems = [
"/"
"/srv/pool"
];
};
}

View File

@ -1,17 +1,36 @@
{ lib, modulesPath, ... }: {
{ lib, modulesPath, ... }:
let
getUUID = uuid: "/dev/disk/by-uuid/${uuid}";
in
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
hardware = {
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
};
cpu.intel.updateMicrocode = lib.mkDefault true;
opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
};
hardware.cpu.intel.updateMicrocode = lib.mkDefault true;
security.pam.loginLimits = [
{
domain = "*";
type = "hard";
item = "nofile";
value = "131072";
}
{
domain = "*";
type = "soft";
item = "nofile";
value = "131072";
}
{
domain = "*";
type = "hard";
item = "nproc";
value = "8192";
}
{
domain = "*";
type = "soft";
item = "nproc";
value = "8192";
}
];
boot = {
loader = {
efi = {
@ -25,39 +44,41 @@
enableCryptodisk = true;
};
};
initrd.luks.devices = {
nvme = {
device = "/dev/disk/by-uuid/af72f45c-cf7c-4e7d-8eab-2a95ab754921";
preLVM = true;
};
# disk1 = {
# device = "/dev/disk/by-uuid/a9b0f346-7e38-40a6-baf6-3ad80cafc842";
# preLVM = true;
# };
# disk2 = {
# device = "/dev/disk/by-uuid/0ed12b83-4c56-4ba8-b4ea-75a9e927d771";
# preLVM = true;
# };
# disk3 = {
# device = "/dev/disk/by-uuid/8cd728f6-0d5b-4cea-8f7d-01aad11192c1";
# preLVM = true;
# };
# disk4 = {
# device = "/dev/disk/by-uuid/7fcac808-491f-4846-a4a9-a34cc77cb43d";
# preLVM = true;
# };
initrd = {
secrets."/keyfile" = /etc/keyfile;
luks.devices =
let
decryptLuks = uuid: {
device = getUUID uuid;
keyFile = "/keyfile";
preLVM = true;
};
in
{
nvme = decryptLuks "af72f45c-cf7c-4e7d-8eab-2a95ab754921";
disk1 = decryptLuks "a9b0f346-7e38-40a6-baf6-3ad80cafc842";
disk2 = decryptLuks "0ed12b83-4c56-4ba8-b4ea-75a9e927d771";
disk3 = decryptLuks "8cd728f6-0d5b-4cea-8f7d-01aad11192c1";
disk4 = decryptLuks "7fcac808-491f-4846-a4a9-a34cc77cb43d";
disk5 = decryptLuks "1d05cf50-0f5f-427a-b41f-fab0d11e85e9";
};
};
kernelModules = [ "kvm-intel" ];
kernel.sysctl = {
"vm.swappiness" = 80;
"net.ipv6.conf.all.disable_ipv6" = 1;
"net.ipv6.conf.lo.disable_ipv6" = 1;
"net.ipv6.conf.default.disable_ipv6" = 1;
"vm.max_map_count" = 524288;
"fs.file-max" = 131072;
};
extraModulePackages = [ ];
initrd = {
availableKernelModules =
[ "xhci_pci" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod" ];
availableKernelModules = [
"xhci_pci"
"ahci"
"usbhid"
"nvme"
"usb_storage"
"sd_mod"
];
kernelModules = [ ];
};
};
@ -89,71 +110,78 @@
"datacow"
];
};
# "/mnt/pool" = {
# device = "/dev/disk/by-uuid/1e7cf787-e34d-4e3e-ac3c-0c07309dbd34";
# fsType = "btrfs";
# options = [
# "subvol=@data"
# "compress=zstd:3"
# "space_cache=v2"
# "commit=120"
# "datacow"
# ];
# };
"/boot" = {
device = "/dev/disk/by-uuid/c574cb53-dc40-46db-beff-0fe8a4787156";
fsType = "ext4";
options = [ "nofail" ];
};
"/boot/efi" = {
device = "/dev/disk/by-uuid/CBE7-5DEB";
fsType = "vfat";
};
# NEXTCCLOUD
# "/var/lib/nextcloud/data" = {
# device = "/mnt/pool/nextcloud";
# options = [ "bind" ];
# depends = [ "/mnt/pool" ];
# };
# "/mnt/jellyfin/media" = {
# device = "/mnt/pool/multimedia/media";
# options = [ "bind" "ro" ];
# depends = [ "/mnt/pool" ];
# };
# NFS
"/export/pool" = {
device = "/mnt/pool";
"/srv/pool" = {
device = "/dev/disk/by-uuid/1e7cf787-e34d-4e3e-ac3c-0c07309dbd34";
fsType = "btrfs";
options = [
"subvol=@data"
"compress=zstd:3"
"space_cache=v2"
"commit=120"
"datacow"
];
depends = [ "/boot/efi" ];
};
"/var/lib/nextcloud/data" = {
device = "/srv/pool/nextcloud";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
depends = [ "/srv/pool" ];
};
"/srv/jellyfin/media" = {
device = "/srv/pool/multimedia/media";
options = [
"bind"
"ro"
];
depends = [ "/srv/pool" ];
};
"/export/pool" = {
device = "/srv/pool";
options = [ "bind" ];
depends = [ "/srv/pool" ];
};
"/export/jawz" = {
device = "/home/jawz";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
depends = [ "/srv/pool" ];
};
"/export/btrfs" = {
device = "/mnt/btrfs";
"/export/backups" = {
device = "/srv/backups";
options = [ "bind" ];
depends = [ "/mnt/pool" ];
depends = [ "/srv/pool" ];
};
};
services.nfs = {
server = {
enable = true;
exports = ''
/export workstation(rw,fsid=0,no_subtree_check)
/export/jawz workstation(rw,nohide,insecure,no_subtree_check)
/export/pool workstation(rw,nohide,insecure,no_subtree_check)
/export/btrfs workstation(rw,nohide,insecure,no_subtree_check)
'';
};
services.nfs.server = {
enable = true;
exports = ''
/export workstation(rw,fsid=0,no_subtree_check)
miniserver(rw,fsid=0,no_subtree_check)
/export/jawz workstation(rw,nohide,insecure,no_subtree_check)
miniserver(rw,nohide,insecure,no_subtree_check)
/export/pool workstation(rw,nohide,insecure,no_subtree_check)
miniserver(rw,nohide,insecure,no_subtree_check)
/export/backups workstation(rw,nohide,insecure,no_subtree_check)
miniserver(rw,nohide,insecure,no_subtree_check)
'';
};
swapDevices = [{
device = "/dev/disk/by-partuuid/cb0ad486-ebf8-4bfc-ad7c-96bdc68576ca";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}];
swapDevices = [
{
device = "/dev/disk/by-partuuid/cb0ad486-ebf8-4bfc-ad7c-96bdc68576ca";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}
];
}

84
hosts/server/toggles.nix Normal file
View File

@ -0,0 +1,84 @@
{ config, inputs }:
let
inherit (inputs.self.lib) mkEnabled enableList;
mkEnabledIp = inputs.self.lib.mkEnabledIp config.my.ips.wg-server;
in
{
mainServer = "server";
emacs.enable = true;
stylix.enable = true;
enableProxy = true;
enableContainers = true;
apps.dictionaries.enable = true;
shell = enableList mkEnabled [
"tools"
"multimedia"
];
services = enableList mkEnabled [
"network"
"nvidia"
"syncthing"
];
dev = enableList mkEnabled [
"nix"
"python"
"sh"
];
units = enableList mkEnabled [
"downloadManga"
"download"
"stream-dl"
];
scripts = enableList mkEnabled [
"run"
"download"
"split-dir"
"ffmpreg"
"ffmpeg4discord"
"manage-library"
"library-report"
"stream-dl"
"pika-list"
"find-dup-episodes"
"tuh-activity-logger"
];
servers = {
nextcloud = {
enable = true;
enableCron = true;
enableProxy = true;
};
}
// enableList mkEnabled [
"qbittorrent"
"sabnzbd"
"unpackerr"
"postgres"
"paperless"
"stash"
"bazarr"
"collabora"
"homepage"
"kavita"
"lidarr"
"maloja"
"microbin"
"multi-scrobbler"
"plex"
"prowlarr"
"radarr"
"ryot"
"sonarr"
"synapse"
"jellyfin"
"gitea"
"mealie"
"metube"
"atticd"
]
// enableList mkEnabledIp [
"audiobookshelf"
"vaultwarden"
"readeck"
];
}

View File

@ -1,99 +1,97 @@
{ pkgs, config, lib, ... }: {
{
pkgs,
config,
inputs,
...
}:
let
shellType = config.my.shell.type;
krita-thumbnailer = pkgs.writeTextFile {
name = "krita-thumbnailer";
destination = "/share/thumbnailers/kra.thumbnailer";
text = ''
[Thumbnailer Entry]
Exec=sh -c "${pkgs.unzip}/bin/unzip -p %i preview.png > %o"
MimeType=application/x-krita;
'';
};
in
{
imports = [
./hardware-configuration.nix
../../base.nix
../../gnome.nix
../../pkgs/obs-studio.nix
../../config/base.nix
../../config/stylix.nix
../../environments/gnome.nix
];
my = {
emacs.enable = true;
apps = {
art.enable = true;
dictionaries.enable = true;
fonts.enable = true;
gaming.enable = true;
internet.enable = true;
multimedia.enable = true;
office.enable = true;
misc.enable = true;
};
dev = {
haskell.enable = true;
nix.enable = true;
python.enable = true;
gameDev.enable = true;
sh.enable = true;
javascript.enable = true;
};
shell = {
exercism.enable = true;
multimedia.enable = true;
tools.enable = true;
};
services = {
network.enable = true;
nvidia.enable = true;
printing.enable = true;
sound.enable = true;
};
scripts = {
tasks.enable = true;
run.enable = true;
split-dir.enable = true;
download.enable = true;
ffmpreg.enable = true;
ffmpeg4discord.enable = true;
};
my = import ./toggles.nix { inherit inputs; } // {
nix.cores = 8;
nix.maxJobs = 8;
users.nixremote.enable = true;
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
"nixserver"
"nixminiserver"
];
};
sops.secrets = {
"resilio/user" = { };
"resilio/host" = { };
"resilio/password" = { };
home-manager.users.jawz.programs = {
vscode = {
enable = true;
package = pkgs.code-cursor;
};
ghostty = {
enable = true;
package = pkgs.ghostty;
enableBashIntegration = shellType == "bash";
enableZshIntegration = shellType == "zsh";
installBatSyntax = true;
installVimSyntax = true;
settings.term = "xterm-256color";
};
};
networking = {
hostName = "workstation";
firewall = let
openPorts = [
firewall = {
allowedTCPPorts = [
6674 # ns-usbloader
8384 # syncthing
];
allowedTCPPortRanges = [
{
from = 1714;
to = 1764;
}
];
openPortRanges = [{
from = 1714; # kdeconnect
to = 1764; # kdeconnect
}];
in {
allowedTCPPorts = openPorts;
allowedUDPPorts = openPorts;
allowedTCPPortRanges = openPortRanges;
allowedUDPPortRanges = openPortRanges;
};
};
nix.settings.cores = 16;
nixpkgs.config = {
allowUnfree = true;
permittedInsecurePackages = [ ];
users.users.jawz.packages = [
(pkgs.google-cloud-sdk.withExtraComponents [
pkgs.google-cloud-sdk.components.gke-gcloud-auth-plugin
])
]
++ builtins.attrValues {
inherit (pkgs)
distrobox # install packages from other os
gocryptfs # encrypted filesystem! shhh!!!
vcsi # video thumbnails for torrents, can I replace it with ^?
keypunch # practice typing
google-cloud-sdk-gce
;
};
users = {
groups.nixremote.gid = 555;
users = {
jawz.packages = (with pkgs; [
gocryptfs # encrypted filesystem! shhh!!!
torrenttools # create torrent files from the terminal!
vcsi # video thumbnails for torrents, can I replace it with ^?
]);
nixremote = {
isNormalUser = true;
createHome = true;
group = "nixremote";
home = "/var/nixremote/";
openssh.authorizedKeys.keys = [
(builtins.readFile ../../secrets/ssh/ed25519_nixserver.pub)
(builtins.readFile ../../secrets/ssh/ed25519_nixminiserver.pub)
];
};
environment = {
pathsToLink = [ "share/thumbnailers" ];
systemPackages = builtins.attrValues {
# thumbnail for heif files & videos
inherit krita-thumbnailer;
inherit (pkgs)
libheif
ffmpegthumbnailer
bign-handheld-thumbnailer
gnome-epub-thumbnailer
podman-compose
scrcpy
;
inherit (pkgs.libheif) out;
};
};
environment.etc = {
"wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
etc."wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
bluez_monitor.properties = {
["bluez5.enable-sbc-xq"] = true,
["bluez5.enable-msbc"] = true,
@ -110,29 +108,84 @@
obs-studio = {
enable = true;
enableVirtualCamera = true;
plugins = builtins.attrValues {
inherit (pkgs.obs-studio-plugins)
droidcam-obs
obs-vkcapture
obs-vaapi
obs-tuna
input-overlay
;
};
};
};
security.pki.certificateFiles = [
../../secrets/ssh/iqQCY4iAWO-ca.pem
../../secrets/ssh/root-private-ca.pem
];
services = {
minio.enable = true;
flatpak.enable = true;
open-webui.enable = true;
scx = {
enable = true;
scheduler = "scx_lavd";
};
btrfs.autoScrub = {
enable = true;
fileSystems = [ "/" ];
};
resilio = {
protonmail-bridge = {
enable = true;
useUpnp = true;
enableWebUI = true;
httpPass =
"Uplifting-Proofs-Eggshell-Molecule-Wriggly-Janitor3-Padded-Oxidizing";
deviceName = "Oversweet3834";
httpLogin = "Oversweet3834";
httpListenPort = 9876;
httpListenAddr = "0.0.0.0";
directoryRoot = "/resilio";
path = [ pkgs.gnome-keyring ];
};
ollama = {
enable = true;
acceleration = "cuda";
models = "/srv/ai/ollama";
};
postgresql = {
enable = true;
package = pkgs.postgresql_17;
enableTCPIP = true;
authentication = pkgs.lib.mkOverride 10 ''
local all all trust
host all all ${config.my.localhost}/32 trust
host all all ::1/128 trust
'';
ensureDatabases = [ "webref" ];
ensureUsers = [
{
name = "webref";
ensureDBOwnership = true;
}
];
};
};
virtualisation.podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
programs.virt-manager.enable = true;
users.groups.libvirtd.members = [ "jawz" ];
virtualisation.libvirtd.enable = true;
systemd.services.minio-init = {
description = "Initialize MinIO buckets";
after = [ "minio.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
script = ''
# Wait for MinIO to be ready
until ${pkgs.curl}/bin/curl -sf http://localhost:9000/minio/health/live > /dev/null 2>&1; do
echo "Waiting for MinIO..."
sleep 1
done
# Configure mc alias and create bucket
${pkgs.minio-client}/bin/mc alias set local http://localhost:9000 minioadmin minioadmin || true
${pkgs.minio-client}/bin/mc mb local/webref || true
${pkgs.minio-client}/bin/mc anonymous set public local/webref || true
echo "MinIO initialized with webref bucket"
'';
};
}

View File

@ -1,29 +1,57 @@
{ config, pkgs, modulesPath, lib, ... }: {
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
nixpkgs.hostPlatform = "x86_64-linux";
hardware = {
cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
bluetooth = {
{
modulesPath,
config,
pkgs,
inputs,
lib,
...
}:
let
getMapper = mapper: "/dev/mapper/${mapper}";
getUUID = uuid: "/dev/disk/by-uuid/${uuid}";
in
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
inputs.ucodenix.nixosModules.default
];
services = {
udev.extraRules = lib.mkIf config.my.apps.gaming.enable ''
SUBSYSTEM=="usb", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="3005", TAG+="uaccess"
'';
ucodenix = {
enable = true;
settings.General = {
Enable = "Source,Sink,Media,Socket";
Experimental = true;
};
cpuModelId = "00A50F00";
};
opentabletdriver = {
enable = true;
daemon.enable = false;
};
hardware.bluetooth = {
enable = true;
settings.General = {
Enable = "Source,Sink,Media,Socket";
Experimental = true;
};
};
boot = {
kernelPackages = pkgs.linuxPackages_zen;
plymouth.enable = true;
consoleLogLevel = 0;
loader.timeout = 3;
kernelParams = [
"splash"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
"preempt=full"
"microcode.amd_sha_check=off"
];
kernelPackages = pkgs.linuxPackages;
kernel.sysctl = {
"vm.swappiness" = 80;
"net.ipv6.conf.all.disable_ipv6" = 1;
"net.ipv6.conf.lo.disable_ipv6" = 1;
"net.ipv6.conf.default.disable_ipv6" = 1;
"net.ipv4.tcp_mtu_probing" = 1;
"kernel.sched_cfsbandwidth_slice_us" = lib.mkDefault 3000;
"net.ipv4.tcp_fin_timeout" = lib.mkDefault 5;
"vm.max_map_count" = lib.mkDefault 2147483642;
};
loader = {
efi = {
@ -36,66 +64,81 @@
efiSupport = true;
useOSProber = true;
enableCryptodisk = true;
extraEntries = ''
menuentry "Fedora" {
set root=(hd1,1)
chainloader /EFI/fedora/grub.efi
}
'';
};
};
initrd.luks.devices.nvme = {
device = "/dev/disk/by-uuid/e9618e85-a631-4374-b2a4-22c376d6e41b";
preLVM = true;
initrd = {
verbose = false;
secrets."/keyfile" = /etc/keyfile;
availableKernelModules = [
"xhci_pci"
"ahci"
"usbhid"
"nvme"
"usb_storage"
"sd_mod"
];
luks.devices.nvme = {
device = getUUID "e9618e85-a631-4374-b2a4-22c376d6e41b";
keyFile = "/keyfile";
preLVM = true;
};
};
initrd.availableKernelModules =
[ "xhci_pci" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod" ];
};
fileSystems = let
nfsMount = (server: nfsDisk: {
device = "${server}:/${nfsDisk}";
fsType = "nfs";
options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ];
});
btrfsMount = subvol: {
device = "/dev/mapper/nvme";
fsType = "btrfs";
options = [
"subvol=${subvol}"
"ssd"
"compress=lzo"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
] ++ (if subvol == "nixos" then [ "noatime" ] else [ ]);
fileSystems =
let
nfsMount = server: nfsDisk: {
device = "${server}:/${nfsDisk}";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"x-systemd.idle-timeout=600"
];
};
btrfsMount = device: subvol: extraOpts: {
inherit device;
fsType = "btrfs";
options = extraOpts ++ [
"subvol=${subvol}"
"ssd"
"compress=lzo"
"x-systemd.device-timeout=0"
"space_cache=v2"
"commit=120"
"datacow"
];
};
trashOptions = [
"x-gvfs-trash"
"x-gvfs-show"
];
in
{
"/" = btrfsMount (getMapper "nvme") "nixos" [ "noatime" ];
"/home" = btrfsMount (getMapper "nvme") "home" [ ];
"/srv/games" = btrfsMount (getMapper "nvme") "games" trashOptions;
"/srv/ai" = btrfsMount (getUUID "ca1671e1-e201-4960-ad30-593393f970fb") "ai" trashOptions;
"/srv/pool" = nfsMount "server" "pool";
"/srv/server_home" = nfsMount "server" "jawz";
"/srv/backups" = nfsMount "server" "backups";
"/boot" = {
device = getUUID "ac6d349a-96b9-499e-9009-229efd7743a5";
fsType = "ext4";
};
"/boot/efi" = {
device = getUUID "B05D-B5FB";
fsType = "vfat";
};
};
in {
"/" = btrfsMount "nixos" // { };
"/home" = btrfsMount "home" // { };
"/mnt/games" = btrfsMount "games" // { };
"/mnt/miniserver/pool" = nfsMount "miniserver" "pool" // { };
"/mnt/miniserver/jawz" = nfsMount "miniserver" "jawz" // { };
# "/mnt/server/pool" = nfsMount "server" "pool" // { };
# "/mnt/server/jawz" = nfsMount "server" "jawz" // { };
# "/mnt/server/btrfs" = nfsMount "server" "btrfs" // { };
"/boot" = {
device = "/dev/disk/by-uuid/ac6d349a-96b9-499e-9009-229efd7743a5";
fsType = "ext4";
};
"/boot/efi" = {
device = "/dev/disk/by-uuid/B05D-B5FB";
fsType = "vfat";
};
};
swapDevices = [{
device = "/dev/disk/by-partuuid/c1bd22d7-e62c-440a-88d1-6464be1aa1b0";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}];
swapDevices = [
{
device = "/dev/disk/by-partuuid/c1bd22d7-e62c-440a-88d1-6464be1aa1b0";
randomEncryption = {
enable = true;
cipher = "aes-xts-plain64";
keySize = 512;
sectorSize = 4096;
};
}
];
}

View File

@ -0,0 +1,47 @@
{ inputs }:
let
inherit (inputs.self.lib) mkEnabled enableList;
in
{
stylix.enable = true;
emacs.enable = true;
enableContainers = true;
servers.drpp.enable = true;
apps = enableList mkEnabled [
"art"
"dictionaries"
"fonts"
"gaming"
"switch"
"internet"
"multimedia"
"office"
"misc"
];
dev = enableList mkEnabled [
"nix"
"python"
"sh"
];
shell = enableList mkEnabled [
"exercism"
"multimedia"
"tools"
];
services = enableList mkEnabled [
"network"
"nvidia"
"printing"
"sound"
"syncthing"
];
scripts = enableList mkEnabled [
"tasks"
"run"
"split-dir"
"download"
"ffmpreg"
"ffmpeg4discord"
"update-org-agenda-cache"
];
}

View File

@ -1,41 +0,0 @@
{ config, ... }: {
sops.secrets = let
keyConfig = file: {
sopsFile = ./secrets/keys.yaml;
owner = config.users.users.jawz.name;
inherit (config.users.users.jawz) group;
path = "/home/jawz/.ssh/${file}";
};
in {
jawz-password.neededForUsers = true;
"private_keys/age" = keyConfig "ed25519_age";
"public_keys/age" = keyConfig "ed25519_age.pub";
"private_keys/${config.networking.hostName}" =
keyConfig "ed25519_${config.networking.hostName}";
"git_private_keys/${config.networking.hostName}" = keyConfig "ed25519_git";
};
users.users.jawz = {
linger = true;
isNormalUser = true;
hashedPasswordFile = config.sops.secrets.jawz-password.path;
extraGroups = [
"wheel"
"networkmanager"
"scanner"
"lp"
"piracy"
"kavita"
"video"
"docker"
"libvirt"
"rslsync"
];
openssh.authorizedKeys.keys = [
(builtins.readFile ./secrets/ssh/ed25519_deacero.pub)
(builtins.readFile ./secrets/ssh/ed25519_workstation.pub)
(builtins.readFile ./secrets/ssh/ed25519_server.pub)
(builtins.readFile ./secrets/ssh/ed25519_miniserver.pub)
(builtins.readFile ./secrets/ssh/ed25519_galaxy.pub)
];
};
}

View File

@ -1,25 +0,0 @@
{ lib, ... }: {
imports = [
./apps/art.nix
./apps/dictionaries.nix
./apps/fonts.nix
./apps/gaming.nix
./apps/internet.nix
./apps/multimedia.nix
./apps/office.nix
./apps/misc.nix
];
my = {
dev.gameDev.enable = lib.mkDefault false;
apps = {
art.enable = lib.mkDefault false;
dictionaries.enable = lib.mkDefault false;
fonts.enable = lib.mkDefault false;
gaming.enable = lib.mkDefault false;
internet.enable = lib.mkDefault false;
multimedia.enable = lib.mkDefault false;
office.enable = lib.mkDefault false;
misc.enable = lib.mkDefault false;
};
};
}

View File

@ -1,25 +1,43 @@
{ config, lib, pkgs, ... }: {
options.my = {
apps.art.enable = lib.mkEnableOption "enable";
dev.gameDev.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
let
# Patch to libpng so that big brushes can be loaded
patched-krita = pkgs.replaceDependency {
drv = pkgs.krita;
oldDependency = pkgs.libpng;
newDependency = pkgs.libpng.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ../../patches/libpng.patch ];
});
};
config = lib.mkIf config.my.apps.art.enable {
users.users.jawz.packages = (with pkgs; [
attrValuesIf = cond: attrs: if cond then builtins.attrValues attrs else [ ];
artPackages = attrValuesIf config.my.apps.art.enable {
inherit patched-krita; # art to your heart desire!
inherit (pkgs)
eyedropper # color picker
emulsion-palette # self explanatory
gimp # the coolest bestest art program to never exist
krita # art to your heart desire!
mypaint # not the best art program
mypaint-brushes # but it's got some
mypaint-brushes1 # nice damn brushes
pureref # create inspiration/reference boards
blender # cgi animation and sculpting
# drawpile # arty party with friends!!
]) ++ (if config.my.dev.gameDev.enable then
with pkgs;
[
godot_4 # game development
# gdtoolkit # gdscript language server
]
else
[ ]);
pureref # create inspiration/reference boards
;
};
gameDevPackages = attrValuesIf config.my.dev.gameDev.enable {
inherit (pkgs)
godot_4 # game development
gdtoolkit_4 # gdscript language server
;
};
in
{
options.my = {
apps.art.enable = lib.mkEnableOption "digital art and creative applications";
dev.gameDev.enable = lib.mkEnableOption "game development tools and engines";
};
config.users.users.jawz.packages = artPackages ++ gameDevPackages;
}

View File

@ -1,11 +1,21 @@
{ config, lib, pkgs, ... }: {
options.my.apps.dictionaries.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
{
options.my.apps.dictionaries.enable = lib.mkEnableOption "dictionaries and language tools";
config = lib.mkIf config.my.apps.dictionaries.enable {
users.users.jawz.packages = with pkgs; [
hunspell
hunspellDicts.it_IT
hunspellDicts.es_MX
hunspellDicts.en_CA-large
];
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
hunspell
;
inherit (pkgs.hunspellDicts)
it_IT
es_MX
en_CA-large
;
};
};
}

View File

@ -1,6 +1,44 @@
{ config, lib, pkgs, ... }: {
options.my.apps.fonts.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
inputs,
...
}:
let
customFonts = pkgs.stdenvNoCC.mkDerivation {
name = "custom-fonts";
src = inputs.fonts;
installPhase = ''
mkdir -p $out/share/fonts
find $src -type f \( \
-name "*.ttf" -o \
-name "*.otf" -o \
-name "*.woff" -o \
-name "*.woff2" \
\) -exec cp {} $out/share/fonts/ \;
'';
};
in
{
options.my.apps.fonts.enable = lib.mkEnableOption "additional fonts and typography";
config = lib.mkIf config.my.apps.fonts.enable {
users.users.jawz.packages = with pkgs; [ nerdfonts symbola ];
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "corefonts" ];
fonts.packages = builtins.attrValues {
inherit customFonts;
inherit (pkgs)
symbola
comic-neue
cascadia-code
corefonts
;
inherit (pkgs.nerd-fonts)
caskaydia-cove
open-dyslexic
comic-shanns-mono
iosevka
agave
;
};
};
}

View File

@ -1,7 +1,38 @@
{ config, lib, pkgs, inputs, ... }: {
{
inputs,
config,
lib,
pkgs,
...
}:
let
retroarchWithCores = pkgs.retroarch.withCores (
cores:
builtins.attrValues {
inherit (cores)
mgba # gba
pcsx2 # ps2
dolphin # wii / gamecube
snes9x2010 # snes
desmume # nintendo ds
citra # 3ds
;
}
);
in
{
imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ];
options.my.apps.gaming.enable = lib.mkEnableOption "enable";
options.my.apps = {
gaming.enable = lib.mkEnableOption "gaming applications and emulators";
switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools";
};
config = lib.mkIf config.my.apps.gaming.enable {
# sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable {
# sopsFile = ../../secrets/env.yaml;
# format = "dotenv";
# owner = config.users.users.jawz.name;
# inherit (config.users.users.jawz) group;
# };
programs = {
gamemode.enable = true;
steam = {
@ -12,32 +43,30 @@
platformOptimizations.enable = true;
};
};
users.users.jawz.packages = let
polymc = pkgs.callPackage ../../pkgs/polymc/default.nix { };
citra-nightly =
pkgs.callPackage ../../pkgs/citra/default.nix { branch = "nightly"; };
in (with pkgs; [
shipwright # zelda OoT port
mangohud # fps & stats overlay
lutris # games launcher & emulator hub
cartridges # games launcher
gamemode # optimizes linux to have better gaming performance
heroic # install epic games
protonup-qt # update proton-ge
# minecraft # minecraft official launcher
ns-usbloader # load games into my switch
grapejuice # roblox manager
# emulators
rpcs3 # ps3 emulator
pcsx2 # ps2 emulator
cemu # wii u emulator
dolphin-emu # wii emulator
snes9x-gtk # snes emulator
ryujinx # switch emulator
]) ++ [
citra-nightly # 3Ds emulator
polymc # minecraft launcher with mod support
];
services = lib.mkIf config.my.apps.switch.enable {
switch-boot.enable = true;
# switch-presence = {
# enable = true;
# environmentFile = config.sops.secrets.switch-presence.path;
# };
};
users.users.jawz.packages = builtins.attrValues {
inherit retroarchWithCores;
inherit (pkgs)
shipwright # zelda OoT port
mangohud # fps & stats overlay
lutris # games launcher & emulator hub
cartridges # games launcher
gamemode # optimizes linux to have better gaming performance
heroic # install epic games
protonup-qt # update proton-ge
ns-usbloader # load games into my switch
# emulators
rpcs3 # ps3
cemu # wii u
ryubing # switch
prismlauncher # minecraft launcher with jdk overlays
;
};
};
}

View File

@ -1,30 +1,55 @@
{ config, lib, pkgs, ... }: {
options.my.apps.internet.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
let
krisp-patcher =
pkgs.writers.writePython3Bin "krisp-patcher"
{
libraries = builtins.attrValues {
inherit (pkgs.python3Packages)
capstone
pyelftools
;
};
flakeIgnore = [
"E501" # line too long (82 > 79 characters)
"F403" # 'from module import *' used; unable to detect undefined names
"F405" # name may be undefined, or defined from star imports: module
];
}
(
builtins.readFile (
pkgs.fetchurl {
url = "https://pastebin.com/raw/8tQDsMVd";
sha256 = "sha256-IdXv0MfRG1/1pAAwHLS2+1NESFEz2uXrbSdvU9OvdJ8=";
}
)
);
in
{
options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps";
config = lib.mkIf config.my.apps.internet.enable {
programs = {
geary.enable = true;
firefox = {
enable = true;
languagePacks = [ "en-CA" "es-MX" "it" ];
};
};
services.psd.enable = true;
users.users.jawz.packages =
let vdhcoapp = pkgs.callPackage ../../pkgs/vdhcoapp/default.nix { };
in (with pkgs; [
# gpt4all
home-manager.users.jawz.programs.librewolf = import ./librewolf.nix;
programs.geary.enable = true;
users.users.jawz.packages = builtins.attrValues {
# inherit (inputs.zen-browser.packages.x86_64-linux) twilight;
inherit krisp-patcher;
inherit (pkgs)
# thunderbird # email client
warp # transfer files with based ppl
nextcloud-client # self-hosted google-drive alternative
fragments # beautiful torrent client
protonmail-bridge # bridge for protonmail
tor-browser-bundle-bin # dark web, so dark!
chromium # web browser with spyware included
telegram-desktop # furry chat
nicotine-plus # remember Ares?
vesktop # screen share with audio discord
discord # :3
# hugo # website engine
]) ++ [
vdhcoapp # video download helper assistant
];
nextcloud-talk-desktop # nextcloud talk client
fractal # matrix client
;
};
};
}

100
modules/apps/librewolf.nix Normal file
View File

@ -0,0 +1,100 @@
{
enable = true;
languagePacks = [
"en-CA"
"es-MX"
"it"
];
policies.DisabledFirefoxAccounts = false;
profiles.jawz = {
containersForce = true;
containers = {
Private = {
id = 1;
icon = "chill";
color = "purple";
};
Work = {
id = 2;
icon = "briefcase";
color = "orange";
};
Banking = {
id = 3;
icon = "dollar";
color = "green";
};
};
id = 0;
name = "jawz";
path = "jawz";
settings = {
# Enable custom userChrome.css (for GNOME theme)
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# Enables Firefox GNOME Theme SVG icons
"svg.context-properties.content.enabled" = true;
# GNOME theme refinements
"gnomeTheme.hideSingleTab" = true;
"gnomeTheme.bookmarksToolbarUnderTabs" = true;
"gnomeTheme.allTabsButtonOnOverflow" = true;
# Normal UI density
"browser.uidensity" = 0;
"browser.toolbars.bookmarks.visibility" = "never";
"general.autoScroll" = true;
# Tabs
"browser.sessionstore.resume_from_crash" = true;
"browser.sessionstore.max_tabs_undo" = 50;
"browser.startup.page" = 3;
# DRM
"media.eme.enabled" = true;
# Prevents private windows from using dark theme
"browser.theme.dark-private-windows" = false;
# Enables rounded corners on the main window
"widget.gtk.rounded-bottom-corners.enabled" = true;
# General privacy & fingerprinting
"privacy.sanitize.sanitizeOnShutdown" = false;
"privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" = false;
"privacy.resistFingerprinting" = false; # You explicitly disabled this
"privacy.fingerprintingProtection" = true;
"privacy.query_stripping.enabled" = true;
"privacy.query_stripping.enabled.pbmode" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
"privacy.trackingprotection.emailtracking.enabled" = true;
"privacy.bounceTrackingProtection.mode" = 1;
"privacy.clearSiteData.cookiesAndStorage" = false;
"privacy.clearSiteData.historyFormDataAndDownloads" = true;
# Do Not Track
"privacy.donottrackheader.enabled" = true;
# GPC (Global Privacy Control)
"privacy.globalprivacycontrol.was_ever_enabled" = true;
# DNS-over-HTTPS (LibreDNS with adblock)
"network.trr.mode" = 2;
"network.trr.uri" = "https://doh.libredns.gr/noads";
# Prevent predictive browsing
"network.prefetch-next" = false;
"network.predictor.enabled" = false;
"network.http.speculative-parallel-limit" = 0;
# Referrer sanitization
"network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation" = true;
# Partitioning and isolation
"network.cookie.cookieBehavior.optInPartitioning" = true;
# HTTPS-only
"dom.security.https_only_mode_ever_enabled" = true;
# Disable captive portal checks
"network.captive-portal-service.enabled" = false;
"network.connectivity-service.enabled" = false;
# Permissions tightening
"permissions.delegation.enabled" = false;
# Disable safe browsing remote lookups (relies on Google)
"browser.safebrowsing.downloads.remote.enabled" = false;
"browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false;
"browser.safebrowsing.downloads.remote.block_uncommon" = false;
# Enable anti-cookie tracking + purge trackers
"privacy.annotate_channels.strict_list.enabled" = true;
# Enable Multi-Account Containers
"privacy.userContext.enabled" = true;
"privacy.userContext.ui.enabled" = true;
};
};
}

View File

@ -1,14 +1,19 @@
{ config, lib, pkgs, ... }: {
options.my.apps.misc.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
{
options.my.apps.misc.enable = lib.mkEnableOption "miscellaneous desktop applications";
config = lib.mkIf config.my.apps.misc.enable {
users.users.jawz.packages = with pkgs; [
# celeste # sync tool for any cloud provider
# czkawka # duplicate finder
# sequeler # friendly SQL client
blanket # background noise
metadata-cleaner # remove any metadata and geolocation from files
pika-backup # backups
gnome-obfuscate # censor private information
];
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
blanket # background noise
metadata-cleaner # remove any metadata and geolocation from files
pika-backup # backups
gnome-obfuscate # censor private information
;
};
};
}

View File

@ -1,20 +1,23 @@
{ config, lib, pkgs, ... }: {
options.my.apps.multimedia.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
{
options.my.apps.multimedia.enable = lib.mkEnableOption "multimedia applications and media players";
config = lib.mkIf config.my.apps.multimedia.enable {
users.users.jawz.packages = with pkgs; [
fooyin # foobar inspired music player
pitivi # video editor
celluloid # video player
curtail # image compressor
easyeffects # equalizer
handbrake # video converter, may be unnecessary
identity # compare images or videos
mousai # poor man shazam
shortwave # listen to world radio
tagger # tag music files
# cozy # audiobooks player
# gnome-podcasts # podcast player
# hakuneko # manga & comic GUI downloader
];
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
recordbox # libadwaita music player
celluloid # video player
curtail # image compressor
easyeffects # equalizer
identity # compare images or videos
mousai # poor man shazam
shortwave # listen to world radio
tagger # tag music files
;
};
};
}

18
modules/apps/music.nix Normal file
View File

@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}:
{
options.my.apps.piano.enable = lib.mkEnableOption "piano learning and music theory apps";
config = lib.mkIf config.my.apps.piano.enable {
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
neothesia
linthesia
timidity
;
};
};
}

View File

@ -1,16 +1,22 @@
{ config, lib, pkgs, ... }: {
options.my.apps.office.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
{
options.my.apps.office.enable = lib.mkEnableOption "office applications and productivity tools";
config = lib.mkIf config.my.apps.office.enable {
environment.variables.CALIBRE_USE_SYSTEM_THEME = "1";
users.users.jawz.packages = with pkgs; [
libreoffice # office, but based
calibre # ugly af eBook library manager
newsflash # feed reader, syncs with nextcloud
furtherance # I packaged this one tehee track time utility
planify # let's pretend I will organize my tasks
# foliate # gtk eBook reader
# wike # gtk wikipedia wow!
# denaro # manage your finances
];
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs)
jre17_minimal # for libreoffice extensions
libreoffice # office, but based & european
calibre # ugly af eBook library manager
newsflash # feed reader, syncs with nextcloud
furtherance # I packaged this one tehee track time utility
# planify # let's pretend I will organize my tasks
;
};
};
}

View File

@ -1,20 +0,0 @@
{ lib, ... }: {
imports = [
./dev/sh.nix
./dev/nix.nix
./dev/docker.nix
./dev/python.nix
./dev/haskell.nix
./dev/javascript.nix
./emacs.nix
];
my.emacs.enable = lib.mkDefault false;
my.dev = {
sh.enable = lib.mkDefault false;
nix.enable = lib.mkDefault false;
docker.enable = lib.mkDefault false;
python.enable = lib.mkDefault false;
haskell.enable = lib.mkDefault false;
javascript.enable = lib.mkDefault false;
};
}

36
modules/dev/cc.nix Normal file
View File

@ -0,0 +1,36 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
clang # C/C++ compiler frontend (part of LLVM)
clang-tools # Extra LLVM tools (e.g. clang-tidy, clang-apply-replacements)
gcc # GNU Compiler Collection (C, C++, etc.)
gdb # GNU Debugger
valgrind # Memory leak detector and performance profiler
;
};
in
{
options = {
my.dev.cc.enable = lib.mkEnableOption "Install C/C++ tooling globally";
devShells.cc = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "cc-dev-shell";
shellHook = ''
echo "🔧 C/C++ dev environment"
'';
};
description = "C/C++ development shell";
};
};
config = lib.mkIf config.my.dev.cc.enable {
users.users.jawz = { inherit packages; };
};
}

View File

@ -1,10 +1,38 @@
{ config, lib, pkgs, ... }: {
options.my.dev.docker.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.dev.docker.enable {
environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker";
users.users.jawz.packages = with pkgs; [
dockfmt
nodePackages.dockerfile-language-server-nodejs
];
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs) dockfmt; # Format Dockerfiles
inherit (pkgs.nodePackages)
dockerfile-language-server-nodejs # LSP for Dockerfiles
;
};
in
{
options = {
my.dev.docker.enable = lib.mkEnableOption "Install Docker tooling globally";
devShells.docker = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "docker-dev-shell";
shellHook = ''
echo "🐳 Docker dev environment"
'';
};
description = "Docker and Dockerfile tooling shell";
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.docker.enable {
users.users.jawz = { inherit packages; };
})
{
environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker";
}
];
}

76
modules/dev/emacs.nix Normal file
View File

@ -0,0 +1,76 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration";
config = lib.mkIf config.my.emacs.enable {
home-manager.users.jawz = {
xdg.dataFile = {
"doom/templates/events.org".source = ../../dotfiles/doom/templates/events.org;
"doom/templates/default.org".source = ../../dotfiles/doom/templates/default.org;
"doom/templates/programming.org".source = ../../dotfiles/doom/templates/programming.org;
};
services.lorri.enable = true;
programs.${config.my.shell.type}.shellAliases =
inputs.self.lib.mergeAliases inputs.self.lib.commonAliases
{
edit = "emacsclient -t";
e = "edit";
};
};
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs.xorg) xwininfo;
inherit (pkgs)
#emacs everywhere
xdotool
xclip
wl-clipboard-rs
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
ripgrep # modern grep
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex # export pdf
languagetool # proofreader for English
# lsps
yaml-language-server
markdownlint-cli
;
inherit (pkgs.nodePackages)
vscode-json-languageserver
prettier # multi-language linter
;
};
services.emacs = {
enable = true;
defaultEditor = true;
package = pkgs.emacsWithDoom {
doomDir = ../../dotfiles/doom;
doomLocalDir = "/home/jawz/.local/share/nix-doom";
tangleArgs = "--all config.org";
extraPackages =
epkgs:
let
inherit (config.home-manager.users.jawz.programs.emacs)
extraPackages
extraConfig
;
extra = extraPackages epkgs;
themes = lib.optional config.my.stylix.enable [
(epkgs.trivialBuild {
pname = "stylix-theme";
src = pkgs.writeText "stylix-theme.el" extraConfig;
version = "0.1.0";
packageRequires = extra;
})
];
in
extra ++ themes;
};
};
};
}

44
modules/dev/go.nix Normal file
View File

@ -0,0 +1,44 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
go # Go compiler and core toolchain
gocode-gomod # Code completion for Go (modern fork of gocode)
gotools # Contains godoc, gorename, goimports, etc.
gore # Go REPL
gotests # Generate Go tests from function signatures
gomodifytags # Struct tag manipulation
golangci-lint # Linter aggregation
;
};
GOPATH = "\${XDG_DATA_HOME}/go";
in
{
options = {
my.dev.go.enable = lib.mkEnableOption "Install Go tooling globally";
devShells.go = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages GOPATH;
name = "go-dev-shell";
shellHook = ''
echo "🐹 Go dev environment"
'';
};
description = "Go development shell with Emacs tooling, REPL, formatter, and linter";
};
};
config = lib.mkMerge [
{
environment.variables = { inherit GOPATH; };
}
(lib.mkIf config.my.dev.go.enable {
users.users.jawz = { inherit packages; };
})
];
}

View File

@ -1,14 +1,46 @@
{ config, lib, pkgs, ... }: {
options.my.dev.haskell.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.dev.haskell.enable {
users.users.jawz.packages = with pkgs; [
ghc # compiler
haskell-language-server # lsp
];
environment.variables = {
CABAL_DIR = "\${XDG_CACHE_HOME}/cabal";
STACK_ROOT = "\${XDG_DATA_HOME}/stack";
GHCUP_USE_XDG_DIRS = "true";
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
haskell-language-server # LSP server for Haskell
cabal-install # Standard Haskell build tool
hlint # Linter for Haskell source code
;
inherit (pkgs.haskellPackages)
hoogle # Haskell API search engine
;
};
in
{
options = {
my.dev.haskell.enable = lib.mkEnableOption "Install Haskell tooling globally";
devShells.haskell = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "haskell-dev-shell";
shellHook = ''
echo "λ Haskell dev environment"
'';
};
description = "Haskell development shell";
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.haskell.enable {
users.users.jawz = { inherit packages; };
})
{
environment.variables = {
CABAL_DIR = "\${XDG_CACHE_HOME}/cabal";
STACK_ROOT = "\${XDG_DATA_HOME}/stack";
GHCUP_USE_XDG_DIRS = "true";
};
}
];
}

View File

@ -1,16 +1,50 @@
{ config, lib, pkgs, ... }: {
options.my.dev.javascript.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.dev.javascript.enable {
home-manager.users.jawz.xdg.configFile = {
"npm/npmrc".source = ../../dotfiles/npm/npmrc;
"configstore/update-notifier-npm-check.json".source =
../../dotfiles/npm/update-notifier-npm-check.json;
};
users.users.jawz.packages = with pkgs; [ nodejs nodePackages.pnpm ];
environment.variables = {
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
PATH = [ "\${XDG_DATA_HOME}/npm/bin" "\${XDG_DATA_HOME}/pnpm" ];
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs) nodejs; # Node.js runtime
inherit (pkgs.nodePackages) pnpm; # Fast package manager alternative to npm
};
in
{
options = {
my.dev.javascript.enable = lib.mkEnableOption "Install JavaScript tooling globally";
devShells.javascript = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "javascript-dev-shell";
shellHook = ''
echo "📦 JavaScript dev environment"
'';
};
description = "JavaScript/Node development shell with npm/pnpm support";
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.javascript.enable {
users.users.jawz = { inherit packages; };
})
{
home-manager.users.jawz.xdg.configFile = {
"npm/npmrc".source = ../../dotfiles/npmrc;
"configstore/update-notifier-npm-check.json".text = builtins.toJSON {
optOut = false;
lastUpdateCheck = 1646662583446;
};
};
environment.variables = {
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
PATH = [
"\${XDG_DATA_HOME}/npm/bin"
"\${XDG_DATA_HOME}/pnpm"
];
};
}
];
}

30
modules/dev/julia.nix Normal file
View File

@ -0,0 +1,30 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs) julia; # High-performance dynamic language for technical computing
};
in
{
options = {
my.dev.julia.enable = lib.mkEnableOption "Install Julia globally";
devShells.julia = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "julia-dev-shell";
shellHook = ''
echo "🔬 Julia dev environment"
'';
};
description = "Julia development shell";
};
};
config = lib.mkIf config.my.dev.julia.enable {
users.users.jawz = { inherit packages; };
};
}

View File

@ -1,11 +1,47 @@
{ config, lib, pkgs, ... }: {
options.my.dev.nix.enable = lib.mkEnableOption "enable";
{
config,
inputs,
lib,
pkgs,
...
}:
let
shellType = config.my.shell.type;
packages = builtins.attrValues {
inherit (pkgs)
nixfmt-rfc-style # formatting
cachix # binary cache management
nixd # language server for Nix
deadnix # detext unused/uneeded dependencies
statix # linter for Nix expressions
;
};
in
{
options = {
my.dev.nix.enable = lib.mkEnableOption "Install Nix tooling globally";
devShells.nix = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "nix-dev-shell";
shellHook = ''
echo " Nix dev environment"
'';
};
description = "Nix/NixOS development shell with formatter, linter, LSP, and Cachix";
};
};
config = lib.mkIf config.my.dev.nix.enable {
users.users.jawz.packages = with pkgs; [
nixfmt-classic # linting
nixfmt-rfc-style # linting
cachix # why spend time compiling?
nixd # language server
];
users.users.jawz = { inherit packages; };
home-manager.users.jawz.programs.${shellType}.shellAliases =
inputs.self.lib.mergeAliases inputs.self.lib.commonAliases
{
nixformat = ''
deadnix -e && \
nix run nixpkgs#nixfmt-tree && \
statix fix
'';
};
};
}

View File

@ -1,25 +1,56 @@
{ config, lib, pkgs, ... }: {
options.my.dev.python.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.dev.python.enable {
home-manager.users.jawz.xdg.configFile."python/pythonrc".source =
../../dotfiles/pythonrc;
environment.variables.PYTHONSTARTUP = "\${XDG_CONFIG_HOME}/python/pythonrc";
users.users.jawz.packages = with pkgs; [
{
config,
lib,
pkgs,
...
}:
let
python = pkgs.python3.withPackages (
ps:
builtins.attrValues {
inherit (ps)
black # Python code formatter
editorconfig # follow rules of contributin
flake8 # wraper for pyflakes, pycodestyle and mccabe
isort # sort Python imports
pyflakes # checks source code for errors
pylint # bug and style checker for python
pytest # tests
speedtest-cli # check internet speed from the comand line
;
}
);
packages = builtins.attrValues {
inherit python;
inherit (pkgs)
pipenv # python development workflow for humans
nodePackages.pyright # LSP
(python3.withPackages (ps:
with ps; [
black # Python code formatter
editorconfig # follow rules of contributin
flake8 # wraper for pyflakes, pycodestyle and mccabe
isort # sort Python imports
pyflakes # checks source code for errors
pylint # bug and style checker for python
speedtest-cli # check internet speed from the comand line
# nose # testing and running python scripts
# poetry # dependency management made easy
# pytest # framework for writing tests
]))
];
pyright # LSP
;
};
in
{
options = {
my.dev.python.enable = lib.mkEnableOption "Install Python tools globally";
devShells.python = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "python-dev-shell";
shellHook = ''
echo "🐍 Python dev environment"
which python
'';
description = "Python development shell";
};
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.python.enable {
users.users.jawz = { inherit packages; };
})
{
home-manager.users.jawz.xdg.configFile."python/pythonrc".source = ../../dotfiles/pythonrc;
environment.variables.PYTHONSTARTUP = "\${XDG_CONFIG_HOME}/python/pythonrc";
}
];
}

40
modules/dev/ruby.nix Normal file
View File

@ -0,0 +1,40 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs) ruby; # Ruby interpreter
inherit (pkgs.rubyPackages) solargraph; # LSP for Ruby
};
in
{
options = {
my.dev.ruby.enable = lib.mkEnableOption "Install Ruby tooling globally";
devShells.ruby = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "ruby-dev-shell";
shellHook = ''
echo "💎 Ruby dev environment"
'';
};
description = "Ruby development shell with interpreter and Solargraph LSP";
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.ruby.enable {
users.users.jawz = { inherit packages; };
})
{
environment.variables = {
GEM_HOME = "\${XDG_DATA_HOME}/ruby/gems";
GEM_PATH = "\${XDG_DATA_HOME}/ruby/gems";
GEM_SPEC_CACHE = "\${XDG_DATA_HOME}/ruby/specs";
};
}
];
}

41
modules/dev/rust.nix Normal file
View File

@ -0,0 +1,41 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
rustc # Rust compiler
cargo # Rust package manager
rust-analyzer # Language server for Rust
clippy # Linter for Rust
rustfmt # Formatter for Rust code
;
};
in
{
options = {
my.dev.rust.enable = lib.mkEnableOption "Install Rust tooling globally";
devShells.rust = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "rust-dev-shell";
shellHook = ''
echo "🦀 Rust dev environment"
'';
};
description = "Rust development shell with cargo and rust-analyzer";
};
};
config = lib.mkMerge [
(lib.mkIf config.my.dev.rust.enable {
users.users.jawz = { inherit packages; };
})
{
environment.variables.CARGO_HOME = "\${XDG_DATA_HOME}/cargo";
}
];
}

View File

@ -1,11 +1,36 @@
{ config, lib, pkgs, ... }: {
options.my.dev.sh.enable = lib.mkEnableOption "enable";
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
bashdb # Debugger and completion support
shellcheck # Shell script linter
shfmt # Shell parser and formatter
;
# LSP for Bash and sh
inherit (pkgs.nodePackages) bash-language-server;
};
in
{
options = {
my.dev.sh.enable = lib.mkEnableOption "Install shell scripting tools globally";
devShells.sh = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "sh-dev-shell";
shellHook = ''
echo "💻 Shell scripting dev environment"
'';
};
description = "Shell scripting dev shell";
};
};
config = lib.mkIf config.my.dev.sh.enable {
users.users.jawz.packages = with pkgs; [
bashdb # autocomplete
shellcheck # linting
shfmt # a shell parser and formatter
nodePackages.bash-language-server # LSP
];
users.users.jawz = { inherit packages; };
};
}

33
modules/dev/zig.nix Normal file
View File

@ -0,0 +1,33 @@
{
config,
lib,
pkgs,
...
}:
let
packages = builtins.attrValues {
inherit (pkgs)
zig # Zig compiler and stdlib
zls # Language server for Zig
;
};
in
{
options = {
my.dev.zig.enable = lib.mkEnableOption "Install Zig tooling globally";
devShells.zig = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "zig-dev-shell";
shellHook = ''
echo "🦎 Zig dev environment"
'';
};
description = "Zig development shell with compiler and LSP";
};
};
config = lib.mkIf config.my.dev.zig.enable {
users.users.jawz = { inherit packages; };
};
}

View File

@ -1,51 +0,0 @@
{ config, lib, pkgs, ... }: {
options.my.emacs.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.emacs.enable {
home-manager.users.jawz = {
services.lorri.enable = true;
programs.bash = {
initExtra = ''
emacs-sqlite-fix () {
nix-shell -p cmake sqlite --command "doom sync &&
sc restart emacs &&
emacsclient -e '(org-roam-db-sync)'" &&
doom sync
}
'';
shellAliases = {
edit = "emacsclient -t";
e = "edit";
};
};
};
users.users.jawz.packages = (with pkgs; [
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
ripgrep # modern grep
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex # export pdf
languagetool # proofreader for English
# doom everywhere
xorg.xwininfo
xdotool
xclip
# lsps
yaml-language-server
markdownlint-cli
]) ++ (with pkgs.nodePackages; [
vscode-json-languageserver
# linters
prettier
]);
services.emacs = {
enable = true;
package = with pkgs;
((emacsPackagesFor emacs-gtk).emacsWithPackages
(epkgs: with epkgs; [ vterm ]));
defaultEditor = true;
};
};
}

View File

@ -0,0 +1,80 @@
{
config,
lib,
pkgs,
...
}:
{
options.my.scripts = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule {
options = {
enable = lib.mkEnableOption "Whether to enable this script";
install = lib.mkEnableOption "Whether to install the script package";
service = lib.mkEnableOption "Whether to enable the script service";
name = lib.mkOption {
type = lib.types.str;
description = "Name of the script.";
};
timer = lib.mkOption {
type = lib.types.str;
default = "*:0";
description = "Systemd timer schedule.";
};
description = lib.mkOption {
type = lib.types.str;
description = "Description of the service.";
};
package = lib.mkOption {
type = lib.types.package;
description = "Package containing the executable script.";
};
};
}
);
default = { };
description = "Configuration for multiple scripts.";
};
config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) {
users.users.jawz.packages =
config.my.scripts
|> lib.mapAttrsToList (_name: script: lib.optional (script.enable && script.install) script.package)
|> lib.flatten;
systemd.user.services =
config.my.scripts
|> lib.mapAttrs' (
_name: script:
lib.nameValuePair "${script.name}" (
lib.mkIf (script.enable && script.service) {
restartIfChanged = true;
inherit (script) description;
wantedBy = [ "default.target" ];
path = [
pkgs.nix
script.package
];
serviceConfig = {
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${script.package}/bin/${script.name}";
};
}
)
);
systemd.user.timers =
config.my.scripts
|> lib.mapAttrs' (
_name: script:
lib.nameValuePair "${script.name}" (
lib.mkIf (script.enable && script.service) {
enable = true;
inherit (script) description;
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = script.timer;
};
}
)
);
};
}

View File

@ -0,0 +1,60 @@
{ lib, config, ... }:
let
mkOptions = name: subdomain: port: {
enable = lib.mkEnableOption "this server service";
enableCron = lib.mkEnableOption "enable cronjob";
enableProxy = lib.mkEnableOption "enable reverse proxy";
port = lib.mkOption {
type = lib.types.int;
default = port;
};
name = lib.mkOption {
type = lib.types.str;
default = name;
};
domain = lib.mkOption {
type = lib.types.str;
default = config.my.domain;
};
host = lib.mkOption {
type = lib.types.str;
default = "${subdomain}.${config.my.servers.${name}.domain}";
};
hostName = lib.mkOption {
type = lib.types.str;
default = config.networking.hostName;
};
url = lib.mkOption {
type = lib.types.str;
default = "https://${config.my.servers.${name}.host}";
};
ip = lib.mkOption {
type = lib.types.str;
default =
if config.my.servers."${name}".isLocal then
config.my.localhost
else
config.my.ips."${config.my.servers.${name}.hostName}";
};
local = lib.mkOption {
type = lib.types.str;
default = "http://${config.my.servers.${name}.ip}:${toString port}";
};
isLocal = lib.mkOption {
type = lib.types.bool;
default = "${config.my.servers.${name}.hostName}" == config.my.mainServer;
};
enableSocket = lib.mkOption {
type = lib.types.bool;
default = false;
};
certPath = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
};
};
in
{
inherit mkOptions;
mkServerOptions = mkOptions;
}

202
modules/modules.nix Normal file
View File

@ -0,0 +1,202 @@
{
lib,
config,
inputs,
...
}:
let
filterNames = file: file != "librewolf.nix";
in
{
imports =
inputs.self.lib.autoImport ./apps filterNames
++ inputs.self.lib.autoImport ./dev filterNames
++ inputs.self.lib.autoImport ./scripts filterNames
++ inputs.self.lib.autoImport ./servers filterNames
++ inputs.self.lib.autoImport ./services filterNames
++ inputs.self.lib.autoImport ./shell filterNames
++ inputs.self.lib.autoImport ./network filterNames
++ [
./factories/mkscript.nix
./nix/build.nix
./users/nixremote.nix
];
options.my = {
localhost = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1";
description = "The localhost address.";
};
localhost6 = lib.mkOption {
type = lib.types.str;
default = "::1";
description = "The localhost ipv6 address.";
};
secureHost = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Whether this is a secure host that should use SOPS,";
};
domain = lib.mkOption {
type = lib.types.str;
default = "lebubu.org";
description = "The domain name.";
};
ips = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {
router = "192.168.100.1";
server = "192.168.100.15";
miniserver = "192.168.1.100";
workstation = "192.168.100.18";
vps = "45.79.25.87";
wg-vps = "10.77.0.1";
wg-server = "10.77.0.2";
wg-friend1 = "10.8.0.2";
wg-friends = "10.8.0.0";
};
description = "Set of IP's for all my computers.";
};
interfaces = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {
server = "enp0s31f6";
miniserver = "enp2s0";
workstation = "enp5s0";
};
description = "Set of network interface names for all my computers.";
};
mainServer = lib.mkOption {
type = lib.types.str;
default = "miniserver";
description = "The hostname of the main server.";
};
postgresSocket = lib.mkOption {
type = lib.types.str;
default = "/run/postgresql";
description = "The PostgreSQL socket path.";
};
containerSocket = lib.mkOption {
type = lib.types.str;
default = "/var/run/docker.sock";
description = "The docker/podman socket path.";
};
containerData = lib.mkOption {
type = lib.types.str;
default = "/var/lib/docker-configs";
description = "The docker/podman socket path.";
};
smtpemail = lib.mkOption {
type = lib.types.str;
default = "stunner6399@gmail.com";
description = "localhost smtp email";
};
email = lib.mkOption {
type = lib.types.str;
default = "danilo.reyes.251@proton.me";
description = "localhost smtp email";
};
timeZone = lib.mkOption {
type = lib.types.str;
default = "America/Mexico_City";
description = "Timezone";
};
enableContainers = lib.mkEnableOption "container services (Docker/Podman)";
enableProxy = lib.mkEnableOption "nginx reverse proxy for services";
};
config = {
assertions =
# PostgreSQL dependency assertions
inputs.self.lib.mkPostgresDependencies config [
{
service = "nextcloud";
name = "Nextcloud";
}
{
service = "vaultwarden";
name = "Vaultwarden";
}
{
service = "firefly-iii";
name = "Firefly III";
}
{
service = "mealie";
name = "Mealie";
}
{
service = "shiori";
name = "Shiori";
}
{
service = "ryot";
name = "Ryot";
}
{
service = "synapse";
name = "Matrix Synapse";
}
{
service = "gitea";
name = "Gitea";
}
]
++
# Other assertions
[
{
assertion =
config.my.enableProxy
-> (builtins.any (s: s.enableProxy or false) (builtins.attrValues config.my.servers));
message = "enableProxy is true but no services have enableProxy enabled";
}
{
assertion =
config.my.enableContainers
|| !(builtins.any (opt: opt) [
config.my.servers.ryot.enable
config.my.servers.lidarr.enable
config.my.servers.prowlarr.enable
config.my.servers.maloja.enable
config.my.servers.multi-scrobbler.enable
config.my.servers.flame.enable
config.my.servers.flameSecret.enable
config.my.servers.metube.enable
config.my.servers.go-vod.enable
config.my.servers.tranga.enable
config.my.servers.drpp.enable
config.my.servers.plex-discord-bot.enable
]);
message = "Container services are enabled but enableContainers is false";
}
];
virtualisation = {
containers.enable = true;
oci-containers.backend = "podman";
podman = lib.mkIf config.my.enableContainers {
enable = true;
dockerCompat = true;
dockerSocket.enable = true;
defaultNetwork.settings.dns_enabled = true;
autoPrune = {
enable = true;
flags = [ "--all" ];
dates = "weekly";
};
};
};
security.acme = lib.mkIf config.services.nginx.enable {
acceptTerms = true;
defaults.email = config.my.email;
};
services.nginx = {
enable = config.my.enableProxy;
clientMaxBodySize = "4096m";
sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;
};
};
}

View File

@ -0,0 +1,52 @@
{
lib,
config,
inputs,
...
}:
let
firewallBlacklist = [
"sabnzbd"
"lidarr"
"maloja"
"tranga"
"flame"
"flameSecret"
"ryot"
"drpp"
"metube"
"multi-scrobbler"
"plex-discord-bot"
];
nativeServicesWithOpenFirewall = inputs.self.lib.getServicesWithNativeFirewall config firewallBlacklist;
servicesConfig = lib.listToAttrs (
map (serviceName: {
name = serviceName;
value.openFirewall = config.my.servers.${serviceName}.enable or false;
}) nativeServicesWithOpenFirewall
);
in
{
options.my.network.firewall = {
enabledServicePorts = lib.mkEnableOption "auto-open ports for enabled services";
staticPorts = lib.mkOption {
type = lib.types.listOf lib.types.int;
default = [ ];
description = "Static ports to always open";
};
additionalPorts = lib.mkOption {
type = lib.types.listOf lib.types.int;
default = [ ];
description = "Additional ports to open (like syncthing, gitea, etc.)";
};
};
config = lib.mkIf config.my.network.firewall.enabledServicePorts {
services = servicesConfig;
networking.firewall.allowedTCPPorts =
inputs.self.lib.generateFirewallPorts config nativeServicesWithOpenFirewall lib
++ (lib.optionals config.services.nginx.enable [
config.services.nginx.defaultHTTPListenPort
config.services.nginx.defaultSSLListenPort
]);
};
}

65
modules/network/nginx.nix Normal file
View File

@ -0,0 +1,65 @@
{
lib,
config,
inputs,
...
}:
let
proxyReverseServices = [
"firefox-syncserver"
"readeck"
"microbin"
"ryot"
"bazarr"
"shiori"
"metube"
"maloja"
"vaultwarden"
"mealie"
"kavita"
"multi-scrobbler"
"nix-serve"
"flame"
"flameSecret"
];
proxyReverseFixServices = [
"audiobookshelf"
"lidarr"
"gitea"
"prowlarr"
"ombi"
"radarr"
"sonarr"
"stash"
"atticd"
];
proxyReversePrivateServices = [
"homepage"
];
mkServiceConfig =
type: services: lib.listToAttrs (map (name: lib.nameValuePair name { inherit type; }) services);
standardProxyServices =
(mkServiceConfig "proxyReverse" proxyReverseServices)
// (mkServiceConfig "proxyReverseFix" proxyReverseFixServices)
// (mkServiceConfig "proxyReversePrivate" proxyReversePrivateServices);
generateProxyConfig =
serviceName: serviceConfig:
let
cfg = config.my.servers.${serviceName};
proxyFunc =
if serviceConfig.type == "proxyReverse" then
inputs.self.lib.proxyReverse
else if serviceConfig.type == "proxyReverseFix" then
inputs.self.lib.proxyReverseFix
else if serviceConfig.type == "proxyReversePrivate" then
inputs.self.lib.proxyReversePrivate
else
throw "Unknown proxy type: ${serviceConfig.type}";
in
lib.nameValuePair cfg.host (lib.mkIf cfg.enableProxy (proxyFunc cfg));
in
{
config = lib.mkIf config.my.enableProxy {
services.nginx.virtualHosts = lib.mapAttrs' generateProxyConfig standardProxyServices;
};
}

47
modules/nix/build.nix Normal file
View File

@ -0,0 +1,47 @@
{ lib, config, ... }:
{
options.my.nix = {
features = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
"gccarch-znver3"
"gccarch-skylake"
"gccarch-alderlake"
];
description = "List of supported nix build features for this system";
};
buildMachines = lib.mkOption {
type = lib.types.listOf lib.types.attrs;
default = [ ];
description = "List of remote build machines configuration";
};
cores = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Number of cores to use for builds (null = auto-detect)";
};
maxJobs = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Maximum number of parallel jobs (null = auto-detect)";
};
};
config = {
nix.settings = lib.mkMerge [
{
system-features = config.my.nix.features;
}
(lib.mkIf (config.my.nix.cores != null) {
inherit (config.my.nix) cores;
})
(lib.mkIf (config.my.nix.maxJobs != null) {
max-jobs = config.my.nix.maxJobs;
})
];
nix.buildMachines = lib.mkIf (config.my.nix.buildMachines != [ ]) config.my.nix.buildMachines;
};
}

View File

@ -0,0 +1,50 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.my.servers.gitea;
in
{
config = lib.mkIf (cfg.enable && config.my.secureHost) {
users.groups.gitea-runner = { };
users.users.gitea-runner = {
isSystemUser = true;
group = "gitea-runner";
extraGroups = [
"docker"
"podman"
];
};
nix.settings = {
allowed-users = [ "gitea-runner" ];
trusted-users = [ "gitea-runner" ];
};
services.gitea-actions-runner.instances.nixos = {
inherit (cfg) url enable;
name = "${config.networking.hostName}-nixos";
tokenFile = config.sops.secrets.gitea.path;
labels = [
"nix:host"
"nixos:host"
];
hostPackages = builtins.attrValues {
inherit (pkgs)
bash
curl
coreutils
gitMinimal
attic-client
podman
podman-compose
nix
nodejs
openssh
python3
;
};
};
};
}

View File

@ -0,0 +1,59 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.my.servers.gitea;
in
{
config = lib.mkIf (cfg.enable && config.my.secureHost) {
services.gitea-actions-runner.instances.ryujinx = {
inherit (cfg) url enable;
name = "${config.networking.hostName}-ryujinx";
tokenFile = config.sops.secrets.gitea.path;
labels = [
"ubuntu-latest:host"
"ubuntu-20.04:host"
];
hostPackages =
let
python3 = pkgs.python3.withPackages (
ps:
builtins.attrValues {
inherit (ps)
pyyaml
lxml
;
}
);
in
builtins.attrValues {
inherit python3;
inherit (pkgs.xorg) libX11;
inherit (pkgs)
bash
coreutils
curl
gawk
gitMinimal
gnused
nodejs
wget
gnutar
gzip
dotnet-sdk_8
openal
vulkan-loader
libGL
gtk3
llvm_15
rcodesign
gh
p7zip
;
};
};
};
}

View File

@ -1,17 +0,0 @@
{ lib, ... }: {
imports = [
./scripts/download.nix
./scripts/ffmpeg4discord.nix
./scripts/ffmpreg.nix
./scripts/find-dup-episode.nix
./scripts/manage-library.nix
./scripts/pika-list.nix
./scripts/run.nix
./scripts/split-dir.nix
./scripts/tasks.nix
./scripts/update-dns.nix
./scripts/stream-dl.nix
];
my.units.download.enable = lib.mkDefault false;
my.units.stream-dl.enable = lib.mkDefault false;
}

View File

@ -1,59 +0,0 @@
{ config, lib, pkgs, ... }: {
options.my.scripts = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule {
options = {
enable = lib.mkEnableOption "Whether to enable this script";
install = lib.mkEnableOption "Whether to install the script package";
service = lib.mkEnableOption "Whether to enable the script service";
name = lib.mkOption {
type = lib.types.str;
description = "Name of the script.";
};
timer = lib.mkOption {
type = lib.types.str;
default = "*:0";
description = "Systemd timer schedule.";
};
description = lib.mkOption {
type = lib.types.str;
description = "Description of the service.";
};
package = lib.mkOption {
type = lib.types.package;
description = "Package containing the executable script.";
};
};
});
default = { };
description = "Configuration for multiple scripts.";
};
config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) {
users.users.jawz.packages = lib.flatten (lib.mapAttrsToList (name: script:
lib.optional (script.enable && script.install) script.package)
config.my.scripts);
systemd.user.services = lib.mapAttrs' (name: script:
lib.nameValuePair "${script.name}"
(lib.mkIf (script.enable && script.service) {
restartIfChanged = true;
description = script.description;
wantedBy = [ "default.target" ];
path = [ pkgs.nix script.package ];
serviceConfig = {
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${script.package}/bin/${script.name}";
};
})) config.my.scripts;
systemd.user.timers = lib.mapAttrs' (name: script:
lib.nameValuePair "${script.name}"
(lib.mkIf (script.enable && script.service) {
enable = true;
description = script.description;
wantedBy = [ "timers.target" ];
timerConfig = { OnCalendar = script.timer; };
})) config.my.scripts;
};
}

View File

@ -1,96 +1,114 @@
{ pkgs, lib, config, ... }: {
imports = [ ./base.nix ];
options.my.units.download.enable = lib.mkEnableOption "enable";
config = let
download = with pkgs;
python3Packages.buildPythonApplication {
pname = "download";
version = "2.5";
src = ../../scripts/download/.;
buildInputs = [ python3Packages.setuptools ];
propagatedBuildInputs = [
python3Packages.pyyaml
python3Packages.types-pyyaml
yt-dlp
gallery-dl
ffmpeg
];
};
in {
home-manager.users.jawz = {
xdg.configFile."gallery-dl/config.json".source =
../../dotfiles/gallery-dl/config.json;
services.lorri.enable = true;
programs.bash = {
shellAliases = {
comic = ''download -u jawz -i "$(cat $LC | fzf --multi --exact -i)"'';
gallery =
''download -u jawz -i "$(cat $LW | fzf --multi --exact -i)"'';
dl = "download -u jawz -i";
};
initExtra = ''
list_root=$XDG_CONFIG_HOME/jawz/lists/jawz
export LW=$list_root/watch.txt
export LI=$list_root/instant.txt
export LC=$list_root/comic.txt
'';
};
};
systemd.user = lib.mkIf config.my.units.download.enable {
services = let
mkDownloadService = desc: execStartCmd: {
restartIfChanged = true;
description = "Downloads ${desc}";
wantedBy = [ "default.target" ];
path = [ pkgs.bash download ];
serviceConfig = {
TimeoutStartSec = 2000;
TimeoutStopSec = 2000;
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${download}/bin/download ${execStartCmd}";
};
};
in {
tuhmayto = mkDownloadService "tuhmayto stuff" ''
-u jawz -i https://x.com/tuhmayto/media \
https://www.furaffinity.net/user/tuhmayto/'';
"download@" = mkDownloadService "post from multiple sources" "%I";
"instagram@" = mkDownloadService "post types from instagram"
"instagram -u jawz -t %I";
};
timers = let
downloadTimer = time: delay: {
enable = true;
description = "Downloads post types from different sites";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = time;
RandomizedDelaySec = delay;
Persistent = true;
};
};
in {
"instagram@stories" = downloadTimer "*-*-* 08:12:00" 120 // { };
"download@main" = downloadTimer "*-*-* 06,18:02:00" 30 // { };
"download@push" = downloadTimer "*:0/5" 30 // { };
"download@manga" = downloadTimer "Fri *-*-* 03:08:00" 30 // { };
# "download@kemono" = downloadTimer
# "*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 18:06:00" 60 // { };
tuhmayto = {
enable = true;
description = "Downloads tuhmayto stuff";
wantedBy = [ "timers.target" ];
timerConfig = { OnCalendar = "*:0/10"; };
};
};
};
my.scripts.download = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "download";
package = download;
};
{
inputs,
pkgs,
lib,
config,
...
}:
{
options.my.units = {
download.enable = lib.mkEnableOption "media download automation scripts";
downloadManga.enable = lib.mkEnableOption "manga download automation";
};
config =
let
inherit (inputs.jawz-scripts.packages.x86_64-linux) download;
in
{
home-manager.users.jawz.programs.${config.my.shell.type} = {
shellAliases = inputs.self.lib.mergeAliases inputs.self.lib.commonAliases {
dl = "${download}/bin/download -u jawz -i";
comic = ''dl "$(cat "$LC" | fzf --multi --exact -i)"'';
gallery = ''dl "$(cat "$LW" | fzf --multi --exact -i)"'';
};
}
//
inputs.self.lib.shellConditional config.my.shell.type
''
list_root=$XDG_CONFIG_HOME/jawz/lists/jawz
export LW=$list_root/watch.txt
export LI=$list_root/instant.txt
export LC=$list_root/comic.txt
''
''
list_root=$XDG_CONFIG_HOME/jawz/lists/jawz
export LW=$list_root/watch.txt
export LI=$list_root/instant.txt
export LC=$list_root/comic.txt
'';
systemd.user = {
services =
let
mkDownloadService = desc: execStartCmd: {
restartIfChanged = true;
description = "Downloads ${desc}";
wantedBy = [ "default.target" ];
path = [
pkgs.bash
];
serviceConfig = {
TimeoutStartSec = 2000;
TimeoutStopSec = 2000;
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${download}/bin/download ${execStartCmd}";
};
};
in
{
tuhmayto = lib.mkIf config.my.units.download.enable (
mkDownloadService "tuhmayto stuff" ''
-u jawz -i https://x.com/tuhmayto/media \
https://www.furaffinity.net/user/tuhmayto/ \
https://bsky.app/profile/tumayto.bsky.social''
);
"download@" = lib.mkIf (config.my.units.download.enable || config.my.units.downloadManga.enable) (
mkDownloadService "post from multiple sources" "%I"
);
"instagram@" = lib.mkIf config.my.units.download.enable (
mkDownloadService "post types from instagram" "instagram -u jawz -t %I"
);
};
timers =
let
downloadTimer = time: delay: {
enable = true;
description = "Downloads post types from different sites";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = time;
RandomizedDelaySec = delay;
Persistent = true;
};
};
in
{
# "instagram@stories" = lib.mkIf config.my.units.download.enable (
# downloadTimer "*-*-* 12:34:00" 120 // { }
# );
"download@main" = lib.mkIf config.my.units.download.enable (
downloadTimer "*-*-* 06,18:02:00" 30 // { }
);
"download@push" = lib.mkIf config.my.units.download.enable (downloadTimer "*:0/5" 30 // { });
"download@manga" = lib.mkIf config.my.units.downloadManga.enable (
downloadTimer "*-*-* 03:08:00" 30 // { }
);
tuhmayto = lib.mkIf config.my.units.download.enable {
enable = true;
description = "Downloads tuhmayto stuff";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*:0/10";
};
};
};
};
my.scripts.download = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "download";
package = download;
};
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.ffmpeg4discord = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "ffmpeg4discord";
package = pkgs.writeScriptBin "ffmpeg4discord"
(builtins.readFile ../../scripts/ffmpeg4discord.py);
package = inputs.jawz-scripts.packages.x86_64-linux.ffmpeg4discord;
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.ffmpreg = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "ffmpreg";
package = pkgs.writeScriptBin "ffmpreg"
(builtins.readFile ../../scripts/ffmpreg.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.ffmpreg;
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.find-dup-episodes = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "find-dup-episodes";
package = pkgs.writeScriptBin "find-dup-episodes"
(builtins.readFile ../../scripts/find-dup-episodes.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.find-dup-episodes;
};
}

View File

@ -0,0 +1,10 @@
{ inputs, lib, ... }:
{
config.my.scripts.library-report = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "library-report";
package = inputs.jawz-scripts.packages.x86_64-linux.library-report;
};
}

View File

@ -1,5 +1,5 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.manage-library = {
enable = lib.mkDefault false;
install = true;
@ -7,7 +7,6 @@
name = "manage-library";
timer = "00:30";
description = "scans the library directory and sorts files";
package = pkgs.writeScriptBin "manage-library"
(builtins.readFile ../../scripts/manage-library.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.manage-library;
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.pika-list = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "pika-list";
package = pkgs.writeScriptBin "pika-list"
(builtins.readFile ../../scripts/pika-list.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.pika-list;
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.run = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "run";
package =
pkgs.writeScriptBin "run" (builtins.readFile ../../scripts/run.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.run;
};
}

View File

@ -1,11 +1,10 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.split-dir = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "split-dir";
package = pkgs.writeScriptBin "split-dir"
(builtins.readFile ../../scripts/split-dir.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.split-dir;
};
}

View File

@ -1,47 +1,59 @@
{ pkgs, lib, config, ... }: {
imports = [ ./base.nix ];
options.my.units.stream-dl.enable = lib.mkEnableOption "enable";
config = let
stream-dl = pkgs.writeScriptBin "stream-dl"
(builtins.readFile ../../scripts/stream-dl.sh);
in {
systemd.user = lib.mkIf config.my.units.stream-dl.enable {
services."stream@" = {
description = "monitors a stream channel for online streams.";
restartIfChanged = true;
wantedBy = [ "default.target" ];
path = [ pkgs.nix stream-dl ];
serviceConfig = {
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${stream-dl}/bin/stream-dl %I";
};
};
timers = let
streamTimer = {
enable = true;
{
inputs,
pkgs,
lib,
config,
...
}:
{
options.my.units.stream-dl.enable = lib.mkEnableOption "streaming media download service";
config =
let
inherit (inputs.jawz-scripts.packages.x86_64-linux) stream-dl;
in
{
systemd.user = lib.mkIf config.my.units.stream-dl.enable {
services."stream@" = {
description = "monitors a stream channel for online streams.";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "5min";
OnUnitActiveSec = "65min";
RandomizedDelaySec = 30;
restartIfChanged = true;
wantedBy = [ "default.target" ];
path = [
pkgs.nix
stream-dl
];
serviceConfig = {
Restart = "on-failure";
RestartSec = 30;
ExecStart = "${stream-dl}/bin/stream-dl %I";
};
};
in {
"stream@johnneal911" = streamTimer // { };
"stream@uk2011boy" = streamTimer // { };
"stream@tommy9x6" = streamTimer // { };
"stream@brocollirob" = streamTimer // { };
"stream@tomayto\\x20picarto" = streamTimer // { };
timers =
let
streamTimer = {
enable = true;
description = "monitors a stream channel for online streams.";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "5min";
OnUnitActiveSec = "65min";
RandomizedDelaySec = 30;
};
};
in
{
"stream@johnneal911" = streamTimer // { };
"stream@uk2011boy" = streamTimer // { };
"stream@tommy9x6" = streamTimer // { };
"stream@brocollirob" = streamTimer // { };
"stream@tomayto\\x20picarto" = streamTimer // { };
};
};
my.scripts.stream-dl = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "stream-dl";
package = stream-dl;
};
};
my.scripts.stream-dl = {
enable = lib.mkDefault false;
install = true;
service = false;
name = "stream-dl";
package = stream-dl;
};
};
}

View File

@ -1,5 +1,5 @@
{ pkgs, lib, ... }: {
imports = [ ./base.nix ];
{ inputs, lib, ... }:
{
config.my.scripts.tasks = {
enable = lib.mkDefault false;
install = true;
@ -7,7 +7,6 @@
name = "tasks";
timer = "*:0/10";
description = "Runs a bunch of organizing tasks on selected directories";
package =
pkgs.writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh);
package = inputs.jawz-scripts.packages.x86_64-linux.tasks;
};
}

View File

@ -0,0 +1,12 @@
{ inputs, lib, ... }:
{
config.my.scripts.tuh-activity-logger = {
enable = lib.mkDefault false;
install = true;
service = true;
name = "tuh-activity-logger";
timer = "0/4:00";
description = "Logs the online activity on a website";
package = inputs.jawz-scripts.packages.x86_64-linux.tuh-activity-logger;
};
}

View File

@ -1,10 +1,30 @@
{ config, pkgs, lib, ... }: {
imports = [ ./base.nix ];
config = {
sops.secrets.dns = {
sopsFile = ../../secrets/env.yaml;
owner = config.users.users.jawz.name;
inherit (config.users.users.jawz) group;
{
inputs,
config,
pkgs,
lib,
...
}:
{
config = lib.mkIf config.my.secureHost {
sops.secrets = {
cloudflare-api.sopsFile = ../../secrets/env.yaml;
dns = {
sopsFile = ../../secrets/env.yaml;
owner = config.users.users.jawz.name;
inherit (config.users.users.jawz) group;
};
};
services.cloudflare-dyndns = {
# inherit (config.my.scripts.update-dns) enable;
enable = false;
ipv4 = true;
ipv6 = false;
proxied = false;
domains = [
config.my.domain
];
apiTokenFile = config.sops.secrets.cloudflare-api.path;
};
my.scripts.update-dns = {
enable = lib.mkDefault false;
@ -13,15 +33,18 @@
name = "update-dns";
timer = "*:0/30";
description = "Updates the IP of all my domains";
package = let
update-dns = pkgs.writeScriptBin "update-dns"
(builtins.readFile ../../scripts/update-dns.sh);
in pkgs.writeScriptBin "update-dns" ''
set -a &&
source ${config.sops.secrets.dns.path} &&
set -a &&
${update-dns}/bin/update-dns;
'';
package =
let
inherit (inputs.jawz-scripts.packages.x86_64-linux) update-dns;
in
pkgs.writeScriptBin "update-dns" ''
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bash curl
set -a
source ${config.sops.secrets.dns.path}
set -a
${update-dns}/bin/update-dns
'';
};
};
}

View File

@ -0,0 +1,21 @@
{
config,
lib,
pkgs,
...
}:
{
config.my.scripts.update-org-agenda-cache = {
enable = lib.mkDefault false;
install = config.my.emacs.enable;
service = config.my.emacs.enable;
name = "update-org-agenda-cache";
timer = "*:0/30";
description = "runs a function which builds a cache file.";
package = pkgs.writeScriptBin "update-org-agenda-cache" ''
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bash
${config.services.emacs.package}/bin/emacsclient --eval '(my/update-org-agenda-cache)'
'';
};
}

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