1
0
mirror of https://github.com/kmein/niveum synced 2026-03-16 18:21:07 +01:00

251 Commits

Author SHA1 Message Date
d751ecdab7 feat: add grimm dwb scroller 2022-09-08 08:47:11 +02:00
2280b21a75 feat: automate entering ssh passphrase 2022-09-08 08:46:53 +02:00
de34cb6d66 fix: downgrade nixpkgs unstable 2022-09-06 08:54:38 +02:00
3d6b34572d fix(scanned) 2022-09-05 15:38:59 +02:00
ce0869c64b fix(rofi-pass): user is in login field 2022-09-05 15:38:49 +02:00
a589332b42 feat(urlwatch): 2022 c3 2022-09-02 15:13:05 +02:00
5a6b32e0b4 Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-08-31 21:13:28 +02:00
6cf3072609 fix(i3status-rust): offline behaviour 2022-08-30 19:33:07 +02:00
4fe122f06c feat(telegram-bots): start at random time 2022-08-30 19:32:49 +02:00
4fa6a62966 feat: sxiv -> nsxiv 2022-08-30 19:32:27 +02:00
github-actions[bot]
dbdc876375 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/0160a0cef076294127f8cc0750019410ab94370d' (2022-08-22)
  → 'github:nix-community/home-manager/d89bdff445eadff03fe414e9c30486bc8166b72b' (2022-08-27)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/52527082ea267fe486f0648582d57c85486b2031' (2022-08-22)
  → 'github:NixOS/nixpkgs/f11e12ac6af528c1ba12426ce83cee26f21ceafd' (2022-08-26)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/c4a0efdd5a728e20791b8d8d2f26f90ac228ee8d' (2022-08-12)
  → 'github:NixOS/nixpkgs/f3d0897be466aa09a37f6bf59e62c360c3f9a6cc' (2022-08-25)
2022-08-28 01:01:59 +00:00
eb79f88c59 feat(i3status-rust): show number of hot weechat buffers 2022-08-23 21:44:39 +02:00
8384363dcb fix: downgrade nixpkgs unstable
coreutils gets built manually and electrum fails otherwise
2022-08-23 20:27:41 +02:00
797e53db7a feat: nom nom nom 2022-08-23 19:02:34 +02:00
426a82dff9 chore: update 2022-08-23 15:02:55 +02:00
7264fce03c feat(telegram-bots): add smyth 2022-08-23 14:47:24 +02:00
b332784140 fix(ci): add shared secret 2022-08-22 10:36:32 +02:00
ed51858a67 feat(i3status-rust): time interval 1s 2022-08-22 10:30:29 +02:00
ba13cd24a1 feat(fonts): noto sans cjk 2022-08-22 10:30:15 +02:00
8331d11a50 feat(i3status-rust): make email state depend on which account the unseen messages are 2022-08-22 10:30:02 +02:00
79e14bfbc2 feat(i3status-rust): todo empty if none due 2022-08-22 10:29:04 +02:00
eed0d0b2af feat(i3status-rust): add github block 2022-08-22 10:28:48 +02:00
5930340a05 feat(i3status-rust): hide todo and vpn when empty 2022-08-22 10:28:06 +02:00
a5f6a46262 feat(neomutt): set dark/light friendly subject colour 2022-08-22 10:27:33 +02:00
4eea890efc fix(i3-status-rust): newsboat updating icon 2022-08-21 10:09:19 +02:00
b5232c1d81 feat(i3status-rust): check all email accounts 2022-08-21 02:39:07 +02:00
e1b1458bb0 feat(i3status-rust): simplify newsboat display 2022-08-21 02:38:48 +02:00
1c05cccac0 feat(i3-status-rust): query IMAP 2022-08-21 02:22:43 +02:00
0f80e80d1f feat(newsboat): show watch later count in bar 2022-08-21 01:04:49 +02:00
06baeb8f1b feat(newsboat): simpler formatting 2022-08-21 01:04:26 +02:00
3b08c19e02 feat(unicodmenu): uniq and correct order 2022-08-21 01:03:24 +02:00
5ad8f2843d chore(i3-status-rust): clean up 2022-08-21 01:02:05 +02:00
af3c018cc1 feat(fonts): hello noto 2022-08-21 01:01:47 +02:00
2493206ff9 feat(i3status-rust): use fontawesome 2022-08-21 01:01:08 +02:00
985ff45e17 feat(i3status-rust): sum todos 2022-08-19 16:42:17 +02:00
ee373fcf3d feat(todo): warn when something is due today 2022-08-19 14:22:17 +02:00
04993972ce fix(hora): include last day of period for reports 2022-08-19 14:21:57 +02:00
972b810d23 feat(devanagari): update and support daṇḍa 2022-08-19 13:27:54 +02:00
34576b51bc feat(i3status-rust): reorder 2022-08-19 11:58:21 +02:00
5c1f29f2e7 feat(i3status-rust): lil jq tweaking 2022-08-19 11:58:21 +02:00
bce13c9306 feat(i3status-rust): colour datetime depending on impending calendar events 2022-08-19 11:27:43 +02:00
b9a3ed40d6 feat(i3status-rust): shut up if no VPN 2022-08-19 11:27:28 +02:00
9a11a00e4f feat(i3status-rust): add todo count 2022-08-19 11:27:17 +02:00
5fa7957978 feat(i3status-rust): newsboat via json 2022-08-19 11:26:56 +02:00
38946d1c20 feat(i3status-rust): distinguish info colour 2022-08-19 11:26:27 +02:00
fe07e13848 feat: rofipass
for automatic OTP stuff
2022-08-18 18:47:25 +02:00
d06a27431c feat(i3): simplify bar 2022-08-18 18:47:12 +02:00
e3a6b9ee03 feat(fotns): change emoji font 2022-08-18 18:46:58 +02:00
9a2f03beaf feat(hora): filli-report 2022-08-18 18:46:43 +02:00
5a247d68a0 fix(heuretes): ^...$ 2022-08-17 08:33:09 +02:00
88a2ace2e0 chore: update retiolum 2022-08-17 08:32:55 +02:00
ce17c069e5 feat: heuretes 2022-08-16 21:17:30 +02:00
4c730f9730 feat: rmlint 2022-08-16 21:17:24 +02:00
39847fc8fe neomutt: add @flxai docx viewer 2022-08-16 21:17:14 +02:00
b07d74c72a Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-08-15 16:05:56 +02:00
460dcb5101 feat: stackoverflow script 2022-08-15 16:05:36 +02:00
github-actions[bot]
03b565e8ef flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249' (2022-07-04)
  → 'github:numtide/flake-utils/c0e246b9b83f637f4681389ecabcb2681b4f3af0' (2022-08-07)
• Updated input 'home-manager':
    'github:nix-community/home-manager/d8d9ff0b2df77defa10375c6665b51f0251c34d6' (2022-08-03)
  → 'github:nix-community/home-manager/8675cfa549e1240c9d2abb1c878bc427eefcf926' (2022-08-12)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/72f492e275fc29d44b3a4daf952fbeffc4aed5b8' (2022-08-06)
  → 'github:NixOS/nixpkgs/5c211b47aeadcc178c5320afd4e74c7eed5c389f' (2022-08-12)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/93c57a988470c1948976b1bb70abbd5855c5b810' (2022-08-05)
  → 'github:NixOS/nixpkgs/c4a0efdd5a728e20791b8d8d2f26f90ac228ee8d' (2022-08-12)
• Updated input 'retiolum':
    'github:krebs/retiolum/d735957a658896ee93bf538a837aeff3d87cf78b' (2022-08-02)
  → 'github:krebs/retiolum/93b1b32211ca41d23487e8cf7c30ed903ab9d186' (2022-08-10)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=79e75b27a9d8fc23a1731255b20831f708f9194a' (2022-08-02)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=7ce87f5fdb602de7638b2df237e891e6038907ac' (2022-08-10)
2022-08-14 00:58:01 +00:00
d97ddf8357 Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-08-10 21:08:09 +02:00
a593e6242a lol 2022-08-10 21:07:56 +02:00
ecbe639a8c feat(zaatar): ncpamixer 2022-08-10 21:07:49 +02:00
dde14495de feat(bluetooth): add more stuff 2022-08-10 21:07:39 +02:00
github-actions[bot]
3d3374d296 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/4c5106ed0f3168ff2df21b646aef67e86cbfc11c' (2022-07-15)
  → 'github:nix-community/home-manager/d8d9ff0b2df77defa10375c6665b51f0251c34d6' (2022-08-03)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/c06d5fa9c605d143b15cafdbbb61c7c95388d76e' (2022-07-14)
  → 'github:NixOS/nixpkgs/72f492e275fc29d44b3a4daf952fbeffc4aed5b8' (2022-08-06)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/4a01ca36d6bfc133bc617e661916a81327c9bbc8' (2022-07-14)
  → 'github:NixOS/nixpkgs/93c57a988470c1948976b1bb70abbd5855c5b810' (2022-08-05)
• Updated input 'retiolum':
    'github:krebs/retiolum/0371a65100b68d46e1811ec1e3efd8281bc741df' (2022-06-28)
  → 'github:krebs/retiolum/d735957a658896ee93bf538a837aeff3d87cf78b' (2022-08-02)
• Updated input 'scripts':
    'github:kmein/scripts/9b945b3f38297b1cbd6a9efe337c0805d6e2997d' (2022-07-21)
  → 'github:kmein/scripts/d5a38cf84e3f528641b1b10d9f33cf8bfcd5a52a' (2022-07-21)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=64dbf31d70497d6a66f89fdd86ac1884e28f7bc8' (2022-06-28)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=79e75b27a9d8fc23a1731255b20831f708f9194a' (2022-08-02)
2022-08-07 01:01:59 +00:00
2fb1274286 feat: re-enable all locales 😠 2022-07-29 21:30:28 +02:00
2ecf9bd008 fix(hesychius): parse modes fail with lexicon text format 2022-07-29 18:36:35 +02:00
ea1242933b fix(telegram-bot): better logging and reporting 2022-07-29 18:36:14 +02:00
5bc26ddc12 feat(hesychius): add 2022-07-25 23:18:26 +02:00
5a16a90a8a fix(anki): use new version 2022-07-25 22:25:34 +02:00
44501db7fb feat(newsboat): add key for syncing, add indicator to bar 2022-07-25 22:25:19 +02:00
f805e3a076 feat: pimp filli-report 2022-07-25 12:34:25 +02:00
e5d63b92d7 feat(printing): no scanning, no hplip plugin, no waiting two hours for it to build ❤ 2022-07-19 22:05:06 +02:00
f9f17b59a7 feat: use new nix options 2022-07-19 22:00:49 +02:00
fcdac38986 feat(nix): add binary caches 2022-07-19 21:42:39 +02:00
0a156eaeb8 chore: alejandra 2022-07-19 21:34:43 +02:00
c243dbf180 feat: update fully to 22.05 2022-07-19 21:34:23 +02:00
8b69768c82 feat: make deploying faster by fetching krops sources from git 2022-07-19 21:34:23 +02:00
61d95a2f00 feat(printing): add system-config-printer
how could i live without this?
2022-07-18 17:36:21 +02:00
c945a92467 feat: filli-report 2022-07-18 17:36:21 +02:00
7813ac0eaf chore: update 2022-07-17 07:35:56 +02:00
df94a61b8b Merge branch 'update_flake_lock_action' 2022-07-17 07:28:29 +02:00
06c682619c fix(horoscope): update dependencies 2022-07-15 10:03:43 +02:00
8e941f60ea fix(ci): add support for pure evaluation mode
the errors were caused by https://github.com/NixOS/nix/pull/6698
fix taken from https://github.com/hercules-ci/gitignore.nix/pull/58/files
2022-07-15 09:44:55 +02:00
5c5a5609cf feat(zathura): keep hue when recoloring 2022-07-15 08:47:26 +02:00
0121fc152d feat: okular 2022-07-15 08:47:09 +02:00
61dbcd8ffe feat: genpass 2022-07-14 07:35:48 +02:00
927da70957 fix(zaatar): disable wait online 2022-07-11 18:22:25 +02:00
b8a55f024b Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-07-11 07:57:25 +02:00
8513b68132 feat: literature quote to channel 2022-07-11 07:57:19 +02:00
github-actions[bot]
bd1bdce121 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/bee6a7250dd1b01844a2de7e02e4df7d8a0a206c' (2022-06-24)
  → 'github:numtide/flake-utils/7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249' (2022-07-04)
• Updated input 'home-manager':
    'github:nix-community/home-manager/3bf16c0fd141c28312be52945d1543f9ce557bb1' (2022-06-27)
  → 'github:nix-community/home-manager/c645cc9f82c7753450d1fa4d1bc73b64960a9d7a' (2022-07-09)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/915f5a5b3cc4f8ba206afd0b70e52ba4c6a2796b' (2022-07-01)
  → 'github:NixOS/nixpkgs/71d7a4c037dc4f3e98d5c4a81b941933cf5bf675' (2022-07-08)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb' (2022-07-02)
  → 'github:NixOS/nixpkgs/b39924fc7764c08ae3b51beef9a3518c414cdb7d' (2022-07-08)
2022-07-10 01:02:03 +00:00
cfaeb824a6 feat(ci): add ful 2022-07-09 07:13:33 +02:00
github-actions[bot]
9afb27e526 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/1dbac84b846e4bfa21a08e31e95e11f0965ed042' (2022-06-25)
  → 'github:nix-community/home-manager/3bf16c0fd141c28312be52945d1543f9ce557bb1' (2022-06-27)
• Removed input 'home-manager/flake-compat'
• Removed input 'home-manager/nmd'
• Removed input 'home-manager/nmt'
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/ccf8bdf72624521358be6bb7d9b524c4cbcf7aff' (2022-06-23)
  → 'github:NixOS/nixpkgs/915f5a5b3cc4f8ba206afd0b70e52ba4c6a2796b' (2022-07-01)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/6141b8932a5cf376fe18fcd368cecd9ad946cb68' (2022-06-23)
  → 'github:NixOS/nixpkgs/0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb' (2022-07-02)
• Updated input 'retiolum':
    'github:krebs/retiolum/8c41abaeed7f862b02dddd31eae204e262799c4b' (2022-06-06)
  → 'github:krebs/retiolum/0371a65100b68d46e1811ec1e3efd8281bc741df' (2022-06-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=4ef26cd0f67d77dbb1a35b5b43ed2272c17e64b8' (2022-06-21)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=64dbf31d70497d6a66f89fdd86ac1884e28f7bc8' (2022-06-28)
2022-07-09 07:12:02 +02:00
75c825dc25 feat(ssh): fysi machines 2022-07-06 15:10:47 +02:00
85f5c71313 feat(weechat): bye bye useless channels 2022-07-05 19:12:01 +02:00
ddd4bd5720 fix(tahina) 2022-07-05 19:11:45 +02:00
github-actions[bot]
8e74569cc4 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/1dbac84b846e4bfa21a08e31e95e11f0965ed042' (2022-06-25)
  → 'github:nix-community/home-manager/3bf16c0fd141c28312be52945d1543f9ce557bb1' (2022-06-27)
• Removed input 'home-manager/flake-compat'
• Removed input 'home-manager/nmd'
• Removed input 'home-manager/nmt'
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/ccf8bdf72624521358be6bb7d9b524c4cbcf7aff' (2022-06-23)
  → 'github:NixOS/nixpkgs/915f5a5b3cc4f8ba206afd0b70e52ba4c6a2796b' (2022-07-01)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/6141b8932a5cf376fe18fcd368cecd9ad946cb68' (2022-06-23)
  → 'github:NixOS/nixpkgs/0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb' (2022-07-02)
• Updated input 'retiolum':
    'github:krebs/retiolum/8c41abaeed7f862b02dddd31eae204e262799c4b' (2022-06-06)
  → 'github:krebs/retiolum/0371a65100b68d46e1811ec1e3efd8281bc741df' (2022-06-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=4ef26cd0f67d77dbb1a35b5b43ed2272c17e64b8' (2022-06-21)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=64dbf31d70497d6a66f89fdd86ac1884e28f7bc8' (2022-06-28)
2022-07-03 17:41:38 +02:00
e15cc88467 feat(home-manager): set stateVersion 2022-06-28 15:27:36 +02:00
20ba241063 fix(hedgedoc) 2022-06-28 15:27:08 +02:00
github-actions[bot]
4c0b065b8f flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1' (2022-05-30)
  → 'github:numtide/flake-utils/bee6a7250dd1b01844a2de7e02e4df7d8a0a206c' (2022-06-24)
• Updated input 'home-manager':
    'github:nix-community/home-manager/5197e5df7d3a148b1ad080235f70800987bc3549' (2022-06-18)
  → 'github:nix-community/home-manager/1dbac84b846e4bfa21a08e31e95e11f0965ed042' (2022-06-25)
• Updated input 'home-manager/nmd':
    'gitlab:rycee/nmd/9e7a20e6ee3f6751f699f79c0b299390f81f7bcd' (2022-05-23)
  → 'gitlab:rycee/nmd/91dee681dd1c478d6040a00835d73c0f4a4c5c29' (2022-05-23)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/d17a56d90ecbd1b8fc908d49598fb854ef188461' (2022-06-17)
  → 'github:NixOS/nixpkgs/ccf8bdf72624521358be6bb7d9b524c4cbcf7aff' (2022-06-23)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/3d7435c638baffaa826b85459df0fff47f12317d' (2022-06-16)
  → 'github:NixOS/nixpkgs/6141b8932a5cf376fe18fcd368cecd9ad946cb68' (2022-06-23)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=500aa05de7e34f6a60639a74017583268f9a829d' (2022-06-21)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=4ef26cd0f67d77dbb1a35b5b43ed2272c17e64b8' (2022-06-21)
2022-06-26 00:58:07 +00:00
9d8ee97123 fix(flameshot) 2022-06-21 23:14:19 +02:00
a451d2af61 feat(weechat): adapt to new declarative setup by @lassulus 2022-06-21 23:13:37 +02:00
365f6f780a feat(xkeymap): set options in kb-* scripts 2022-06-21 19:34:55 +02:00
8a713a7180 Merge branch 'update_flake_lock_action' 2022-06-21 19:34:08 +02:00
33c3babfc0 feat(weechat): zerocovid only on news.r 2022-06-21 19:22:18 +02:00
github-actions[bot]
dea3aa1c5c flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/684e85d01d333be91c4875baebb05b93c7d2ffaa' (2022-06-01)
  → 'github:nix-community/home-manager/5197e5df7d3a148b1ad080235f70800987bc3549' (2022-06-18)
• Added input 'home-manager/flake-compat':
    'github:edolstra/flake-compat/b4a34015c698c7793d592d66adbab377907a2be8' (2022-04-19)
• Added input 'home-manager/nmd':
    'gitlab:rycee/nmd/9e7a20e6ee3f6751f699f79c0b299390f81f7bcd' (2022-05-23)
• Added input 'home-manager/nmt':
    'gitlab:rycee/nmt/d83601002c99b78c89ea80e5e6ba21addcfe12ae' (2022-03-23)
• Added input 'home-manager/utils':
    'github:numtide/flake-utils/1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1' (2022-05-30)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/7a20c208aacf4964c19186dcad51f89165dc7ed0' (2022-06-03)
  → 'github:NixOS/nixpkgs/d17a56d90ecbd1b8fc908d49598fb854ef188461' (2022-06-17)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/236cc2971ac72acd90f0ae3a797f9f83098b17ec' (2022-06-03)
  → 'github:NixOS/nixpkgs/3d7435c638baffaa826b85459df0fff47f12317d' (2022-06-16)
• Updated input 'retiolum':
    'github:krebs/retiolum/ac9e1d5b02c5667ba12aa6d6ab077cc071ffc2f4' (2022-05-30)
  → 'github:krebs/retiolum/8c41abaeed7f862b02dddd31eae204e262799c4b' (2022-06-06)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=4a9f93e8933d87ce8f04965b2772564527f1e2fd' (2022-05-29)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=18ea4967c1a708a70c0c807c4ba2f602bc72570c' (2022-06-10)
2022-06-19 00:54:07 +00:00
github-actions[bot]
cc90b1bac4 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/684e85d01d333be91c4875baebb05b93c7d2ffaa' (2022-06-01)
  → 'github:nix-community/home-manager/70824bb5c790b820b189f62f643f795b1d2ade2e' (2022-06-07)
• Added input 'home-manager/flake-compat':
    'github:edolstra/flake-compat/b4a34015c698c7793d592d66adbab377907a2be8' (2022-04-19)
• Added input 'home-manager/nmd':
    'gitlab:rycee/nmd/9e7a20e6ee3f6751f699f79c0b299390f81f7bcd' (2022-05-23)
• Added input 'home-manager/nmt':
    'gitlab:rycee/nmt/d83601002c99b78c89ea80e5e6ba21addcfe12ae' (2022-03-23)
• Added input 'home-manager/utils':
    'github:numtide/flake-utils/1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1' (2022-05-30)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/7a20c208aacf4964c19186dcad51f89165dc7ed0' (2022-06-03)
  → 'github:NixOS/nixpkgs/dab6df51387c3878cdea09f43589a15729cae9f4' (2022-06-11)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/236cc2971ac72acd90f0ae3a797f9f83098b17ec' (2022-06-03)
  → 'github:NixOS/nixpkgs/e0169d7a9d324afebf5679551407756c77af8930' (2022-06-08)
• Updated input 'retiolum':
    'github:krebs/retiolum/ac9e1d5b02c5667ba12aa6d6ab077cc071ffc2f4' (2022-05-30)
  → 'github:krebs/retiolum/8c41abaeed7f862b02dddd31eae204e262799c4b' (2022-06-06)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=4a9f93e8933d87ce8f04965b2772564527f1e2fd' (2022-05-29)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=18ea4967c1a708a70c0c807c4ba2f602bc72570c' (2022-06-10)
2022-06-12 00:54:37 +00:00
28949a1072 feat(neovim): dim 2022-06-08 09:52:54 +02:00
0a6b5300b0 fix: pin nixpkgs for telegram bots 2022-06-08 09:52:08 +02:00
b9c34994c2 feat(radio-news): send stockholm history on time 2022-06-07 11:02:46 +02:00
95f5ee330b feat(radio-news): local time 2022-06-06 17:12:50 +02:00
eb9e7f534d Merge pull request #17 from kmein/update_flake_lock_action
flake.lock: Update
2022-06-05 18:00:12 +02:00
github-actions[bot]
64357f4b42 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/8f3e26705178cc8c1d982d37d881fc0d5b5b1837' (2022-05-30)
  → 'github:nix-community/home-manager/684e85d01d333be91c4875baebb05b93c7d2ffaa' (2022-06-01)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/a634c8f6c1fbf9b9730e01764999666f3436f10a' (2022-05-30)
  → 'github:NixOS/nixpkgs/7a20c208aacf4964c19186dcad51f89165dc7ed0' (2022-06-03)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/b62ada430501de88dfbb08cea4eb98ead3a5e3e7' (2022-05-29)
  → 'github:NixOS/nixpkgs/236cc2971ac72acd90f0ae3a797f9f83098b17ec' (2022-06-03)
2022-06-05 17:24:33 +02:00
6f31509e50 fix(keyboard): start monolingually 2022-06-05 17:24:11 +02:00
db7cb8c74c chore: update to 22.05 2022-05-31 22:26:56 +02:00
fbc50a3fea feat(weechat): add #eloop 2022-05-31 22:26:17 +02:00
2a33a37d11 feat(nextcloud): update 2022-05-31 22:03:03 +02:00
d7ee9b7c1a feat(nextcloud): update 2022-05-31 19:37:25 +02:00
b142dcdcc3 feat: bye ranger, hey lf 2022-05-31 19:34:20 +02:00
adae22772b fix(avesta): say no to cantera 2022-05-31 19:34:00 +02:00
0387d5c44b fix: update 2022-05-31 14:17:13 +02:00
github-actions[bot]
72048388dc flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/e66f0ff69a6c0698b35034b842c4b68814440778' (2022-05-23)
  → 'github:nix-community/home-manager/64831f938bd413cefde0b0cf871febc494afaa4f' (2022-05-25)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/cbd40c72b2603ab54e7208f99f9b35fc158bc009' (2022-05-20)
  → 'github:NixOS/nixpkgs/9bc0e974545d5bc4c24e1ed047be0dc4e30e494b' (2022-05-26)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/dfd82985c273aac6eced03625f454b334daae2e8' (2022-05-20)
  → 'github:NixOS/nixpkgs/83658b28fe638a170a19b8933aa008b30640fbd1' (2022-05-26)
• Updated input 'retiolum':
    'github:krebs/retiolum/40c6e184cecaae4fe0b4973c6cb8027a66cccaae' (2022-05-25)
  → 'github:krebs/retiolum/8668bb3e768fd2ec162036937f7b6edba437be68' (2022-05-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=5befc5a6f260e2283863212b39749d5ed05afb63' (2022-05-19)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=4d33f2ebea49e258f833cb6eab0c71485e88397a' (2022-05-28)
2022-05-31 14:17:13 +02:00
5253b83eb5 feat: ضف المشكّل 2022-05-30 18:24:17 +02:00
4b073323da feat(alacritty): less opaque, better cursor 2022-05-25 17:05:38 +02:00
bf35fb1020 feat(radio-news): ask radio-news.r 2022-05-25 17:05:19 +02:00
3fa820a65a feat(radio-news): set sensible default 2022-05-25 13:13:40 +02:00
0ae6397878 feat(delta): bye, you don't work with light themes 2022-05-24 15:05:20 +02:00
35ce4b1689 feat: new themes for alacritty 2022-05-24 15:05:20 +02:00
5b38655575 fix(ci): use nixos-stable 2022-05-24 15:05:20 +02:00
129127f917 feat: steal theming from lassulus 2022-05-24 14:14:12 +02:00
28ee96bc22 feat: use unstable for thinkpads, only fetch used krops inputs 2022-05-24 11:11:52 +02:00
238f2126b0 fix(radio-news): add dot to keep tts from spazzing out 2022-05-24 11:10:59 +02:00
8c1350c570 chore(hedgedoc): we can use stable sqlite 2022-05-24 11:10:36 +02:00
4d8912b020 feat(pls): add neutral response 2022-05-24 11:09:25 +02:00
588c161f7b feat(ssh): get static ipv4 from lib file 2022-05-24 11:09:02 +02:00
5fb0028a9e feat: powertop 2022-05-24 11:08:00 +02:00
8d88e58726 fix(ci): add ful 2022-05-24 11:07:44 +02:00
203eecddcb feat: add configurationLimit for manakish and makanek 2022-05-22 19:52:45 +02:00
2d67488b02 Merge branch 'update_flake_lock_action' 2022-05-22 19:31:47 +02:00
44efc4dfa1 feat(passport): init for makanek 2022-05-22 11:48:04 +02:00
github-actions[bot]
e6ac020fd2 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/12806d31a381e7cd169a6bac35590e7b36dc5fe5' (2022-05-14)
  → 'github:numtide/flake-utils/04c1b180862888302ddfb2e3ad9eaa63afc60cf8' (2022-05-17)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/79385ae0aacf7e02871cc8af0623123419dd7884' (2022-05-13)
  → 'github:NixOS/nixpkgs/cbd40c72b2603ab54e7208f99f9b35fc158bc009' (2022-05-20)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/437fd89069be470fba34ef7c7f5abc55fe20e328' (2022-05-20)
  → 'github:NixOS/nixpkgs/af0bcde689ed5263e9a0df36116f7583163eb032' (2022-05-22)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=c87ba30c0c1cf344c7cc090d73a2ba44140f15d9' (2022-05-11)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=5befc5a6f260e2283863212b39749d5ed05afb63' (2022-05-19)
2022-05-22 00:50:33 +00:00
9a3499ab6c feat(ful): limit to 1 configuration
this circumvents space issues on the /boot partition
2022-05-21 23:07:19 +02:00
92442db877 feat(ful): set root password 2022-05-21 23:06:49 +02:00
d2f85ab972 chore(ful): disable monitoring for now 2022-05-21 23:06:33 +02:00
b593f45ec2 chore(ful): move IP 2022-05-21 23:06:13 +02:00
e9b09a3e67 chore: bye youtube-dl 2022-05-21 23:05:43 +02:00
8c9a44d404 feat(ssh): reach ful, makanek via http first 2022-05-20 23:16:46 +02:00
45fdbad259 chore: update 2022-05-20 23:04:28 +02:00
93b8d31a33 feat: init ful 2022-05-20 23:04:15 +02:00
abb7924fca chore: only one unstable nixpkgs 2022-05-20 23:03:57 +02:00
0c872352e3 feat(hora): auto-update git 2022-05-18 18:11:32 +02:00
31e765da41 fix(geoip-share): really start after geoipupdate 2022-05-18 18:11:13 +02:00
d655faef3e fix(retiolum-map): update 2022-05-18 18:10:57 +02:00
2f5b177158 feat(klem): add avestan 2022-05-18 18:10:37 +02:00
4bc176ea42 fix(unicodmenu): append history 2022-05-17 22:34:30 +02:00
4b63d1b671 feat(hledger): add time tracking tools 2022-05-17 22:34:18 +02:00
dd86c24506 feat(matterbridge): disable, moved to krebs ponte 2022-05-17 22:34:02 +02:00
88c73b23a1 Merge branch 'update_flake_lock_action' 2022-05-15 23:07:03 +02:00
3675ab8161 feat(scripts): remove horoscope 2022-05-15 23:02:42 +02:00
github-actions[bot]
aac1053e1d flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/a4b154ebbdc88c8498a5c7b01589addc9e9cb678' (2022-04-11)
  → 'github:numtide/flake-utils/12806d31a381e7cd169a6bac35590e7b36dc5fe5' (2022-05-14)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/5656d7f92aa8264eb06ba68ad94c87ac5b5312e8' (2022-05-06)
  → 'github:NixOS/nixpkgs/79385ae0aacf7e02871cc8af0623123419dd7884' (2022-05-13)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/d707e510df39cdd8fe1d3e244371a3a9f23051d2' (2022-05-08)
  → 'github:NixOS/nixpkgs/e9132b233ec7176c121b4ecb991ce397d92275ee' (2022-05-15)
• Updated input 'retiolum':
    'github:krebs/retiolum/2bafba9621b83529b78fb2db34b351fd19411c0e' (2022-05-04)
  → 'github:krebs/retiolum/7cc2a7118e4aa9f5df0953bebad28034306329e6' (2022-05-11)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=376b92c877442ec3be476ea5f4c89f8a715426dd' (2022-05-04)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=c87ba30c0c1cf344c7cc090d73a2ba44140f15d9' (2022-05-11)
2022-05-15 01:03:59 +00:00
651f6d9319 fix(gitea): show correct SSH clone port 2022-05-11 17:38:52 +02:00
69332ec98d fix(pmount): setuid 2022-05-11 11:23:21 +02:00
6c65a48ea8 feat(matterbridge): move to new token 2022-05-11 09:23:21 +02:00
d25cfe6c9b feat(unicodmenu): add history 2022-05-10 19:29:39 +02:00
9cd5974870 feat: use newest anki 2022-05-09 07:51:00 +02:00
8c8eceb01a feat(keyboard): add modes for languages 2022-05-08 22:01:29 +02:00
9601fb9456 feat(fonts): add GFS todo list 2022-05-08 13:55:48 +02:00
dc9e84599e Merge branch 'update_flake_lock_action' 2022-05-08 10:49:26 +02:00
94bdfda91b feat(fonts): add new SIL 2022-05-08 09:15:05 +02:00
84a69f31de fix(nextcloud): start after gnome-keyring 2022-05-08 09:15:05 +02:00
dcbe8841ba feat(scripts): back to old ipa script 2022-05-08 09:15:05 +02:00
bef795e45c feat(fonts): add new SIL 2022-05-08 09:14:48 +02:00
9b7c300466 fix(nextcloud): start after gnome-keyring 2022-05-08 09:14:37 +02:00
f4fca0a971 feat(scripts): back to old ipa script 2022-05-08 09:14:20 +02:00
github-actions[bot]
23b341a314 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/d14adb99f3fb562ec74ad18c032efc154b438034' (2022-04-26)
  → 'github:nix-community/home-manager/d93d56ab8c1c6aa575854a79b9d2f69d491db7d0' (2022-05-02)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/feea25c58657fa81d16e0e51f80e1a02ef4cbd49' (2022-04-27)
  → 'github:NixOS/nixpkgs/5656d7f92aa8264eb06ba68ad94c87ac5b5312e8' (2022-05-06)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/05ced71757730406ca3eb3e58503f05334a6057d' (2022-05-01)
  → 'github:NixOS/nixpkgs/d707e510df39cdd8fe1d3e244371a3a9f23051d2' (2022-05-08)
• Updated input 'retiolum':
    'github:krebs/retiolum/de6d7dc9bd671e65f2ee3004b6807625e7553e84' (2022-03-16)
  → 'github:krebs/retiolum/2bafba9621b83529b78fb2db34b351fd19411c0e' (2022-05-04)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=92d5eacd6d9e530c4d1ea0dec2652417b0fde78a' (2022-04-15)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=376b92c877442ec3be476ea5f4c89f8a715426dd' (2022-05-04)
2022-05-08 00:50:36 +00:00
89c852c4ea feat: bye youtube-dl, hi yt-dlp 2022-05-07 11:26:51 +02:00
github-actions[bot]
3fa242b957 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/7244c6715cb8f741f3b3e1220a9279e97b2ed8f5' (2022-04-13)
  → 'github:nix-community/home-manager/d14adb99f3fb562ec74ad18c032efc154b438034' (2022-04-26)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/a318a09a96a38382fe61a7f85d03ea6e25c46c56' (2022-04-22)
  → 'github:NixOS/nixpkgs/feea25c58657fa81d16e0e51f80e1a02ef4cbd49' (2022-04-27)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/0f1f92d85be76e0bd79ebb2285be8f43683eb845' (2022-04-24)
  → 'github:NixOS/nixpkgs/05ced71757730406ca3eb3e58503f05334a6057d' (2022-05-01)
• Updated input 'scripts':
    'github:kmein/scripts/adfd4238f7a8f0f894547998cbb04327bad97884' (2022-04-19)
  → 'github:kmein/scripts/c1aaeb4339e9c41057d362667554835a0f49850f' (2022-04-26)
2022-05-02 14:07:03 +02:00
35c51b3b17 fix(ci): add dslalewa 2022-05-02 13:54:18 +02:00
f1c049ada3 fix(names): restart on failure 2022-05-02 13:28:57 +02:00
8118009acb feat(neomutt): add office documents to mailcap 2022-05-02 13:28:42 +02:00
41706bc84b feat(neomutt): add alew admin account 2022-05-02 13:28:30 +02:00
eec7be0c3b feat(moodle-dl): papyrology 2022-04-26 20:07:21 +02:00
2aac2609cb feat: yt-dlp 2022-04-26 20:07:09 +02:00
2b7db496b0 feat(keyboard): add docs 2022-04-25 11:58:54 +02:00
0feebd18cd feat(keyboard): add gxkb 2022-04-25 11:58:37 +02:00
892c758303 feat(keyboard): add arabic and russian 2022-04-25 11:58:36 +02:00
8cc3541d2d fix: do not monitor http://names.kmein.r/ 2022-04-24 17:24:58 +02:00
687aa456d1 Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-04-24 13:58:19 +02:00
github-actions[bot]
fd60863f77 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/2f06b87f64bc06229e05045853e0876666e1b023' (2022-04-14)
  → 'github:NixOS/nixpkgs/a318a09a96a38382fe61a7f85d03ea6e25c46c56' (2022-04-22)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/6140c314d5850406dddc78e55dcc8716ea111ee4' (2022-04-17)
  → 'github:NixOS/nixpkgs/0f1f92d85be76e0bd79ebb2285be8f43683eb845' (2022-04-24)
2022-04-24 00:45:55 +00:00
a60cbab742 feat(moodle-dl): more courses 2022-04-22 12:31:37 +02:00
54383cb1ab feat(moodle-dl): first load of courses 2022-04-19 23:29:41 +02:00
9b414d104a fix(makanek): names 2022-04-19 23:28:00 +02:00
67b7d63d9a Merge branch 'update_flake_lock_action' 2022-04-19 23:17:50 +02:00
f3116bfc12 fix(nextcloud): start after gnome keyring 2022-04-17 10:48:32 +02:00
f31baf9e56 chore(update)
• Updated input 'flake-utils':
    'github:numtide/flake-utils/0f8662f1319ad6abf89b3380dd2722369fc51ade' (2022-03-26)
  → 'github:numtide/flake-utils/a4b154ebbdc88c8498a5c7b01589addc9e9cb678' (2022-04-11)
• Updated input 'home-manager':
    'github:nix-community/home-manager/0bdbdea2e26c984b096f4f7d10e3c88536a980b0' (2022-04-01)
  → 'github:nix-community/home-manager/7244c6715cb8f741f3b3e1220a9279e97b2ed8f5' (2022-04-13)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/c86185d20d708013caf97a6adaa8dc6d72313c75' (2022-04-09)
  → 'github:NixOS/nixpkgs/2f06b87f64bc06229e05045853e0876666e1b023' (2022-04-14)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/c2b6e029cd1efa0efd37daab89264ef040ae5669' (2022-04-09)
  → 'github:NixOS/nixpkgs/6140c314d5850406dddc78e55dcc8716ea111ee4' (2022-04-17)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=b3833baee96d7bce2c54295110b40c646468a1ff' (2022-04-04)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=92d5eacd6d9e530c4d1ea0dec2652417b0fde78a' (2022-04-15)
2022-04-17 07:02:08 +02:00
906cc1981e fix(tuna): nix types 2022-04-15 01:17:38 +02:00
d4e82500ae feat(mpv): limit resolution 2022-04-14 13:40:11 +02:00
6aa9be6f70 feat: more fonts 2022-04-13 09:01:23 +02:00
4e362678ca feat(astrology): pause bot 2022-04-13 09:01:23 +02:00
a2081dece4 feat(weechat): block people 2022-04-11 23:02:02 +02:00
98cf188a17 feat: use more tmpfiles.d 2022-04-10 19:38:47 +02:00
4932c7c08a chore(update) 2022-04-10 09:13:34 +02:00
c8a6991f09 fix(menstruation): update to pinning version 2022-04-10 00:36:07 +02:00
5d3c9a67ab fix(monitoring): remove tahina 2022-04-04 18:35:32 +02:00
github-actions[bot]
659a888c3d flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/a8d00f5c038cf7ec54e7dac9c57b171c1217f008' (2022-03-13)
  → 'github:nix-community/home-manager/0bdbdea2e26c984b096f4f7d10e3c88536a980b0' (2022-04-01)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/d2caa9377539e3b5ff1272ac3aa2d15f3081069f' (2022-03-22)
  → 'github:NixOS/nixpkgs/6f88260faaaa3cda8f4e478be72be6c0861c47ad' (2022-04-01)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/6de161729c81dc98e844793cc9c8fda29d5ef62a' (2022-03-26)
  → 'github:NixOS/nixpkgs/21299f3dd3ff475f19bc8933f30ebb6a135799f1' (2022-04-02)
• Updated input 'scripts':
    'github:kmein/scripts/d1d525b92a34e55b1ad886807c284106e58716b2' (2022-03-26)
  → 'github:kmein/scripts/f5df67a2416d8f05a7dbfea269c44668854c7887' (2022-03-27)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=ae9c0b12710b5361d0d45510eb401eebfc1b3fb0' (2022-03-25)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=b9e0a7ec71e0318a992ff2b275a6aaee3cef63bd' (2022-03-28)
2022-04-03 00:47:09 +00:00
26908b03a3 chore(tahina): clean 2022-03-30 18:29:16 +02:00
feccea5234 feat(streams): add soma playlist 2022-03-30 18:29:04 +02:00
8ffb0bd245 feat: jless 2022-03-30 09:17:58 +02:00
c1b777b689 feat(tor): enable 2022-03-29 20:13:29 +02:00
e85a8f7634 feat(mpd): tag stations 2022-03-29 20:13:29 +02:00
25bc6f573c chore(tahina): clean 2022-03-29 09:54:56 +02:00
4b5915354b fix(nextcloud): start with gnome-keyring 2022-03-29 09:54:37 +02:00
43ab6b3210 feat(tahina): init as guest laptop 2022-03-29 01:07:01 +02:00
e08eb0e970 feat(tahina): init 2022-03-28 20:47:55 +02:00
012d78cc0e feat(ssh): add tahina 2022-03-28 20:47:55 +02:00
github-actions[bot]
62f52922b8 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/3cecb5b042f7f209c56ffd8371b2711a290ec797' (2022-02-07)
  → 'github:numtide/flake-utils/0f8662f1319ad6abf89b3380dd2722369fc51ade' (2022-03-26)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/2c66a7a6e036971c4847cca424125f55b9eb0b0b' (2022-03-17)
  → 'github:NixOS/nixpkgs/d2caa9377539e3b5ff1272ac3aa2d15f3081069f' (2022-03-22)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b8f8b90b90ac713eb7f5cc7eb2100141ee29751d' (2022-03-20)
  → 'github:NixOS/nixpkgs/6de161729c81dc98e844793cc9c8fda29d5ef62a' (2022-03-26)
• Updated input 'scripts':
    'github:kmein/scripts/d34a8161ba11135a45d3141dc9af482db945d63c' (2021-12-13)
  → 'github:kmein/scripts/d1d525b92a34e55b1ad886807c284106e58716b2' (2022-03-26)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=b1068cadc4458d91889b7ede847829af33d2b145' (2022-03-15)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=ae9c0b12710b5361d0d45510eb401eebfc1b3fb0' (2022-03-25)
2022-03-27 00:46:44 +00:00
28d359c73b fix(kabsa): dont fail if sdcard not present 2022-03-25 17:06:09 +01:00
8830147359 feat: git-absorb 2022-03-23 19:07:20 +01:00
e9adccacd9 feat: cdt, vit 2022-03-23 19:07:20 +01:00
github-actions[bot]
588ec3d180 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/2860d7e3bb350f18f7477858f3513f9798896831' (2022-02-04)
  → 'github:nix-community/home-manager/a8d00f5c038cf7ec54e7dac9c57b171c1217f008' (2022-03-13)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b' (2022-03-10)
  → 'github:NixOS/nixpkgs/2c66a7a6e036971c4847cca424125f55b9eb0b0b' (2022-03-17)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b783c48432cdfc35224a39bd95666daa62fef126' (2022-03-13)
  → 'github:NixOS/nixpkgs/b8f8b90b90ac713eb7f5cc7eb2100141ee29751d' (2022-03-20)
• Updated input 'retiolum':
    'github:krebs/retiolum/5858b524a77cff53f1fbe21e0af3189e52a9654d' (2022-03-13)
  → 'github:krebs/retiolum/de6d7dc9bd671e65f2ee3004b6807625e7553e84' (2022-03-16)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=2dc05dbafbd5490be6a9754a55679a6576efbad1' (2022-03-11)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=b1068cadc4458d91889b7ede847829af33d2b145' (2022-03-15)
2022-03-20 08:11:31 +01:00
6ea8500818 feat(chromium): update extensions 2022-03-16 20:13:15 +01:00
bf6c82a11d feat(ssh): add oracle 2022-03-16 20:12:50 +01:00
9c68ff20bc feat(home-assistant): run on home.kmein.r 2022-03-13 17:25:06 +01:00
2565bfbc27 feat(streams): explore more 2022-03-13 11:17:28 +01:00
a4d002e293 chore: format 2022-03-13 10:31:19 +01:00
730070bc9d feat: rofi-hass 2022-03-13 10:30:42 +01:00
6f1f1887b9 feat(pass): install import and genphrase extensions, kill bitwarden 2022-03-13 10:29:50 +01:00
github-actions[bot]
68f8bb06f4 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/47cd6702934434dd02bc53a67dbce3e5493e33a2' (2022-03-04)
  → 'github:NixOS/nixpkgs/bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b' (2022-03-10)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/a173e92ee458878651356b9bcfb1e2b5145f76af' (2022-03-05)
  → 'github:NixOS/nixpkgs/b783c48432cdfc35224a39bd95666daa62fef126' (2022-03-13)
• Updated input 'retiolum':
    'github:krebs/retiolum/259d60325310b728f79c68dc1148f597e097d1b2' (2022-02-28)
  → 'github:krebs/retiolum/e488402be7f60a478c95a4bad6d6e2c67f2b55f9' (2022-03-10)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=87a44dd1573cbdc8f0fc3553b0896b470bcfa44d' (2022-03-03)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=2dc05dbafbd5490be6a9754a55679a6576efbad1' (2022-03-11)
2022-03-13 00:38:35 +00:00
7afe712c27 feat: electrum 2022-03-12 13:03:54 +01:00
1946a30b2f feat(home-assistant): install cli 2022-03-12 13:03:54 +01:00
c1f013fc2f feat(weechat): update channels 2022-03-11 10:22:57 +01:00
3be0766a7a feat(mpv): add visualizer 2022-03-11 00:04:53 +01:00
5216f693a1 feat(restic): backup home-assistant state 2022-03-10 23:11:36 +01:00
ab3de7a042 feat(home-assistant): run in podman on zaatar 2022-03-10 22:59:43 +01:00
de6d91297b feat(vim): respect https://github.com/romainl/idiomatic-vimrc 2022-03-10 22:29:57 +01:00
6342fb9047 feat(tmux): improve config 2022-03-10 22:15:52 +01:00
d37e90cb97 chore: format with alejandra 2022-03-10 21:52:20 +01:00
github-actions[bot]
13727abfd6 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/4275a321beab5a71872fb7a5fe5da511bb2bec73' (2022-02-23)
  → 'github:NixOS/nixpkgs/47cd6702934434dd02bc53a67dbce3e5493e33a2' (2022-03-04)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/6f21ff94fc44af21973c6fdae6e03323382b7909' (2022-02-26)
  → 'github:NixOS/nixpkgs/a173e92ee458878651356b9bcfb1e2b5145f76af' (2022-03-05)
• Updated input 'retiolum':
    'github:krebs/retiolum/5e69ac7782c7d384a4b6cad4619dd83aa952426f' (2022-02-22)
  → 'github:krebs/retiolum/259d60325310b728f79c68dc1148f597e097d1b2' (2022-02-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=a67ded588b45c09ca58a3b4007a8d32e42323613' (2022-02-26)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=87a44dd1573cbdc8f0fc3553b0896b470bcfa44d' (2022-03-03)
2022-03-06 00:39:35 +00:00
a23f0c80a2 feat(urlwatch): lisalittmann.de 2022-03-05 13:46:09 +01:00
b0b19c3989 feat(networkmanager): enable applet 2022-03-05 13:46:09 +01:00
ef223a9717 feat(weechat): hackint works now 2022-03-05 13:46:09 +01:00
ecfc2ca06c fix(weechat): no sasl 2022-03-05 13:46:09 +01:00
cd7e688a46 feat(weechat): #flipdot-berlin 2022-03-05 13:46:09 +01:00
github-actions[bot]
f7b9008ed0 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/40ef692a55b188b1f5ae3967f3fc7808838c3f1d' (2022-02-20)
  → 'github:NixOS/nixpkgs/4275a321beab5a71872fb7a5fe5da511bb2bec73' (2022-02-23)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/856fbb7e322fd9c7e951d42a792957b84f0b0bb6' (2022-02-23)
  → 'github:NixOS/nixpkgs/6f21ff94fc44af21973c6fdae6e03323382b7909' (2022-02-26)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=442319c8949c85b32071fc4e694938b480637770' (2022-02-19)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=a67ded588b45c09ca58a3b4007a8d32e42323613' (2022-02-26)
2022-02-27 00:40:13 +00:00
81706489b5 feat: bye bye horoscopy 2022-02-25 07:08:50 +01:00
817f57ad09 fix: dont pin matterbridge 2022-02-23 19:25:04 +01:00
eafb1ce0c3 chore: update nixpkgs 2022-02-23 19:24:09 +01:00
0c72a89760 feat(streams): use lassulus radio as described in irc topic 2022-02-22 21:52:41 +01:00
a7db357e54 feat(radio-news): most recent commits show 2022-02-22 21:52:17 +01:00
1ad6c63a2f feat(makanek): redaktion.r 2022-02-22 20:41:55 +01:00
502ab93585 fix(restic): runuser correctly 2022-02-21 20:09:35 +01:00
github-actions[bot]
fe6bda3cf2 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/74f7e4319258e287b0f9cb95426c9853b282730b' (2021-11-28)
  → 'github:numtide/flake-utils/846b2ae0fc4cc943637d3d1def4454213e203cba' (2022-01-20)
• Updated input 'home-manager':
    'github:nix-community/home-manager/697cc8c68ed6a606296efbbe9614c32537078756' (2021-12-18)
  → 'github:nix-community/home-manager/2860d7e3bb350f18f7477858f3513f9798896831' (2022-02-04)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/5d3420c1285073d5061a5d88a533b347d1222750' (2022-01-10)
  → 'github:NixOS/nixpkgs/d49a447c18eac3c1639b99550df08b43948b28e0' (2022-02-06)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/bd20b7f07fd337b2e85420edd642382a2cc0196d' (2022-01-11)
  → 'github:NixOS/nixpkgs/91e0ecf1f103170237df3628c2c46cfe75212867' (2022-02-06)
• Updated input 'retiolum':
    'github:krebs/retiolum/23e04565a0360d31605a6c6cdc1becb5b9f76f32' (2022-01-28)
  → 'github:krebs/retiolum/ccf6324d29277b8c033a2275850eb7b09227f403' (2022-02-02)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=f67bd5783d6ed2be836c7714ea38cbb3f7ac7257' (2022-01-09)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=332d4f5e1719df2b27f835c4fd0718317867043c' (2022-02-03)
2022-02-20 07:03:04 +01:00
c64e681ada feat(weechat): update channels 2022-02-19 12:10:04 +01:00
af813cc876 feat(urlwatch): more urls 2022-02-19 12:09:31 +01:00
195 changed files with 6824 additions and 3867 deletions

29
.bin/anki-poem.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/sh
file="${1?please supply a poetry file}"
[ -f "$file" ] || {
echo "'$file' is no file"
exit 1
}
poem="$(mktemp)"
clean () {
rm "$poem"
}
trap clean EXIT
sed '/^$/d' "$file" > "$poem"
htmlize() {
awk 'ORS="<br/>"' \
| head -c -5 # remove final <br/> characters
}
for line_number in $(seq 1 "$(wc -l "$poem" | cut -d' ' -f1)"); do
if [ "$line_number" -gt 3 ] && [ "$line_number" -gt 1 ]; then
sed -n "$((line_number - 3)),$((line_number - 1))p" "$poem"
else
sed -n "1,$((line_number - 1))p" "$poem"
fi | htmlize
printf '\t'
sed -n "${line_number},+1p" "$poem" | htmlize
printf '\n'
done

26
.bin/watson2fdf.sh Executable file
View File

@@ -0,0 +1,26 @@
project=Filli
year=2022
for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec; do
from="$(date +%F -d "$month 1, $year")"
to="$(date +%F -d "$month 1, $year + 1 month")"
watson report --json --from "$from" --to "$to" --project "$project"
done | jq --slurp '
def in_array($arr):
. as $value | any($arr[]; . == $value);
map(
["engadin-app","fysiweb","val-muestair","mia-engiadina","ol"] as $official_projects
| (.timespan.from | .[0:7]) as $timespan
| .projects | .[0]
| .time as $total_time
| .tags
| select(. != null)
| map(select(.name | in_array($official_projects)))
| (map(.time)|add) as $official_time
| map({key:.name, value:.time}) | from_entries
| .other |= ($total_time - $official_time)
| map_values(. / (60*60) | ceil)
| .month |= $timespan
)
'

View File

@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
system: [makanek,manakish,kabsa,zaatar] system: [makanek,manakish,kabsa,zaatar,ful]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: cachix/install-nix-action@v16 - uses: cachix/install-nix-action@v16

117
ci.nix
View File

@@ -1,32 +1,50 @@
{ inputs, system, name }: {
let inputs,
inherit (inputs) nixpkgs; system,
name,
}: let
nixpkgs = inputs.nixos-stable;
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
ensureFiles = paths: pkgs.runCommand "directory" {} '' ensureFiles = paths:
set -efu pkgs.runCommand "directory" {} ''
mkdir $out set -efu
cd $out mkdir $out
${nixpkgs.lib.concatMapStringsSep "\n" (path: '' cd $out
mkdir -p "$(dirname ${nixpkgs.lib.escapeShellArg path})" ${
echo foo > ${nixpkgs.lib.escapeShellArg path} nixpkgs.lib.concatMapStringsSep "\n" (path: ''
'') paths} mkdir -p "$(dirname ${nixpkgs.lib.escapeShellArg path})"
''; echo foo > ${nixpkgs.lib.escapeShellArg path}
'')
paths
}
'';
nixPath = nixpkgs.lib.concatStringsSep ":" ([ nixPath = nixpkgs.lib.concatStringsSep ":" ([
"niveum=${toString ./.}" "niveum=${toString ./.}"
"nixos-config=${toString ./.}/systems/${name}/configuration.nix" "nixos-config=${toString ./.}/systems/${name}/configuration.nix"
"system-secrets=${systemSecrets}" "system-secrets=${systemSecrets}"
"secrets=${sharedSecrets}" "secrets=${sharedSecrets}"
] ++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs); "nixpkgs=${
toString (
if name == "kabsa" || name == "manakish"
then inputs.nixos-unstable
else inputs.nixos-stable
)
}"
]
++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs);
# cd ~/.password-store/shared && find * -type f | sed 's/.gpg$//' # cd ~/.password-store/shared && find * -type f | sed 's/.gpg$//'
sharedSecrets = ensureFiles [ sharedSecrets = ensureFiles [
"di.fm/key" "di.fm/key"
"eduroam/identity" "eduroam/identity"
"eduroam/password" "eduroam/password"
"github/notification.token"
"hass/token"
"mail/cock" "mail/cock"
"mail/fastmail" "mail/fastmail"
"mail/gmail/amroplay" "mail/gmail/amroplay"
"mail/gmail/kieran.meinhardt" "mail/gmail/kieran.meinhardt"
"mail/meinhaki" "mail/meinhaki"
"mail/dslalewa"
"mail/posteo" "mail/posteo"
"nextcloud-fysi/password" "nextcloud-fysi/password"
"nextcloud/password" "nextcloud/password"
@@ -37,31 +55,40 @@ let
"spotify/username" "spotify/username"
"spotify/password" "spotify/password"
]; ];
systemSecrets = let basic = [ "retiolum.ed25519" "retiolum.key" "syncthing/cert.pem" "syncthing/key.pem"]; in { systemSecrets = let
zaatar = ensureFiles ([ "moodle.token" "telegram/moodle-dl.token" "mpd-web.key" ] ++ basic); basic = ["retiolum.ed25519" "retiolum.key" "syncthing/cert.pem" "syncthing/key.pem"];
kabsa = ensureFiles basic; in
manakish = ensureFiles basic; {
makanek = ensureFiles ([ zaatar = ensureFiles (["moodle.token" "telegram/moodle-dl.token" "mpd-web.key"] ++ basic);
"irc/retiolum" kabsa = ensureFiles basic;
"irc/hackint" manakish = ensureFiles basic;
"irc/libera" tahina = ensureFiles basic;
"irc/oftc" ful = ensureFiles (["root.password"] ++ basic);
"matrix/nibbana" makanek = ensureFiles ([
"maxmind/license.key" "irc/retiolum"
"moodle-dl/faye.token" "irc/hackint"
"nextcloud/admin" "irc/libera"
"nextcloud/database" "irc/oftc"
"telegram/nachtischsatan.token" "matrix/nibbana"
"telegram/reverse.token" "maxmind/license.key"
"telegram/odyssey.token" "moodle-dl/faye.token"
"telegram/betacode.token" "nextcloud/admin"
"telegram/moodle-dl.token" "nextcloud/database"
"telegram/proverb.token" "telegram/nachtischsatan.token"
"telegram/menstruation.token" "telegram/reverse.token"
"telegram/cool_village.token" "telegram/odyssey.token"
"telegram/kmein.token" "telegram/betacode.token"
"telegram/prometheus.token" "telegram/moodle-dl.token"
"weechat/relay" "telegram/proverb.token"
] ++ basic); "telegram/menstruation.token"
}.${name}; "telegram/cool_village.token"
in toString (pkgs.writers.writeDash "build" "NIX_PATH=${nixPath} nix-build '<nixpkgs/nixos>' -A system --dry-run") "telegram/kmein.token"
"telegram/krebs.token"
"telegram/prometheus.token"
"weechat/relay"
]
++ basic);
}
.${name};
in
toString (pkgs.writers.writeDash "build" "NIX_PATH=${nixPath} nix-build '<nixpkgs/nixos>' -A system --dry-run")

View File

@@ -1,28 +1,17 @@
{ pkgs, lib, config, ... }:
{ {
environment.variables.TERMINAL = "alacritty"; pkgs,
lib,
environment.systemPackages = [ config,
pkgs.alacritty ...
]; }: let
alacritty-cfg = theme:
home-manager.users.me.xdg.configFile = (pkgs.formats.yaml {}).generate "alacritty.yml" {
let window.opacity = 0.95;
inherit (import <niveum/lib>) colours;
colourNames = [ "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" ];
colourPairs = lib.getAttrs colourNames colours;
in {
"alacritty/alacritty.yml".source = (pkgs.formats.yaml {}).generate "alacritty.yml" {
background_opacity = 0.9;
colors = {
primary = { inherit (colours) background foreground; };
normal = lib.mapAttrs (_: colour: colour.dark) colourPairs;
bright = lib.mapAttrs (_: colour: colour.bright) colourPairs;
};
font = { font = {
normal.family = "Monospace"; normal.family = "Monospace";
size = 6; size = 6;
}; };
live_config_reload = true;
key_bindings = [ key_bindings = [
{ {
key = "Plus"; key = "Plus";
@@ -40,6 +29,34 @@
action = "ResetFontSize"; action = "ResetFontSize";
} }
]; ];
colors = let
colourNames = ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"];
colourPairs = lib.getAttrs colourNames theme;
in {
primary = {inherit (theme) background foreground;};
cursor = {inherit (theme) cursor;};
normal = lib.mapAttrs (_: colour: colour.dark) colourPairs;
bright = lib.mapAttrs (_: colour: colour.bright) colourPairs;
};
}; };
alacritty-pkg = pkgs.symlinkJoin {
name = "alacritty";
paths = [
(pkgs.writeDashBin "alacritty" ''
${pkgs.alacritty}/bin/alacritty --config-file /var/theme/config/alacritty.yml "$@"
'')
pkgs.alacritty
];
};
in {
environment.variables.TERMINAL = "alacritty";
environment.systemPackages = [
alacritty-pkg
];
environment.etc = {
"themes/dark/alacritty.yml".source = alacritty-cfg (import <niveum/lib/colours/ayu-dark.nix>);
"themes/light/alacritty.yml".source = alacritty-cfg (import <niveum/lib/colours/ayu-light.nix>);
}; };
} }

View File

@@ -1,12 +1,17 @@
{ pkgs, config, ... }:
let
inherit (import <niveum/lib>) restic;
in
{ {
pkgs,
config,
...
}: let
inherit (import <niveum/lib>) restic;
in {
services.restic.backups.niveum = { services.restic.backups.niveum = {
initialize = true; initialize = true;
inherit (restic) repository; inherit (restic) repository;
timerConfig = { OnCalendar = "8:00"; RandomizedDelaySec = "1h"; }; timerConfig = {
OnCalendar = "8:00";
RandomizedDelaySec = "1h";
};
passwordFile = toString <secrets/restic/password>; passwordFile = toString <secrets/restic/password>;
extraBackupArgs = [ extraBackupArgs = [
"--exclude=/home/kfm/projects/nixpkgs/.git" "--exclude=/home/kfm/projects/nixpkgs/.git"

View File

@@ -1,11 +1,14 @@
{ config, pkgs, ... }:
{ {
config,
pkgs,
...
}: {
boot.extraModulePackages = with config.boot.kernelPackages; [ boot.extraModulePackages = with config.boot.kernelPackages; [
tp_smapi tp_smapi
acpi_call acpi_call
]; ];
boot.kernelModules = [ "tp_smapi" "acpi_call" ]; boot.kernelModules = ["tp_smapi" "acpi_call"];
environment.systemPackages = [ pkgs.tpacpi-bat ]; environment.systemPackages = [pkgs.tpacpi-bat pkgs.powertop];
services.tlp = { services.tlp = {
enable = true; enable = true;

View File

@@ -1,11 +1,14 @@
{ lib, pkgs, ... }:
{ {
environment.systemPackages = [ pkgs.beets ]; lib,
pkgs,
...
}: {
environment.systemPackages = [pkgs.beets];
home-manager.users.me.xdg.configFile = { home-manager.users.me.xdg.configFile = {
"beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" { "beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" {
directory = "~/cloud/syncthing/music"; directory = "~/cloud/syncthing/music";
library = "~/cloud/syncthing/common/music.db"; library = "~/cloud/syncthing/common/music.db";
plugins = toString [ "fetchart" "lastgenre" ]; plugins = toString ["fetchart" "lastgenre"];
}; };
}; };
} }

View File

@@ -1,11 +1,17 @@
{ pkgs, lib, ... }: { {
pkgs,
lib,
...
}: {
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
settings.General.Enable = settings.General.Enable =
lib.concatStringsSep "," [ "Source" "Sink" "Media" "Socket" ]; lib.concatStringsSep "," ["Source" "Sink" "Media" "Socket"];
}; };
environment.systemPackages = [ pkgs.blueman ]; services.blueman.enable = true;
home-manager.users.me = { services.blueman-applet.enable = false; }; # environment.systemPackages = [pkgs.blueman];
home-manager.users.me = {services.blueman-applet.enable = true;};
} }

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: {pkgs, ...}:
# https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34 # https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34
let let
certificate = pkgs.stdenv.mkDerivation rec { certificate = pkgs.stdenv.mkDerivation rec {
@@ -7,7 +7,7 @@ let
1,/DST Root CA X3/d 1,/DST Root CA X3/d
1,/-----END CERTIFICATE-----/p 1,/-----END CERTIFICATE-----/p
''; '';
nativeBuildInputs = with pkgs; [ cacert gnused ]; nativeBuildInputs = with pkgs; [cacert gnused];
phases = "installPhase"; phases = "installPhase";
installPhase = '' installPhase = ''
${pkgs.gnused}/bin/sed -n -f $src ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt > $out ${pkgs.gnused}/bin/sed -n -f $src ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt > $out

View File

@@ -1,16 +1,17 @@
{ pkgs, ... }: { {pkgs, ...}: {
programs.chromium = { programs.chromium = {
enable = true; enable = true;
extensions = [ extensions = [
"nngceckbapebfimnlniiiahkandclblb" # BitWarden
# "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim # "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
# "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine # "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin "cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"khncfooichmfjbepaaaebmommgaepoid" # Remove YouTube Recommended Videos "pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted
"nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader
]; ];
}; };
environment.systemPackages = [ pkgs.brave ]; environment.systemPackages = [pkgs.brave];
environment.variables.BROWSER = "brave"; environment.variables.BROWSER = "brave";
} }

View File

@@ -1,4 +1,11 @@
{ config, lib, pkgs, ... }: { {
config,
lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) tmpfilesConfig;
in {
imports = [ imports = [
<niveum/modules/dropbox.nix> <niveum/modules/dropbox.nix>
]; ];
@@ -7,17 +14,45 @@
dropbox.enable = false; dropbox.enable = false;
}; };
system.activationScripts.home-symlinks = '' systemd.tmpfiles.rules = map tmpfilesConfig [
ln -sfn ${config.users.users.me.home}/cloud/syncthing/common/mahlzeit ${config.users.users.me.home}/mahlzeit {
ln -sfn ${config.users.users.me.home}/cloud/Seafile/Wiki ${config.users.users.me.home}/notes type = "L+";
ln -sfn ${config.users.users.me.home}/cloud/Seafile/Uni ${config.users.users.me.home}/uni user = config.users.users.me.name;
''; group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/Seafile/Wiki";
path = "${config.users.users.me.home}/notes";
}
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/Seafile/Uni";
path = "${config.users.users.me.home}/uni";
}
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/syncthing/common/mahlzeit";
path = "${config.users.users.me.home}/mahlzeit";
}
];
home-manager.users.me = { home-manager.users.me = {
services.gnome-keyring.enable = true;
services.nextcloud-client = { services.nextcloud-client = {
enable = true; enable = true;
startInBackground = true; startInBackground = true;
}; };
systemd.user.services.nextcloud-client = {
Unit = {
Wants = ["gnome-keyring.service"];
After = ["gnome-keyring.service"];
};
};
}; };
environment.systemPackages = [ environment.systemPackages = [
@@ -50,16 +85,16 @@
cert = toString <system-secrets/syncthing/cert.pem>; cert = toString <system-secrets/syncthing/cert.pem>;
key = toString <system-secrets/syncthing/key.pem>; key = toString <system-secrets/syncthing/key.pem>;
inherit ((import <niveum/lib>).syncthing) devices; inherit ((import <niveum/lib>).syncthing) devices;
folders = folders = let
let cloud-dir = "${config.users.users.me.home}/cloud"; cloud-dir = "${config.users.users.me.home}/cloud";
in { in {
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ]; "${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ]; "${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ]; "${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/music" = { "${cloud-dir}/syncthing/music" = {
devices = [ "kabsa" "manakish" "heym" "zaatar" ]; devices = ["kabsa" "manakish" "heym" "zaatar"];
id = "music"; id = "music";
};
}; };
};
}; };
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
copyqConfig = pkgs.writers.writeDash "copyq-config" '' copyqConfig = pkgs.writers.writeDash "copyq-config" ''
${pkgs.copyq}/bin/copyq config check_clipboard true ${pkgs.copyq}/bin/copyq config check_clipboard true
${pkgs.copyq}/bin/copyq config check_selection false ${pkgs.copyq}/bin/copyq config check_selection false
@@ -18,10 +21,10 @@ let
${pkgs.copyq}/bin/copyq config text_wrap true ${pkgs.copyq}/bin/copyq config text_wrap true
''; '';
in { in {
environment.systemPackages = [ pkgs.copyq ]; environment.systemPackages = [pkgs.copyq];
systemd.user.services.copyq = { systemd.user.services.copyq = {
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
environment = { environment = {
DISPLAY = ":${toString config.services.xserver.display}"; DISPLAY = ":${toString config.services.xserver.display}";
}; };

View File

@@ -1,5 +1,10 @@
{ pkgs, lib, config, options, ... }: {
let pkgs,
lib,
config,
options,
...
}: let
inherit (lib.strings) makeBinPath; inherit (lib.strings) makeBinPath;
inherit (import <niveum/lib>) localAddresses kieran; inherit (import <niveum/lib>) localAddresses kieran;
in { in {
@@ -7,7 +12,7 @@ in {
<home-manager/nixos> <home-manager/nixos>
<niveum/modules/system-dependent.nix> <niveum/modules/system-dependent.nix>
{ {
boot.supportedFilesystems = [ "ntfs" ]; boot.supportedFilesystems = ["ntfs"];
} }
{ {
nix.nixPath = [ nix.nixPath = [
@@ -23,13 +28,22 @@ in {
dmenu = pkgs.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"''; dmenu = pkgs.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {}; gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
tocharian-font = pkgs.callPackage <niveum/packages/tocharian-font.nix> {}; tocharian-font = pkgs.callPackage <niveum/packages/tocharian-font.nix> {};
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { }; iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> {};
ix = pkgs.callPackage <niveum/packages/ix.nix> { }; ix = pkgs.callPackage <niveum/packages/ix.nix> {};
rofi-pass = pkgs.rofi-pass.overrideAttrs (final: previous: {
patches = [
# password store androi
<niveum/packages/rofi-pass.patch>
];
});
}; };
}; };
overlays = [ overlays = [
(self: super: { (self: super: {
scripts = import <niveum/packages/scripts> { pkgs = super; lib = super.lib; }; scripts = import <niveum/packages/scripts> {
pkgs = super;
lib = super.lib;
};
}) })
]; ];
}; };
@@ -44,6 +58,7 @@ in {
enable = true; enable = true;
options = { options = {
selection-clipboard = "clipboard"; selection-clipboard = "clipboard";
recolor-keephue = true;
# first-page-column = "1:1"; # makes side-by-side mode start on the left side # first-page-column = "1:1"; # makes side-by-side mode start on the left side
}; };
}; };
@@ -57,8 +72,7 @@ in {
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = kieran.name;
hashedPassword = hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
"$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
isNormalUser = true; isNormalUser = true;
uid = 1000; uid = 1000;
}; };
@@ -72,27 +86,27 @@ in {
hardware.pulseaudio = { hardware.pulseaudio = {
enable = true; enable = true;
package = pkgs.pulseaudioFull; package = pkgs.pulseaudioFull;
extraModules = [ pkgs.pulseaudio-modules-bt ];
# copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine # copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true; zeroconf.discovery.enable = true;
extraConfig = '' extraConfig = ''
load-module ${toString [ load-module ${
"module-tunnel-sink-new" toString [
"server=zaatar.r" "module-tunnel-sink-new"
"sink_name=zaatar" "server=zaatar.r"
"channels=2" "sink_name=zaatar"
"rate=44100" "channels=2"
]} "rate=44100"
]
}
''; '';
}; };
users.users.me.extraGroups = [ "audio" ]; users.users.me.extraGroups = ["audio"];
environment.systemPackages = [ pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer ]; environment.systemPackages = [pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer];
} }
{ {
environment.interactiveShellInit = environment.interactiveShellInit = "export PATH=$PATH:$HOME/projects/niveum";
"export PATH=$PATH:$HOME/projects/niveum";
environment.shellAliases = let environment.shellAliases = let
wcd = pkgs.writers.writeDash "wcd" '' wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.." cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
@@ -103,15 +117,18 @@ in {
take = pkgs.writers.writeDash "take" '' take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1" mkdir "$1" && cd "$1"
''; '';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
in { in {
"ß" = "${pkgs.utillinux}/bin/setsid"; "ß" = "${pkgs.utillinux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --style=plain"; cat = "${pkgs.bat}/bin/bat --style=plain";
chromium-incognito = chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
"chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
cp = "cp --interactive"; cp = "cp --interactive";
ip = "${pkgs.iproute}/bin/ip -c"; ip = "${pkgs.iproute}/bin/ip -c";
l = "ls --color=auto --time-style=long-iso --almost-all"; l = "ls --color=auto --time-style=long-iso --almost-all";
ls = "ls --color=auto --time-style=long-iso"; ls = "ls --color=auto --time-style=long-iso";
ll = "ls --color=auto --time-style=long-iso -l"; ll = "ls --color=auto --time-style=long-iso -l";
la = "ls --color=auto --time-style=long-iso --almost-all -l"; la = "ls --color=auto --time-style=long-iso --almost-all -l";
@@ -124,20 +141,25 @@ in {
rm = "rm --interactive"; rm = "rm --interactive";
s = "${pkgs.systemd}/bin/systemctl"; s = "${pkgs.systemd}/bin/systemctl";
take = "source ${take}"; take = "source ${take}";
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
tmux = "${pkgs.tmux}/bin/tmux -2"; tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.sxiv}/bin/sxiv"; sxiv = swallow "${pkgs.nsxiv}/bin/nsxiv";
zathura = swallow "${pkgs.zathura}/bin/zathura"; zathura = swallow "${pkgs.zathura}/bin/zathura";
us = "${pkgs.systemd}/bin/systemctl --user"; us = "${pkgs.systemd}/bin/systemctl --user";
wcd = "source ${wcd}"; wcd = "source ${wcd}";
im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM"; im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM";
where = "source ${where}"; where = "source ${where}";
yt = yt = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -ic"; # Download video link
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -ic"; # Download video link yta = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -xic"; # Download with audio
yta = };
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -xic"; # Download with audio }
{
i18n = {
defaultLocale = "en_DK.UTF-8";
supportedLocales = ["all"];
}; };
} }
{ i18n.defaultLocale = "en_DK.UTF-8"; }
{ {
services.xserver = { services.xserver = {
enable = true; enable = true;
@@ -150,7 +172,7 @@ in {
enable = true; enable = true;
greeters.gtk = { greeters.gtk = {
enable = true; enable = true;
indicators = [ "~spacer" "~host" "~spacer" "~session" "~power" ]; indicators = ["~spacer" "~host" "~spacer" "~session" "~power"];
}; };
}; };
}; };
@@ -159,24 +181,26 @@ in {
{ {
security.wrappers = { security.wrappers = {
pmount = { pmount = {
setuid = true;
owner = "root"; owner = "root";
group = "users"; group = "root";
source = "${pkgs.pmount}/bin/pmount"; source = "${pkgs.pmount}/bin/pmount";
}; };
pumount = { pumount = {
setuid = true;
owner = "root"; owner = "root";
group = "users"; group = "root";
source = "${pkgs.pmount}/bin/pumount"; source = "${pkgs.pmount}/bin/pumount";
}; };
}; };
} }
{ programs.command-not-found.enable = true; } {programs.command-not-found.enable = true;}
{ {
programs.gnupg.agent.enable = true; programs.gnupg.agent.enable = true;
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnupg pkgs.gnupg
(pkgs.pass.withExtensions (e: [e.pass-otp])) (pkgs.pass.withExtensions (e: [e.pass-otp e.pass-import e.pass-genphrase]))
]; ];
} }
{ {
@@ -189,10 +213,15 @@ in {
}; };
} }
{ {
networking.hosts = lib.mapAttrs' (name: address: { networking.hosts =
name = address; lib.mapAttrs' (name: address: {
value = [ "${name}.local" ]; name = address;
}) localAddresses; value = ["${name}.local"];
})
localAddresses;
}
{
home-manager.users.me.home.stateVersion = "22.05";
} }
./alacritty.nix ./alacritty.nix
./backup.nix ./backup.nix
@@ -231,7 +260,7 @@ in {
./polkit.nix ./polkit.nix
./power-action.nix ./power-action.nix
./printing.nix ./printing.nix
./openweathermap.nix # ./openweathermap.nix
./wallpaper.nix ./wallpaper.nix
./redshift.nix ./redshift.nix
./retiolum.nix ./retiolum.nix
@@ -241,13 +270,14 @@ in {
./ssh.nix ./ssh.nix
./sshd.nix ./sshd.nix
./sudo.nix ./sudo.nix
./sxiv.nix ./nsxiv.nix
./theming.nix ./themes.nix
./tmux.nix ./tmux.nix
./traadfri.nix ./traadfri.nix
./unclutter.nix ./unclutter.nix
./vscode.nix ./vscode.nix
./watson.nix ./watson.nix
./zsh.nix ./zsh.nix
./tor.nix
]; ];
} }

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: let
let
nixify = pkgs.writers.writeDashBin "nixify" '' nixify = pkgs.writers.writeDashBin "nixify" ''
set -efuC set -efuC
@@ -18,18 +17,18 @@ let
fi fi
''; '';
in { in {
environment.systemPackages = [ pkgs.direnv nixify ]; environment.systemPackages = [pkgs.direnv nixify];
home-manager.users.me.programs.direnv = { home-manager.users.me.programs.direnv = {
enable = true; enable = true;
stdlib = builtins.readFile ("${ stdlib = builtins.readFile "${
pkgs.fetchFromGitHub { pkgs.fetchFromGitHub {
owner = "Mic92"; owner = "Mic92";
repo = "dotfiles"; repo = "dotfiles";
rev = "a0a9b7e358fa70a85cd468f8ca1fbb02ae0a91df"; rev = "a0a9b7e358fa70a85cd468f8ca1fbb02ae0a91df";
sha256 = "1y9h5s1lf59sczsm0ksq2x1yhl98ba9lwk5yil3q53rg7n4574pg"; sha256 = "1y9h5s1lf59sczsm0ksq2x1yhl98ba9lwk5yil3q53rg7n4574pg";
} }
}/home/.direnvrc"); }/home/.direnvrc";
}; };
programs.zsh.interactiveShellInit = '' programs.zsh.interactiveShellInit = ''

View File

@@ -1,8 +1,13 @@
{ lib, config, pkgs, ... }: { {
lib,
config,
pkgs,
...
}: {
imports = [ imports = [
(import <stockholm/makefu/3modules/bump-distrowatch.nix> { (import <stockholm/makefu/3modules/bump-distrowatch.nix> {
inherit lib config; inherit lib config;
pkgs = pkgs // { writeDash = pkgs.writers.writeDash; }; pkgs = pkgs // {writeDash = pkgs.writers.writeDash;};
}) })
]; ];

View File

@@ -1,4 +1,8 @@
{ lib, pkgs, ... }: { {
lib,
pkgs,
...
}: {
virtualisation.docker = { virtualisation.docker = {
enable = true; enable = true;
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c # for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
@@ -7,6 +11,6 @@
"--fixed-cidr=172.39.1.0/25" "--fixed-cidr=172.39.1.0/25"
]; ];
}; };
users.users.me.extraGroups = [ "docker" ]; users.users.me.extraGroups = ["docker"];
environment.systemPackages = [ pkgs.docker pkgs.docker_compose ]; environment.systemPackages = [pkgs.docker pkgs.docker-compose];
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours theme; inherit (import <niveum/lib>) defaultApplications colours theme;
in { in {
home-manager.users.me.services.dunst = { home-manager.users.me.services.dunst = {

View File

@@ -1,5 +1,8 @@
{ lib, pkgs, ... }: {
let lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications; inherit (import <niveum/lib>) defaultApplications;
flameshot-once = flameshot-once =
pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {}; pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {};

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
flixLocation = "/media/flix"; flixLocation = "/media/flix";
cacheLocation = "/var/cache/flix"; cacheLocation = "/var/cache/flix";
indexFilename = "index"; indexFilename = "index";
@@ -35,7 +38,7 @@ in {
systemd.services.flix-index = { systemd.services.flix-index = {
description = "Flix indexing service"; description = "Flix indexing service";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
script = "cp ${flixLocation}/download/index ./${indexFilename}"; script = "cp ${flixLocation}/download/index ./${indexFilename}";
startAt = "hourly"; startAt = "hourly";
serviceConfig = { serviceConfig = {
@@ -74,5 +77,4 @@ in {
| ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}' | ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}'
'') '')
]; ];
} }

View File

@@ -1,42 +1,54 @@
{ pkgs, ... }: { {pkgs, ...}: {
nixpkgs.config.joypixels.acceptLicense = true;
fonts = { fonts = {
enableDefaultFonts = true; enableDefaultFonts = true;
fontDir.enable = true; fontDir.enable = true;
fonts = with pkgs; [ fonts = with pkgs; [
alegreya alegreya
alegreya-sans alegreya-sans
amiri
annapurna-sil
cantarell-fonts
charis-sil
corefonts corefonts
crimson
eb-garamond eb-garamond
font-awesome_6
etBook
ezra-sil
fira fira
font-awesome-ttf font-awesome
galatia-sil
gentium
gfs-fonts
gyre-fonts
ibm-plex ibm-plex
inconsolata jetbrains-mono
iosevka libertinus
libertine libre-bodoni
lmodern lmodern
merriweather
ocr-a
roboto
roboto-mono
noto-fonts noto-fonts
noto-fonts-cjk noto-fonts-cjk
noto-fonts-emoji noto-fonts-emoji
roboto
roboto-mono
roboto-slab roboto-slab
scheherazade-new
source-code-pro source-code-pro
source-serif-pro
source-sans-pro source-sans-pro
ubuntu_font_family source-serif-pro
gfs-fonts theano
jetbrains-mono
twemoji-color-font
joypixels
tocharian-font tocharian-font
]; vistafonts
vollkorn
zilla-slab
]; # google-fonts league-of-moveable-type
fontconfig.defaultFonts = { fontconfig.defaultFonts = {
monospace = [ "JetBrains Mono" "JoyPixels" ]; monospace = ["Noto Sans Mono"];
serif = [ "Roboto Slab" ]; serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"];
sansSerif = [ "Roboto" "Noto Sans" ]; sansSerif = ["Noto Sans Display" "Noto Kufi Arabic" "Noto Sans Devanagari" "Noto Sans CJK JP"];
emoji = [ "JoyPixels" ]; emoji = ["Noto Color Emoji" "Noto Emoji"];
}; };
}; };
} }

View File

@@ -1,9 +1,13 @@
{ pkgs, lib, ... }: { {
pkgs,
lib,
...
}: {
environment = { environment = {
systemPackages = [ pkgs.fzf ]; systemPackages = [pkgs.fzf];
variables = { variables = {
FZF_DEFAULT_OPTS = FZF_DEFAULT_OPTS =
lib.escapeShellArgs [ "--height=40%" "--layout=reverse" ]; lib.escapeShellArgs ["--height=40%" "--layout=reverse"];
FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d"; FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d";
FZF_ALT_C_OPTS = lib.escapeShellArgs [ FZF_ALT_C_OPTS = lib.escapeShellArgs [
"--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'" "--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'"
@@ -12,7 +16,7 @@
]; ];
FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f"; FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f";
FZF_CTRL_T_OPTS = FZF_CTRL_T_OPTS =
lib.escapeShellArgs [ "--preview='${pkgs.bat}/bin/bat \"{}\"'" ]; lib.escapeShellArgs ["--preview='${pkgs.bat}/bin/bat \"{}\"'"];
}; };
}; };

View File

@@ -1,8 +1,11 @@
{ pkgs, config, lib, ... }:
let
inherit (import <niveum/lib>) kieran ignorePaths;
in
{ {
pkgs,
config,
lib,
...
}: let
inherit (import <niveum/lib>) kieran ignorePaths;
in {
environment.systemPackages = [ environment.systemPackages = [
pkgs.mr pkgs.mr
pkgs.git pkgs.git
@@ -10,6 +13,7 @@ in
pkgs.gitAndTools.gh pkgs.gitAndTools.gh
pkgs.gitAndTools.git-extras pkgs.gitAndTools.git-extras
pkgs.gitAndTools.git-trim pkgs.gitAndTools.git-trim
pkgs.gitAndTools.git-absorb
pkgs.gitstats pkgs.gitstats
pkgs.patch pkgs.patch
pkgs.patchutils pkgs.patchutils
@@ -38,8 +42,7 @@ in
diffs = "diff --staged"; diffs = "diff --staged";
last = "log -1 HEAD"; last = "log -1 HEAD";
logs = "log --pretty=oneline"; logs = "log --pretty=oneline";
graph = graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
"log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
}; };
ignores = ignorePaths; ignores = ignorePaths;
extraConfig = { extraConfig = {
@@ -47,12 +50,12 @@ in
rebase.autoStash = true; rebase.autoStash = true;
merge.autoStash = true; merge.autoStash = true;
# ref https://github.com/dandavison/delta # # ref https://github.com/dandavison/delta
core.pager = "${pkgs.delta}/bin/delta"; # core.pager = "${pkgs.delta}/bin/delta";
interactive.diffFilter = "${pkgs.delta}/bin/delta --color-only"; # interactive.diffFilter = "${pkgs.delta}/bin/delta --color-only";
delta.navigate = true; # delta.navigate = true;
merge.conflictStyle = "diff3"; # merge.conflictStyle = "diff3";
diff.colorMoved = "default"; # diff.colorMoved = "default";
}; };
}; };
}; };

View File

@@ -1,5 +1,27 @@
{ config, pkgs, ... }: { {
imports = [ <niveum/modules/hledger.nix> ]; config,
pkgs,
...
}: {
imports = [<niveum/modules/hledger.nix>];
environment.systemPackages = let
timeLedger = "$HOME/projects/ledger/time.timeclock";
in [
(pkgs.writers.writeDashBin "hora-edit" ''
$EDITOR + "${timeLedger}" && ${pkgs.git}/bin/git -C "$(${pkgs.coreutils}/bin/dirname ${timeLedger})" commit --all --message "$(${pkgs.coreutils}/bin/date -Im)"
'')
(pkgs.writers.writeDashBin "hora" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" "$@"
'')
(pkgs.writers.writeDashBin "hora-filli" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" register fillidefilla -O csv \
-b "$(date -d "$(date +%Y-%m)-20 last month" +%Y-%m-%d)" \
-e "$(date -d "$(date +%Y-%m)-20" +%Y-%m-%d)" \
| sed 's/(fillidefilla:\(.*\))/\1/g' \
| xsv select date,amount,total,account,description
'')
];
niveum.hledger = { niveum.hledger = {
enable = true; enable = true;

View File

@@ -22,8 +22,8 @@
sort_key = "PERCENT_CPU"; sort_key = "PERCENT_CPU";
tree_view = true; tree_view = true;
update_process_names = false; update_process_names = false;
right_meters = [ "Uptime" "Tasks" "LoadAverage" "Battery" ]; right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"];
left_meters = [ "LeftCPUs2" "RightCPUs2" "Memory" "Swap" ]; left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"];
}; };
}; };
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
inherit (lib.strings) fileContents; inherit (lib.strings) fileContents;
inherit (import <niveum/lib>) sshPort; inherit (import <niveum/lib>) sshPort;
eduroam = { eduroam = {
@@ -32,7 +36,6 @@ in {
options = hu-berlin-cifs-options; options = hu-berlin-cifs-options;
}; };
home-manager.users.me.programs.ssh = { home-manager.users.me.programs.ssh = {
matchBlocks = { matchBlocks = {
"alew.hu-berlin.de" = { "alew.hu-berlin.de" = {
@@ -46,10 +49,11 @@ in {
(pkgs.writers.writeDashBin "hu-ip" '' (pkgs.writers.writeDashBin "hu-ip" ''
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3 ${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
'') '')
(pkgs.writers.writePython3Bin "hu-eduroam-install" (
pkgs.writers.writePython3Bin "hu-eduroam-install"
{ {
libraries = with pkgs.python3Packages; [ distro pyopenssl dbus-python ]; libraries = with pkgs.python3Packages; [distro pyopenssl dbus-python];
flakeIgnore = [ "E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291" ]; flakeIgnore = ["E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291"];
} }
(builtins.readFile (builtins.fetchurl { (builtins.readFile (builtins.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py"; url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py";
@@ -60,20 +64,22 @@ in {
systemd.services.hu-vpn = { systemd.services.hu-vpn = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
conflicts = [ "openvpn-hu-berlin.service" ]; conflicts = ["openvpn-hu-berlin.service"];
script = '' script = ''
${pkgs.openfortivpn}/bin/openfortivpn -c ${pkgs.writeText "hu-berlin.config" '' ${pkgs.openfortivpn}/bin/openfortivpn -c ${
host = forti-ssl.vpn.hu-berlin.de pkgs.writeText "hu-berlin.config" ''
port = 443 host = forti-ssl.vpn.hu-berlin.de
trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359 port = 443
username = ${eduroam.identity}@split_tunnel trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359
password = ${eduroam.password} username = ${eduroam.identity}@split_tunnel
''} password = ${eduroam.password}
''
}
''; '';
}; };
systemd.services.openvpn-hu-berlin.conflicts = [ "hu-vpn.service" ]; systemd.services.openvpn-hu-berlin.conflicts = ["hu-vpn.service"];
services.openvpn.servers.hu-berlin = { services.openvpn.servers.hu-berlin = {
autoStart = false; autoStart = false;
@@ -82,8 +88,7 @@ in {
password = eduroam.password; password = eduroam.password;
}; };
config = fileContents (pkgs.fetchurl { config = fileContents (pkgs.fetchurl {
url = url = "https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
"https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h"; sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h";
}); });
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours; inherit (import <niveum/lib>) defaultApplications colours;
klem = import <niveum/packages/scripts/klem.nix> { klem = import <niveum/packages/scripts/klem.nix> {
inherit pkgs lib; inherit pkgs lib;
@@ -30,6 +34,7 @@ let
"devanagari" = pkgs.writers.writeDash "devanagari" '' "devanagari" = pkgs.writers.writeDash "devanagari" ''
${pkgs.scripts.devanagari}/bin/devanagari ${pkgs.scripts.devanagari}/bin/devanagari
''; '';
"avesta" = pkgs.writeScript "avesta" (builtins.readFile <niveum/packages/scripts/avesta.sed>);
"curl" = pkgs.writers.writeDash "curl" '' "curl" = pkgs.writers.writeDash "curl" ''
${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)" ${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)"
''; '';
@@ -45,7 +50,6 @@ let
move-to-new-workspace = pkgs.writers.writeDash "new-workspace" '' move-to-new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1)) i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
''; '';
in { in {
services.xserver = { services.xserver = {
displayManager.defaultSession = "none+i3"; displayManager.defaultSession = "none+i3";
@@ -73,7 +77,10 @@ in {
home-manager.users.me.xsession.windowManager.i3 = { home-manager.users.me.xsession.windowManager.i3 = {
enable = true; enable = true;
config = rec { config = rec {
fonts = {names = ["Sans"]; size = 10.0;}; fonts = {
names = ["Sans"];
size = 10.0;
};
modifier = "Mod4"; modifier = "Mod4";
window = { window = {
titlebar = false; titlebar = false;
@@ -81,15 +88,15 @@ in {
hideEdgeBorders = "smart"; hideEdgeBorders = "smart";
commands = [ commands = [
{ {
criteria = { class = "floating"; }; criteria = {class = "floating";};
command = "floating enable"; command = "floating enable";
} }
{ {
criteria = { class = "fzfmenu"; }; criteria = {class = "fzfmenu";};
command = "floating enable"; command = "floating enable";
} }
{ {
criteria = { class = "mpv"; }; criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [ command = lib.strings.concatStringsSep ", " [
"floating enable" "floating enable"
"sticky enable" "sticky enable"
@@ -111,51 +118,64 @@ in {
text = colours.foreground; text = colours.foreground;
}; };
in rec { in rec {
focused = scheme // { focused =
border = colours.cyan.bright; scheme
indicator = colours.cyan.bright; // {
childBorder = colours.cyan.bright; border = colours.cyan.bright;
}; indicator = colours.cyan.bright;
unfocused = scheme // { childBorder = colours.cyan.bright;
border = colours.background;
indicator = colours.background;
childBorder = colours.background;
};
focusedInactive = unfocused;
urgent = scheme // {
border = colours.red.bright;
indicator = colours.red.bright;
childBorder = colours.red.bright;
};
placeholder = scheme // {
border = colours.green.bright;
indicator = colours.green.bright;
childBorder = colours.green.bright;
};
};
bars = [{
workspaceButtons = false;
fonts = {names = ["Sans"]; size = 8.0;};
mode = "hide"; # "dock"
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
}; };
}; unfocused =
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${ scheme
// {
border = colours.background;
indicator = colours.background;
childBorder = colours.background;
};
focusedInactive = unfocused;
urgent =
scheme
// {
border = colours.red.bright;
indicator = colours.red.bright;
childBorder = colours.red.bright;
};
placeholder =
scheme
// {
border = colours.green.bright;
indicator = colours.green.bright;
childBorder = colours.green.bright;
};
};
bars = [
{
workspaceButtons = false;
fonts = {
names = ["Monospace" "Font Awesome 6 Free"];
size = 8.0;
};
mode = "hide"; # "dock"
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
};
};
statusCommand = "env I3RS_GITHUB_TOKEN=${lib.strings.fileContents <secrets/github/notification.token>} ${pkgs.i3status-rust}/bin/i3status-rs ${
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> { (pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> {
inherit (config.niveum) batteryName wirelessInterface; inherit (config.niveum) batteryName wirelessInterface;
inherit colours; inherit colours;
inherit pkgs; inherit pkgs;
}) })
}"; }";
}]; }
];
modes.resize = { modes.resize = {
"Escape" = ''mode "default"''; "Escape" = ''mode "default"'';
"Return" = ''mode "default"''; "Return" = ''mode "default"'';
@@ -197,6 +217,11 @@ in {
"${modifier}+r" = "mode resize"; "${modifier}+r" = "mode resize";
"${modifier}+v" = "split v"; "${modifier}+v" = "split v";
"${modifier}+w" = "layout tabbed"; "${modifier}+w" = "layout tabbed";
"${modifier}+q" = "exec ${pkgs.writers.writeDash "newsboat-sync" ''
notify-send --app-name="newsboat" "Updating ..."
newsboat -x reload
notify-send --app-name="newsboat" "Finished updating."
''}";
# "${modifier}+Shift+y" = "exec ${pkgs.qutebrowser}/bin/qutebrowser"; # "${modifier}+Shift+y" = "exec ${pkgs.qutebrowser}/bin/qutebrowser";
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}"; "${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}";
@@ -207,29 +232,30 @@ in {
"${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock"; "${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec ${pkgs.rofi}/bin/rofi -modi run,window,ssh,filebrowser -show run''}"; "${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec ${pkgs.rofi}/bin/rofi -modi run,window,ssh,filebrowser -show run''}";
"${modifier}+Shift+d" = "exec ${ "${modifier}+Shift+d" = "exec ${
pkgs.writers.writeDash "notemenu" '' pkgs.writers.writeDash "notemenu" ''
set -efu set -efu
PATH=$PATH:${ PATH=$PATH:${
lib.makeBinPath [ pkgs.rofi pkgs.findutils pkgs.coreutils ] lib.makeBinPath [pkgs.rofi pkgs.findutils pkgs.coreutils]
} }
cd ~/notes cd ~/notes
note_file=$({ note_file=$({
echo diary/$(date -I).md echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md echo diary/$(date -I -d yesterday).md
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2 find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
} | rofi -dmenu -i -p 'notes') } | rofi -dmenu -i -p 'notes')
if test "$note_file" if test "$note_file"
then then
i3-sensible-terminal -e "$EDITOR" "$note_file" i3-sensible-terminal -e "$EDITOR" "$note_file"
fi fi
'' ''
}"; }";
"${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5"; "${modifier}+p" = "exec --no-startup-id ${pkgs.rofi-pass}/bin/rofi-pass";
"${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu"; "${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F7" = "exec ${pkgs.scripts.showkeys-toggle}/bin/showkeys-toggle"; "${modifier}+F7" = "exec ${pkgs.scripts.showkeys-toggle}/bin/showkeys-toggle";
"${modifier}+F8" = "exec ${pkgs.xorg.xkill}/bin/xkill"; "${modifier}+F8" = "exec switch-theme toggle";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85"; "${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x"; "${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter"; "${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";

View File

@@ -1,13 +1,17 @@
{ {
networking.firewall = { networking.firewall = {
allowedTCPPortRanges = [{ allowedTCPPortRanges = [
from = 1714; {
to = 1764; from = 1714;
}]; to = 1764;
allowedUDPPortRanges = [{ }
from = 1714; ];
to = 1764; allowedUDPPortRanges = [
}]; {
from = 1714;
to = 1764;
}
];
}; };
home-manager.users.me = { home-manager.users.me = {

View File

@@ -1,17 +1,50 @@
{ pkgs, lib, ... }: {
let commaSep = builtins.concatStringsSep ","; pkgs,
lib,
...
}: let
commaSep = builtins.concatStringsSep ",";
xkbOptions = ["compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle"];
languages = {
de = "T3";
gr = "polytonic";
ru = "phonetic";
ara = "buckwalter";
};
defaultLanguage = "de";
in { in {
# man 7 xkeyboard-config
services.xserver = { services.xserver = {
layout = commaSep [ "de" "gr" ]; layout = "de";
xkbVariant = commaSep [ "T3" "polytonic" ]; # T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png
# buckwalter: http://www.qamus.org/transliteration.htm
xkbVariant = "T3";
xkbOptions = xkbOptions =
commaSep [ "compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle" ]; commaSep xkbOptions;
libinput.enable = true; libinput.enable = true;
}; };
console.keyMap = "de"; console.keyMap = "de";
environment.systemPackages =
lib.mapAttrsToList
(language: variant:
pkgs.writers.writeDashBin "kb-${language}" ''
${pkgs.xorg.setxkbmap}/bin/setxkbmap ${defaultLanguage},${language} ${languages.${defaultLanguage}},${variant} ${toString (map (option: "-option ${option}") xkbOptions)}
'')
languages;
# improve held key rate # improve held key rate
services.xserver.displayManager.sessionCommands = services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50";
"${pkgs.xorg.xset}/bin/xset r rate 300 50";
systemd.user.services.gxkb = {
wantedBy = ["graphical-session.target"];
serviceConfig = {
SyslogIdentifier = "gxkb";
ExecStart = "${pkgs.gxkb}/bin/gxkb";
Restart = "always";
RestartSec = "15s";
StartLimitBurst = 0;
};
};
} }

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
davHome = "~/.local/share/dav"; davHome = "~/.local/share/dav";
kmeinCloud = { kmeinCloud = {
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav"; davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
@@ -11,14 +15,13 @@ let
username = "kmein"; username = "kmein";
password = lib.fileContents <secrets/nextcloud-fysi/password>; password = lib.fileContents <secrets/nextcloud-fysi/password>;
}; };
in in {
{ environment.systemPackages = [pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman];
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
systemd.user.services.vdirsyncer = { systemd.user.services.vdirsyncer = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
wantedBy = [ "default.target" ]; wantedBy = ["default.target"];
startAt = "*:00/10"; startAt = "*:00/10";
script = '' script = ''
${pkgs.vdirsyncer}/bin/vdirsyncer sync ${pkgs.vdirsyncer}/bin/vdirsyncer sync

View File

@@ -1,8 +1,11 @@
{ lib, pkgs, ... }:
{ {
lib,
pkgs,
...
}: {
systemd.services.lb-subscription = { systemd.services.lb-subscription = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
startAt = "weekly"; startAt = "weekly";
serviceConfig = { serviceConfig = {
user = "kfm"; user = "kfm";

View File

@@ -7,8 +7,8 @@
"application/pdf" = "org.pwmt.zathura.desktop"; "application/pdf" = "org.pwmt.zathura.desktop";
"application/vnd.oasis.opendocument.text" = "writer.desktop"; "application/vnd.oasis.opendocument.text" = "writer.desktop";
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "writer.desktop"; "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "writer.desktop";
"image/jpeg" = "sxiv.desktop"; "image/jpeg" = "nsxiv.desktop";
"image/png" = "sxiv.desktop"; "image/png" = "nsxiv.desktop";
"image/vnd.djvu+multipage" = "org.pwmt.zathura.desktop"; "image/vnd.djvu+multipage" = "org.pwmt.zathura.desktop";
"text/html" = "brave-browser.desktop"; "text/html" = "brave-browser.desktop";
"text/markdown" = "nvim.desktop"; "text/markdown" = "nvim.desktop";
@@ -21,7 +21,6 @@
"x-scheme-handler/webcal" = "brave-browser.desktop"; "x-scheme-handler/webcal" = "brave-browser.desktop";
"inode/directory" = "pcmanfm.desktop"; "inode/directory" = "pcmanfm.desktop";
}; };
}; };
}; };
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }:
{ {
config,
pkgs,
...
}: {
services.nginx.virtualHosts.default = { services.nginx.virtualHosts.default = {
locations."= /stub_status".extraConfig = "stub_status;"; locations."= /stub_status".extraConfig = "stub_status;";
}; };
@@ -35,40 +38,48 @@
}; };
}; };
networking.firewall.allowedTCPPorts = [ config.services.prometheus.exporters.node.port ]; networking.firewall.allowedTCPPorts = [config.services.prometheus.exporters.node.port];
systemd.services.promtail = { systemd.services.promtail = {
description = "Promtail service for Loki"; description = "Promtail service for Loki";
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
serviceConfig = { serviceConfig = {
ExecStart = '' ExecStart = ''
${pkgs.grafana-loki}/bin/promtail --config.file ${(pkgs.formats.yaml {}).generate "promtail.yaml" { ${pkgs.grafana-loki}/bin/promtail --config.file ${
server = { (pkgs.formats.yaml {}).generate "promtail.yaml" {
http_listen_port = 28183; server = {
grpc_listen_port = 0; http_listen_port = 28183;
}; grpc_listen_port = 0;
positions.filename = "/tmp/positions.yaml"; };
clients = [ positions.filename = "/tmp/positions.yaml";
{ url = "http://${if config.networking.hostName == "makanek" then "127.0.0.1" else "makanek.r"}:3100/loki/api/v1/push"; } clients = [
]; {
scrape_configs = [ url = "http://${
{ if config.networking.hostName == "makanek"
job_name = "journal"; then "127.0.0.1"
journal = { else "makanek.r"
max_age = "12h"; }:3100/loki/api/v1/push";
labels.job = "systemd-journal"; }
labels.host = config.networking.hostName; ];
}; scrape_configs = [
relabel_configs = [ {
{ job_name = "journal";
source_labels = [ "__journal__systemd_unit" ]; journal = {
target_label = "unit"; max_age = "12h";
} labels.job = "systemd-journal";
]; labels.host = config.networking.hostName;
} };
]; relabel_configs = [
}} {
source_labels = ["__journal__systemd_unit"];
target_label = "unit";
}
];
}
];
}
}
''; '';
}; };
}; };

View File

@@ -1,14 +1,27 @@
{ pkgs, lib, ... }: let {
pkgs,
lib,
config,
...
}: let
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
in { in {
environment.shellAliases.smpv = swallow "mpv"; environment.shellAliases.smpv = swallow "mpv";
nixpkgs.overlays = [
(self: super: {
mpv = config.home-manager.users.me.programs.mpv.finalPackage;
})
];
home-manager.users.me = { home-manager.users.me = {
programs.mpv = { programs.mpv = {
enable = true; enable = true;
config = { config = {
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ]; ytdl-format = "bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best";
ytdl-raw-options = lib.concatStringsSep "," [''sub-lang="de,en"'' "write-sub=" "write-auto-sub="];
screenshot-template = "%F-%wH%wM%wS-%#04n"; screenshot-template = "%F-%wH%wM%wS-%#04n";
script-opts = "ytdl_hook-ytdl_path=${pkgs.yt-dlp}/bin/yt-dlp";
}; };
bindings = { bindings = {
"Alt+RIGHT" = "add video-rotate 90"; "Alt+RIGHT" = "add video-rotate 90";
@@ -22,6 +35,7 @@ in {
}; };
scripts = [ scripts = [
pkgs.mpvScripts.youtube-quality pkgs.mpvScripts.youtube-quality
(pkgs.callPackage <niveum/packages/mpv-visualizer.nix> {})
]; ];
}; };
}; };

View File

@@ -1,134 +1,41 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
mainMailbox = "posteo"; mainMailbox = "posteo";
accounts.uni = { accounts = import <niveum/lib/email.nix> {inherit lib mainMailbox;};
user = "meinhark"; in {
password = lib.strings.fileContents <secrets/eduroam/password>; environment.systemPackages = [pkgs.neomutt];
address = "kieran.felix.meinhardt@hu-berlin.de";
imap = "mailbox.cms.hu-berlin.de";
smtp = "mailhost.cms.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts.uni-old = {
user = "meinhark";
password = lib.strings.fileContents <secrets/eduroam/password>;
address = "meinhark@informatik.hu-berlin.de";
imap = "mailbox.informatik.hu-berlin.de";
smtp = "mailhost.informatik.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts.work-uni = {
user = "meinhaki";
password = lib.strings.fileContents <secrets/mail/meinhaki>;
address = "kieran.meinhardt@hu-berlin.de";
imap = "mailbox.cms.hu-berlin.de";
smtp = "mailhost.cms.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts.work-fysi = rec {
user = "kieran@fysi.tech";
address = user;
password = lib.strings.fileContents <secrets/mail/fastmail>;
imap = "imap.fastmail.com";
smtp = "smtp.fastmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts.cock = rec {
user = "2210@cock.li";
address = user;
password = lib.strings.fileContents <secrets/mail/cock>;
imap = "mail.cock.li";
smtp = imap;
smtpSettings = smtp: "smtp://${smtp}:587";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts."${mainMailbox}" = rec {
user = "kieran.meinhardt@posteo.net";
address = user;
password = lib.strings.fileContents <secrets/mail/posteo>;
imap = "posteo.de";
smtp = imap;
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
accounts.google-amro = rec {
user = "amroplay@gmail.com";
address = user;
password = lib.strings.fileContents <secrets/mail/gmail/amroplay>;
imap = "imap.gmail.com";
smtp = "smtp.gmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "[Gmail]/Drafts";
sent = "[Gmail]/Sent Mail";
trash = "[Gmail]/Bin";
};
};
accounts.google-kieran = rec {
user = "kieran.meinhardt@gmail.com";
address = user;
password = lib.strings.fileContents <secrets/mail/gmail/kieran.meinhardt>;
imap = "imap.gmail.com";
smtp = "smtp.gmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "[Gmail]/Entwürfe";
sent = "[Gmail]/Gesendet";
trash = "[Gmail]/Papierkorb";
};
};
in
{
environment.systemPackages = [ pkgs.neomutt ];
environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}"; environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}";
home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = '' home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = let
set mailcap_path = ${pkgs.writeText "mailcap" '' as-pdf = pkgs.writers.writeDash "as-pdf" ''
text/plain; $EDITOR %s ; d=$(mktemp -d)
text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput; trap clean EXIT
image/*; ${pkgs.sxiv}/bin/sxiv %s ; clean() {
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput rm -rf "$d"
audio/*; ${pkgs.mpv}/bin/mpv %s ; }
application/pdf; ${pkgs.zathura}/bin/zathura %s ; ${pkgs.libreoffice}/bin/libreoffice --headless --convert-to pdf "$1" --outdir "$d"
application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput; ${pkgs.zathura}/bin/zathura "$d"/*.pdf
application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput; '';
''}:$mailcap_path in ''
set mailcap_path = ${
pkgs.writeText "mailcap" ''
text/plain; $EDITOR %s ;
text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
image/*; ${pkgs.nsxiv}/bin/nsxiv %s ;
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput
audio/*; ${pkgs.mpv}/bin/mpv %s ;
application/pdf; ${pkgs.zathura}/bin/zathura %s ;
application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput;
application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput;
application/vnd.openxmlformats-officedocument.wordprocessingml.document; ${as-pdf} %s;
application/vnd.oasis.opendocument.text; ${as-pdf} %s;
application/vnd.openxmlformats*; ${pkgs.libreoffice}/bin/soffice '%s';
''
}:$mailcap_path
set sidebar_visible set sidebar_visible
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S" set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S"
@@ -180,69 +87,78 @@ in
set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt" set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt"
source ${pkgs.writeText "accounts.neomuttrc" '' source ${
set realname = "Kierán Meinhardt" pkgs.writeText "accounts.neomuttrc" ''
account-hook . 'unset imap_user imap_pass smtp_user smtp_pass' set realname = "Kierán Meinhardt"
# set accordingly: postponed trash record account-hook . 'unset imap_user imap_pass smtp_user smtp_pass'
${lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let imapRoot = "imaps://${account.user}@${account.imap}"; in '' # set accordingly: postponed trash record
account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"' ${
account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"' lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"' imapRoot = "imaps://${account.user}@${account.imap}";
named-mailboxes "${name}" "${imapRoot}" "${name}" "${imapRoot}/${account.folders.sent}" in ''
'') accounts)} account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"'
''} account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"'
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"'
named-mailboxes "${name}" "${imapRoot}" "${name}" "${imapRoot}/${account.folders.sent}"
'')
accounts)
}
''
}
set spoolfile="${mainMailbox}" set spoolfile="${mainMailbox}"
source ${pkgs.writeText "colors.neomuttrc" '' source ${
# Default index colors: pkgs.writeText "colors.neomuttrc" ''
color index_number blue default # Default index colors:
color index red default '.*' color index_number blue default
color index_flags lightcyan default '.*' color index red default '.*'
color index_author yellow default '.*' color index_flags lightcyan default '.*'
color index_subject lightblack default '.*' color index_author yellow default '.*'
color index_subject default default '.*'
# New mail is boldened: # New mail is boldened:
color index_author lightyellow black "~N" color index_author lightyellow default "~N"
color index_subject lightwhite black "~N" color index_subject lightwhite default "~N"
# Flagged mail is highlighted: # Flagged mail is highlighted:
color index_flags lightmagenta default '~F' color index_flags lightmagenta default '~F'
# Other colors and aesthetic settings: # Other colors and aesthetic settings:
mono bold bold mono bold bold
mono underline underline mono underline underline
mono error bold mono error bold
mono indicator reverse mono indicator reverse
# color sidebar_flagged red black # color sidebar_flagged red black
mono sidebar_new bold mono sidebar_new bold
color error red default color error red default
color message cyan default color message cyan default
color search brightmagenta default color search brightmagenta default
color hdrdefault lightblack default color hdrdefault lightblack default
color quoted green default color quoted green default
color quoted1 blue default color quoted1 blue default
color quoted2 cyan default color quoted2 cyan default
color quoted3 yellow default color quoted3 yellow default
color quoted4 red default color quoted4 red default
color quoted5 brightred default color quoted5 brightred default
color signature lightblack default color signature lightblack default
color tree color235 default color tree color235 default
# Regex highlighting: # Regex highlighting:
color header red default "^(Date)" color header red default "^(Date)"
color header yellow default "^(From)" color header yellow default "^(From)"
color header white default "^(B?CC)" color header white default "^(B?CC)"
color header brightwhite default "^(Subject)" color header brightwhite default "^(Subject)"
color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body red default "(BAD signature)|^gpg: BAD signature from.*" color body red default "(BAD signature)|^gpg: BAD signature from.*"
color body brightgreen default "(Good signature)|^gpg: Good signature .*" color body brightgreen default "(Good signature)|^gpg: Good signature .*"
color body brightyellow default "^gpg: " color body brightyellow default "^gpg: "
mono body bold "^gpg: Good signature" mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*" mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
''} ''
}
''; '';
} }

View File

@@ -1,21 +1,23 @@
{ pkgs, ... }: { {pkgs, ...}: {
environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
environment.shellAliases.vi = "nvim"; environment.shellAliases.vi = "nvim";
environment.shellAliases.vim = "nvim"; environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R"; environment.shellAliases.view = "nvim -R";
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
vimPlugins = pkgs.vimPlugins // { vimPlugins =
cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> { }; pkgs.vimPlugins
vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> { }; // {
vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> { }; cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> {};
vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> { }; vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> {};
icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> { }; vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> {};
jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> { }; vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> {};
vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> { }; icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> {};
vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> { }; jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> {};
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> { }; vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> {};
}; vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> {};
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> {};
};
}; };
environment.systemPackages = [ environment.systemPackages = [
@@ -42,6 +44,15 @@
vim-repeat vim-repeat
vim-sensible vim-sensible
vim-surround vim-surround
(pkgs.vimUtils.buildVimPlugin {
name = "vim-dim-1.1.0";
src = pkgs.fetchFromGitHub {
owner = "jeffkreeftmeijer";
repo = "vim-dim";
rev = "1.1.0";
sha256 = "sha256-lyTZUgqUEEJRrzGo1FD8/t8KBioPrtB3MmGvPeEVI/g=";
};
})
]; ];
opt = [ opt = [
csv csv

View File

@@ -1,20 +1,25 @@
{ lib, pkgs, ... }: {
let lib,
profile = name: custom: lib.recursiveUpdate { pkgs,
connection.id = name; ...
connection.type = "wifi"; }: let
connection.interface-name = "wlp3s0"; profile = name: custom:
connection.permissions = ""; lib.recursiveUpdate {
wifi.mac-address-blacklist = ""; connection.id = name;
wifi.ssid = name; connection.type = "wifi";
wifi.mode = "infrastructure"; connection.interface-name = "wlp3s0";
ipv4.dns-search = ""; connection.permissions = "";
ipv4.method = "auto"; wifi.mac-address-blacklist = "";
ipv6.addr-gen-mode = "stable-privacy"; wifi.ssid = name;
ipv6.dns-search = ""; wifi.mode = "infrastructure";
ipv6.method = "auto"; ipv4.dns-search = "";
proxy = {}; ipv4.method = "auto";
} custom; ipv6.addr-gen-mode = "stable-privacy";
ipv6.dns-search = "";
ipv6.method = "auto";
proxy = {};
}
custom;
eduroamProfile = { eduroamProfile = {
connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf"; connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf";
wifi-security = { wifi-security = {
@@ -36,15 +41,20 @@ let
phase2-auth = "pap"; phase2-auth = "pap";
}; };
}; };
in in {
{ imports = [<niveum/modules/networkmanager-declarative.nix>];
imports = [ <niveum/modules/networkmanager-declarative.nix> ];
programs.nm-applet.enable = true;
networking.networkmanager = { networking.networkmanager = {
enable = true; enable = true;
plugins = [
pkgs.networkmanager-openvpn
pkgs.networkmanager-fortisslvpn
];
wifi.macAddress = "random"; wifi.macAddress = "random";
ethernet.macAddress = "random"; ethernet.macAddress = "random";
unmanaged = [ "docker*" ]; unmanaged = ["docker*"];
profiles = lib.mapAttrs profile { profiles = lib.mapAttrs profile {
Aether = { Aether = {
connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21"; connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21";
@@ -80,7 +90,12 @@ in
}; };
}; };
users.users.me.extraGroups = [ "networkmanager" ]; users.users.me.extraGroups = ["networkmanager"];
environment.systemPackages = [ pkgs.speedtest-cli ]; environment.systemPackages = [
pkgs.speedtest-cli
pkgs.networkmanager-openvpn
pkgs.networkmanagerapplet
pkgs.networkmanager-fortisslvpn
];
} }

View File

@@ -1,11 +1,13 @@
{ pkgs, config, ... }: {
let pkgs,
config,
...
}: let
ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'"; ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'";
youtube-download = "${pkgs.ts}/bin/ts ${pkgs.youtube-dl}/bin/youtube-dl -f ${ytdl-format} --add-metadata"; youtube-download = "${pkgs.ts}/bin/ts ${pkgs.yt-dlp}/bin/yt-dlp -f ${ytdl-format} --add-metadata";
newsboat-home = newsboat-home = "${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
"${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
linkhandler-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler"; linkhandler-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler";
newsboat-config = pkgs.writeText "config" '' newsboat-config = pkgs.writeText "config" ''
@@ -48,7 +50,7 @@ let
save-path ${newsboat-home}/saved/ save-path ${newsboat-home}/saved/
highlight all "---.*---" yellow default highlight all "---.*---" yellow default
highlight feedlist ".*(0/0))" black default # highlight feedlist ".*(0/0))" default default
highlight article "^Title:.*" yellow default bold highlight article "^Title:.*" yellow default bold
highlight article "^Author:.*" yellow default highlight article "^Author:.*" yellow default
highlight article "^Flags:.*" red default highlight article "^Flags:.*" red default
@@ -56,14 +58,12 @@ let
highlight article "\\[image [0-9][0-9]*\\]" color109 default bold highlight article "\\[image [0-9][0-9]*\\]" color109 default bold
highlight article "\\[embedded flash: [0-9][0-9]*\\]" color66 default bold highlight article "\\[embedded flash: [0-9][0-9]*\\]" color66 default bold
color background white default
color listnormal white default
color listnormal_unread white default bold
color listfocus blue default color listfocus blue default
color listfocus_unread blue default bold color listfocus_unread blue default bold
color info red default bold color info red default bold
color article white default
''; '';
newsboat-sql = "${pkgs.sqlite}/bin/sqlite3 ${newsboat-home}/cache.db";
in { in {
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
newsboat = pkgs.writers.writeDashBin "newsboat" '' newsboat = pkgs.writers.writeDashBin "newsboat" ''
@@ -73,8 +73,23 @@ in {
environment.systemPackages = [ environment.systemPackages = [
pkgs.newsboat pkgs.newsboat
(pkgs.writers.writeDashBin "newsboat-unread-count" ''
if [ -f ${newsboat-home}/cache.db.lock ]; then
${pkgs.jq}/bin/jq -n '{state: "Info", text: "", icon: "rss"}'
else
${pkgs.jq}/bin/jq -n \
--argjson unread "$(${newsboat-sql} "SELECT COUNT(DISTINCT id) FROM rss_item WHERE unread=1")" \
--argjson watchLater "$(${newsboat-sql} "SELECT COUNT(DISTINCT id) FROM rss_item WHERE flags='e' AND deleted=0")" \
'{
state: (if $unread > 0 then "Good" else "Idle" end),
text: (if $unread > 0 then "\($unread)" else "[\($watchLater)]" end),
icon: "rss"
}'
fi
'')
(pkgs.writers.writeDashBin "mpv-watch-later" '' (pkgs.writers.writeDashBin "mpv-watch-later" ''
${pkgs.sqlite}/bin/sqlite3 ${newsboat-home}/cache.db "SELECT url FROM rss_item WHERE flags='e' AND deleted=0 ORDER BY pubDate DESC" \ ${newsboat-sql} "SELECT url FROM rss_item WHERE flags='e' AND deleted=0 ORDER BY pubDate DESC" \
| ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv
'') '')
]; ];

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
nixpkgs = { nixpkgs = {
config.allowUnfree = true; config.allowUnfree = true;
overlays = [ overlays = [
@@ -10,5 +9,16 @@
nix = { nix = {
package = pkgs.nixUnstable; package = pkgs.nixUnstable;
extraOptions = "experimental-features = nix-command flakes"; extraOptions = "experimental-features = nix-command flakes";
settings = {
substituters = [
"http://cache.prism.r"
"https://cache.nixos.org/"
];
trusted-public-keys = [
"cache.prism-1:+S+6Lo/n27XEtvdlQKuJIcb1yO5NUqUCE2lolmTgNJU="
"cache.prism-2:YwmCm3/s/D+SxrPKN/ETjlpw/219pNUbpnluatp6FKI="
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs="
];
};
}; };
} }

66
configs/nsxiv.nix Normal file
View File

@@ -0,0 +1,66 @@
{
pkgs,
lib,
...
}: let
important-directories = pkgs.writeText "directories" ''
h ~/
d ~/cloud/Dropbox/
g ~/cloud/gdrive/
s ~/cloud/Seafile/
kk ~/cloud/keybase/private/kmein/
kp ~/cloud/keybase/public/kmein/
t /tmp
D ~/Downloads
cf ''${XDG_CONFIG_HOME:-$HOME/.config}
'';
in {
environment.systemPackages = [pkgs.nsxiv];
# TODO fix
home-manager.users.me.xdg.configFile."nsxiv/exec/key-handler".source = pkgs.writers.writeDash "key-handler" ''
PATH=$PATH:${
lib.makeBinPath [
pkgs.gnused
pkgs.gawk
pkgs.dmenu
pkgs.coreutils
pkgs.libnotify
pkgs.imagemagick
pkgs.xclip
]
}
echo >&2 key "$1" pressed
while read file; do
case "$1" in
"c")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
;;
"m")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
;;
"r")
convert -rotate 90 "$file" "$file" ;;
"R")
convert -rotate -90 "$file" "$file" ;;
"f")
convert -flop "$file" "$file" ;;
"y")
echo -n "$file" | xclip -selection clipboard &&
notify-send "$file copied to clipboard" & ;;
"Y")
readlink -f "$file" | xclip -selection clipboard &&
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
"d")
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
esac
done
'';
}

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
openweathermap-repo = pkgs.fetchFromGitHub { openweathermap-repo = pkgs.fetchFromGitHub {
owner = "ip1981"; owner = "ip1981";
repo = "openweathermap"; repo = "openweathermap";
@@ -15,5 +18,5 @@ in {
''; '';
}; };
environment.systemPackages = [ pkgs.weather ]; environment.systemPackages = [pkgs.weather];
} }

View File

@@ -1,13 +1,17 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {}; hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {}; worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
menstruation = pkgs.callPackage <menstruation-backend> {}; menstruation = pkgs.callPackage <menstruation-backend> {};
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {}; pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; }; zoteroStyle = {
name,
zoteroStyle = { name, sha256 }: { sha256,
}: {
name = "${name}.csl"; name = "${name}.csl";
path = pkgs.fetchurl { path = pkgs.fetchurl {
url = "https://www.zotero.org/styles/${name}"; url = "https://www.zotero.org/styles/${name}";
@@ -17,40 +21,40 @@ let
cslDirectory = pkgs.linkFarm "citation-styles" [ cslDirectory = pkgs.linkFarm "citation-styles" [
(zoteroStyle { (zoteroStyle {
name = "chicago-author-date-de"; name = "chicago-author-date-de";
sha256 = "0fz0xn46rkciblr34a7x2v60j0lbq9l3fmzi43iphph27m0czn6s"; sha256 = "sha256-ddMYk4A9DJQhx9ldkmF7PhwKuc7wUSr26uHHGAze9Ps=";
}) })
(zoteroStyle { (zoteroStyle {
name = "din-1505-2"; name = "din-1505-2";
sha256 = "1pvy1b7qm13mnph7z365rrz1j082bl2y8ih73rhzd0zd6dz1jyjq"; sha256 = "sha256-bXZbB850fek8J6wMVFL32ndI7F4wiKKr1qUC71ezreE=";
}) })
(zoteroStyle { (zoteroStyle {
name = "apa"; name = "apa";
sha256 = "1878vxp0y0h05yzaghnd51n981623mxskw3lsdyzmffqhihvv111"; sha256 = "sha256-yq4fW6hQknycLjaj5fPbXLrQlGBp5myXiOSHBU90jEc=";
}) })
]; ];
astrolog = pkgs.astrolog.overrideAttrs (old:
astrolog = nixpkgs-unstable.astrolog.overrideAttrs (old: old // { old
installPhase = '' // {
${old.installPhase} installPhase = ''
# set sensible defaults ${old.installPhase}
sed -i ' # set sensible defaults
/^-z /s/8:00W/1:00E/ # timezone sed -i '
/^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location /^-z /s/8:00W/1:00E/ # timezone
/^-zj /s/"Current moment now"/Now/ # default name /^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location
/^-zj /s/"Seattle, WA, USA"/Berlin/ # default location /^-zj /s/"Current moment now"/Now/ # default name
/^_k/s/_k/=k/ # use color /^-zj /s/"Seattle, WA, USA"/Berlin/ # default location
/^_Yd/s/_Yd/=Yd/ # sensible date format /^_k/s/_k/=k/ # use color
/^_Yt/s/_Yt/=Yt/ # sensible time format /^_Yd/s/_Yd/=Yd/ # sensible date format
/^_Yv/s/_Yv/=Yv/ # sensible length format /^_Yt/s/_Yt/=Yt/ # sensible time format
/^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format /^_Yv/s/_Yv/=Yv/ # sensible length format
/^:I /s/80/120/ # wider text output /^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format
' $out/astrolog/astrolog.as /^:I /s/80/120/ # wider text output
''; ' $out/astrolog/astrolog.as
}); '';
});
recht = pkgs.callPackage <recht> {}; recht = pkgs.callPackage <recht> {};
in { in {
home-manager.users.me.home.file = { home-manager.users.me.home.file = {
".csl".source = cslDirectory; ".csl".source = cslDirectory;
@@ -67,7 +71,7 @@ in {
whois whois
dnsutils dnsutils
# FILE MANAGERS # FILE MANAGERS
ranger lf
pcmanfm pcmanfm
# MEDIA # MEDIA
ffmpeg ffmpeg
@@ -89,17 +93,19 @@ in {
fd # better find fd # better find
file # determine file type file # determine file type
dos2unix dos2unix
genpass # generate passwords
ncdu # ncurses disk usage ncdu # ncurses disk usage
rmlint # remove duplicate files
python3Packages.jsonschema # json validation python3Packages.jsonschema # json validation
jq # json toolkit jq # json toolkit
pup # html toolkit pup # html toolkit
htmlq htmlq
xsv # csv toolkit xsv # csv toolkit
xmlstarlet # xml toolkit xmlstarlet # xml toolkit
manpages man-pages
posix_man_pages posix_man_pages
tree tree
fuse_exfat # to mount windows drives exfat # to mount windows drives
parallel # for parallel, since moreutils shadows task spooler parallel # for parallel, since moreutils shadows task spooler
ripgrep # better grep ripgrep # better grep
rlwrap rlwrap
@@ -111,28 +117,32 @@ in {
arandr # xrandr for noobs arandr # xrandr for noobs
libnotify # for notify-send libnotify # for notify-send
xclip # clipboard CLI xclip # clipboard CLI
dragon-drop # drag and drop xdragon # drag and drop
xorg.xkill # kill by clicking xorg.xkill # kill by clicking
audacity audacity
calibre calibre
electrum
inkscape inkscape
astrolog astrolog
anki # flashcards anki-bin # flashcards
jbofihe # lojbanic software jbofihe # lojbanic software
nixpkgs-unstable.zoom-us # video conferencing zoom-us # video conferencing
alejandra # nix formatter
pdfgrep # search in pdf pdfgrep # search in pdf
pdftk # pdf toolkit pdftk # pdf toolkit
mupdf mupdf
poppler_utils # pdf toolkit poppler_utils # pdf toolkit
foxitreader # for viewing pdf annotations foxitreader # for viewing pdf annotations
okular # the word is nucular
xournalpp # for annotating pdfs xournalpp # for annotating pdfs
pdfpc # presenter console for pdf slides pdfpc # presenter console for pdf slides
hc # print files as qr codes hc # print files as qr codes
youtubeDL yt-dlp
espeak espeak
bc # calculator bc # calculator
pari # gp -- better calculator pari # gp -- better calculator
scripts.auc scripts.auc
scripts.stackoverflow
scripts.infschmv scripts.infschmv
scripts.qrpaste scripts.qrpaste
scripts.ttspaste scripts.ttspaste
@@ -142,6 +152,7 @@ in {
scripts.showkeys-toggle scripts.showkeys-toggle
scripts.kirciuoklis scripts.kirciuoklis
scripts.favicon scripts.favicon
scripts.heuretes
scripts.ipa # XSAMPA to IPA converter scripts.ipa # XSAMPA to IPA converter
scripts.playlist scripts.playlist
scripts.mpv-tv scripts.mpv-tv
@@ -153,7 +164,7 @@ in {
scripts.vimv scripts.vimv
scripts.swallow # window swallowing scripts.swallow # window swallowing
scripts.literature-quote scripts.literature-quote
scripts.nav # json navigation jless # less(1) for json
scripts.notetags scripts.notetags
scripts.booksplit scripts.booksplit
scripts.dmenurandr scripts.dmenurandr
@@ -167,7 +178,6 @@ in {
scripts.fkill scripts.fkill
scripts.wttr scripts.wttr
scripts.unicodmenu scripts.unicodmenu
scripts.horoscope
scripts.closest scripts.closest
scripts.trans scripts.trans
scripts.mpv-radio scripts.mpv-radio
@@ -225,7 +235,7 @@ in {
])) ]))
python3Packages.poetry python3Packages.poetry
htmlTidy html-tidy
nodePackages.csslint nodePackages.csslint
nodePackages.jsonlint nodePackages.jsonlint
nodePackages.prettier nodePackages.prettier
@@ -235,7 +245,7 @@ in {
nodePackages.javascript-typescript-langserver nodePackages.javascript-typescript-langserver
texlive.combined.scheme-full texlive.combined.scheme-full
latexrun latexrun
(aspellWithDicts (dict: [ dict.de dict.en dict.en-computers ])) (aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
# haskellPackages.pandoc-citeproc # haskellPackages.pandoc-citeproc
scripts.text2pdf scripts.text2pdf
lowdown lowdown
@@ -253,12 +263,15 @@ in {
binutils # for strip, ld, ... binutils # for strip, ld, ...
# nightly.rust # nightly.rust
shellcheck shellcheck
];
(pkgs.writers.writeDashBin "hass-cli" ''
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN=${lib.strings.fileContents <secrets/hass/token>} exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
'')
scripts.rofi-hass
];
home-manager.users.me.xdg.configFile."pycodestyle".text = '' home-manager.users.me.xdg.configFile."pycodestyle".text = ''
[pycodestyle] [pycodestyle]
max-line-length = 110 max-line-length = 110
''; '';
} }

View File

@@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
user = config.users.users.me.name; user = config.users.users.me.name;
in in {
{
security.polkit.extraConfig = '' security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) { polkit.addRule(function(action, subject) {
if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") { if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") {

View File

@@ -1,9 +1,11 @@
{ pkgs, config, ... }:
let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in
{ {
imports = [ <stockholm/krebs/3modules/power-action.nix> ]; pkgs,
config,
...
}: let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in {
imports = [<stockholm/krebs/3modules/power-action.nix>];
krebs.power-action = { krebs.power-action = {
enable = true; enable = true;

View File

@@ -1,33 +1,37 @@
{ pkgs, ... }: {pkgs, ...}: let
let
inherit (import <niveum/lib>) localAddresses; inherit (import <niveum/lib>) localAddresses;
hp-driver = pkgs.hplipWithPlugin; hp-driver = pkgs.hplip;
in { in {
services.printing = { services.printing = {
enable = true; enable = true;
drivers = [ hp-driver ]; drivers = [hp-driver];
}; };
hardware.sane = { environment.systemPackages = [
enable = true; pkgs.system-config-printer
extraBackends = [ hp-driver ]; ];
};
hardware.printers.ensurePrinters = [{ # allow connecting to .local printers
name = "OfficeJet"; services.avahi.nssmdns = true;
location = "Zimmer";
deviceUri = "https://${localAddresses.officejet}"; hardware.printers.ensurePrinters = [
model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd"; {
ppdOptions = { name = "OfficeJet";
Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None location = "Zimmer";
PageSize = "A4"; # A4 A4.FB A4.Duplex deviceUri = "https://${localAddresses.officejet}";
MediaType = "Plain"; model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd";
OutputMode = "Normal"; ppdOptions = {
ColorModel = "KGray"; # RGB CMYGray KGray Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None
}; PageSize = "A4"; # A4 A4.FB A4.Duplex
}]; MediaType = "Plain";
OutputMode = "Normal";
ColorModel = "KGray"; # RGB CMYGray KGray
};
}
];
} }
/*
/* HP/hp-officejet_4650_series.ppd.gz HP/hp-officejet_4650_series.ppd.gz
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
*/ */

View File

@@ -1 +1 @@
{ services.redshift.enable = false; } {services.redshift.enable = false;}

View File

@@ -1,7 +1,11 @@
{ config, pkgs, ... }: { {
config,
pkgs,
...
}: {
imports = [ imports = [
<niveum/modules/retiolum.nix> <niveum/modules/retiolum.nix>
]; ];
networking.hosts = { "42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ]; }; networking.hosts = {"42:0:ca48:f98f:63d7:31ce:922b:245d" = ["go"];};
} }

View File

@@ -1,7 +1,10 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
inherit (import <niveum/lib>) colours; inherit (import <niveum/lib>) colours;
in{ in {
home-manager.users.me.programs.rofi = { home-manager.users.me.programs.rofi = {
enable = true; enable = true;
font = "Monospace 10"; font = "Monospace 10";

View File

@@ -1,5 +1,8 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
services.xserver.displayManager.sessionCommands = "${pkgs.seafile-client}/bin/seafile-applet &"; services.xserver.displayManager.sessionCommands = "${pkgs.seafile-client}/bin/seafile-applet &";
home-manager.users.me.xdg.configFile = { home-manager.users.me.xdg.configFile = {
@@ -16,5 +19,5 @@
}; };
}; };
environment.systemPackages = [ pkgs.seafile-client ]; environment.systemPackages = [pkgs.seafile-client];
} }

View File

@@ -1,8 +1,22 @@
{ pkgs, config, lib, ... }: {
let pkgs,
config,
lib,
...
}: let
inherit (import <niveum/lib>) sshPort kieran; inherit (import <niveum/lib>) sshPort kieran;
externalNetwork = import <niveum/lib/external-network.nix>;
sshIdentity = name: "${config.users.users.me.home}/.ssh/${name}";
ssh-passphease = lib.strings.fileContents <system-secrets/ssh/passphrase>;
in { in {
services.xserver.displayManager.sessionCommands = "${pkgs.openssh}/bin/ssh-add"; services.xserver.displayManager.sessionCommands = toString (pkgs.writeScript "ssh-add" ''
#!${pkgs.expect}/bin/expect -f
spawn ${pkgs.openssh}/bin/ssh-add
expect "Enter passphrase for *:"
send "${ssh-passphrase}\n";
expect "Identity added: *"
interact
'');
programs.ssh.startAgent = true; programs.ssh.startAgent = true;
@@ -21,7 +35,17 @@ in {
port = sshPort; port = sshPort;
}; };
makanek = { makanek = {
hostname = "makanek.r"; hostname = externalNetwork.makanek;
user = "root";
port = sshPort;
};
ful = {
hostname = externalNetwork.ful;
user = "root";
port = sshPort;
};
tahina = {
hostname = "tahina.r";
user = "root"; user = "root";
port = sshPort; port = sshPort;
}; };
@@ -30,11 +54,6 @@ in {
user = "kfm"; user = "kfm";
port = sshPort; port = sshPort;
}; };
toum = {
hostname = "toum.r";
user = "root";
port = sshPort;
};
kabsa = { kabsa = {
hostname = "kabsa.r"; hostname = "kabsa.r";
user = "kfm"; user = "kfm";
@@ -48,6 +67,16 @@ in {
hostname = "135.181.85.233"; hostname = "135.181.85.233";
user = "root"; user = "root";
}; };
"fysi-dev1" = {
hostname = "94.130.229.139";
user = "root";
identityFile = sshIdentity "fysiweb";
};
"fysi-shared0" = {
hostname = "49.12.205.235";
user = "root";
identityFile = sshIdentity "fysiweb";
};
}; };
}; };
} }

View File

@@ -1,13 +1,16 @@
{ config, lib, pkgs, ... }:
let
inherit (import <niveum/lib>) sshPort kieran;
in
{ {
config,
lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) sshPort kieran;
in {
users.motd = "Welcome to ${config.networking.hostName}!"; users.motd = "Welcome to ${config.networking.hostName}!";
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = [ sshPort ]; ports = [sshPort];
passwordAuthentication = false; passwordAuthentication = false;
forwardX11 = true; forwardX11 = true;
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
dictionaries = { dictionaries = {
lojban = { lojban = {
jbo-deu = pkgs.fetchzip { jbo-deu = pkgs.fetchzip {
@@ -100,7 +104,9 @@ let
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd"; sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
}; };
}; };
sanskrit = let repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f"; in { sanskrit = let
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
in {
BoehtlingkRoth = pkgs.fetchzip { BoehtlingkRoth = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz"; url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz";
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly"; sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
@@ -154,13 +160,14 @@ let
}; };
}; };
makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: { inherit name path; }) dicts); makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: {inherit name path;}) dicts);
makeStardict = name: dicts: pkgs.writers.writeDashBin name '' makeStardict = name: dicts:
set -efu pkgs.writers.writeDashBin name ''
export SDCV_PAGER=${toString sdcvPager} set -efu
exec ${pkgs.sdcv}/bin/sdcv --color --only-data-dir --data-dir ${makeStardictDataDir dicts} "$@" export SDCV_PAGER=${toString sdcvPager}
''; exec ${pkgs.sdcv}/bin/sdcv --color --only-data-dir --data-dir ${makeStardictDataDir dicts} "$@"
'';
sdcvPager = pkgs.writeDash "sdcvPager" '' sdcvPager = pkgs.writeDash "sdcvPager" ''
export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]} export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]}
@@ -266,22 +273,26 @@ let
s!</\?p[^>]*>!!gI s!</\?p[^>]*>!!gI
" | less -FR " | less -FR
''; '';
in in {
{
environment.etc.stardict.source = toString (makeStardictDataDir ({ environment.etc.stardict.source = toString (makeStardictDataDir ({
Crum = pkgs.fetchzip { Crum = pkgs.fetchzip {
url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2"; url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9"; sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
}; };
SmithBiographyMythology = pkgs.fetchzip { SmithBiographyMythology = pkgs.fetchzip {
url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip"; url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2"; sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
}; };
SmithAntiquities = pkgs.fetchzip { SmithAntiquities = pkgs.fetchzip {
url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip"; url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb"; sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
}; };
} // dictionaries.classics // dictionaries.sanskrit // dictionaries.oed // dictionaries.russian // dictionaries.englishGerman)); }
// dictionaries.classics
// dictionaries.sanskrit
// dictionaries.oed
// dictionaries.russian
// dictionaries.englishGerman));
environment.systemPackages = [ environment.systemPackages = [
pkgs.goldendict pkgs.goldendict
@@ -293,7 +304,6 @@ in
(makeStardict "jbo" dictionaries.lojban) (makeStardict "jbo" dictionaries.lojban)
]; ];
} }
/* /*
https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip
https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip
@@ -355,3 +365,4 @@ MacDonell = pkgs.fetchzip {
stripRoot = false; stripRoot = false;
}; };
*/ */

View File

@@ -6,5 +6,5 @@
''; '';
}; };
users.users.me.extraGroups = [ "wheel" ]; users.users.me.extraGroups = ["wheel"];
} }

View File

@@ -1,64 +0,0 @@
{ pkgs, lib, ... }:
let
important-directories = pkgs.writeText "directories" ''
h ~/
d ~/cloud/Dropbox/
g ~/cloud/gdrive/
s ~/cloud/Seafile/
kk ~/cloud/keybase/private/kmein/
kp ~/cloud/keybase/public/kmein/
t /tmp
D ~/Downloads
cf ''${XDG_CONFIG_HOME:-$HOME/.config}
'';
in {
environment.systemPackages = [ pkgs.sxiv ];
# TODO fix
home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source =
pkgs.writers.writeDash "key-handler" ''
PATH=$PATH:${
lib.makeBinPath [
pkgs.gnused
pkgs.gawk
pkgs.dmenu
pkgs.coreutils
pkgs.libnotify
pkgs.imagemagick
pkgs.xclip
]
}
echo >&2 key "$1" pressed
while read file; do
case "$1" in
"c")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
;;
"m")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
;;
"r")
convert -rotate 90 "$file" "$file" ;;
"R")
convert -rotate -90 "$file" "$file" ;;
"f")
convert -flop "$file" "$file" ;;
"y")
echo -n "$file" | xclip -selection clipboard &&
notify-send "$file copied to clipboard" & ;;
"Y")
readlink -f "$file" | xclip -selection clipboard &&
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
"d")
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
esac
done
'';
}

View File

@@ -1,6 +1,11 @@
{ pkgs, lib, ... }: {
let config,
nixpkgs-unstable = import <nixpkgs-unstable> {}; pkgs,
lib,
...
}: let
unstable = import <nixos-unstable> {inherit (config.nixpkgs) config;};
toSymbols = pkgs.writers.writeDash "to-symbols" '' toSymbols = pkgs.writers.writeDash "to-symbols" ''
${pkgs.gnused}/bin/sed ' ${pkgs.gnused}/bin/sed '
s/\bTri\b//; s/\bTri\b//;
@@ -39,16 +44,16 @@ let
''; '';
in { in {
niveum.telegramBots.transits = { niveum.telegramBots.transits = {
enable = true; enable = false;
time = "*:0/1"; time = "*:0/1";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "-1001796440545" ]; chatIds = ["-1001796440545"];
command = toString (pkgs.writers.writeDash "common-transits" '' command = toString (pkgs.writers.writeDash "common-transits" ''
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//') now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
date=$(${pkgs.coreutils}/bin/date +'%m %d %Y') date=$(${pkgs.coreutils}/bin/date +'%m %d %Y')
{ {
${nixpkgs-unstable.astrolog}/bin/astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node" ${unstable.astrolog}/bin/astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node"
${nixpkgs-unstable.astrolog}/bin/astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $date -R Uranus Neptune Pluto "North Node" ${unstable.astrolog}/bin/astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $date -R Uranus Neptune Pluto "North Node"
} | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || : } | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
''); '');
}; };

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
autorenkalender-package = pkgs.fetchFromGitHub { autorenkalender-package = pkgs.fetchFromGitHub {
owner = "kmein"; owner = "kmein";
repo = "autorenkalender"; repo = "autorenkalender";
@@ -7,14 +10,22 @@ let
sha256 = "1pa7sjg33vdnjianrqldv445jdzzv3mn231ljk1j58hs0cd505gs"; sha256 = "1pa7sjg33vdnjianrqldv445jdzzv3mn231ljk1j58hs0cd505gs";
}; };
autorenkalender = autorenkalender =
pkgs.python3Packages.callPackage autorenkalender-package { }; pkgs.python3Packages.callPackage autorenkalender-package {};
in { in {
niveum.telegramBots.autorenkalender = { niveum.telegramBots.autorenkalender = {
enable = true; enable = true;
time = "07:00"; time = "07:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "@autorenkalender" ]; chatIds = ["@autorenkalender"];
parseMode = "Markdown"; parseMode = "Markdown";
command = "${autorenkalender}/bin/autorenkalender"; command = "${autorenkalender}/bin/autorenkalender";
}; };
niveum.passport.services = [
{
title = "Autorenkalender";
description = "sends <a href=\"https://www.projekt-gutenberg.org/\">Projekt Gutenberg</a>'s anniversary information to Telegram.";
link = "https://t.me/Autorenkalender";
}
];
} }

View File

@@ -1,6 +1,15 @@
{ config, pkgs, lib, ... }: {
let config,
telebots = pkgs.callPackage <telebots> {}; pkgs,
lib,
...
}: let
nixpkgs-21-11 = import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-21.11.tar.gz") {
config.permittedInsecurePackages = [
"python3.9-poetry-1.1.12"
];
};
telebots = nixpkgs-21-11.callPackage <telebots> {};
reverseDirectory = "/run/telegram-reverse"; reverseDirectory = "/run/telegram-reverse";
proverbDirectory = "/run/telegram-proverb"; proverbDirectory = "/run/telegram-proverb";
inherit (import <niveum/lib>) tmpfilesConfig; inherit (import <niveum/lib>) tmpfilesConfig;
@@ -9,22 +18,43 @@ in {
./literature-quote.nix ./literature-quote.nix
./astrology.nix ./astrology.nix
./autorenkalender.nix ./autorenkalender.nix
./hesychius.nix
./smyth.nix
./nachtischsatan.nix ./nachtischsatan.nix
./tlg-wotd.nix ./tlg-wotd.nix
<niveum/modules/telegram-bot.nix> <niveum/modules/telegram-bot.nix>
]; ];
systemd.tmpfiles.rules = map (path: tmpfilesConfig { systemd.tmpfiles.rules = map (path:
type = "d"; tmpfilesConfig {
mode = "0750"; type = "d";
age = "1h"; mode = "0750";
inherit path; age = "1h";
}) [ reverseDirectory proverbDirectory ]; inherit path;
}) [reverseDirectory proverbDirectory];
niveum.passport.services = [
{
title = "Rückwarts-Bot";
link = "https://t.me/RueckwaertsBot";
description = "reverses things on Telegram.";
}
{
title = "BetaCode-Bot";
link = "https://t.me/BetaCodeBot";
description = "converts <a href=\"https://en.wikipedia.org/wiki/Beta_Code\">beta code</a> to polytonic Greek on Telegram.";
}
{
title = "Sprichwortgenerator-Bot";
link = "https://t.me/SprichwortGeneratorBot";
description = "generates useless German proverbs with optional stock photo background on Telegram.";
}
];
systemd.services.telegram-reverse = { systemd.services.telegram-reverse = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram reverse bot"; description = "Telegram reverse bot";
path = [ pkgs.ffmpeg ]; path = [pkgs.ffmpeg];
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/reverse.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/reverse.token>;
enable = true; enable = true;
script = "${telebots}/bin/telegram-reverse"; script = "${telebots}/bin/telegram-reverse";
@@ -33,7 +63,7 @@ in {
}; };
systemd.services.telegram-betacode = { systemd.services.telegram-betacode = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram beta code bot"; description = "Telegram beta code bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/betacode.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/betacode.token>;
enable = true; enable = true;
@@ -42,7 +72,7 @@ in {
}; };
systemd.services.telegram-proverb = { systemd.services.telegram-proverb = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram proverb bot"; description = "Telegram proverb bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/proverb.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/proverb.token>;
enable = true; enable = true;

View File

@@ -0,0 +1,25 @@
{
pkgs,
lib,
...
}: let
hesychius = <scripts> + "/hesychius/hesychius.txt";
in {
niveum.telegramBots.hesychius = {
enable = true;
time = "08:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = ["@HesychiosAlexandreus"];
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
};
systemd.timers.telegram-bot-hesychius.timerConfig.RandomizedDelaySec = "10h";
niveum.passport.services = [
{
title = "Hesychius of Alexandria Bot";
description = "sends a random word from Hesychius of Alexandria's lexicon to Telegram.";
link = "https://t.me/HesychiosAlexandreus";
}
];
}

View File

@@ -1,14 +1,24 @@
{ pkgs, lib, ... }: {
let pkgs,
scripts = import <niveum/packages/scripts> { inherit pkgs lib; }; lib,
...
}: let
scripts = import <niveum/packages/scripts> {inherit pkgs lib;};
inherit (scripts) literature-quote; inherit (scripts) literature-quote;
in { in {
niveum.telegramBots.quotebot = { niveum.telegramBots.quotebot = {
enable = true; enable = true;
time = "08/6:00"; time = "08/6:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "18980945" "757821027" "455964311" ]; chatIds = ["-1001760262519"];
command = "${literature-quote}/bin/literature-quote"; command = "${literature-quote}/bin/literature-quote";
parseMode = "Markdown"; parseMode = "Markdown";
}; };
niveum.passport.services = [
{
title = "Literature quote bot";
description = "sends me and my friends three <a href=\"https://logotheca.xn--kiern-0qa.de/\">logotheca</a> quotes a day.";
}
];
} }

View File

@@ -1,8 +1,11 @@
{ pkgs, lib, ... }: {
let pkgs,
nachtischsatan-bot = { token }: lib,
...
}: let
nachtischsatan-bot = {token}:
pkgs.writers.writePython3 "nachtischsatan-bot" { pkgs.writers.writePython3 "nachtischsatan-bot" {
libraries = [ pkgs.python3Packages.python-telegram-bot ]; libraries = [pkgs.python3Packages.python-telegram-bot];
} '' } ''
from telegram.ext import Updater, MessageHandler from telegram.ext import Updater, MessageHandler
from telegram.ext.filters import Filters from telegram.ext.filters import Filters
@@ -23,7 +26,7 @@ let
''; '';
in { in {
systemd.services.telegram-nachtischsatan = { systemd.services.telegram-nachtischsatan = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "*flubberflubber*"; description = "*flubberflubber*";
enable = true; enable = true;
script = toString (nachtischsatan-bot { script = toString (nachtischsatan-bot {
@@ -31,4 +34,12 @@ in {
}); });
serviceConfig.Restart = "always"; serviceConfig.Restart = "always";
}; };
niveum.passport.services = [
{
title = "Nachtischsatan-Bot";
link = "https://t.me/NachtischsatanBot";
description = "*flubberflubber*";
}
];
} }

View File

@@ -0,0 +1,37 @@
{
pkgs,
lib,
...
}: {
niveum.telegramBots.smyth = {
enable = true;
time = "06/6:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = ["@HerbertWeirSmyth"];
command = toString (pkgs.writers.writeDash "random-smyth" ''
set -efu
RANDOM_SECTION=$(
${pkgs.curl}/bin/curl -sSL http://www.perseus.tufts.edu/hopper/xmltoc?doc=Perseus%3Atext%3A1999.04.0007%3Asmythp%3D1 \
| ${pkgs.gnugrep}/bin/grep -o 'ref="[^"]*"' \
| ${pkgs.coreutils}/bin/shuf -n1 \
| ${pkgs.gnused}/bin/sed 's/^ref="//;s/"$//'
)
${pkgs.curl}/bin/curl -sSL http://www.perseus.tufts.edu/hopper/text?doc=$RANDOM_SECTION\
| ${pkgs.htmlq}/bin/htmlq '#text_main' \
| ${pkgs.gnused}/bin/sed 's/<\/\?hr>//g' \
| ${pkgs.pandoc}/bin/pandoc -f html -t plain --wrap=none
'');
};
systemd.timers.telegram-bot-smyth.timerConfig.RandomizedDelaySec = "3h";
niveum.passport.services = [
{
title = "Herbert Weir Smyth Bot";
description = "sends a random section from Smyth's Ancient Greek grammar to Telegram.";
link = "https://t.me/HerbertWeirSmyth";
}
];
}

View File

@@ -1,10 +1,13 @@
{ pkgs, lib, ... }:
{ {
pkgs,
lib,
...
}: {
niveum.telegramBots.tlg-wotd = { niveum.telegramBots.tlg-wotd = {
enable = true; enable = true;
time = "9:30"; time = "9:30";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "@tlgwotd" ]; chatIds = ["@tlgwotd"];
command = toString (pkgs.writers.writeDash "tlg-wotd" '' command = toString (pkgs.writers.writeDash "tlg-wotd" ''
${pkgs.curl}/bin/curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd \ ${pkgs.curl}/bin/curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd \
| ${pkgs.recode}/bin/recode html..utf8 \ | ${pkgs.recode}/bin/recode html..utf8 \
@@ -14,4 +17,12 @@
''); '');
parseMode = "Markdown"; parseMode = "Markdown";
}; };
niveum.passport.services = [
{
title = "Thesaurus Linguae Graecae Word of the Day";
description = "sends <a href=\"https://stephanus.tlg.uci.edu/\">TLG</a>'s word of the day to Telegram.";
link = "https://t.me/tlgwotd";
}
];
} }

82
configs/themes.nix Normal file
View File

@@ -0,0 +1,82 @@
{
config,
lib,
pkgs,
...
}: let
switch-theme = pkgs.writers.writeDashBin "switch-theme" ''
set -efux
if [ "$1" = toggle ]; then
if [ "$(${pkgs.coreutils}/bin/cat /var/theme/current_theme)" = dark ]; then
${placeholder "out"}/bin/switch-theme light
else
${placeholder "out"}/bin/switch-theme dark
fi
elif test -e "/etc/themes/$1"; then
mkdir -p /var/theme/config
${pkgs.rsync}/bin/rsync --chown=${config.users.users.me.name}:users -a --delete "/etc/themes/$1/" /var/theme/config/
echo "$1" > /var/theme/current_theme
${pkgs.coreutils}/bin/chown ${config.users.users.me.name}:users /var/theme/current_theme
${pkgs.xorg.xrdb}/bin/xrdb -merge /var/theme/config/xresources
${pkgs.procps}/bin/pkill -HUP xsettingsd
else
echo "theme $1 not found"
fi
'';
in {
systemd.services.xsettingsd = {
wantedBy = ["multi-user.target"];
after = ["display-manager.service"];
environment.DISPLAY = ":0";
serviceConfig = {
ExecStart = "${pkgs.xsettingsd}/bin/xsettingsd -c /var/theme/config/xsettings.conf";
User = config.users.users.me.name;
Restart = "always";
RestartSec = "15s";
};
};
systemd.tmpfiles.rules = [
"d /var/theme/ 755 ${config.users.users.me.name} users"
];
environment.systemPackages = [
switch-theme
pkgs.capitaine-cursors
];
home-manager.users.me = {
home.pointerCursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 16;
};
};
environment.etc = {
"themes/light/xsettings.conf".text = ''
Net/ThemeName "Adwaita"
'';
"themes/light/xresources".text = ''
*background: #ffffff
*foreground: #000000
'';
"themes/dark/xsettings.conf".text = ''
Net/ThemeName "Adwaita-dark"
'';
"themes/dark/xresources".text = ''
*background: #000000
*foreground: #ffffff
'';
};
system.activationScripts.theme.text = ''
export DISPLAY=:0
if test -e /var/theme/current_theme; then
${switch-theme}/bin/switch-theme "$(cat /var/theme/current_theme)" ||
${switch-theme}/bin/switch-theme dark
else
${switch-theme}/bin/switch-theme dark
fi
'';
}

View File

@@ -1,13 +1,16 @@
{ lib, config, pkgs, ... }: {
let lib,
config,
pkgs,
...
}: let
theme = (import <niveum/lib>).theme pkgs; theme = (import <niveum/lib>).theme pkgs;
in { in {
environment.systemPackages = environment.systemPackages = [theme.gtk.package theme.icon.package theme.cursor.package];
[ theme.gtk.package theme.icon.package theme.cursor.package ];
services.xserver.displayManager.lightdm.greeters.gtk = { services.xserver.displayManager.lightdm.greeters.gtk = {
theme = { inherit (theme.gtk) name package; }; theme = {inherit (theme.gtk) name package;};
iconTheme = { inherit (theme.icon) name package; }; iconTheme = {inherit (theme.icon) name package;};
}; };
home-manager.users.me = { home-manager.users.me = {
@@ -20,6 +23,11 @@ in {
enable = true; enable = true;
platformTheme = "gtk"; platformTheme = "gtk";
}; };
xsession.pointerCursor = theme.cursor // { size = 16; }; home.pointerCursor =
theme.cursor
// {
size = 16;
x11.enable = true;
};
}; };
} }

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: { {pkgs, ...}: {
environment.systemPackages = [ environment.systemPackages = [
pkgs.tmuxp pkgs.tmuxp
pkgs.reptyr # move programs over to a tmux session pkgs.reptyr # move programs over to a tmux session
@@ -9,26 +9,44 @@
keyMode = "vi"; keyMode = "vi";
clock24 = true; clock24 = true;
terminal = "screen-256color"; terminal = "screen-256color";
baseIndex = 1;
aggressiveResize = true;
escapeTime = 50;
historyLimit = 7000;
shortcut = "a";
extraConfig = '' extraConfig = ''
set -g mouse on
unbind *
bind * list-clients
# naVIgate
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Use C-h and C-l to cycle through panes
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
setw -g monitor-activity on
set -g visual-activity on
set -g status-interval 2 set -g status-interval 2
set -g status-left-length 32 set -g status-left-length 32
set -g status-right-length 150 set -g status-right-length 150
set -g status-bg default set -g status-bg colour242
setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W " setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W "
setw -g window-status-current-format "#[fg=colour12,bg=colour233] * #[fg=white,bg=colour237,bold] #W " setw -g window-status-current-format "#[fg=colour12,bg=colour233] * #[fg=white,bg=colour237,bold] #W "
set -g status-left "" set -g status-left ""
set -g status-right "#[fg=colour255,bg=colour237,bold] %Y-%m-%d #[default]#[fg=colour12,bg=colour233] %H:%M " set -g status-right "#[fg=colour255,bg=colour237,bold] #(hostname -I) #[default]#[fg=colour12,bg=colour233] %FT%R "
set -g status-justify left set -g status-justify left
set -g status-position bottom set -g status-position bottom
set -g mouse on
unbind *
bind * list-clients
''; '';
}; };
} }

View File

@@ -1,4 +1,4 @@
{ {pkgs, ...}: {
services.tor.enable = true; services.tor.enable = true;
services.tor.torsocks.enable = true; environment.systemPackages = [pkgs.tor];
} }

View File

@@ -1,10 +1,12 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
inherit (import <niveum/lib>) localAddresses; inherit (import <niveum/lib>) localAddresses;
living-room-id = 131090; living-room-id = 131090;
in in {
{ imports = [<niveum/modules/traadfri.nix>];
imports = [ <niveum/modules/traadfri.nix> ];
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "traadfri-party" '' (pkgs.writers.writeDashBin "traadfri-party" ''

View File

@@ -1 +1 @@
{ pkgs, ... }: { environment.systemPackages = [ pkgs.vscode ]; } {pkgs, ...}: {environment.systemPackages = [pkgs.vscode];}

View File

@@ -1,6 +1,9 @@
{ pkgs, lib, ... }:
{ {
imports = [ <stockholm/krebs/3modules/fetchWallpaper.nix> ]; pkgs,
lib,
...
}: {
imports = [<stockholm/krebs/3modules/fetchWallpaper.nix>];
krebs.fetchWallpaper = { krebs.fetchWallpaper = {
enable = true; enable = true;

View File

@@ -1,6 +1,9 @@
{ config, pkgs, ... }:
{ {
environment.systemPackages = [ pkgs.watson ]; config,
pkgs,
...
}: {
environment.systemPackages = [pkgs.watson];
environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson"; environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson";
} }

View File

@@ -1,4 +1,8 @@
{ config, pkgs, ... }: { {
config,
pkgs,
...
}: {
home-manager.users.me.home.file.".zshrc".text = '' home-manager.users.me.home.file.".zshrc".text = ''
# nothing to see here # nothing to see here
''; '';
@@ -21,7 +25,7 @@
enableCompletion = true; enableCompletion = true;
autosuggestions.enable = true; autosuggestions.enable = true;
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
syntaxHighlighting.highlighters = [ "main" "brackets" "pattern" "line" ]; syntaxHighlighting.highlighters = ["main" "brackets" "pattern" "line"];
interactiveShellInit = '' interactiveShellInit = ''
setopt INTERACTIVE_COMMENTS CORRECT setopt INTERACTIVE_COMMENTS CORRECT
setopt MULTIOS setopt MULTIOS

106
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": { "nodes": {
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1644229661, "lastModified": 1659877975,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -18,20 +18,21 @@
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixos-unstable"
] ],
"utils": "utils"
}, },
"locked": { "locked": {
"lastModified": 1643933536, "lastModified": 1661573386,
"narHash": "sha256-yRmsWAG4DnLxLIUtlaZsl0kH7rN5xSoyNRlf0YZrcH4=", "narHash": "sha256-pBEg8iY00Af/SAtU2dlmOAv+2x7kScaGlFRDjNoVJO8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2860d7e3bb350f18f7477858f3513f9798896831", "rev": "d89bdff445eadff03fe414e9c30486bc8166b72b",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-21.11", "ref": "master",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@@ -42,19 +43,19 @@
"flake-utils" "flake-utils"
], ],
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixos-stable"
] ]
}, },
"locked": { "locked": {
"lastModified": 1644957911, "lastModified": 1661273257,
"narHash": "sha256-ggie/j7pdBqzDs4W7OiPmhqH9IGbXAbJxGqBdVxA8jA=", "narHash": "sha256-cywpSH3D291AwdO/ecJxHeN2Vuuz0cIy/NEXMsFT+Og=",
"owner": "Mic92", "owner": "kmein",
"repo": "krops", "repo": "krops",
"rev": "86fb3d2ee94fd8306231853b323ed8804edf26ec", "rev": "542bc544ec8b0b807933a812d098e601683b0956",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Mic92", "owner": "kmein",
"repo": "krops", "repo": "krops",
"type": "github" "type": "github"
} }
@@ -62,11 +63,11 @@
"menstruation-backend": { "menstruation-backend": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1634573652, "lastModified": 1649545504,
"narHash": "sha256-FIj8oCOJO+Wqxr2o5MMqIShvzMJud4iUq3o8y4NIRvw=", "narHash": "sha256-TVm3246ML7gWPeGm+bdb+Qo8o/7nve7sQ2hBdCZm3z8=",
"owner": "kmein", "owner": "kmein",
"repo": "menstruation.rs", "repo": "menstruation.rs",
"rev": "dd405fe2acf32441e8ac56e488e689bb1c4bea82", "rev": "d9f3c6d53542fd7c7ed191e37cf4e342d4a47bcb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -96,7 +97,7 @@
"locked": { "locked": {
"lastModified": 1554228333, "lastModified": 1554228333,
"narHash": "sha256-hG/PlcCvCQhNcU55NpHfATkyH9k6cZmO7uvBoJjasXU=", "narHash": "sha256-hG/PlcCvCQhNcU55NpHfATkyH9k6cZmO7uvBoJjasXU=",
"ref": "master", "ref": "refs/heads/master",
"rev": "c528cf970e292790b414b4c1c8c8e9d7e73b2a71", "rev": "c528cf970e292790b414b4c1c8c8e9d7e73b2a71",
"revCount": 32, "revCount": 32,
"type": "git", "type": "git",
@@ -107,34 +108,34 @@
"url": "https://cgit.krebsco.de/nix-writers" "url": "https://cgit.krebsco.de/nix-writers"
} }
}, },
"nixpkgs": { "nixos-stable": {
"locked": { "locked": {
"lastModified": 1644837400, "lastModified": 1661520432,
"narHash": "sha256-treFS89w/xKzeTjJSJdYp/Ceddv6oqq7bL9mZMQDPi0=", "narHash": "sha256-9z+WDeXiu3hobvSsL0SbHDx4s+kFmm8eussySuX4zCM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a03ae0e6d078cfdbb8404c3bff3622bd4e2f1c57", "rev": "f11e12ac6af528c1ba12426ce83cee26f21ceafd",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-21.11", "ref": "nixos-22.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-unstable": { "nixos-unstable": {
"locked": { "locked": {
"lastModified": 1644951967, "lastModified": 1660305968,
"narHash": "sha256-j+l8bt++dsYTJSGABuqeBEom5aNpD4n0BsOTdewFYuU=", "narHash": "sha256-r0X1pZCSEA6mzt5OuTA7nHuLmvnbkwgpFAh1iLIx4GU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "05e1f8a2c7797b0d9f9e07ab2aaeccecdcf9b7da", "rev": "c4a0efdd5a728e20791b8d8d2f26f90ac228ee8d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "master", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@@ -158,11 +159,11 @@
"retiolum": { "retiolum": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1644849126, "lastModified": 1660680907,
"narHash": "sha256-iaRNvfQrUD+ZownDWWNdDwhVPgSsU5ojvVdswVq1IpY=", "narHash": "sha256-D6XkykgU1BiDAnnFG9NwSqBRKCZAHK+2+Ri2/m9rzo8=",
"owner": "krebs", "owner": "krebs",
"repo": "retiolum", "repo": "retiolum",
"rev": "6de359ef848dc1f38fb76731c35e712ee885fd88", "rev": "c4d6b07be29b3b9267027ed25792a2cb350459d5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -179,8 +180,8 @@
"menstruation-backend": "menstruation-backend", "menstruation-backend": "menstruation-backend",
"menstruation-telegram": "menstruation-telegram", "menstruation-telegram": "menstruation-telegram",
"nix-writers": "nix-writers", "nix-writers": "nix-writers",
"nixpkgs": "nixpkgs", "nixos-stable": "nixos-stable",
"nixpkgs-unstable": "nixpkgs-unstable", "nixos-unstable": "nixos-unstable",
"recht": "recht", "recht": "recht",
"retiolum": "retiolum", "retiolum": "retiolum",
"scripts": "scripts", "scripts": "scripts",
@@ -194,11 +195,11 @@
"scripts": { "scripts": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1639436812, "lastModified": 1662493500,
"narHash": "sha256-6CajvfDo7t4ANgjc7DxqH7lI3WRE4MK8q3mBKAjk80k=", "narHash": "sha256-EdAEKDQ6z7oinqQ28ELE3+taJ106DgmhNJt/rpqHJic=",
"owner": "kmein", "owner": "kmein",
"repo": "scripts", "repo": "scripts",
"rev": "d34a8161ba11135a45d3141dc9af482db945d63c", "rev": "51c641ac3c1100d80313696663db70c2eb3698dc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -210,11 +211,11 @@
"stockholm": { "stockholm": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1644865613, "lastModified": 1661246925,
"narHash": "sha256-z7hPtMYxoQuWyLujUs5vbdZOGbjFosh+/IX3GpCDlkc=", "narHash": "sha256-hGNCF4m3SuVogqoipmJzNIKoh03S/SMnO5oMHgfHWjA=",
"ref": "master", "ref": "refs/heads/master",
"rev": "e3785b22b2c6cb173a58fd066c4eda80a67fb872", "rev": "d1fa957ed5bf60767c83c96135f9142f6c96ea50",
"revCount": 10404, "revCount": 10749,
"type": "git", "type": "git",
"url": "https://cgit.lassul.us/stockholm" "url": "https://cgit.lassul.us/stockholm"
}, },
@@ -242,11 +243,11 @@
"tinc-graph": { "tinc-graph": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1639820904, "lastModified": 1653080212,
"narHash": "sha256-d4s2PulBGIIQXtX7blZz+Wnmij5dK/IrBcilNGjqZC4=", "narHash": "sha256-BcfppAuVNp0hMcrMG/ZxE4juSrdQbJSUIA0eHS1/Wxo=",
"owner": "kmein", "owner": "kmein",
"repo": "tinc-graph", "repo": "tinc-graph",
"rev": "1b9c69ffdbdab82d30a23e44f739feea63d94163", "rev": "ea0ef2e5542684d1d8e34a626cb9295dec33e70d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -286,6 +287,21 @@
"repo": "tuna", "repo": "tuna",
"type": "github" "type": "github"
} }
},
"utils": {
"locked": {
"lastModified": 1653893745,
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

224
flake.nix
View File

@@ -2,91 +2,195 @@
description = "niveum: packages, modules, systems"; description = "niveum: packages, modules, systems";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.11"; nixos-stable.url = "github:NixOS/nixpkgs/nixos-22.05";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/master"; nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-21.11"; url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixos-unstable";
}; };
krops = { krops = {
url = "github:Mic92/krops"; url = "github:kmein/krops";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixos-stable";
inputs.flake-utils.follows = "flake-utils"; inputs.flake-utils.follows = "flake-utils";
}; };
# legacy # legacy
menstruation-backend = { url = "github:kmein/menstruation.rs"; flake = false; }; menstruation-backend = {
menstruation-telegram = { url = "github:kmein/menstruation-telegram"; flake = false; }; url = "github:kmein/menstruation.rs";
nix-writers = { url = "git+https://cgit.krebsco.de/nix-writers"; flake = false; }; flake = false;
recht = { url = "github:kmein/recht"; flake = false; }; };
retiolum = { url = "github:krebs/retiolum"; flake = false; }; menstruation-telegram = {
scripts = { url = "github:kmein/scripts"; flake = false; }; url = "github:kmein/menstruation-telegram";
stockholm = { url = "git+https://cgit.lassul.us/stockholm"; flake = false; }; flake = false;
telebots = { url = "github:kmein/telebots"; flake = false; }; };
tinc-graph = { url = "github:kmein/tinc-graph"; flake = false; }; nix-writers = {
traadfri = { url = "github:kmein/traadfri"; flake = false; }; url = "git+https://cgit.krebsco.de/nix-writers";
tuna = { url = "github:kmein/tuna"; flake = false; }; flake = false;
};
recht = {
url = "github:kmein/recht";
flake = false;
};
retiolum = {
url = "github:krebs/retiolum";
flake = false;
};
scripts = {
url = "github:kmein/scripts";
flake = false;
};
stockholm = {
url = "git+https://cgit.lassul.us/stockholm";
flake = false;
};
telebots = {
url = "github:kmein/telebots";
flake = false;
};
tinc-graph = {
url = "github:kmein/tinc-graph";
flake = false;
};
traadfri = {
url = "github:kmein/traadfri";
flake = false;
};
tuna = {
url = "github:kmein/tuna";
flake = false;
};
}; };
outputs = outputs = {
{ self self,
, flake-utils flake-utils,
, home-manager home-manager,
, krops krops,
, menstruation-backend menstruation-backend,
, menstruation-telegram menstruation-telegram,
, nix-writers nix-writers,
, nixpkgs nixos-unstable,
, nixpkgs-unstable nixos-stable,
, recht recht,
, retiolum retiolum,
, scripts scripts,
, stockholm stockholm,
, telebots telebots,
, tinc-graph tinc-graph,
, traadfri traadfri,
, tuna tuna,
}@inputs: } @ inputs: let
let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixos-stable.legacyPackages.${system};
source = name: { home =
niveum.file = toString ./.; if nixos-stable.lib.inPureEvalMode or false
nixos-config.symlink = "niveum/systems/${name}/configuration.nix"; then _: /nonexistent
system-secrets.pass = { else import lib/home.nix;
dir = toString ~/.password-store; source = {
name = "systems/${name}"; sources,
}; unstable,
secrets.pass = { name,
dir = toString ~/.password-store; }:
name = "shared"; {
}; niveum.file = toString ./.;
} // nixpkgs.lib.mapAttrs' (name: value: { nixos-config.symlink = "niveum/systems/${name}/configuration.nix";
inherit name; system-secrets.pass = {
value.file = toString value; dir = toString (home /.password-store);
}) (nixpkgs.lib.filterAttrs (name: _: !builtins.elem name [ "flake-utils" "krops" "self" ]) inputs); name = "systems/${name}";
deployScriptFor = {name, host}: let inherit (import ./lib/default.nix) sshPort; in toString (krops.packages.${system}.writeDeploy "deploy-${name}" { };
source = krops.lib.evalSource [ (source name) ]; secrets.pass = {
target = "root@${host}:${toString sshPort}"; dir = toString (home /.password-store);
}); name = "shared";
};
nixpkgs.git = {
url = "https://github.com/NixOS/nixpkgs";
ref =
(
if unstable
then inputs.nixos-unstable
else inputs.nixos-stable
)
.rev;
shallow = true;
};
}
// nixos-stable.lib.mapAttrs' (name: value: {
inherit name;
value.git = {
url = let
github = x: "https://github.com/${x}";
in
{
home-manager = github "nix-community/home-manager";
menstruation-backend = github "kmein/menstruation.rs";
menstruation-telegram = github "kmein/menstruation-telegram";
nixos-unstable = github "NixOS/nixpkgs";
nix-writers = "https://cgit.krebsco.de/nix-writers";
recht = github "kmein/recht";
retiolum = github "krebs/retiolum";
stockholm = "https://cgit.lassul.us/stockholm";
scripts = github "kmein/scripts";
telebots = github "kmein/telebots";
tinc-graph = github "kmein/tinc-graph";
traadfri = github "kmein/traadfri";
}
.${name};
ref = value.rev;
shallow = true;
};
}) (nixos-stable.lib.filterAttrs (name: _: builtins.elem name sources) inputs);
deployScriptFor = {
name,
user ? "root",
host,
unstable ? false,
sshPort ? (import ./lib/default.nix).sshPort,
sources,
}:
toString (krops.packages.${system}.writeDeploy "deploy-${name}" {
source = krops.lib.evalSource [(source {inherit sources unstable name;})];
target = "${user}@${host}:${toString sshPort}";
useNixOutputMonitor = true;
});
in { in {
apps.${system} = let apps.${system} = let
forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems))); forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems)));
externalNetwork = import ./lib/external-network.nix;
deployScripts = forSystems (name: { deployScripts = forSystems (name: {
name = "deploy-${name}"; name = "deploy-${name}";
value = { value = {
type = "app"; type = "app";
program = deployScriptFor { inherit name; host = "${name}.r"; }; program = deployScriptFor {
inherit name;
host =
if externalNetwork ? name
then externalNetwork.${name}
else "${name}.r";
unstable = name == "kabsa" || name == "manakish";
sources =
["nix-writers" "nixpkgs" "retiolum" "stockholm"]
++ {
zaatar = ["traadfri"];
ful = [];
tahina = [];
kabsa = ["traadfri" "nixos-unstable" "home-manager" "menstruation-backend" "recht"];
manakish = ["traadfri" "nixos-unstable" "home-manager" "menstruation-backend" "recht"];
makanek = ["nixos-unstable" "menstruation-telegram" "menstruation-backend" "scripts" "telebots" "tinc-graph"];
}
.${name};
};
}; };
}); });
ciScripts = forSystems (name: { ciScripts = forSystems (name: {
name = "build-${name}"; name = "build-${name}";
value = { value = {
type = "app"; type = "app";
program = import ./ci.nix { inherit name system inputs; }; program = import ./ci.nix {inherit name system inputs;};
}; };
}); });
in deployScripts // ciScripts; in
deployScripts // ciScripts;
}; };
} }

37
lib/colours/ayu-dark.nix Normal file
View File

@@ -0,0 +1,37 @@
{
black = {
dark = "#000000";
bright = "#323232";
};
red = {
dark = "#ff3333";
bright = "#ff6565";
};
green = {
dark = "#b8cc52";
bright = "#e9fe83";
};
yellow = {
dark = "#e6c446";
bright = "#fff778";
};
blue = {
dark = "#36a3d9";
bright = "#68d4ff";
};
magenta = {
dark = "#f07078";
bright = "#ffa3aa";
};
cyan = {
dark = "#95e5cb";
bright = "#c7fffc";
};
white = {
dark = "#ffffff";
bright = "#ffffff";
};
background = "#0e1419";
foreground = "#e5e1cf";
cursor = "#f19618";
}

37
lib/colours/ayu-light.nix Normal file
View File

@@ -0,0 +1,37 @@
{
black = {
dark = "#000000";
bright = "#323232";
};
red = {
dark = "#ff3333";
bright = "#ff6565";
};
green = {
dark = "#86b200";
bright = "#b8e532";
};
yellow = {
dark = "#f19618";
bright = "#ffc849";
};
blue = {
dark = "#41a6d9";
bright = "#73d7ff";
};
magenta = {
dark = "#f07078";
bright = "#ffa3aa";
};
cyan = {
dark = "#4cbe99";
bright = "#7ff0cb";
};
white = {
dark = "#ffffff";
bright = "#ffffff";
};
background = "#fafafa";
foreground = "#5b6673";
cursor = "#ff6900";
}

View File

@@ -1,5 +1,5 @@
pkgs: rec { pkgs: rec {
terminal = "${pkgs.alacritty}/bin/alacritty"; terminal = "alacritty";
browser = "${pkgs.brave}/bin/brave"; browser = "${pkgs.brave}/bin/brave";
fileManager = "${terminal} -e ${pkgs.ranger}/bin/ranger"; fileManager = "${terminal} -e ${pkgs.ranger}/bin/ranger";
} }

View File

@@ -1,5 +1,13 @@
rec { rec {
tmpfilesConfig = {type, path, mode ? "-", user ? "-", group ? "-", age ? "-", argument ? "-"}: "${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}"; tmpfilesConfig = {
type,
path,
mode ? "-",
user ? "-",
group ? "-",
age ? "-",
argument ? "-",
}: "${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}";
restic = rec { restic = rec {
port = 3571; port = 3571;
@@ -8,14 +16,25 @@ rec {
}; };
firewall = lib: { firewall = lib: {
accept = { source, protocol, dport }: "nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept"; accept = {
source,
protocol,
dport,
}: "nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept";
addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}"); addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}");
removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true"); removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true");
}; };
serveHtml = file: pkgs: '' serveHtml = file: pkgs: ''
default_type "text/html"; default_type "text/html";
root ${pkgs.linkFarm "fahrplan" [{ name = "index.html"; path = file; }]}; root ${
pkgs.linkFarm "www" [
{
name = "index.html";
path = file;
}
]
};
index index.html; index index.html;
''; '';
@@ -50,10 +69,11 @@ rec {
github = "kmein"; github = "kmein";
email = "kmein@posteo.de"; email = "kmein@posteo.de";
name = "Kierán Meinhardt"; name = "Kierán Meinhardt";
sshKeys = pkgs: pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl { sshKeys = pkgs:
url = "https://github.com/kmein.keys"; pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl {
sha256 = "09c6ny0rmpid1m0pc1wsmb3wyy9g721lf4kv55i4lrp42b3i2d5b"; url = "https://github.com/kmein.keys";
})); sha256 = "09c6ny0rmpid1m0pc1wsmb3wyy9g721lf4kv55i4lrp42b3i2d5b";
}));
}; };
syncthing.devices = { syncthing.devices = {
@@ -62,6 +82,7 @@ rec {
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3"; manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4"; toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4";
zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7"; zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7";
tahina.id = "UKJ2CBO-EQPKQL4-3QLRUSG-SSYR6AB-CCCUTKU-CLPYR7N-RUI5A6Y-JTL5NA4";
}; };
ignorePaths = [ ignorePaths = [

131
lib/email.nix Normal file
View File

@@ -0,0 +1,131 @@
{
lib,
mainMailbox ? "posteo",
...
}: {
uni = {
user = "meinhark";
password = lib.strings.fileContents <secrets/eduroam/password>;
address = "kieran.felix.meinhardt@hu-berlin.de";
imap = "mailbox.cms.hu-berlin.de";
smtp = "mailhost.cms.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
uni-old = {
user = "meinhark";
password = lib.strings.fileContents <secrets/eduroam/password>;
address = "meinhark@informatik.hu-berlin.de";
imap = "mailbox.informatik.hu-berlin.de";
smtp = "mailhost.informatik.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
work-uni = {
user = "meinhaki";
password = lib.strings.fileContents <secrets/mail/meinhaki>;
address = "kieran.meinhardt@hu-berlin.de";
imap = "mailbox.cms.hu-berlin.de";
smtp = "mailhost.cms.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
work-admin = {
user = "dslalewa";
password = lib.strings.fileContents <secrets/mail/dslalewa>;
address = "admin.alew.vglsprwi@hu-berlin.de";
imap = "mailbox.cms.hu-berlin.de";
smtp = "mailhost.cms.hu-berlin.de";
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
work-fysi = rec {
user = "kieran@fysi.tech";
address = user;
password = lib.strings.fileContents <secrets/mail/fastmail>;
imap = "imap.fastmail.com";
smtp = "smtp.fastmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
cock = rec {
user = "2210@cock.li";
address = user;
password = lib.strings.fileContents <secrets/mail/cock>;
imap = "mail.cock.li";
smtp = imap;
smtpSettings = smtp: "smtp://${smtp}:587";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
"${mainMailbox}" = rec {
user = "kieran.meinhardt@posteo.net";
address = user;
password = lib.strings.fileContents <secrets/mail/posteo>;
imap = "posteo.de";
smtp = imap;
smtpSettings = smtp: "smtp://${smtp}";
folders = {
drafts = "Drafts";
sent = "Sent";
trash = "Trash";
};
};
google-amro = rec {
user = "amroplay@gmail.com";
address = user;
password = lib.strings.fileContents <secrets/mail/gmail/amroplay>;
imap = "imap.gmail.com";
smtp = "smtp.gmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "[Gmail]/Drafts";
sent = "[Gmail]/Sent Mail";
trash = "[Gmail]/Bin";
};
};
google-kieran = rec {
user = "kieran.meinhardt@gmail.com";
address = user;
password = lib.strings.fileContents <secrets/mail/gmail/kieran.meinhardt>;
imap = "imap.gmail.com";
smtp = "smtp.gmail.com";
smtpSettings = smtp: "smtps://${smtp}:465";
folders = {
drafts = "[Gmail]/Entwürfe";
sent = "[Gmail]/Gesendet";
trash = "[Gmail]/Papierkorb";
};
};
}

4
lib/external-network.nix Normal file
View File

@@ -0,0 +1,4 @@
{
ful = "130.61.217.114";
makanek = "88.99.83.173";
}

View File

@@ -1,4 +1,7 @@
{pkgs, path}: '' {
pkgs,
path,
}: ''
<config> <config>
<paths> <paths>
<path recursive="1">${path}</path> <path recursive="1">${path}</path>

2
lib/home.nix Normal file
View File

@@ -0,0 +1,2 @@
# https://github.com/hercules-ci/gitignore.nix/pull/58/files
path: ~/. + path

View File

@@ -1,22 +1,17 @@
{ pkgs, wirelessInterface, colours, batteryName }: {
let pkgs,
wirelessInterface,
colours,
batteryName,
}: let
inherit (pkgs) lib; inherit (pkgs) lib;
setsid = script: setsid = script:
pkgs.writers.writeDash "setsid-command" '' pkgs.writers.writeDash "setsid-command" ''
${pkgs.utillinux}/bin/setsid ${script} ${pkgs.utillinux}/bin/setsid ${script}
''; '';
coronaBlock = {
block = "custom"; accounts = import <niveum/lib/email.nix> {inherit lib;};
interval = 60 * 2; # every two minutes
command = pkgs.writers.writeDash "corona" ''
${pkgs.curl}/bin/curl https://corona-stats.online/germany \
| ${pkgs.gnugrep}/bin/grep Germany \
| ${pkgs.gnused}/bin/sed 's/\s*//g' \
| ${pkgs.ansifilter}/bin/ansifilter \
| ${pkgs.gawk}/bin/awk -F'' '{print "🤒 " $8 " 💀 " $5}'
'';
};
in { in {
theme = { theme = {
name = "plain"; name = "plain";
@@ -24,7 +19,7 @@ in {
critical_fg = colours.red.bright; critical_fg = colours.red.bright;
good_fg = colours.green.bright; good_fg = colours.green.bright;
idle_fg = colours.foreground; idle_fg = colours.foreground;
info_fg = colours.foreground; info_fg = colours.cyan.bright;
warning_fg = colours.yellow.bright; warning_fg = colours.yellow.bright;
warning_bg = colours.background; warning_bg = colours.background;
alternating_tint_bg = colours.background; alternating_tint_bg = colours.background;
@@ -33,53 +28,15 @@ in {
good_bg = colours.background; good_bg = colours.background;
idle_bg = colours.background; idle_bg = colours.background;
info_bg = colours.background; info_bg = colours.background;
separator = "/ "; separator = "";
separator_bg = "auto"; separator_bg = "auto";
separator_fg = colours.black.bright; separator_fg = colours.black.bright;
}; };
}; };
icons = { icons.name = "awesome6";
name = "none"; icons.overrides.rss = "";
overrides = { icons.overrides.vpn = "";
bat = "🔋"; icons.overrides.irc = "";
bat_charging = "🔌";
bat_discharging = "🔋";
bat_empty = " ";
bat_full = " ";
bat_half = " ";
bat_quarter = " ";
bat_three_quarters = " ";
cogs = "🚦 ";
cpu = "🖥 ";
disk_drive = "💽";
mail = "📧 ";
memory_mem = "🧠 ";
music = "🎵";
music_next = "";
music_pause = "";
music_play = "";
music_prev = "";
net_down = "";
net_up = "🌐";
net_vpn = "🛡 ";
net_wired = "🌐";
net_wireless = "📶";
pomodoro = "🍅 ";
time = "📅 ";
toggle_off = "👎";
toggle_on = "👍";
volume_empty = "🔈 ";
volume_full = "🔊 ";
volume_half = "🔉 ";
volume_muted = "🔇";
weather_clouds = "🌥";
weather_default = "🌡";
weather_rain = "🌧";
weather_snow = "🌨";
weather_sun = "🌣";
weather_thunder = "🌩";
};
};
block = [ block = [
{ {
block = "weather"; block = "weather";
@@ -95,41 +52,121 @@ in {
{ {
block = "custom"; block = "custom";
interval = 60 * 5; interval = 60 * 5;
command = let spacetime = import <niveum/configs/spacetime.nix>; in pkgs.writers.writePython3 "sun.py" { libraries = [ pkgs.python3Packages.astral ]; flakeIgnore = [ "E121" "E501" ]; } command = let
'' spacetime = import <niveum/configs/spacetime.nix>;
import astral in
import astral.moon pkgs.writers.writePython3 "sun.py" {
import astral.sun libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
moon_phases = {
0: "🌑",
3.5: "🌒",
7: "🌓",
10.5: "🌔",
14: "🌕",
17.5: "🌖",
21: "🌗",
24.5: "🌘",
28: "🌑",
} }
current_phase = astral.moon.phase() ''
closest_phase = min(moon_phases.keys(), key=lambda x: abs(current_phase - x)) import astral
import astral.moon
import astral.sun
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude}) current_phase = astral.moon.phase()
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
print("🌅 {} 🌇 {} {} {}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), moon_phases[closest_phase], round(current_phase, 1))) city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude})
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
print("{} {} {}{}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), "" if current_phase < 14 else "", round(current_phase, 1)))
'';
}
{
block = "github";
info = ["total"];
warning = ["mention" "review_requested"];
}
{
block = "custom";
interval = 10;
command = "newsboat-unread-count";
json = true;
}
{
block = "custom";
interval = 10;
command = pkgs.writers.writeDash "todo" ''
${pkgs.todoman}/bin/todo --porcelain | ${pkgs.jq}/bin/jq -r '
map(select(.due != null))
| (map(select(.due < now)) | length) as $overdue
| (map(select(.due >= now and .due < now + (60 * 60 * 24))) | length) as $dueToday
| {
icon: "tasks",
text: (($overdue + $dueToday) as $sum | if $sum > 0 then $sum | tostring else "" end),
state: (
if $overdue > 0 then
"Critical"
elif $dueToday > 0 then
"Warning"
else
"Idle"
end
)
}
'
''; '';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60 * 5;
command = let
query-account = name: account: "${pkgs.writers.writeDash "query-imap-${name}" ''
${pkgs.coreutils}/bin/timeout 1 ${pkgs.curl}/bin/curl -sSL -u ${lib.escapeShellArg "${account.user}:${account.password}"} imaps://${account.imap} -X 'STATUS INBOX (UNSEEN)' \
| ${pkgs.gnugrep}/bin/grep -Eo '[0-9]+' \
| sed 's/^/{"${name}":/;s/$/}/'
''} &";
in
pkgs.writers.writeDash "unread-mail" ''
{
${lib.concatStringsSep "\n" (lib.mapAttrsToList query-account accounts)}
wait
} | jq -s 'if length == 0 then {text: "", icon: "mail", state: "Idle"} else
add
| (values | add) as $sum
| {
text: (if $sum > 0 then $sum | tostring else "" end),
icon: "mail",
state: (
if .uni > 0 or .["work-uni"] > 0 or .posteo > 0 then
"Warning"
elif $sum > 0 then
"Info"
else
"Idle"
end
)
} end'
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60;
command = pkgs.writers.writeDash "weechat" ''
ssh -o ConnectTimeout=1 makanek cat /var/lib/weechat/hotlist.txt | sed 's/,/\n/g' | wc -l | jq '{
text: (if . > 0 then . | tostring else "" end),
state: (if . > 0 then "Info" else "Idle" end),
icon: "irc"
}'
'';
json = true;
hide_when_empty = true;
} }
{ {
block = "custom"; block = "custom";
interval = 5; interval = 5;
command = pkgs.writers.writeDash "hu-berlin-vpn" '' command = pkgs.writers.writeDash "hu-berlin-vpn" ''
PATH=${lib.makeBinPath [ pkgs.systemd ]} PATH=${lib.makeBinPath [pkgs.systemd]}
(systemctl is-active --quiet openvpn-hu-berlin.service && echo "🎓👍 (OpenVPN)") \ (systemctl is-active --quiet openvpn-hu-berlin.service && echo '{"state": "Good", "text": "OpenVPN", "icon": "vpn"}') \
|| (systemctl is-active --quiet hu-vpn.service && echo "🎓👍 (PPP+SSL)") \ || (systemctl is-active --quiet hu-vpn.service && echo '{"state": "Good", "text": "PPP+SSL", "icon": "vpn"}') \
|| echo "🎓👎" || echo '{"state": "Idle", "icon": "vpn", "text": ""}'
''; '';
json = true;
hide_when_empty = true;
} }
{ {
block = "net"; block = "net";
@@ -154,11 +191,37 @@ in {
format_mem = "{mem_used;G}"; format_mem = "{mem_used;G}";
clickable = false; clickable = false;
} }
{ block = "load"; } {block = "load";}
{ {
block = "time"; block = "custom";
interval = 1; interval = 1;
format = "%Y-%m-%d (%W %a) %H:%M"; json = true;
command = pkgs.writers.writeDash "time" ''
${pkgs.jq}/bin/jq -n \
--arg now "$(${pkgs.coreutils}/bin/date +'%Y-%m-%d (%W %a) %H:%M')" \
--argjson nextEvent "$(
${pkgs.khal}/bin/khal list --format "{start}" --day-format "" $(${pkgs.coreutils}/bin/date +'%Y-%m-%d %H:%M') 2>/dev/null \
| ${pkgs.gnugrep}/bin/grep -E '[0-9]{2}:[0-9]{2}' \
| ${pkgs.coreutils}/bin/head -1 \
| ${pkgs.coreutils}/bin/date --date="$(cat)" +%s
)" \
'{
text: $now,
icon: "time",
state: (
($nextEvent - now) as $deltaT
| if $deltaT < (5 * 60) then
"Critical"
elif $deltaT < (15 * 60) then
"Warning"
elif $deltaT < (60 * 60) then
"Info"
else
"Idle"
end
)
}'
'';
} }
]; ];
} }

163
lib/radio-news.html Normal file
View File

@@ -0,0 +1,163 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>lassulus radio news</title>
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
main {
max-width: 800px;
margin: 0 auto;
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 2em;
}
#news-list ul {
list-style: none;
padding-left: 0;
}
#news-list li {
margin-bottom: 1em;
}
#news-list time {
display: block;
color: grey;
}
form label {
display: block;
}
form input,
form textarea {
width: 100%;
margin-bottom: 1em;
}
@media only screen and (max-width: 768px) {
main {
grid-template-columns: 1fr;
}
}
</style>
<script>
const newsEndpoint = "http://radio-news.r";
function isoString(date) {
return date.toISOString().slice(0, -5) + "Z";
}
function setNextNews() {
document.getElementById("next-news").innerHTML = (
60 - new Date().getUTCMinutes()
).toString();
}
setInterval(setNextNews, 6000);
function fetchNews() {
fetch(newsEndpoint).then((response) => {
response.json().then((news) => {
const newsList = document.getElementById("news-list");
newsList.innerHTML = "";
const ul = document.createElement("ul");
for (const newsItem of news) {
const start = new Date(newsItem.from);
const end = new Date(newsItem.to);
const li = document.createElement("li");
const startDate = document.createElement("time");
startDate.className = "start";
startDate.title = isoString(start);
startDate.setAttribute("datetime", isoString(start));
startDate.appendChild(
document.createTextNode(start.toLocaleString())
);
const endDate = document.createElement("time");
endDate.className = "end";
endDate.title = isoString(end);
endDate.setAttribute("datetime", isoString(end));
endDate.appendChild(
document.createTextNode(end.toLocaleString())
);
li.appendChild(document.createTextNode(newsItem.text));
li.appendChild(startDate);
li.appendChild(endDate);
ul.appendChild(li);
}
newsList.appendChild(ul);
});
});
}
function sendNews(event) {
event.preventDefault();
const formData = new FormData(event.target);
const request = new XMLHttpRequest();
request.open("POST", newsEndpoint, false); // synchronous
request.send(
JSON.stringify({
from: isoString(new Date(formData.get("from"))),
to: isoString(new Date(formData.get("to"))),
text: formData.get("text"),
})
);
location.reload();
}
const pad2 = (int) => (int < 10 ? `0${int}` : int.toString());
const localIsoString = (date) =>
`${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(
date.getDate()
)}T${pad2(date.getHours())}:${pad2(date.getMinutes())}`;
function setDate() {
let now = new Date();
document.getElementById("time-from").value = localIsoString(now);
now.setHours(now.getHours() + 1);
document.getElementById("time-to").value = localIsoString(now);
}
window.onload = () => {
setDate();
setNextNews();
fetchNews();
};
</script>
</head>
<body>
<main>
<section>
<h1>Submit news</h1>
<form onsubmit="sendNews(event)">
<label>Start time</label>
<input type="datetime-local" id="time-from" name="from" required />
<label>End time</label>
<input type="datetime-local" id="time-to" name="to" required />
<label>News text</label>
<textarea name="text" rows="10" required></textarea>
<input type="submit" />
</form>
Next news report should start in <span id="next-news"></span> minutes.
</section>
<aside>
<h1>Planned news</h1>
<div id="news-list">
<em>No news planned yet.</em>
</div>
</aside>
</main>
</body>
</html>

View File

@@ -4,6 +4,11 @@
ipv6 = "42:0:3c46:861f:a118:8e9a:82c9:3d"; ipv6 = "42:0:3c46:861f:a118:8e9a:82c9:3d";
}; };
ful = {
ipv4 = "10.243.2.107";
ipv6 = "42:0:3c46:2c8b:a564:1213:9fb4:1bc4";
};
zaatar = { zaatar = {
ipv4 = "10.243.2.34"; ipv4 = "10.243.2.34";
ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd"; ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd";
@@ -18,4 +23,9 @@
ipv4 = "10.243.2.85"; ipv4 = "10.243.2.85";
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27"; ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";
}; };
tahina = {
ipv4 = "10.243.2.74";
ipv6 = "42:0:3c46:2923:1c90:872:edd6:306";
};
} }

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,7 @@ nnoremap <C-p> :FZF<CR>
nnoremap <C-l> :Rg<CR> nnoremap <C-l> :Rg<CR>
let g:fzf_layout = { 'down': '~15%' } let g:fzf_layout = { 'down': '~15%' }
colorscheme paramount colorscheme dim
set background=dark
" transparent background " transparent background
hi Normal guibg=NONE ctermbg=NONE hi Normal guibg=NONE ctermbg=NONE
@@ -35,11 +34,17 @@ nnoremap <Leader>a <Plug>(ale_hover)
nnoremap <Leader>d <Plug>(ale_go_to_definition_in_tab) nnoremap <Leader>d <Plug>(ale_go_to_definition_in_tab)
nnoremap <Leader>rf <Plug>(ale_find_references) nnoremap <Leader>rf <Plug>(ale_find_references)
" Hit `%` on `if` to jump to `else`.
runtime macros/matchit.vim
filetype plugin indent on filetype plugin indent on
set autoindent
set notitle set notitle
set nospell set nospell
set nocompatible
set smartcase ignorecase " you need these two set smartcase ignorecase " you need these two
set backspace=indent,eol,start
set hidden
set ruler
set shiftwidth=2 tabstop=2 expandtab set shiftwidth=2 tabstop=2 expandtab
set laststatus=1 set laststatus=1
set number set number
@@ -109,29 +114,33 @@ command! ToggleBackground call s:toggle_background()
inoremap <F12> <C-O>:ToggleBackground<CR> inoremap <F12> <C-O>:ToggleBackground<CR>
nnoremap <F12> :ToggleBackground<CR> nnoremap <F12> :ToggleBackground<CR>
autocmd bufnewfile,bufread *.4th set filetype=forth augroup filetypes
autocmd bufnewfile,bufread *.asm set filetype=nasm autocmd!
autocmd bufnewfile,bufread *.c set keywordprg=man\ 3 autocmd bufnewfile,bufread *.4th set filetype=forth
autocmd bufnewfile,bufread *.h set keywordprg=man\ 3 autocmd bufnewfile,bufread *.asm set filetype=nasm
autocmd bufnewfile,bufread *.conf set filetype=conf autocmd bufnewfile,bufread *.c set keywordprg=man\ 3
autocmd bufnewfile,bufread *.nix packadd vim-nix | set filetype=nix | set path+=/var/src autocmd bufnewfile,bufread *.h set keywordprg=man\ 3
autocmd bufnewfile,bufread *.rust packadd rust-vim autocmd bufnewfile,bufread *.conf set filetype=conf
autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv autocmd bufnewfile,bufread *.nix packadd vim-nix | set filetype=nix | set path+=/var/src
autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex autocmd bufnewfile,bufread *.rust packadd rust-vim
autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv
autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex
autocmd bufnewfile,bufread *.jq packadd jq.vim autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar
autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4 autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript
autocmd bufnewfile,bufread urls,config set filetype=conf autocmd bufnewfile,bufread *.jq packadd jq.vim
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4 autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4
autocmd bufnewfile,bufread *.md packadd vim-pandoc | packadd vim-pandoc-syntax | set filetype=pandoc autocmd bufnewfile,bufread urls,config set filetype=conf
autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
autocmd filetype javascript packadd vim-javascript autocmd bufnewfile,bufread *.md packadd vim-pandoc | packadd vim-pandoc-syntax | set filetype=pandoc
autocmd filetype make setlocal noexpandtab autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i
autocmd filetype javascript packadd vim-javascript
autocmd filetype make setlocal noexpandtab
autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0
augroup end
autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0
autocmd bufreadpost * autocmd bufreadpost *
\ if line("'\"") > 0 && line("'\"") <= line("$") | \ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" | \ exe "normal! g`\"" |

View File

@@ -1,20 +1,25 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let cfg = config.niveum.dropbox; lib,
config,
...
}:
with lib; let
cfg = config.niveum.dropbox;
in { in {
options.niveum.dropbox = { enable = mkEnableOption "Dropbox"; }; options.niveum.dropbox = {enable = mkEnableOption "Dropbox";};
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.dropbox-cli ]; environment.systemPackages = [pkgs.dropbox-cli];
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ 17500 ]; allowedTCPPorts = [17500];
allowedUDPPorts = [ 17500 ]; allowedUDPPorts = [17500];
}; };
systemd.user.services.dropbox = { systemd.user.services.dropbox = {
description = "Dropbox synchronisation service"; description = "Dropbox synchronisation service";
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.dropbox.out}/bin/dropbox"; ExecStart = "${pkgs.dropbox.out}/bin/dropbox";
ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID"; ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID";

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.niveum.hledger; cfg = config.niveum.hledger;
hledger-git = pkgs.writers.writeDashBin "hledger-git" '' hledger-git = pkgs.writers.writeDashBin "hledger-git" ''
LEDGER_DIR="$(dirname $LEDGER_FILE)" LEDGER_DIR="$(dirname $LEDGER_FILE)"
@@ -39,14 +43,14 @@ in {
default = "127.0.0.1"; default = "127.0.0.1";
}; };
capabilities = mkOption { capabilities = mkOption {
type = types.listOf (types.enum [ "view" "add" "manage" ]); type = types.listOf (types.enum ["view" "add" "manage"]);
default = [ "view" "add" ]; default = ["view" "add"];
}; };
flags = mkOption { flags = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = [ ]; default = [];
}; };
user = mkOption { type = types.attrs; }; user = mkOption {type = types.attrs;};
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.hledger-web; default = pkgs.hledger-web;
@@ -55,22 +59,22 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package hledger-git hledger-edit ]; environment.systemPackages = [cfg.package hledger-git hledger-edit];
environment.variables.LEDGER_FILE = environment.variables.LEDGER_FILE =
mkIf (cfg.ledgerFile != null) cfg.ledgerFile; mkIf (cfg.ledgerFile != null) cfg.ledgerFile;
systemd.services.hledger-web = mkIf cfg.server.enable { systemd.services.hledger-web = mkIf cfg.server.enable {
description = "hledger server"; description = "hledger server";
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
serviceConfig = { serviceConfig = {
Restart = "always"; Restart = "always";
ExecStart = '' ExecStart = ''
${cfg.server.package}/bin/hledger-web \ ${cfg.server.package}/bin/hledger-web \
--port=${toString cfg.server.port} \ --port=${toString cfg.server.port} \
--host=${cfg.server.host} \ --host=${cfg.server.host} \
--capabilities=${concatStringsSep "," cfg.server.capabilities} \ --capabilities=${concatStringsSep "," cfg.server.capabilities} \
${concatStringsSep " " cfg.server.flags} ${concatStringsSep " " cfg.server.flags}
''; '';
User = cfg.server.user.name; User = cfg.server.user.name;
PrivateTemp = true; PrivateTemp = true;

View File

@@ -1,8 +1,13 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let cfg = config.niveum.minecraft; lib,
config,
...
}:
with lib; let
cfg = config.niveum.minecraft;
in { in {
options.niveum.minecraft = { enable = mkEnableOption "Minecraft"; }; options.niveum.minecraft = {enable = mkEnableOption "Minecraft";};
config = mkIf cfg.enable { environment.systemPackages = [ pkgs.minecraft ]; }; config = mkIf cfg.enable {environment.systemPackages = [pkgs.minecraft];};
} }

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.services.moodle-dl; cfg = config.services.moodle-dl;
json = pkgs.formats.json {}; json = pkgs.formats.json {};
moodle-dl-json = json.generate "moodle-dl.json" cfg.settings; moodle-dl-json = json.generate "moodle-dl.json" cfg.settings;
@@ -52,7 +56,6 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
users.users.moodle-dl = { users.users.moodle-dl = {
isSystemUser = true; isSystemUser = true;
home = cfg.directory; home = cfg.directory;
@@ -63,7 +66,7 @@ in {
systemd.services.moodle-dl = { systemd.services.moodle-dl = {
description = "A Moodle downloader that downloads course content"; description = "A Moodle downloader that downloads course content";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
serviceConfig = mkMerge [ serviceConfig = mkMerge [
{ {
Type = "oneshot"; Type = "oneshot";
@@ -73,11 +76,11 @@ in {
ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}"; ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}";
ExecStartPre = "${pkgs.coreutils}/bin/ln -sfn ${toString moodle-dl-json} ${cfg.directory}/config.json"; ExecStartPre = "${pkgs.coreutils}/bin/ln -sfn ${toString moodle-dl-json} ${cfg.directory}/config.json";
} }
(mkIf (cfg.directory == stateDirectoryDefault) { StateDirectory = "moodle-dl"; }) (mkIf (cfg.directory == stateDirectoryDefault) {StateDirectory = "moodle-dl";})
]; ];
inherit (cfg) startAt; inherit (cfg) startAt;
}; };
}; };
meta.maintainers = [ maintainers.kmein ]; meta.maintainers = [maintainers.kmein];
} }

View File

@@ -1,50 +1,69 @@
# https://github.com/jmackie/nixos-networkmanager-profiles/ # https://github.com/jmackie/nixos-networkmanager-profiles/
{ lib, config, ... }: {
with lib; lib,
let config,
...
}:
with lib; let
nm = config.networking.networkmanager; nm = config.networking.networkmanager;
mkProfile = profileAttrs: mkProfile = profileAttrs:
if !(isAttrs profileAttrs) then if !(isAttrs profileAttrs)
throw "error 1" then throw "error 1"
else { else {
enable = true; enable = true;
mode = "0400"; # readonly (user) mode = "0400"; # readonly (user)
text = (foldlAttrs (accum: text =
{ name, value }: '' (foldlAttrs (accum: {
${accum} name,
value,
}: ''
${accum}
[${name}] ${mkProfileEntry value}'') [${name}] ${mkProfileEntry value}'')
"# Generated by nixos-networkmanager-profiles" profileAttrs) + "\n"; "# Generated by nixos-networkmanager-profiles"
profileAttrs)
+ "\n";
}; };
mkProfileEntry = entryAttrs: mkProfileEntry = entryAttrs:
if !(isAttrs entryAttrs) then if !(isAttrs entryAttrs)
throw "error 2" then throw "error 2"
else else
foldlAttrs (accum: foldlAttrs (accum: {
{ name, value }: '' name,
${accum} value,
${name}=${toString value}'') "" entryAttrs; }: ''
${accum}
${name}=${toString value}'') ""
entryAttrs;
foldlAttrs = op: nul: attrs: foldlAttrs = op: nul: attrs:
foldl (accum: { fst, snd }: op accum (nameValuePair fst snd)) nul foldl (accum: {
fst,
snd,
}:
op accum (nameValuePair fst snd))
nul
(lists.zipLists (attrNames attrs) (attrValues attrs)); (lists.zipLists (attrNames attrs) (attrValues attrs));
attrLength = attrs: length (attrValues attrs); attrLength = attrs: length (attrValues attrs);
in { in {
options.networking.networkmanager.profiles = mkOption { options.networking.networkmanager.profiles = mkOption {
type = types.attrs; type = types.attrs;
default = { }; default = {};
}; };
config = mkIf (attrLength nm.profiles > 0) { config = mkIf (attrLength nm.profiles > 0) {
environment.etc = (foldlAttrs (accum: environment.etc = foldlAttrs (accum: {
{ name, value }: name,
accum // { value,
}:
accum
// {
"NetworkManager/system-connections/${name}.nmconnection" = "NetworkManager/system-connections/${name}.nmconnection" =
mkProfile value; mkProfile value;
}) { } nm.profiles); }) {}
nm.profiles;
}; };
} }

135
modules/passport.nix Normal file
View File

@@ -0,0 +1,135 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.niveum.passport;
sortOn = a: lib.sort (as1: as2: lib.lessThan (lib.getAttr a as1) (lib.getAttr a as2));
css = ''
body {
margin: 0;
font-family: "Fira Sans Condensed", sans-serif;
}
main {
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 3fr;
grid-gap: 2em;
}
@media only screen and (max-width: 768px) {
main {
grid-template-columns: 1fr;
}
}
footer, section {
padding: 1em;
}
footer {
text-align: center;
}
dl {
border: 3px double #ccc;
padding: 0.5em;
}
dt {
float: left;
clear: left;
width: 200px;
text-align: right;
font-weight: bold;
margin-right: 1em;
margin-bottom: 1em;
}
dd {
margin: 0 0 0 110px;
padding: 0 0 0.5em 0;
margin-bottom: 1em;
}
'';
in
with lib; {
options.niveum.passport = {
enable = mkEnableOption "server passport";
introductionHTML = mkOption {type = types.str;};
virtualHost = mkOption {
type = types.str;
};
services = mkOption {
type = types.listOf (types.submodule {
options = {
title = mkOption {type = types.str;};
link = mkOption {
type = types.nullOr types.str;
default = null;
};
description = mkOption {
type = types.str;
default = "";
};
};
});
default = [];
};
};
config = mkIf cfg.enable {
services.nginx.enable = true;
services.nginx.virtualHosts."${cfg.virtualHost}".locations."/passport".extraConfig = ''
default_type "text/html";
root ${
pkgs.linkFarm "www" [
{
name = "passport/index.html";
path = pkgs.writeText "index.html" ''
<!doctype html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${config.networking.hostName} passport</title>
<style>${css}</style>
</head>
<body>
<main>
<section id="server">
<h1>${config.networking.hostName}</h1>
${cfg.introductionHTML}
</section>
<section id="services">
<h2>Services</h2>
<dl>
${lib.strings.concatMapStringsSep "\n" (service: ''
<dt>
${lib.optionalString (service.link != null) "<a href=\"${service.link}\">"}
${service.title}
${lib.optionalString (service.link != null) "</a>"}
</dt>
<dd>
${service.description}
</dd>
'') (sortOn "title" cfg.services)}
</dl>
</section>
</main>
<footer>
<tt>${config.networking.hostName}</tt> is part of the <i><a href="https://github.com/kmein/niveum/tree/master/systems/${config.networking.hostName}">niveum</a></i> network.
</footer>
</body>
'';
}
]
};
index index.html;
'';
};
}

View File

@@ -1,6 +1,10 @@
{ config, pkgs, lib, ... }: {
with lib; config,
let pkgs,
lib,
...
}:
with lib; let
netname = "retiolum"; netname = "retiolum";
cfg = config.networking.retiolum; cfg = config.networking.retiolum;
in { in {
@@ -27,10 +31,10 @@ in {
}; };
config = { config = {
services.tinc.networks.${netname} = { services.tinc.networks.${netname} = {
name = cfg.nodename; name = cfg.nodename;
hosts = builtins.mapAttrs hosts =
builtins.mapAttrs
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}") (name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
(builtins.readDir <retiolum/hosts>); (builtins.readDir <retiolum/hosts>);
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>; rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
@@ -43,11 +47,11 @@ in {
networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>); networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>);
environment.systemPackages = [ config.services.tinc.networks.${netname}.package ]; environment.systemPackages = [config.services.tinc.networks.${netname}.package];
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ 655 ]; allowedTCPPorts = [655];
allowedUDPPorts = [ 655 ]; allowedUDPPorts = [655];
}; };
#services.netdata.portcheck.checks.tinc.port = 655; #services.netdata.portcheck.checks.tinc.port = 655;

View File

@@ -1,13 +1,17 @@
{ config, lib, pkgs, ... }: {
config,
with lib; lib,
pkgs,
let ...
}:
with lib; let
cfg = config.services.spotifyd; cfg = config.services.spotifyd;
toml = pkgs.formats.toml {}; toml = pkgs.formats.toml {};
spotifydConf = if cfg.settings != {} then toml.generate "spotify.conf" cfg.settings else pkgs.writeText "spotifyd.conf" cfg.config; spotifydConf =
in if cfg.settings != {}
{ then toml.generate "spotify.conf" cfg.settings
else pkgs.writeText "spotifyd.conf" cfg.config;
in {
options = { options = {
services.spotifyd = { services.spotifyd = {
enable = mkEnableOption "spotifyd, a Spotify playing daemon"; enable = mkEnableOption "spotifyd, a Spotify playing daemon";
@@ -41,8 +45,8 @@ in
]; ];
systemd.services.spotifyd = { systemd.services.spotifyd = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
after = [ "network-online.target" "sound.target" ]; after = ["network-online.target" "sound.target"];
description = "spotifyd, a Spotify playing daemon"; description = "spotifyd, a Spotify playing daemon";
environment.SHELL = "/bin/sh"; environment.SHELL = "/bin/sh";
serviceConfig = { serviceConfig = {
@@ -56,5 +60,5 @@ in
}; };
}; };
meta.maintainers = [ maintainers.anderslundstedt ]; meta.maintainers = [maintainers.anderslundstedt];
} }

View File

@@ -1,10 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
{ {
config,
lib,
pkgs,
...
}:
with lib; {
options.niveum = { options.niveum = {
wirelessInterface = mkOption { type = types.str; }; wirelessInterface = mkOption {type = types.str;};
batteryName = mkOption { type = types.str; }; batteryName = mkOption {type = types.str;};
promptColours = let promptColours = let
colours16 = types.enum [ colours16 = types.enum [

View File

@@ -1,6 +1,10 @@
{ lib, config, pkgs, ... }: {
with lib; lib,
let config,
pkgs,
...
}:
with lib; let
cfg = config.niveum.telegramBots; cfg = config.niveum.telegramBots;
botService = name: bot: botService = name: bot:
@@ -8,37 +12,38 @@ let
enable = bot.enable; enable = bot.enable;
startAt = bot.time; startAt = bot.time;
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
script = strings.concatStringsSep "\n" ([ "QUOTE=$(${bot.command})" "if [ -n \"$QUOTE\" ]; then" ] script = strings.concatStringsSep "\n" (["QUOTE=$(${bot.command})" "if [ -n \"$QUOTE\" ]; then" "echo $QUOTE >&2"]
++ map (chatId: '' ++ map (chatId: ''
${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \ ${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \
-d chat_id="${chatId}" \ -d chat_id="${chatId}" \
-d text="$QUOTE" ${ -d text="$QUOTE" ${
lib.strings.optionalString (bot.parseMode != null) lib.strings.optionalString (bot.parseMode != null)
"-d parse_mode=${bot.parseMode}" "-d parse_mode=${bot.parseMode}"
} } | ${pkgs.jq}/bin/jq -e .ok
'') bot.chatIds '')
++ [ "fi" ]); bot.chatIds
++ ["fi"]);
}; };
in { in {
options.niveum.telegramBots = mkOption { options.niveum.telegramBots = mkOption {
type = types.attrsOf (types.submodule { type = types.attrsOf (types.submodule {
options = { options = {
enable = mkEnableOption "Telegram bot"; enable = mkEnableOption "Telegram bot";
time = mkOption { type = types.str; }; time = mkOption {type = types.str;};
token = mkOption { type = types.strMatching "[0-9A-Za-z:-]+"; }; token = mkOption {type = types.strMatching "[0-9A-Za-z:-]+";};
chatIds = mkOption { chatIds = mkOption {
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+"); type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
}; };
command = mkOption { type = types.str; }; command = mkOption {type = types.str;};
parseMode = mkOption { parseMode = mkOption {
type = types.nullOr (types.enum [ "HTML" "Markdown" ]); type = types.nullOr (types.enum ["HTML" "Markdown"]);
default = null; default = null;
}; };
}; };
}); });
default = { }; default = {};
}; };
config = { systemd.services = attrsets.mapAttrs' botService cfg; }; config = {systemd.services = attrsets.mapAttrs' botService cfg;};
} }

View File

@@ -1,39 +1,49 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let lib,
config,
...
}:
with lib; let
cfg = config.niveum.traadfri; cfg = config.niveum.traadfri;
traadfri = pkgs.callPackage <traadfri> { traadfri = pkgs.callPackage <traadfri> {
libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> { tls = true; }; libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> {tls = true;};
}; };
in { in {
options.niveum.traadfri = { options.niveum.traadfri = {
enable = mkEnableOption "Trådfri CLI"; enable = mkEnableOption "Trådfri CLI";
user = mkOption { type = types.str; }; user = mkOption {type = types.str;};
host = mkOption { type = types.str; }; host = mkOption {type = types.str;};
key = mkOption { type = types.str; }; key = mkOption {type = types.str;};
rooms = mkOption { rooms = mkOption {
type = types.attrsOf types.int; type = types.attrsOf types.int;
default = { }; default = {};
}; };
bulbs = mkOption { bulbs = mkOption {
type = types.attrsOf types.int; type = types.attrsOf types.int;
default = { }; default = {};
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ environment.systemPackages =
(pkgs.writers.writeDashBin "traadfri" '' [
TRAADFRI_USER="${cfg.user}" \ (pkgs.writers.writeDashBin "traadfri" ''
TRAADFRI_KEY="${cfg.key}" \ TRAADFRI_USER="${cfg.user}" \
TRAADFRI_HUB="${cfg.host}" \ TRAADFRI_KEY="${cfg.key}" \
${traadfri}/bin/traadfri $@ TRAADFRI_HUB="${cfg.host}" \
'') ${traadfri}/bin/traadfri $@
] ++ lib.mapAttrsToList (name: value: pkgs.writers.writeDashBin "traadfri-${name}" '' '')
exec traadfri --target Room ${toString value} "$@" ]
'') cfg.rooms ++ lib.mapAttrsToList (name: value:
++ lib.mapAttrsToList (name: value: pkgs.writers.writeDashBin "traadfri-${name}" '' pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Bulb ${toString value} "$@" exec traadfri --target Room ${toString value} "$@"
'') cfg.bulbs; '')
cfg.rooms
++ lib.mapAttrsToList (name: value:
pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Bulb ${toString value} "$@"
'')
cfg.bulbs;
}; };
} }

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
tuna = pkgs.callPackage <tuna> {}; tuna = pkgs.callPackage <tuna> {};
cfg = config.services.tuna; cfg = config.services.tuna;
in { in {
@@ -77,8 +81,8 @@ in {
users.groups.tuna = {}; users.groups.tuna = {};
# ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service # ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service
systemd.services.tuna = { systemd.services.tuna = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
after = [ "mpd.service" ]; after = ["mpd.service"];
script = "${cfg.package}/bin/tuna"; script = "${cfg.package}/bin/tuna";
environment = { environment = {
NODE_ENV = "production"; NODE_ENV = "production";

View File

@@ -1,6 +1,6 @@
self: super: self: super:
with super.lib; with super.lib; let
let
eval = import <nixpkgs/nixos/lib/eval-config.nix>; eval = import <nixpkgs/nixos/lib/eval-config.nix>;
paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays; paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays;
in foldl' (flip extends) (_: super) paths self in
foldl' (flip extends) (_: super) paths self

View File

@@ -1,4 +1,10 @@
{ lib, stdenv, makeWrapper, pandoc, fetchFromGitHub }: {
lib,
stdenv,
makeWrapper,
pandoc,
fetchFromGitHub,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "daybook"; name = "daybook";
src = fetchFromGitHub { src = fetchFromGitHub {
@@ -7,8 +13,8 @@ stdenv.mkDerivation {
rev = "db2c34830e09183c80f3381bf5e4c44d52f05d53"; rev = "db2c34830e09183c80f3381bf5e4c44d52f05d53";
sha256 = "0nbsv8f12qh5spq7zhimhdf3p7msk33xrb0ilqvlc6jmlkpislmv"; sha256 = "0nbsv8f12qh5spq7zhimhdf3p7msk33xrb0ilqvlc6jmlkpislmv";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [makeWrapper];
buildInputs = [ pandoc ]; buildInputs = [pandoc];
buildPhase = '' buildPhase = ''
mkdir -p $out/man/man1 mkdir -p $out/man/man1
pandoc --standalone --to man daybook.1.md -o $out/man/man1/daybook.1 pandoc --standalone --to man daybook.1.md -o $out/man/man1/daybook.1

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